[tbb] 01/64: Imported Upstream version 2.0r014
Graham Inggs
ginggs at moszumanska.debian.org
Mon Jul 3 12:27:33 UTC 2017
This is an automated email from the git hooks/post-receive script.
ginggs pushed a commit to branch master
in repository tbb.
commit 204b620483e411aff2c3762278a1fa01359c3cd7
Author: Graham Inggs <ginggs at debian.org>
Date: Mon Jul 3 14:13:21 2017 +0200
Imported Upstream version 2.0r014
---
COPYING | 353 +
Makefile | 123 +
README | 5 +
build/FreeBSD.gcc.inc | 97 +
build/FreeBSD.inc | 81 +
build/Makefile.tbb | 86 +
build/Makefile.tbbmalloc | 101 +
build/Makefile.test | 198 +
build/SunOS.gcc.inc | 97 +
build/SunOS.inc | 81 +
build/codecov.txt | 3 +
build/common.inc | 89 +
build/common_rules.inc | 75 +
build/detect.js | 114 +
build/generate_tbbvars.bat | 102 +
build/generate_tbbvars.sh | 119 +
build/index.html | 225 +
build/linux.gcc.inc | 98 +
build/linux.icc.inc | 95 +
build/linux.inc | 89 +
build/macos.gcc.inc | 73 +
build/macos.icc.inc | 71 +
build/macos.inc | 84 +
build/version_info_linux.sh | 41 +
build/version_info_macos.sh | 39 +
build/version_info_windows.js | 131 +
build/windows.cl.inc | 122 +
build/windows.icl.inc | 133 +
build/windows.inc | 73 +
examples/GettingStarted/index.html | 25 +
examples/GettingStarted/sub_string_finder/Makefile | 48 +
.../sub_string_finder/Makefile.windows | 46 +
.../GettingStarted/sub_string_finder/index.html | 64 +
.../sub_string_finder/sub_string_finder.cpp | 85 +
.../sub_string_finder_extended.cpp | 124 +
.../sub_string_finder/sub_string_finder_pretty.cpp | 95 +
.../sub_string_finder/vc7.1/sub_string_finder.sln | 40 +
.../sub_string_finder/vc7.1/sub_string_finder.suo | Bin 0 -> 11264 bytes
.../vc7.1/sub_string_finder.vcproj | 126 +
.../vc7.1/sub_string_finder_extended.vcproj | 126 +
.../vc7.1/sub_string_finder_pretty.vcproj | 126 +
.../sub_string_finder/vc8/sub_string_finder.sln | 50 +
.../sub_string_finder/vc8/sub_string_finder.suo | Bin 0 -> 16896 bytes
.../sub_string_finder/vc8/sub_string_finder.vcproj | 348 +
.../vc8/sub_string_finder_extended.vcproj | 348 +
.../vc8/sub_string_finder_pretty.vcproj | 348 +
.../sub_string_finder.xcodeproj/project.pbxproj | 566 +
examples/Makefile | 106 +
examples/common/gui/Makefile.win | 79 +
examples/common/gui/convideo.cpp | 138 +
examples/common/gui/ddvideo.cpp | 574 +
examples/common/gui/dxcheck.bat | 36 +
examples/common/gui/gdivideo.cpp | 154 +
examples/common/gui/macvideo.cpp | 1491 ++
examples/common/gui/video.h | 177 +
examples/common/gui/winvideo.h | 271 +
examples/common/gui/xvideo.cpp | 350 +
examples/common/index.html | 36 +
.../concurrent_hash_map/count_strings/Makefile | 47 +
.../count_strings/Makefile.windows | 47 +
.../count_strings/count_strings.cpp | 172 +
.../concurrent_hash_map/count_strings/index.html | 51 +
.../count_strings/vc7.1/count_strings.sln | 21 +
.../count_strings/vc7.1/count_strings.suo | Bin 0 -> 8704 bytes
.../count_strings/vc7.1/count_strings.vcproj | 129 +
.../count_strings/vc8/count_strings.sln | 25 +
.../count_strings/vc8/count_strings.suo | Bin 0 -> 9216 bytes
.../count_strings/vc8/count_strings.vcproj | 352 +
.../xcode/count_strings.xcodeproj/project.pbxproj | 296 +
examples/concurrent_hash_map/index.html | 25 +
examples/index.html | 172 +
examples/parallel_for/index.html | 27 +
examples/parallel_for/seismic/Makefile | 96 +
examples/parallel_for/seismic/Makefile.windows | 59 +
.../parallel_for/seismic/SeismicSimulation.cpp | 415 +
examples/parallel_for/seismic/index.html | 105 +
.../seismic/vc7.1/SeismicSimulation.ico | Bin 0 -> 23558 bytes
.../seismic/vc7.1/SeismicSimulation.rc | 146 +
.../seismic/vc7.1/SeismicSimulation.sln | 27 +
.../seismic/vc7.1/SeismicSimulation.suo | Bin 0 -> 13312 bytes
.../seismic/vc7.1/SeismicSimulation.vcproj | 309 +
examples/parallel_for/seismic/vc7.1/resource.h | 32 +
examples/parallel_for/seismic/vc7.1/small.ico | Bin 0 -> 23558 bytes
.../parallel_for/seismic/vc8/SeismicSimulation.ico | Bin 0 -> 23558 bytes
.../parallel_for/seismic/vc8/SeismicSimulation.rc | 145 +
.../parallel_for/seismic/vc8/SeismicSimulation.sln | 37 +
.../parallel_for/seismic/vc8/SeismicSimulation.suo | Bin 0 -> 11264 bytes
.../seismic/vc8/SeismicSimulation.vcproj | 812 +
examples/parallel_for/seismic/vc8/resource.h | 32 +
examples/parallel_for/seismic/vc8/small.ico | Bin 0 -> 23558 bytes
.../seismic/xcode/English.lproj/InfoPlist.strings | 3 +
.../xcode/English.lproj/main.nib/classes.nib | 4 +
.../seismic/xcode/English.lproj/main.nib/info.nib | 26 +
.../xcode/English.lproj/main.nib/objects.xib | 183 +
examples/parallel_for/seismic/xcode/Info.plist | 26 +
.../seismic/xcode/SeismicSimulation.pch | 5 +
.../SeismicSimulation.xcodeproj/project.pbxproj | 295 +
examples/parallel_for/tacheon/Makefile | 199 +
examples/parallel_for/tacheon/Makefile.windows | 133 +
examples/parallel_for/tacheon/dat/820spheres.dat | 1671 ++
examples/parallel_for/tacheon/dat/balls.dat | 14804 +++++++++++++++
examples/parallel_for/tacheon/dat/balls3.dat | 14804 +++++++++++++++
examples/parallel_for/tacheon/dat/lattice.dat | 18012 +++++++++++++++++++
examples/parallel_for/tacheon/dat/model2.dat | 104 +
examples/parallel_for/tacheon/dat/teapot.dat | 9279 ++++++++++
examples/parallel_for/tacheon/dat/trypsin4pti.dat | 538 +
examples/parallel_for/tacheon/index.html | 203 +
examples/parallel_for/tacheon/src/api.cpp | 431 +
examples/parallel_for/tacheon/src/api.h | 219 +
examples/parallel_for/tacheon/src/apigeom.cpp | 281 +
examples/parallel_for/tacheon/src/apitrigeom.cpp | 239 +
examples/parallel_for/tacheon/src/apitrigeom.h | 71 +
examples/parallel_for/tacheon/src/bndbox.cpp | 195 +
examples/parallel_for/tacheon/src/bndbox.h | 85 +
examples/parallel_for/tacheon/src/box.cpp | 181 +
examples/parallel_for/tacheon/src/box.h | 80 +
examples/parallel_for/tacheon/src/camera.cpp | 122 +
examples/parallel_for/tacheon/src/camera.h | 67 +
examples/parallel_for/tacheon/src/coordsys.cpp | 109 +
examples/parallel_for/tacheon/src/coordsys.h | 71 +
examples/parallel_for/tacheon/src/cylinder.cpp | 284 +
examples/parallel_for/tacheon/src/cylinder.h | 89 +
examples/parallel_for/tacheon/src/extvol.cpp | 324 +
examples/parallel_for/tacheon/src/extvol.h | 84 +
examples/parallel_for/tacheon/src/getargs.cpp | 207 +
examples/parallel_for/tacheon/src/getargs.h | 77 +
examples/parallel_for/tacheon/src/global.cpp | 88 +
examples/parallel_for/tacheon/src/global.h | 79 +
examples/parallel_for/tacheon/src/grid.cpp | 690 +
examples/parallel_for/tacheon/src/grid.h | 131 +
examples/parallel_for/tacheon/src/imageio.cpp | 160 +
examples/parallel_for/tacheon/src/imageio.h | 76 +
examples/parallel_for/tacheon/src/imap.cpp | 180 +
examples/parallel_for/tacheon/src/imap.h | 72 +
examples/parallel_for/tacheon/src/intersect.cpp | 190 +
examples/parallel_for/tacheon/src/intersect.h | 78 +
examples/parallel_for/tacheon/src/jpeg.cpp | 142 +
examples/parallel_for/tacheon/src/jpeg.h | 67 +
examples/parallel_for/tacheon/src/light.cpp | 141 +
examples/parallel_for/tacheon/src/light.h | 82 +
examples/parallel_for/tacheon/src/machine.h | 75 +
examples/parallel_for/tacheon/src/macros.h | 90 +
examples/parallel_for/tacheon/src/objbound.cpp | 349 +
examples/parallel_for/tacheon/src/objbound.h | 77 +
examples/parallel_for/tacheon/src/parse.cpp | 860 +
examples/parallel_for/tacheon/src/parse.h | 122 +
examples/parallel_for/tacheon/src/plane.cpp | 118 +
examples/parallel_for/tacheon/src/plane.h | 83 +
examples/parallel_for/tacheon/src/ppm.cpp | 127 +
examples/parallel_for/tacheon/src/ppm.h | 71 +
examples/parallel_for/tacheon/src/pthread.cpp | 167 +
examples/parallel_for/tacheon/src/pthread.h | 120 +
examples/parallel_for/tacheon/src/quadric.cpp | 183 +
examples/parallel_for/tacheon/src/quadric.h | 86 +
examples/parallel_for/tacheon/src/render.cpp | 106 +
examples/parallel_for/tacheon/src/render.h | 68 +
examples/parallel_for/tacheon/src/ring.cpp | 144 +
examples/parallel_for/tacheon/src/ring.h | 84 +
examples/parallel_for/tacheon/src/shade.cpp | 271 +
examples/parallel_for/tacheon/src/shade.h | 73 +
examples/parallel_for/tacheon/src/sphere.cpp | 146 +
examples/parallel_for/tacheon/src/sphere.h | 84 +
examples/parallel_for/tacheon/src/texture.cpp | 398 +
examples/parallel_for/tacheon/src/texture.h | 80 +
examples/parallel_for/tacheon/src/tgafile.cpp | 248 +
examples/parallel_for/tacheon/src/tgafile.h | 72 +
examples/parallel_for/tacheon/src/trace.h | 109 +
examples/parallel_for/tacheon/src/trace.serial.cpp | 188 +
examples/parallel_for/tacheon/src/trace.tbb.cpp | 210 +
examples/parallel_for/tacheon/src/trace.tbb1d.cpp | 212 +
examples/parallel_for/tacheon/src/trace_rest.cpp | 151 +
examples/parallel_for/tacheon/src/triangle.cpp | 258 +
examples/parallel_for/tacheon/src/triangle.h | 105 +
examples/parallel_for/tacheon/src/types.h | 233 +
examples/parallel_for/tacheon/src/ui.cpp | 122 +
examples/parallel_for/tacheon/src/ui.h | 79 +
examples/parallel_for/tacheon/src/util.cpp | 204 +
examples/parallel_for/tacheon/src/util.h | 75 +
examples/parallel_for/tacheon/src/vector.cpp | 147 +
examples/parallel_for/tacheon/src/vector.h | 79 +
examples/parallel_for/tacheon/src/video.cpp | 221 +
examples/parallel_for/tacheon/src/video.h | 62 +
examples/parallel_for/tacheon/src/vol.cpp | 315 +
examples/parallel_for/tacheon/src/vol.h | 74 +
examples/parallel_for/tacheon/vc7.1/gui.ico | Bin 0 -> 23558 bytes
examples/parallel_for/tacheon/vc7.1/gui.rc | 90 +
examples/parallel_for/tacheon/vc7.1/resource.h | 8 +
examples/parallel_for/tacheon/vc7.1/small.ico | Bin 0 -> 23558 bytes
.../tacheon/vc7.1/tacheon.serial.vcproj | 239 +
examples/parallel_for/tacheon/vc7.1/tacheon.sln | 63 +
examples/parallel_for/tacheon/vc7.1/tacheon.suo | Bin 0 -> 19968 bytes
.../parallel_for/tacheon/vc7.1/tacheon.tbb.vcproj | 255 +
.../tacheon/vc7.1/tacheon.tbb1d.vcproj | 255 +
.../tacheon/vc7.1/tacheon.threads.vcproj | 239 +
examples/parallel_for/tacheon/vc7.1/tacheon.vcproj | 494 +
.../parallel_for/tacheon/vc8/tacheon.serial.vcproj | 691 +
examples/parallel_for/tacheon/vc8/tacheon.sln | 92 +
examples/parallel_for/tacheon/vc8/tacheon.suo | Bin 0 -> 33792 bytes
.../parallel_for/tacheon/vc8/tacheon.tbb.vcproj | 727 +
.../parallel_for/tacheon/vc8/tacheon.tbb1d.vcproj | 727 +
.../tacheon/vc8/tacheon.threads.vcproj | 691 +
examples/parallel_for/tacheon/vc8/tacheon.vcproj | 1042 ++
.../tacheon/xcode/English.lproj/InfoPlist.strings | 3 +
.../xcode/English.lproj/main.nib/classes.nib | 4 +
.../tacheon/xcode/English.lproj/main.nib/info.nib | 26 +
.../xcode/English.lproj/main.nib/objects.xib | 183 +
examples/parallel_for/tacheon/xcode/Info.plist | 26 +
examples/parallel_for/tacheon/xcode/tacheon.pch | 5 +
.../xcode/tacheon.xcodeproj/project.pbxproj | 930 +
examples/parallel_reduce/convex_hull/Makefile | 46 +
.../parallel_reduce/convex_hull/Makefile.windows | 46 +
examples/parallel_reduce/convex_hull/convex_hull.h | 233 +
.../convex_hull/convex_hull_bench.cpp | 631 +
.../convex_hull/convex_hull_sample.cpp | 264 +
examples/parallel_reduce/convex_hull/index.html | 55 +
.../convex_hull/vc7.1/convex_hull.sln | 32 +
.../convex_hull/vc7.1/convex_hull.suo | Bin 0 -> 10240 bytes
.../convex_hull/vc7.1/convex_hull_bench.vcproj | 138 +
.../convex_hull/vc7.1/convex_hull_sample.vcproj | 138 +
.../convex_hull/vc8/convex_hull.sln | 35 +
.../convex_hull/vc8/convex_hull.suo | Bin 0 -> 12288 bytes
.../convex_hull/vc8/convex_hull_benchmark.vcproj | 362 +
.../convex_hull/vc8/convex_hull_sample.vcproj | 360 +
.../xcode/convex_hull.xcodeproj/project.pbxproj | 434 +
examples/parallel_reduce/index.html | 27 +
examples/parallel_reduce/primes/Makefile | 45 +
examples/parallel_reduce/primes/Makefile.windows | 45 +
examples/parallel_reduce/primes/index.html | 52 +
examples/parallel_reduce/primes/primes.cpp | 400 +
examples/parallel_reduce/primes/vc7.1/primes.sln | 21 +
examples/parallel_reduce/primes/vc7.1/primes.suo | Bin 0 -> 9216 bytes
.../parallel_reduce/primes/vc7.1/primes.vcproj | 129 +
examples/parallel_reduce/primes/vc8/primes.sln | 25 +
examples/parallel_reduce/primes/vc8/primes.suo | Bin 0 -> 9216 bytes
examples/parallel_reduce/primes/vc8/primes.vcproj | 352 +
.../primes/xcode/primes.xcodeproj/project.pbxproj | 296 +
examples/parallel_while/index.html | 25 +
.../parallel_while/parallel_preorder/Graph.cpp | 106 +
examples/parallel_while/parallel_preorder/Graph.h | 90 +
examples/parallel_while/parallel_preorder/Makefile | 45 +
.../parallel_preorder/Makefile.windows | 45 +
examples/parallel_while/parallel_preorder/Matrix.h | 68 +
.../parallel_while/parallel_preorder/index.html | 93 +
.../parallel_preorder/parallel_preorder.cpp | 188 +
.../parallel_preorder/vc7.1/parallel_preorder.sln | 21 +
.../parallel_preorder/vc7.1/parallel_preorder.suo | Bin 0 -> 9216 bytes
.../vc7.1/parallel_preorder.vcproj | 143 +
.../parallel_preorder/vc8/parallel_preorder.sln | 25 +
.../parallel_preorder/vc8/parallel_preorder.suo | Bin 0 -> 9728 bytes
.../parallel_preorder/vc8/parallel_preorder.vcproj | 370 +
.../parallel_preorder.xcodeproj/project.pbxproj | 304 +
examples/pipeline/index.html | 25 +
examples/pipeline/text_filter/Makefile | 48 +
examples/pipeline/text_filter/Makefile.windows | 50 +
examples/pipeline/text_filter/index.html | 56 +
examples/pipeline/text_filter/text_filter.cpp | 232 +
.../pipeline/text_filter/vc7.1/text_filter.sln | 21 +
.../pipeline/text_filter/vc7.1/text_filter.suo | Bin 0 -> 13312 bytes
.../pipeline/text_filter/vc7.1/text_filter.vcproj | 135 +
examples/pipeline/text_filter/vc8/text_filter.sln | 25 +
examples/pipeline/text_filter/vc8/text_filter.suo | Bin 0 -> 9728 bytes
.../pipeline/text_filter/vc8/text_filter.vcproj | 364 +
.../xcode/text_filter.xcodeproj/project.pbxproj | 314 +
examples/task/index.html | 25 +
examples/task/tree_sum/Makefile | 46 +
examples/task/tree_sum/Makefile.windows | 46 +
.../task/tree_sum/OptimizedParallelSumTree.cpp | 77 +
examples/task/tree_sum/SerialSumTree.cpp | 38 +
examples/task/tree_sum/SimpleParallelSumTree.cpp | 70 +
examples/task/tree_sum/common.h | 44 +
examples/task/tree_sum/index.html | 77 +
examples/task/tree_sum/main.cpp | 193 +
examples/task/tree_sum/vc7.1/tree_sum.sln | 21 +
examples/task/tree_sum/vc7.1/tree_sum.suo | Bin 0 -> 9216 bytes
examples/task/tree_sum/vc7.1/tree_sum.vcproj | 145 +
examples/task/tree_sum/vc8/tree_sum.sln | 25 +
examples/task/tree_sum/vc8/tree_sum.suo | Bin 0 -> 9216 bytes
examples/task/tree_sum/vc8/tree_sum.vcproj | 368 +
.../xcode/tree_sum.xcodeproj/project.pbxproj | 325 +
examples/test_all/fibonacci/Fibonacci.cpp | 583 +
examples/test_all/fibonacci/Makefile | 45 +
examples/test_all/fibonacci/Makefile.windows | 45 +
examples/test_all/fibonacci/index.html | 54 +
examples/test_all/fibonacci/vc7.1/fibonacci.sln | 21 +
examples/test_all/fibonacci/vc7.1/fibonacci.suo | Bin 0 -> 8704 bytes
examples/test_all/fibonacci/vc7.1/fibonacci.vcproj | 128 +
examples/test_all/fibonacci/vc8/fibonacci.sln | 25 +
examples/test_all/fibonacci/vc8/fibonacci.suo | Bin 0 -> 8704 bytes
examples/test_all/fibonacci/vc8/fibonacci.vcproj | 352 +
.../xcode/fibonacci.xcodeproj/project.pbxproj | 296 +
examples/test_all/index.html | 25 +
include/index.html | 24 +
include/tbb/_tbb_windef.h | 61 +
include/tbb/aligned_space.h | 64 +
include/tbb/atomic.h | 372 +
include/tbb/blocked_range.h | 120 +
include/tbb/blocked_range2d.h | 97 +
include/tbb/blocked_range3d.h | 116 +
include/tbb/cache_aligned_allocator.h | 137 +
include/tbb/concurrent_hash_map.h | 714 +
include/tbb/concurrent_queue.h | 328 +
include/tbb/concurrent_vector.h | 512 +
include/tbb/machine/linux_em64t.h | 159 +
include/tbb/machine/linux_ia32.h | 224 +
include/tbb/machine/linux_itanium.h | 179 +
include/tbb/machine/mac_ppc.h | 98 +
include/tbb/machine/windows_em64t.h | 153 +
include/tbb/machine/windows_ia32.h | 221 +
include/tbb/machine/windows_ia32_inline.h | 176 +
include/tbb/mutex.h | 193 +
include/tbb/parallel_for.h | 119 +
include/tbb/parallel_reduce.h | 155 +
include/tbb/parallel_scan.h | 340 +
include/tbb/parallel_sort.h | 154 +
include/tbb/parallel_while.h | 197 +
include/tbb/partitioner.h | 80 +
include/tbb/pipeline.h | 136 +
include/tbb/queuing_mutex.h | 106 +
include/tbb/queuing_rw_mutex.h | 164 +
include/tbb/scalable_allocator.h | 140 +
include/tbb/spin_mutex.h | 137 +
include/tbb/spin_rw_mutex.h | 185 +
include/tbb/task.h | 492 +
include/tbb/task_scheduler_init.h | 88 +
include/tbb/tbb_machine.h | 495 +
include/tbb/tbb_stddef.h | 174 +
include/tbb/tick_count.h | 137 +
index.html | 40 +
src/index.html | 28 +
src/tbb/Makefile | 45 +
src/tbb/cache_aligned_allocator.cpp | 169 +
src/tbb/concurrent_hash_map.cpp | 45 +
src/tbb/concurrent_queue.cpp | 370 +
src/tbb/concurrent_vector.cpp | 260 +
src/tbb/em64t-masm/atomic_support.asm | 80 +
src/tbb/em64t-tbb-mac-export.txt | 127 +
src/tbb/em64t-tbb.def | 139 +
src/tbb/gate.h | 224 +
src/tbb/ia32-masm/atomic_support.asm | 176 +
src/tbb/ia32-masm/lock_byte.asm | 46 +
src/tbb/ia32-tbb-mac-export.txt | 127 +
src/tbb/ia32-tbb.def | 145 +
src/tbb/itanium-gas/atomic_support.s | 678 +
src/tbb/itanium-gas/lock_byte.s | 54 +
src/tbb/itanium-gas/log2.s | 67 +
src/tbb/itanium-gas/pause.s | 41 +
src/tbb/itanium-tbb.def | 169 +
src/tbb/itt_notify.cpp | 140 +
src/tbb/itt_notify.h | 116 +
src/tbb/mutex.cpp | 128 +
src/tbb/pipeline.cpp | 280 +
src/tbb/queuing_mutex.cpp | 116 +
src/tbb/queuing_rw_mutex.cpp | 475 +
src/tbb/spin_mutex.cpp | 64 +
src/tbb/spin_rw_mutex.cpp | 164 +
src/tbb/task.cpp | 2028 +++
src/tbb/tbb_misc.cpp | 169 +
src/tbb/tbb_misc.h | 203 +
src/tbb/tbb_resource.rc | 119 +
src/tbb/tbb_version.h | 98 +
src/tbbmalloc/Customize.h | 82 +
src/tbbmalloc/LifoQueue.h | 97 +
src/tbbmalloc/MapMemory.h | 82 +
src/tbbmalloc/MemoryAllocator.cpp | 1580 ++
src/tbbmalloc/Statistics.h | 113 +
src/tbbmalloc/TypeDefinitions.h | 68 +
src/tbbmalloc/em64t-malloc-mac-export.txt | 31 +
src/tbbmalloc/em64t-malloc.def | 33 +
src/tbbmalloc/ia32-malloc-mac-export.txt | 31 +
src/tbbmalloc/ia32-malloc.def | 33 +
src/tbbmalloc/tbbmalloc.cpp | 48 +
src/tbbmalloc/tbbmalloc.rc | 122 +
src/test/Makefile | 44 +
src/test/harness.h | 226 +
src/test/harness_allocator.h | 196 +
src/test/harness_assert.h | 45 +
src/test/harness_bad_expr.h | 79 +
src/test/harness_cpu.h | 86 +
src/test/harness_memory.h | 86 +
src/test/test_ScalableAllocator.cpp | 44 +
src/test/test_ScalableAllocator_STL.cpp | 52 +
src/test/test_aligned_space.cpp | 85 +
src/test/test_allocator.h | 221 +
src/test/test_assembly.cpp | 300 +
src/test/test_atomic.cpp | 443 +
src/test/test_blocked_range.cpp | 130 +
src/test/test_blocked_range2d.cpp | 154 +
src/test/test_blocked_range3d.cpp | 185 +
src/test/test_cache_aligned_allocator.cpp | 42 +
src/test/test_cache_aligned_allocator_STL.cpp | 56 +
src/test/test_concurrent_hash_map.cpp | 511 +
src/test/test_concurrent_hash_map_string.cpp | 84 +
src/test/test_concurrent_queue.cpp | 324 +
src/test/test_concurrent_vector.cpp | 570 +
src/test/test_halt.cpp | 123 +
src/test/test_handle_perror.cpp | 56 +
src/test/test_inits_loop.cpp | 93 +
src/test/test_malloc_compliance.cpp | 724 +
src/test/test_malloc_pure_c.c | 75 +
src/test/test_model_plugin.cpp | 171 +
src/test/test_mutex.cpp | 294 +
src/test/test_mutex_native_threads.cpp | 283 +
src/test/test_openmp.cpp | 224 +
src/test/test_parallel_for.cpp | 162 +
src/test/test_parallel_reduce.cpp | 150 +
src/test/test_parallel_scan.cpp | 272 +
src/test/test_parallel_sort.cpp | 527 +
src/test/test_parallel_while.cpp | 183 +
src/test/test_pipeline.cpp | 173 +
src/test/test_rwm_upgrade_downgrade.cpp | 92 +
src/test/test_task.cpp | 299 +
src/test/test_task_leaks.cpp | 147 +
src/test/test_task_scheduler_init.cpp | 98 +
src/test/test_tick_count.cpp | 160 +
src/test/test_yield.cpp | 79 +
415 files changed, 127249 insertions(+)
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..5af6ed8
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,353 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ 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
+this service 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.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+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
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the 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 a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE 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.
+
+ 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
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
+---------------- END OF Gnu General Public License ----------------
+
+The source code of Threading Building Blocks is distributed under version 2
+of the GNU General Public License, with the so-called "runtime exception,"
+as follows (or see any header or implementation file):
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..ee41b14
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,123 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+tbb_root?=.
+include $(tbb_root)/build/common.inc
+.PHONY: all tbb tbbmalloc test debug examples clean
+
+all: release debug examples
+
+tbb: tbb_release tbb_debug
+
+tbbmalloc: tbbmalloc_release tbbmalloc_debug
+
+test: tbbmalloc_test_release test_release tbbmalloc_test_debug test_debug
+
+test_no_depends: tbbmalloc_test_release_no_depends test_release_no_depends tbbmalloc_test_debug_no_depends test_debug_no_depends
+
+release: tbb_release tbbmalloc_release tbbmalloc_test_release test_release
+
+debug: tbb_debug tbbmalloc_debug tbbmalloc_test_debug test_debug
+
+examples: tbb tbbmalloc examples_debug clean_examples examples_release
+
+clean: clean_release clean_debug clean_examples
+ @echo clean done
+
+
+.PHONY: tbb_release tbb_debug test_release test_debug
+
+# do not delete double-space after -C option
+tbb_release: mkdir_release
+ $(MAKE) -C "$(work_dir)_release" -r -f $(tbb_root)/build/Makefile.tbb cfg=release tbb_root=$(tbb_root)
+
+tbb_debug: mkdir_debug
+ $(MAKE) -C "$(work_dir)_debug" -r -f $(tbb_root)/build/Makefile.tbb cfg=debug tbb_root=$(tbb_root)
+
+test_release: mkdir_release tbb_release test_release_no_depends
+test_release_no_depends:
+ -$(MAKE) -C "$(work_dir)_release" -r -f $(tbb_root)/build/Makefile.test cfg=release tbb_root=$(tbb_root)
+
+test_debug: tbb_debug mkdir_debug test_debug_no_depends
+test_debug_no_depends:
+ -$(MAKE) -C "$(work_dir)_debug" -r -f $(tbb_root)/build/Makefile.test cfg=debug tbb_root=$(tbb_root)
+
+.PHONY: tbbmalloc_release tbbmalloc_debug tbbmalloc_test_release tbbmalloc_test_debug
+
+tbbmalloc_release: mkdir_release
+ $(MAKE) -C "$(work_dir)_release" -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release malloc tbb_root=$(tbb_root)
+
+tbbmalloc_debug: mkdir_debug
+ $(MAKE) -C "$(work_dir)_debug" -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=debug malloc tbb_root=$(tbb_root)
+
+tbbmalloc_test_release: tbb_release tbbmalloc_release mkdir_release tbbmalloc_test_release_no_depends
+tbbmalloc_test_release_no_depends:
+ -$(MAKE) -C "$(work_dir)_release" -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release malloc_test tbb_root=$(tbb_root)
+
+tbbmalloc_test_debug: tbb_debug tbbmalloc_debug mkdir_debug tbbmalloc_test_debug_no_depends
+tbbmalloc_test_debug_no_depends:
+ -$(MAKE) -C "$(work_dir)_debug" -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=debug malloc_test tbb_root=$(tbb_root)
+
+.PHONY: examples_release examples_debug
+
+examples_release: tbb_release tbbmalloc_release
+ $(MAKE) -C examples -r -f Makefile tbb_root=.. release test
+
+examples_debug: tbb_debug tbbmalloc_debug
+ $(MAKE) -C examples -r -f Makefile tbb_root=.. debug test
+
+.PHONY: clean_release clean_debug clean_examples
+
+clean_%:
+ $(MAKE) -C "$(work_dir)_debug" -r -f $(tbb_root)/build/Makefile.test cfg=debug tbb_root=$(tbb_root) $@
+
+clean_release:
+ $(shell $(RM) $(work_dir)_release$(SLASH)*.* $(NUL))
+ $(shell $(RD) $(work_dir)_release $(NUL))
+
+clean_debug:
+ $(shell $(RM) $(work_dir)_debug$(SLASH)*.* $(NUL))
+ $(shell $(RD) $(work_dir)_debug $(NUL))
+
+clean_examples:
+ $(shell $(MAKE) -s -i -r -C examples -f Makefile tbb_root=.. clean $(NUL))
+
+.PHONY: mkdir_release mkdir_debug
+
+mkdir_release:
+ $(shell $(MD) "$(work_dir)_release" $(NUL))
+ $(if $(subst undefined,,$(origin_build_dir)),,cd "$(work_dir)_release" && $(MAKE_TBBVARS) $(tbb_build_prefix)_release)
+
+mkdir_debug:
+ $(shell $(MD) "$(work_dir)_debug" $(NUL))
+ $(if $(subst undefined,,$(origin_build_dir)),,cd "$(work_dir)_debug" && $(MAKE_TBBVARS) $(tbb_build_prefix)_debug)
+
+info:
+ @echo OS: $(tbb_os)
+ @echo arch=$(arch)
+ @echo compiler=$(compiler)
+ @echo runtime=$(runtime)
+ @echo tbb_build_prefix=$(tbb_build_prefix)
diff --git a/README b/README
new file mode 100644
index 0000000..64a8e83
--- /dev/null
+++ b/README
@@ -0,0 +1,5 @@
+Threading Building Blocks - README
+
+To build and test, type 'gmake' in this directory.
+
+See index.html for directions and documentation.
diff --git a/build/FreeBSD.gcc.inc b/build/FreeBSD.gcc.inc
new file mode 100644
index 0000000..589882e
--- /dev/null
+++ b/build/FreeBSD.gcc.inc
@@ -0,0 +1,97 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+COMPILE_ONLY = -c -MMD
+PREPROC_ONLY = -E -MMD
+INCLUDE_KEY = -I
+DEFINE_KEY = -D
+OUTPUT_KEY = -o #
+OUTPUTOBJ_KEY = -o #
+PIC_KEY = -fPIC
+DYLIB_KEY = -shared
+LIBDL = -ldl
+
+TBB_NOSTRICT = 1
+
+CPLUS = g++
+INCLUDES += -I$(tbb_root)/src/tbb -I$(tbb_root)/include -I$(tbb_root)/src
+LIB_LINK_FLAGS = -shared
+LIBS = -lpthread
+C_FLAGS = $(CPLUS_FLAGS) -x c
+
+ifeq ($(cfg), release)
+ CPLUS_FLAGS = -DDO_ITT_NOTIFY -O2 -DUSE_PTHREAD -D__linux__ -D__custom_linux__
+endif
+ifeq ($(cfg), debug)
+ CPLUS_FLAGS = -DTBB_DO_ASSERT -DDO_ITT_NOTIFY -g -O0 -DUSE_PTHREAD -D__linux__ -D__custom_linux__
+endif
+
+ASM=
+ASM_FLAGS=
+
+TBB_ASM.OBJ=
+
+ifeq (itanium,$(arch))
+# Position-independent code (PIC) is a must for IA-64
+ CPLUS_FLAGS += $(PIC_KEY)
+ $(PIC_KEY) =
+endif
+
+ifeq (em64t,$(arch))
+ CPLUS_FLAGS += -m64
+ LIB_LINK_FLAGS += -m64
+endif
+
+ifeq (ia32,$(arch))
+ CPLUS_FLAGS += -m32
+ LIB_LINK_FLAGS += -m32
+endif
+
+#------------------------------------------------------------------------------
+# Setting assembler data.
+#------------------------------------------------------------------------------
+%.$(OBJ): %.s
+ cpp $(ASM_FLAGS) <$< | grep -v '^#' >$*.tmp
+ $(ASM) -o $@ $*.tmp
+ rm $*.tmp
+
+ASSEMBLY_SOURCE=$(arch)-gas
+ifeq (itanium,$(arch))
+ ASM=ias
+ TBB_ASM.OBJ = atomic_support.o lock_byte.o log2.o pause.o
+endif
+#------------------------------------------------------------------------------
+# End of setting assembler data.
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+M_INCLUDES = $(INCLUDES) -I$(MALLOC_ROOT) -I$(MALLOC_SOURCE_ROOT)
+M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions -fno-schedule-insns2
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
diff --git a/build/FreeBSD.inc b/build/FreeBSD.inc
new file mode 100644
index 0000000..0be7921
--- /dev/null
+++ b/build/FreeBSD.inc
@@ -0,0 +1,81 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+ifndef arch
+ ifeq ($(shell uname -m),i386)
+ export arch:=ia32
+ endif
+endif
+
+ifndef runtime
+ gcc_version:=$(shell gcc -v 2>&1 | grep 'gcc version' | sed -e 's/^gcc version //' | sed -e 's/ .*$$//')
+ os_version:=$(shell uname -r)
+ os_kernel_version:=$(shell uname -r | sed -e 's/-.*$$//')
+# export os_glibc_version_full:=$(shell rpm -qa | grep '^glibc-[0-9]' | sort -u | sed -e 's/^glibc-//')
+# os_glibc_version:=$(shell echo "$(os_glibc_version_full)" | sed -e '2,$$d' -e 's/-.*$$//')
+# export runtime:=cc$(gcc_version)_libc$(os_glibc_version)_kernel$(os_kernel_version)
+ export runtime:=cc$(gcc_version)_kernel$(os_kernel_version)
+endif
+
+native_compiler := gcc
+export compiler ?= gcc
+debugger ?= gdb
+
+CWD=$(shell pwd)
+RM?=rm -f
+RD?=rmdir
+MD?=mkdir -p
+NUL= > /dev/null 2>&1
+SLASH=/
+MAKE_VERSIONS=sh $(tbb_root)/build/version_info_linux.sh $(CPLUS) $(CPLUS_FLAGS) $(INCLUDES) >version_string.tmp
+MAKE_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh
+
+ifdef LD_LIBRARY_PATH
+ export LD_LIBRARY_PATH := .:$(LD_LIBRARY_PATH)
+else
+ export LD_LIBRARY_PATH := .
+endif
+
+####### Build settigns ########################################################
+
+OBJ = o
+DLL = so
+
+ifeq ($(cfg),debug)
+ DEBUG_SUFFIX = _debug
+endif
+
+TBB.DEF =
+TBB.DLL = libtbb$(DEBUG_SUFFIX).$(DLL)
+TBB.LIB = $(TBB.DLL)
+
+MALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).so
+MALLOC.LIB = $(MALLOC.DLL)
+
+TBB_NOSTRICT=1
+
+
+
diff --git a/build/Makefile.tbb b/build/Makefile.tbb
new file mode 100644
index 0000000..b584c54
--- /dev/null
+++ b/build/Makefile.tbb
@@ -0,0 +1,86 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+#------------------------------------------------------------------------------
+# Define rules for making the TBB shared library.
+#------------------------------------------------------------------------------
+
+tbb_root ?= "$(TBB20_INSTALL_DIR)"
+BUILDING_PHASE=1
+include $(tbb_root)/build/common.inc
+
+#------------------------------------------------------------
+# Define static pattern rules dealing with .cpp source files
+#------------------------------------------------------------
+$(warning CONFIG: cfg=$(cfg) arch=$(arch) compiler=$(compiler) os=$(tbb_os) runtime=$(runtime))
+
+default_tbb: $(TBB.DLL)
+.PHONY: default_tbb tbbvars clean
+.PRECIOUS: %.$(OBJ)
+
+VPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb
+
+CPLUS_FLAGS += $(PIC_KEY) $(WARNING_KEY)
+
+ifeq (1,$(TBB_NOSTRICT))
+# GNU 3.2.3 headers have a ISO syntax that is rejected by Intel compiler in -strict_ansi mode.
+# The Mac uses gcc, so the list is empty for that platform.
+# The files below need the -strict_ansi flag downgraded to -ansi to compile
+
+KNOWN_NOSTRICT = concurrent_hash_map.o \
+ concurrent_vector.o
+
+endif
+
+include $(tbb_root)/build/common_rules.inc
+
+# Object files (that were compiled from C++ code) that gmake up TBB
+TBB_CPLUS.OBJ = concurrent_hash_map.$(OBJ) \
+ concurrent_queue.$(OBJ) \
+ concurrent_vector.$(OBJ) \
+ itt_notify.$(OBJ) \
+ cache_aligned_allocator.$(OBJ) \
+ pipeline.$(OBJ) \
+ queuing_mutex.$(OBJ) \
+ queuing_rw_mutex.$(OBJ) \
+ spin_rw_mutex.$(OBJ) \
+ spin_mutex.$(OBJ) \
+ task.$(OBJ) \
+ tbb_misc.$(OBJ) \
+ mutex.$(OBJ)
+
+# Object files that gmake up TBB (TBB_ASM.OBJ is platform-specific)
+TBB.OBJ = $(TBB_CPLUS.OBJ) $(TBB_ASM.OBJ)
+
+$(TBB.DLL): $(TBB.OBJ) $(TBB.DEF) $(TBB.RES) tbbvars
+ $(CPLUS) $(TBB.OBJ) $(TBB.RES) $(LIBS) $(PIC_KEY) $(OUTPUT_KEY)$(TBB.DLL) $(LIB_LINK_FLAGS)
+
+
+#clean:
+# $(RM) *.$(OBJ) *.$(DLL) *.res *.map *.ilk *.pdb *.exp *.manifest *.tmp *.d core core.*[0-9][0-9]
+
+# Include automatically generated dependences
+-include *.d
diff --git a/build/Makefile.tbbmalloc b/build/Makefile.tbbmalloc
new file mode 100644
index 0000000..a8ed40a
--- /dev/null
+++ b/build/Makefile.tbbmalloc
@@ -0,0 +1,101 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+#------------------------------------------------------
+# Define rules for making the TBBMalloc shared library.
+#------------------------------------------------------
+
+default_malloc: malloc malloc_test
+
+tbb_root ?= $(TBB20_INSTALL_DIR)
+BUILDING_PHASE=1
+include $(tbb_root)/build/common.inc
+
+MALLOC_ROOT ?= $(tbb_root)/src/tbbmalloc
+MALLOC_SOURCE_ROOT ?= $(MALLOC_ROOT)
+
+VPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/src/test
+VPATH += $(MALLOC_ROOT) $(MALLOC_SOURCE_ROOT)
+
+# the test lists defined here because they are first used right after
+MALLOC_MAIN_TESTS = test_ScalableAllocator.exe test_ScalableAllocator_STL.exe test_malloc_compliance.exe
+MALLOC_C_TESTS = test_malloc_pure_c.exe
+
+$(MALLOC_MAIN_TESTS) $(MALLOC_C_TESTS): CPLUS_FLAGS += $(WARNING_KEY)
+
+KNOWN_NOSTRICT = test_malloc_compliance.$(OBJ) test_ScalableAllocator_STL.$(OBJ)
+
+include $(tbb_root)/build/common_rules.inc
+
+# Object files that gmake up TBBMalloc
+MALLOC_CPLUS.OBJ = tbbmalloc.$(OBJ)
+MALLOC_CUSTOM.OBJ += tbb_misc_malloc.$(OBJ)
+MALLOC_ASM.OBJ = $(TBB_ASM.OBJ)
+
+# MALLOC_CPLUS.OBJ is built in two steps due to Intel Compiler Tracker # C69574
+MALLOC.OBJ := $(MALLOC_CPLUS.OBJ) $(MALLOC_ASM.OBJ) $(MALLOC_CUSTOM.OBJ) MemoryAllocator.$(OBJ)
+MALLOC_CPLUS.OBJ += MemoryAllocator.$(OBJ)
+
+
+$(MALLOC_CPLUS.OBJ): %.$(OBJ): %.cpp
+ $(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(PIC_KEY) $(M_INCLUDES) $<
+
+tbb_misc_malloc.$(OBJ): tbb_misc.cpp version_string.tmp
+ $(CPLUS) $(COMPILE_ONLY) $(subst -strict_ansi,-ansi,$(M_CPLUS_FLAGS)) $(PIC_KEY) $(OUTPUTOBJ_KEY)$@ $(INCLUDE_KEY). $(INCLUDES) $<
+
+
+$(MALLOC.DLL): TBB.DEF=$(MALLOC.DEF)
+$(MALLOC.DLL): $(MALLOC.OBJ) $(MALLOC.DEF) $(TBBMALLOC.RES)
+ $(CPLUS) $(MALLOC.OBJ) $(TBBMALLOC.RES) $(LIBS) $(PIC_KEY) $(OUTPUT_KEY)$(MALLOC.DLL) $(LIB_LINK_FLAGS)
+
+malloc: $(MALLOC.DLL)
+
+#------------------------------------------------------
+# End of rules for making the TBBMalloc shared library
+#------------------------------------------------------
+
+#------------------------------------------------------
+# Define rules for making the TBBMalloc unit tests
+#------------------------------------------------------
+
+MALLOC_MAIN_TESTS = test_ScalableAllocator.exe test_ScalableAllocator_STL.exe test_malloc_compliance.exe
+MALLOC_C_TESTS = test_malloc_pure_c.exe
+
+$(MALLOC_MAIN_TESTS): %.exe: %.$(OBJ) $(TBB.LIB) $(MALLOC.LIB)
+ $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $^ $(LIBS) $(LINK_FLAGS)
+$(MALLOC_C_TESTS): %.exe: %.$(OBJ) $(MALLOC.LIB)
+ $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $(INCLUDES) $^ $(LIBS) $(LINK_FLAGS)
+
+malloc_test: $(TBB.DLL) $(MALLOC.DLL) $(MALLOC_MAIN_TESTS) $(MALLOC_C_TESTS)
+ ./test_malloc_compliance.exe
+ ./test_ScalableAllocator.exe
+ ./test_ScalableAllocator_STL.exe
+ ./test_malloc_pure_c.exe
+
+#------------------------------------------------------
+# End of rules for making the TBBMalloc unit tests
+#------------------------------------------------------
+
diff --git a/build/Makefile.test b/build/Makefile.test
new file mode 100644
index 0000000..02c2805
--- /dev/null
+++ b/build/Makefile.test
@@ -0,0 +1,198 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+#------------------------------------------------------------------------------
+# Define rules for making the TBB tests.
+#------------------------------------------------------------------------------
+.PHONY: default test_tbb_plain clean
+
+tbb_root ?= $(TBB20_INSTALL_DIR)
+BUILDING_PHASE=1
+include $(tbb_root)/build/common.inc
+
+default: test_tbb_plain # test_tbb_alt test_tbb_cross
+
+#------------------------------------------------------------
+# Define static pattern rules dealing with .cpp source files
+#------------------------------------------------------------
+
+VPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/src/test
+
+CPLUS_FLAGS += $(WARNING_KEY)
+
+ifeq (1,$(TBB_NOSTRICT))
+# GNU 3.2.3 headers have a ISO syntax that is rejected by Intel compiler in -strict_ansi mode.
+# The Mac uses gcc, so the list is empty for that platform.
+# The files below need the -strict_ansi flag downgraded to -ansi to compile
+
+KNOWN_NOSTRICT += \
+ test_concurrent_hash_map.o \
+ test_concurrent_vector.o \
+ test_handle_perror.o \
+ test_cache_aligned_allocator_STL.o \
+ test_task_scheduler_init.o \
+ test_model_plugin.o \
+ test_parallel_sort.o
+
+endif
+
+include $(tbb_root)/build/common_rules.inc
+
+# KNOWN_WARNINGS is empty now! Kept here as a placeholder
+
+$(KNOWN_WARNINGS): %.$(OBJ): %.cpp
+ $(CPLUS) $(COMPILE_ONLY) $(subst $(WARNING_KEY),,$(CPLUS_FLAGS)) $(INCLUDES) $<
+
+# Rule for generating executable test
+%.exe: %.$(OBJ) $(TBB.LIB)
+ $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(TBB.LIB) $(LIBS) $(LINK_FLAGS)
+
+# Rule for generating test using Windows compiler with different flags
+#%-cross.exe: %.cpp
+# cl $(OUTPUT_KEY)$@ $(SECURITY_FLAG) $(CPLUS_CROSS_FLAGS) $(INCLUDES) $< $(TBB.LIB) $(LIBS) $(LINK_FLAGS)
+
+# Rules for generating a test DLL
+%.$(DLL).$(OBJ): %.cpp
+ $(CPLUS) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(CPLUS_FLAGS_NOSTRICT) $(PIC_KEY) $(DEFINE_KEY)_USRDLL $(INCLUDES) $<
+%.$(DLL): %.$(DLL).$(OBJ) $(TBB.LIB)
+ $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(TBB.LIB) $(LIBS) $(LINK_FLAGS) $(PIC_KEY) $(DYLIB_KEY)
+
+# Rules for the tests, which use TBB in a dynamically loadable library
+test_model_plugin.exe: test_model_plugin.$(OBJ) test_model_plugin.$(DLL)
+ $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(LIBS) $(LINK_FLAGS) $(LIBDL)
+
+test_assembly.exe: test_assembly.$(OBJ) $(TBB_ASM.OBJ) cache_aligned_allocator.$(OBJ) tbb_misc.$(OBJ) itt_notify.$(OBJ) spin_mutex.$(OBJ) mutex.$(OBJ)
+ $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $^ $(LIBS) $(TBB.LIB)
+
+test_task_leaks.exe: test_task_leaks.$(OBJ) $(TBB_ASM.OBJ) cache_aligned_allocator.$(OBJ) tbb_misc.$(OBJ) itt_notify.$(OBJ) mutex.$(OBJ)
+ $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $^ $(LIBS) $(TBB.LIB)
+
+test_handle_perror.exe: test_handle_perror.$(OBJ) tbb_misc.$(OBJ) $(TBB_ASM.OBJ)
+ $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $^ $(LIBS) $(TBB.LIB)
+
+
+# Rules for the tests, which depend on tbbmalloc
+test_concurrent_hash_map_string.exe: test_concurrent_hash_map_string.$(OBJ)
+ $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(LIBS) $(LINK_FLAGS) $(TBB.LIB) $(MALLOC.LIB)
+
+
+# These are in alphabetical order
+TEST_TBB_PLAIN.EXE = test_assembly.exe \
+ test_aligned_space.exe \
+ test_atomic.exe \
+ test_blocked_range.exe \
+ test_blocked_range2d.exe \
+ test_blocked_range3d.exe \
+ test_concurrent_queue.exe \
+ test_concurrent_vector.exe \
+ test_concurrent_hash_map.exe \
+ test_handle_perror.exe \
+ test_halt.exe \
+ test_model_plugin.exe \
+ test_mutex.exe \
+ test_mutex_native_threads.exe \
+ test_rwm_upgrade_downgrade.exe \
+ test_cache_aligned_allocator_STL.exe \
+ test_cache_aligned_allocator.exe \
+ test_parallel_for.exe \
+ test_parallel_reduce.exe \
+ test_parallel_sort.exe \
+ test_parallel_scan.exe \
+ test_parallel_while.exe \
+ test_pipeline.exe \
+ test_task_scheduler_init.exe \
+ test_task.exe \
+ test_task_leaks.exe \
+ test_tick_count.exe \
+ test_inits_loop.exe \
+ test_yield.exe
+
+ifdef OPENMP_FLAG
+ TEST_TBB_PLAIN.EXE += test_tbb_openmp
+test_openmp.exe: test_openmp.cpp
+ $(CPLUS) $(OPENMP_FLAG) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $(INCLUDES) $^ $(LIBS) $(TBB.LIB)
+.PHONY: test_tbb_openmp
+test_tbb_openmp: test_openmp.exe
+ ./test_openmp.exe 1:4
+
+endif
+
+
+# Run tests that are in TEST_PLAIN.EXE
+# The test are ordered so that simpler components are tested first.
+# If a component Y uses component X, then tests for Y should come after tests for X.
+test_tbb_plain: $(TEST_TBB_PLAIN.EXE)
+ ./test_assembly.exe
+ # Yes, 4:8 is intended on the next line.
+ ./test_yield.exe 4:8
+ ./test_handle_perror.exe
+ ./test_task_scheduler_init.exe 1:4
+ ./test_task.exe 1:4
+ ./test_task_leaks.exe
+ ./test_atomic.exe
+ ./test_cache_aligned_allocator.exe
+ ./test_cache_aligned_allocator_STL.exe
+ ./test_blocked_range.exe 1:4
+ ./test_blocked_range2d.exe 1:4
+ ./test_blocked_range3d.exe 1:4
+ ./test_parallel_for.exe 1:4
+ ./test_parallel_sort.exe 1:4
+ ./test_aligned_space.exe
+ ./test_parallel_reduce.exe 1:4
+ ./test_parallel_scan.exe 1:4
+ ./test_parallel_while.exe 1:4
+ ./test_inits_loop.exe
+ ./test_mutex.exe 1
+ ./test_mutex.exe 2
+ ./test_mutex.exe 4
+ ./test_mutex_native_threads.exe 1
+ ./test_mutex_native_threads.exe 2
+ ./test_mutex_native_threads.exe 4
+ ./test_rwm_upgrade_downgrade.exe 4
+ # Yes, 4:8 is intended on the next line.
+ ./test_halt.exe 4:8
+ ./test_pipeline.exe 1:4
+ ./test_tick_count.exe 1:4
+ ./test_concurrent_queue.exe 1:4
+ ./test_concurrent_vector.exe 1:4
+ ./test_concurrent_hash_map.exe 1:4
+ ./test_model_plugin.exe 4
+ifeq (true,$(codecov))
+ profmerge
+ codecov -demang -comp $(tbb_root)/build/codecov.txt
+endif
+
+debug_%: test_%.exe
+ $(debugger) ./$^ $(debug_args)
+
+clean_%:
+ $(RM) test_$*.$(OBJ) test_$*.exe test_$*.$(DLL) test_$*.$(LIBEXT) test_$*.res test_$*.map test_$*.ilk test_$*.pdb test_$*.exp test_$*.*manifest test_$*.tmp test_$*.d
+
+clean:
+ $(RM) *.$(OBJ) *.exe *.$(DLL) *.$(LIBEXT) *.res *.map *.ilk *.pdb *.exp *.manifest *.tmp *.d core core.*[0-9][0-9]
+
+# Include automatically generated dependences
+-include *.d
diff --git a/build/SunOS.gcc.inc b/build/SunOS.gcc.inc
new file mode 100644
index 0000000..b3d2b8d
--- /dev/null
+++ b/build/SunOS.gcc.inc
@@ -0,0 +1,97 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+COMPILE_ONLY = -c -MMD
+PREPROC_ONLY = -E -MMD
+INCLUDE_KEY = -I
+DEFINE_KEY = -D
+OUTPUT_KEY = -o #
+OUTPUTOBJ_KEY = -o #
+PIC_KEY = -fPIC
+DYLIB_KEY = -shared
+LIBDL = -ldl
+
+TBB_NOSTRICT = 1
+
+CPLUS = g++
+INCLUDES += -I$(tbb_root)/src/tbb -I$(tbb_root)/include -I$(tbb_root)/src
+LIB_LINK_FLAGS = -shared
+LIBS = -lpthread -lrt -ldl
+C_FLAGS = $(CPLUS_FLAGS) -x c
+
+ifeq ($(cfg), release)
+ CPLUS_FLAGS = -DDO_ITT_NOTIFY -O2 -DUSE_PTHREAD -D__linux__ -D__custom_linux__
+endif
+ifeq ($(cfg), debug)
+ CPLUS_FLAGS = -DTBB_DO_ASSERT -DDO_ITT_NOTIFY -g -O0 -DUSE_PTHREAD -D__linux__ -D__custom_linux__
+endif
+
+ASM=
+ASM_FLAGS=
+
+TBB_ASM.OBJ=
+
+ifeq (itanium,$(arch))
+# Position-independent code (PIC) is a must for IA-64
+ CPLUS_FLAGS += $(PIC_KEY)
+ $(PIC_KEY) =
+endif
+
+ifeq (em64t,$(arch))
+ CPLUS_FLAGS += -m64
+ LIB_LINK_FLAGS += -m64
+endif
+
+ifeq (ia32,$(arch))
+ CPLUS_FLAGS += -m32
+ LIB_LINK_FLAGS += -m32
+endif
+
+#------------------------------------------------------------------------------
+# Setting assembler data.
+#------------------------------------------------------------------------------
+%.$(OBJ): %.s
+ cpp $(ASM_FLAGS) <$< | grep -v '^#' >$*.tmp
+ $(ASM) -o $@ $*.tmp
+ rm $*.tmp
+
+ASSEMBLY_SOURCE=$(arch)-gas
+ifeq (itanium,$(arch))
+ ASM=ias
+ TBB_ASM.OBJ = atomic_support.o lock_byte.o log2.o pause.o
+endif
+#------------------------------------------------------------------------------
+# End of setting assembler data.
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+M_INCLUDES = $(INCLUDES) -I$(MALLOC_ROOT) -I$(MALLOC_SOURCE_ROOT)
+M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions -fno-schedule-insns2
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
diff --git a/build/SunOS.inc b/build/SunOS.inc
new file mode 100644
index 0000000..12ca2dd
--- /dev/null
+++ b/build/SunOS.inc
@@ -0,0 +1,81 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+ifndef arch
+ ifeq ($(shell arch),i86pc)
+ export arch:=ia32
+ endif
+endif
+
+ifndef runtime
+ gcc_version:=$(shell gcc -v 2>&1 | grep 'gcc version' | sed -e 's/^gcc version //' | sed -e 's/ .*$$//')
+ os_version:=$(shell uname -r)
+ os_kernel_version:=$(shell uname -r | sed -e 's/-.*$$//')
+# export os_glibc_version_full:=$(shell rpm -qa | grep '^glibc-[0-9]' | sort -u | sed -e 's/^glibc-//')
+# os_glibc_version:=$(shell echo "$(os_glibc_version_full)" | sed -e '2,$$d' -e 's/-.*$$//')
+# export runtime:=cc$(gcc_version)_libc$(os_glibc_version)_kernel$(os_kernel_version)
+ export runtime:=cc$(gcc_version)_kernel$(os_kernel_version)
+endif
+
+native_compiler := gcc
+export compiler ?= gcc
+debugger ?= gdb
+
+CWD=$(shell pwd)
+RM?=rm -f
+RD?=rmdir
+MD?=mkdir -p
+NUL= > /dev/null 2>&1
+SLASH=/
+MAKE_VERSIONS=sh $(tbb_root)/build/version_info_linux.sh $(CPLUS) $(CPLUS_FLAGS) $(INCLUDES) >version_string.tmp
+MAKE_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh
+
+ifdef LD_LIBRARY_PATH
+ export LD_LIBRARY_PATH := .:$(LD_LIBRARY_PATH)
+else
+ export LD_LIBRARY_PATH := .
+endif
+
+####### Build settigns ########################################################
+
+OBJ = o
+DLL = so
+
+ifeq ($(cfg),debug)
+ DEBUG_SUFFIX = _debug
+endif
+
+TBB.DEF =
+TBB.DLL = libtbb$(DEBUG_SUFFIX).$(DLL)
+TBB.LIB = $(TBB.DLL)
+
+MALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).so
+MALLOC.LIB = $(MALLOC.DLL)
+
+TBB_NOSTRICT=1
+
+
+
diff --git a/build/codecov.txt b/build/codecov.txt
new file mode 100644
index 0000000..22d4b17
--- /dev/null
+++ b/build/codecov.txt
@@ -0,0 +1,3 @@
+src/tbb
+src/tbbmalloc
+include/tbb
diff --git a/build/common.inc b/build/common.inc
new file mode 100644
index 0000000..8c94e3b
--- /dev/null
+++ b/build/common.inc
@@ -0,0 +1,89 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+ifndef tbb_os
+ ifeq ($(OS), Windows_NT)
+ export tbb_os=windows
+ else
+ OS:=$(shell uname)
+ ifneq ($(OS),)
+ export tbb_os=$(OS)
+ endif
+ ifeq ($(OS), Linux)
+ export tbb_os=linux
+ endif
+ ifeq ($(OS), Darwin)
+ export tbb_os=macos
+ endif
+ endif
+endif
+
+ifndef tbb_os
+ $(error "$(OS) is not supported")
+else
+ ifeq ($(wildcard $(tbb_root)/build/$(tbb_os).inc),)
+ $(error "$(tbb_os)" is not supported; add build/$(tbb_os).inc file with os-specific settings )
+ endif
+
+ # detect arch and runtime versions, provide common os-specific definitions
+ include $(tbb_root)/build/$(tbb_os).inc
+
+ ifeq ($(arch),)
+ $(error Architecture not detected)
+ endif
+ ifeq ($(runtime),)
+ $(error Runtime version not detected)
+ endif
+ ifeq ($(wildcard $(tbb_root)/build/$(tbb_os).$(compiler).inc),)
+ $(error Compiler "$(compiler)" is not supported on $(tbb_os); add build/$(tbb_os).$(compiler).inc file with compiler-specific settings )
+ endif
+
+ ifdef BUILDING_PHASE
+ # Setting default configuration to release
+ cfg?=release
+ # include copmiler-specific build configurations
+ -include $(tbb_root)/build/$(tbb_os).$(compiler).inc
+ endif
+ ifneq ($(BUILDING_PHASE),1)
+ # definitions for top-level Makefiles
+ origin_build_dir:=$(origin tbb_build_dir)
+ tbb_build_dir?=$(tbb_root)$(SLASH)build
+ tbb_build_prefix?=$(tbb_os)_$(arch)_$(compiler)_$(runtime)
+ work_dir=$(tbb_build_dir)$(SLASH)$(tbb_build_prefix)
+ ifneq ($(BUILDING_PHASE),0)
+ work_dir:=$(work_dir)
+ # assign new value for tbb_root
+ ifneq ($(firstword is_abs_path$(subst /, ,$(tbb_root))),is_abs_path)
+ ifeq ($(origin_build_dir),undefined)
+ override tbb_root:=../..
+ else
+ override tbb_root:=$(CWD)/$(tbb_root)
+ endif
+ endif
+ export tbb_root
+ endif # BUILDING_PHASE != 0
+ endif # BUILDING_PHASE != 1
+endif
diff --git a/build/common_rules.inc b/build/common_rules.inc
new file mode 100644
index 0000000..23684ea
--- /dev/null
+++ b/build/common_rules.inc
@@ -0,0 +1,75 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+.PRECIOUS: %.$(OBJ) %.$(DLL).$(OBJ)
+
+CPLUS_FLAGS_NOSTRICT:=$(subst -strict_ansi,-ansi,$(CPLUS_FLAGS))
+
+%.$(OBJ): %.cpp
+ $(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(INCLUDES) $<
+
+%.$(OBJ): %.c
+ $(CPLUS) $(COMPILE_ONLY) $(C_FLAGS) $(INCLUDES) $<
+
+%.$(OBJ): %.asm
+ $(ASM) $(ASM_FLAGS) $<
+
+tbb_misc.$(OBJ): tbb_misc.cpp version_string.tmp
+ $(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS_NOSTRICT) $(INCLUDE_KEY). $(INCLUDES) $<
+
+tbb_misc.E: tbb_misc.cpp version_string.tmp
+ $(CPLUS) $(PREPROC_ONLY) $(CPLUS_FLAGS_NOSTRICT) $(INCLUDE_KEY). $(INCLUDES) $< >$@
+
+%.res: %.rc version_string.tmp
+ rc /Fo$@ $(INCLUDES) $(filter /D%,$(CPLUS_FLAGS)) $<
+
+# Rule for generating .E file if needed for visual inspection
+%.E: %.cpp
+ $(CPLUS) $(PREPROC_ONLY) $(CPLUS_FLAGS) $(INCLUDES) $< >$@
+
+# TODO Rule for generating .asm file if needed for visual inspection
+%.asm: %.cpp
+ $(CPLUS) /c /Fa $(CPLUS_FLAGS) $(INCLUDES) $<
+
+# TODO Rule for generating .s file if needed for visual inspection
+%.s: %.cpp
+ $(CPLUS) -S $(CPLUS_FLAGS) $(INCLUDES) $<
+
+ifeq (1,$(TBB_NOSTRICT))
+# GNU 3.2.3 headers have a ISO syntax that is rejected by Intel compiler in -strict_ansi mode.
+# The Mac uses gcc, so the list is empty for that platform.
+# The files below need the -strict_ansi flag downgraded to -ansi to compile
+
+$(KNOWN_NOSTRICT): %.o: %.cpp
+ $(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS_NOSTRICT) $(INCLUDES) $<
+
+endif
+
+version_string.tmp:
+ $(MAKE_VERSIONS)
+
+tbbvars:
+ $(MAKE_TBBVARS)
diff --git a/build/detect.js b/build/detect.js
new file mode 100644
index 0000000..c012e6b
--- /dev/null
+++ b/build/detect.js
@@ -0,0 +1,114 @@
+// Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+//
+// This file is part of Threading Building Blocks.
+//
+// Threading Building Blocks is free software; you can redistribute it
+// and/or modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// Threading Building Blocks 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 General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Threading Building Blocks; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+if ( WScript.Arguments.Count() > 0 ) {
+
+ try {
+
+ var WshShell = WScript.CreateObject("WScript.Shell");
+
+ var fso = new ActiveXObject("Scripting.FileSystemObject");
+
+ var tmpExec;
+
+ //Compile binary
+ tmpExec = WshShell.Exec("cmd /c echo int main(){return 0;} >detect.c");
+ while ( tmpExec.Status == 0 ) {
+ WScript.Sleep(100);
+ }
+
+ tmpExec = WshShell.Exec("cl /MD detect.c /link /MAP");
+ while ( tmpExec.Status == 0 ) {
+ WScript.Sleep(100);
+ }
+
+ if ( WScript.Arguments(0) == "/arch" ) {
+ //read compiler banner
+ var clVersion = tmpExec.StdErr.ReadAll();
+
+ //detect target architecture
+ var em64t=/AMD64|EM64T|x64/mgi;
+ var itanium=/IA-64|Itanium/mgi;
+ var ia32=/80x86/mgi;
+ if ( clVersion.match(em64t) ) {
+ WScript.Echo( "em64t" );
+ } else if ( clVersion.match(itanium) ) {
+ WScript.Echo( "itanium" );
+ } else if ( clVersion.match(ia32) ) {
+ WScript.Echo( "ia32" );
+ } else {
+ WScript.Echo( "unknown" );
+ }
+ }
+
+ if ( WScript.Arguments(0) == "/runtime" ) {
+ //read map-file
+ var map = fso.OpenTextFile("detect.map", 1, 0);
+ var mapContext = map.readAll();
+ map.Close();
+
+ //detect runtime
+ var vc71=/MSVCR71\.DLL/mgi;
+ var vc80=/MSVCR80\.DLL/mgi;
+ var vc90=/MSVCR90\.DLL/mgi;
+ var psdk=/MSVCRT\.DLL/mgi;
+ if ( mapContext.match(vc71) ) {
+ WScript.Echo( "vc7.1" );
+ } else if ( mapContext.match(vc80) ) {
+ WScript.Echo( "vc8" );
+ } else if ( mapContext.match(vc90) ) {
+ WScript.Echo( "vc9" );
+ } else if ( mapContext.match(psdk) ) {
+ // Our current naming convention assumes vc7.1 for 64-bit Windows PSDK
+ WScript.Echo( "vc7.1" );
+ } else {
+ WScript.Echo( "unknown" );
+ }
+ }
+
+ // delete intermediate files
+ if ( fso.FileExists("detect.c") )
+ fso.DeleteFile ("detect.c", false);
+ if ( fso.FileExists("detect.obj") )
+ fso.DeleteFile ("detect.obj", false);
+ if ( fso.FileExists("detect.map") )
+ fso.DeleteFile ("detect.map", false);
+ if ( fso.FileExists("detect.exe") )
+ fso.DeleteFile ("detect.exe", false);
+ if ( fso.FileExists("detect.exe.manifest") )
+ fso.DeleteFile ("detect.exe.manifest", false);
+
+ } catch( error )
+ {
+ WScript.Echo( "unknown" );
+ WScript.Quit( 0 );
+ }
+
+} else {
+
+ WScript.Echo( "/arch or /runtime should be set" );
+}
+
diff --git a/build/generate_tbbvars.bat b/build/generate_tbbvars.bat
new file mode 100644
index 0000000..8e4f925
--- /dev/null
+++ b/build/generate_tbbvars.bat
@@ -0,0 +1,102 @@
+ at echo off
+REM
+REM Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+REM
+REM This file is part of Threading Building Blocks.
+REM
+REM Threading Building Blocks is free software; you can redistribute it
+REM and/or modify it under the terms of the GNU General Public License
+REM version 2 as published by the Free Software Foundation.
+REM
+REM Threading Building Blocks is distributed in the hope that it will be
+REM useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+REM of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+REM GNU General Public License for more details.
+REM
+REM You should have received a copy of the GNU General Public License
+REM along with Threading Building Blocks; if not, write to the Free Software
+REM Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+REM
+REM As a special exception, you may use this file as part of a free software
+REM library without restriction. Specifically, if other files instantiate
+REM templates or use macros or inline functions from this file, or you compile
+REM this file and link it with other files to produce an executable, this
+REM file does not by itself cause the resulting executable to be covered by
+REM the GNU General Public License. This exception does not however
+REM invalidate any other reasons why the executable file might be covered by
+REM the GNU General Public License.
+REM
+if exist tbbvars.bat exit
+echo Generating tbbvars.bat
+echo @echo off>tbbvars.bat
+setlocal
+for %%D in ("%tbb_root%") do set actual_root=%%~fD
+if x%1==x goto without
+
+echo IF NOT DEFINED TBB20_INSTALL_DIR SET TBB20_INSTALL_DIR=%actual_root%>>tbbvars.bat
+echo SET TBB_ARCH_PLATFORM=%arch%\%runtime%>>tbbvars.bat
+echo SET INCLUDE="%%TBB20_INSTALL_DIR%%\include";%%INCLUDE%%>>tbbvars.bat
+echo SET LIB="%%TBB20_INSTALL_DIR%%\build\%1";%%LIB%%>>tbbvars.bat
+echo SET PATH="%%TBB20_INSTALL_DIR%%\build\%1";%%PATH%%>>tbbvars.bat
+
+if exist tbbvars.sh goto skipsh
+set fslash_root=%actual_root:\=/%
+echo Generating tbbvars.sh
+echo #!/bin/sh>tbbvars.sh
+echo if [ -z "${TBB20_INSTALL_DIR}" ]; then>>tbbvars.sh
+echo export TBB20_INSTALL_DIR="%fslash_root%">>tbbvars.sh
+echo fi>>tbbvars.sh
+echo TBB_ARCH_PLATFORM="%arch%\%runtime%">>tbbvars.sh
+echo if [ -z "${PATH}" ]; then>>tbbvars.sh
+echo export PATH="${TBB20_INSTALL_DIR}/build/%1">>tbbvars.sh
+echo else>>tbbvars.sh
+echo export PATH="${TBB20_INSTALL_DIR}/build/%1;$PATH">>tbbvars.sh
+echo fi>>tbbvars.sh
+echo if [ -z "${LIB}" ]; then>>tbbvars.sh
+echo export LIB="${TBB20_INSTALL_DIR}/build/%1">>tbbvars.sh
+echo else>>tbbvars.sh
+echo export LIB="${TBB20_INSTALL_DIR}/build/%1;$LIB">>tbbvars.sh
+echo fi>>tbbvars.sh
+echo if [ -z "${INCLUDE}" ]; then>>tbbvars.sh
+echo export INCLUDE="${TBB20_INSTALL_DIR}/include">>tbbvars.sh
+echo else>>tbbvars.sh
+echo export INCLUDE="${TBB20_INSTALL_DIR}/include;$INCLUDE">>tbbvars.sh
+echo fi>>tbbvars.sh
+:skipsh
+
+if exist tbbvars.csh goto skipcsh
+echo Generating tbbvars.csh
+echo #!/bin/csh>tbbvars.csh
+echo if (! $?TBB20_INSTALL_DIR) then>>tbbvars.csh
+echo setenv TBB20_INSTALL_DIR "%actual_root%">>tbbvars.csh
+echo endif>>tbbvars.csh
+echo setenv TBB_ARCH_PLATFORM "%arch%\%runtime%">>tbbvars.csh
+echo if (! $?PATH) then>>tbbvars.csh
+echo setenv PATH "${TBB20_INSTALL_DIR}\build\%1">>tbbvars.csh
+echo else>>tbbvars.csh
+echo setenv PATH "${TBB20_INSTALL_DIR}\build\%1;$PATH">>tbbvars.csh
+echo endif>>tbbvars.csh
+echo if (! $?LIB) then>>tbbvars.csh
+echo setenv LIB "${TBB20_INSTALL_DIR}\build\%1">>tbbvars.csh
+echo else>>tbbvars.csh
+echo setenv LIB "${TBB20_INSTALL_DIR}\build\%1;$LIB">>tbbvars.csh
+echo endif>>tbbvars.csh
+echo if (! $?INCLUDE) then>>tbbvars.csh
+echo setenv INCLUDE "${TBB20_INSTALL_DIR}\include">>tbbvars.csh
+echo else>>tbbvars.csh
+echo setenv INCLUDE "${TBB20_INSTALL_DIR}\include;$INCLUDE">>tbbvars.csh
+echo endif>>tbbvars.csh
+)
+:skipcsh
+exit
+
+:without
+set bin_dir=%CD%
+echo SET tbb_root=%actual_root%>>tbbvars.bat
+echo SET tbb_bin=%bin_dir%>>tbbvars.bat
+echo SET TBB_ARCH_PLATFORM=%arch%\%runtime%>>tbbvars.bat
+echo SET INCLUDE="%%tbb_root%%\include";%%INCLUDE%%>>tbbvars.bat
+echo SET LIB="%%tbb_bin%%";%%LIB%%>>tbbvars.bat
+echo SET PATH="%%tbb_bin%%";%%PATH%%>>tbbvars.bat
+
+endlocal
diff --git a/build/generate_tbbvars.sh b/build/generate_tbbvars.sh
new file mode 100644
index 0000000..6ba26f4
--- /dev/null
+++ b/build/generate_tbbvars.sh
@@ -0,0 +1,119 @@
+#!/bin/sh
+#
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Script used to generate tbbvars.[c]sh scripts
+bin_dir="$PWD" #
+cd "$tbb_root" # keep this comments here
+tbb_root="$PWD" # to make it unsensible
+cd "$bin_dir" # to EOL encoding
+[ "`uname`" = "Darwin" ] && dll_path="DYLD_LIBRARY_PATH" || dll_path="LD_LIBRARY_PATH" #
+if [ -z "$1" ]; then # custom tbb_build_dir, can't make with TBB_INSTALL_DIR
+[ -f tbbvars.sh ] || cat >tbbvars.sh <<EOF
+#!/bin/sh
+tbb_root="${tbb_root}" #
+tbb_bin="${bin_dir}" #
+if [ -z "\$CPATH" ]; then #
+ export CPATH="\${tbb_root}/include" #
+else #
+ export CPATH="\${tbb_root}/include:\$CPATH" #
+fi #
+if [ -z "\$LIBRARY_PATH" ]; then #
+ export LIBRARY_PATH="\${tbb_bin}" #
+else #
+ export LIBRARY_PATH="\${tbb_bin}:\$LIBRARY_PATH" #
+fi #
+if [ -z "\$${dll_path}" ]; then #
+ export ${dll_path}="\${tbb_bin}" #
+else #
+ export ${dll_path}="\${tbb_bin}:\$${dll_path}" #
+fi #
+EOF
+[ -f tbbvars.csh ] || cat >tbbvars.csh <<EOF
+#!/bin/csh
+setenv tbb_root "${tbb_root}" #
+setenv tbb_bin "${bin_dir}" #
+if (! \$?CPATH) then #
+ setenv CPATH "\${tbb_root}/include" #
+else #
+ setenv CPATH "\${tbb_root}/include:\$CPATH" #
+endif #
+if (! \$?LIBRARY_PATH) then #
+ setenv LIBRARY_PATH "\${tbb_bin}" #
+else #
+ setenv LIBRARY_PATH "\${tbb_bin}:\$LIBRARY_PATH" #
+endif #
+if (! \$?${dll_path}) then #
+ setenv ${dll_path} "\${tbb_bin}" #
+else #
+ setenv ${dll_path} "\${tbb_bin}:\$${dll_path}" #
+endif #
+EOF
+else # make with TBB_INSTALL_DIR
+[ -f tbbvars.sh ] || cat >tbbvars.sh <<EOF
+#!/bin/sh
+[ -z "\${TBB20_INSTALL_DIR}" ] && export TBB20_INSTALL_DIR="${tbb_root}" #
+tbb_bin="\${TBB20_INSTALL_DIR}/build/$1" #
+if [ -z "\$CPATH" ]; then #
+ export CPATH="\${TBB20_INSTALL_DIR}/include" #
+else #
+ export CPATH="\${TBB20_INSTALL_DIR}/include:\$CPATH" #
+fi #
+if [ -z "\$LIBRARY_PATH" ]; then #
+ export LIBRARY_PATH="\${tbb_bin}" #
+else #
+ export LIBRARY_PATH="\${tbb_bin}:\$LIBRARY_PATH" #
+fi #
+if [ -z "\$${dll_path}" ]; then #
+ export ${dll_path}="\${tbb_bin}" #
+else #
+ export ${dll_path}="\${tbb_bin}:\$${dll_path}" #
+fi #
+EOF
+[ -f tbbvars.csh ] || cat >tbbvars.csh <<EOF
+#!/bin/csh
+if (! \$?TBB20_INSTALL_DIR) then #
+ setenv TBB20_INSTALL_DIR "${tbb_root}" #
+endif #
+setenv tbb_bin "\${TBB20_INSTALL_DIR}/build/$1" #
+if (! \$?CPATH) then #
+ setenv CPATH "\${TBB20_INSTALL_DIR}/include" #
+else #
+ setenv CPATH "\${TBB20_INSTALL_DIR}/include:\$CPATH" #
+endif #
+if (! \$?LIBRARY_PATH) then #
+ setenv LIBRARY_PATH "\${tbb_bin}" #
+else #
+ setenv LIBRARY_PATH "\${tbb_bin}:\$LIBRARY_PATH" #
+endif #
+if (! \$?${dll_path}) then #
+ setenv ${dll_path} "\${tbb_bin}" #
+else #
+ setenv ${dll_path} "\${tbb_bin}:\$${dll_path}" #
+endif #
+EOF
+fi #
diff --git a/build/index.html b/build/index.html
new file mode 100644
index 0000000..d0eddb3
--- /dev/null
+++ b/build/index.html
@@ -0,0 +1,225 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory contains the internal Makefile infrastructure for Threading Building Blocks.
+
+<P>
+See below for how to <A HREF=#build>build</A> TBB and how to <A HREF=#port>port</A> TBB
+to a new platform, operating system or architecture.
+</P>
+
+<H2>Files</H2>
+The files here are not intended to be used directly. See below for usage.
+<DL>
+<DT><A HREF="Makefile.tbb">Makefile.tbb</A>
+<DD>Main Makefile invoked to build the TBB library.
+ Normally invoked via "make tbb" from <A HREF=../Makefile>top-level Makefile</A>.
+ Also invoked via "make" from <A HREF=../src/tbb/Makefile>src/tbb Makefile</A>.
+<DT><A HREF="Makefile.tbbmalloc">Makefile.tbbmalloc</A>
+<DD>Main Makefile invoked to build the TBB scalable memory allocator library.
+ Normally invoked via "make tbbmalloc" from <A HREF=../Makefile>top-level Makefile</A>.
+<DT><A HREF="Makefile.test">Makefile.test</A>
+<DD>Main Makefile invoked to test the TBB library.
+ Normally invoked via "make test" from <A HREF=../Makefile>top-level Makefile</A>.
+ Also invoked via "make" from <A HREF=../src/test/Makefile>src/test Makefile</A>.
+<DT><A HREF="common.inc">common.inc</A>
+<DD>Main common included Makefile that includes OS-specific and compiler-specific Makefiles.
+<DT><os>.inc
+<DD>OS-specific Makefile for a particular <os>.
+<DT><os>_<compiler>.inc
+<DD>Compiler-specific Makefile for a particular <os> / <compiler> combination.
+<DT>*.sh
+<DD>Infrastructure utilities for Linux*, Mac OS* X, and related systems.
+<DT>*.js, *.bat
+<DD>Infrastructure utilities for Windows* systems.
+</DL>
+
+<A NAME=build><H2>To Build</H2></A>
+<P>
+To port TBB to a new platform, operating system or architecture, see the <A HREF=#port>porting directions</A> below.
+</P>
+
+<H3>Software prerequisites:</H3>
+<OL>
+<LI>C++ compiler for the platform, operating system and architecture of interest.
+ Either the native compiler for your system, or, optionally, the appropriate Intel® C++ compiler, may be used.
+<LI>GNU make.
+<LI>A Bourne or BASH compatible shell. On Windows*, shell commands issued by GNU make should execute in such a shell.
+<LI>The Intel® assembler, ias (if using Intel® Itanium® processors).
+</OL>
+
+<P>
+TBB libraries can be built by performing the following steps.
+On systems that support only one ABI (e.g., 32-bit), these steps build the libraries for that ABI.
+On systems that support both 64-bit and 32-bit libraries, these steps build the 64-bit libraries
+(Linux*, Mac OS* X, and related systems) or whichever ABI is selected in the development environment (Windows* systems).
+</P>
+<OL>
+<LI>Change to the <A HREF=../index.html>top-level directory</A> of the installed software.
+<LI>If using the Intel® C++ compiler, make sure the appropriate compiler is available in your PATH
+ (e.g., by sourcing the appropriate iccvars script for the compiler to be used).
+<LI>Invoke GNU make using no arguments, for example, "gmake".
+</OL>
+
+<P>
+To build TBB libraries for other than the default ABI (e.g., to build 32-bit libraries on Linux*, Mac OS* X,
+or related systems that support both 64-bit and 32-bit libraries), perform the following steps.
+</P>
+<OL>
+<LI>Change to the <A HREF=../index.html>top-level directory</A> of the installed software.
+<LI>If using the Intel® C++ compiler, make sure the appropriate compiler is available in your PATH
+ (e.g., by sourcing the appropriate iccvars script for the compiler to be used).
+<LI>Invoke GNU make as follows, "gmake arch=ia32".
+</OL>
+
+<P>The default make target will build and unit-test the release and debug versions of the library.
+Unit-testing is performed by running each of the <A HREF=../src/test>unit-tests</A> and each of the
+<A HREF=../examples/index.html>examples</A>.
+</P>
+
+<P>
+By default, the libraries will be built in sub-directories within the build/ directory.
+The sub-directories are named according to the operating system, architecture, compiler and software environment used
+(the sub-directory names also distinguish release vs. debug libraries). On Linux*, the software environment comprises
+the GCC, libc and kernel version used. On Windows*, the software environment comprises the GCC and OS version used.
+On Windows, the software environment comprises the Microsoft* Visual Studio* version used.
+See below for how to change the default build directory.
+</P>
+
+<P>
+To perform different build and/or test operations, perform the following steps.
+</P>
+<OL>
+<LI>Change to the <A HREF=../index.html>top-level directory</A> of the installed software.
+<LI>If using the Intel® C++ compiler, make sure the appropriate compiler is available in your PATH
+ (e.g., by sourcing the appropriate iccvars script for the compiler to be used).
+<LI>Invoke GNU make by using one or more of the following commands.
+ <DL>
+ <DT><TT>make</TT>
+ <DD>Default build and test. Equivalent to 'make release debug examples'.
+ <DT><TT>make release</TT>
+ <DD>Build and test release libraries only.
+ <DT><TT>make debug</TT>
+ <DD>Build and test debug libraries only.
+ <DT><TT>make tbb</TT>
+ <DD>Make TBB release and debug libraries.
+ Also invoked via "make" from <A HREF=../src/tbb/Makefile>src/tbb Makefile</A>.
+ <DT><TT>make tbbmalloc</TT>
+ <DD>Make TBB scalable memory allocator libraries.
+ <DT><TT>make test</TT>
+ <DD>Just run unit-tests.
+ Also invoked via "make" from <A HREF=../src/test/Makefile>src/test Makefile</A>.
+ <DT><TT>make examples</TT>
+ <DD>Build libraries and run all examples, like doing "make debug clean release" from
+ <A HREF=../examples/Makefile>examples Makefile</A>.
+ <DT><TT>make compiler=<B>{</B>icl, icc<B>}</B> <B>[</B>(above options or targets)<B>]</B></TT>
+ <DD>Build and run as above, but use Intel® compilers instead of default, native compilers
+ (e.g., icl instead of cl.exe on Windows* systems, or icc instead of g++ on Linux* or Mac OS* X systems).
+ <DT><TT>make arch=<B>{</B>ia32, em64t, itanium<B>}</B> <B>[</B>(above options or targets)<B>]</B></TT>
+ <DD>Build and run as above, but build libraries for the selected ABI.
+ <DT><TT>make tbb_root=<B>{</B>(TBB directory)<B>}</B> <B>[</B>(above options or targets)<B>]</B></TT>
+ <DD>Build and run as above; for use when invoking "make" from a directory other than
+ the <A HREF=../index.html>top-level directory</A>.
+ <DT><TT>make tbb_build_dir=<B>{</B>(build directory)<B>}</B> <B>[</B>(above options or targets)<B>]</B></TT>
+ <DD>Build and run as above, but place the built libraries in the specified directory, rather than in the default
+ sub-directory within the build/ directory.
+ <DT><TT>make tbb_build_prefix=<B>{</B>(build sub-directory)<B>}</B> <B>[</B>(above options or targets)<B>]</B></TT>
+ <DD>Build and run as above, but place the built libraries in the specified sub-directory within the build/ directory,
+ rather than using the default sub-directory name.
+ <DT><TT>make <B>[</B>(above options)<B>]</B> clean</TT>
+ <DD>Remove any executables or intermediate files produced by the above commands.
+ Includes build directories, object files, libraries and test executables.
+ </DL>
+</OL>
+
+<A NAME=port><H2>To Port</H2></A>
+<P>
+This section provides information on how to port TBB to a new platform, operating system or architecture.
+A subset or a superset of these steps may be required for porting to a given platform.
+</P>
+
+<H4>To port the TBB source code:</H4>
+<OL>
+<LI>If porting to a new architecture, create a file that describes the architecture-specific details for that architecture.
+ <UL>
+ <LI>Create a <os>_<architecture>.h file in the <A HREF=../include/tbb/machine>include/tbb/machine</A> directory
+ that describes these details.
+ <UL>
+ <LI>The <os>_<architecture>.h is named after the operating system and architecture as recognized by
+ <A HREF=../include/tbb/tbb_machine.h>include/tbb/tbb_machine.h</A> and the Makefile infrastructure.
+ <LI>This file defines the implementations of synchronization operations, and also the
+ scheduler yield function, for the operating system and architecture.
+ <LI>Several examples of <os>_<architecture>.h files can be found in the
+ <A HREF=../include/tbb/machine>include/tbb/machine</A> directory.
+ <UL>
+ <LI>A minimal implementation defines the 4-byte and 8-byte compare-and-swap operations,
+ and the scheduler yield function. See <A HREF=../include/tbb/machine/mac_ppc.h>include/tbb/machine/mac_ppc.h</A>
+ for an example of a minimal implementation.
+ <LI>More complex implementation examples can also be found in the
+ <A HREF=../include/tbb/machine>include/tbb/machine</A> directory
+ that implement all the individual variants of synchronization operations that TBB uses.
+ Such implementations are more verbose but may achieve better performance on a given architecture.
+ <LI>In a given implementation, any synchronization operation that is not defined is implemented, by default,
+ in terms of 4-byte or 8-byte compare-and-swap. More operations can thus be added incrementally to increase
+ the performance of an implementation.
+ <LI>In most cases, synchronization operations are implemented as inline assembly code; examples also exist,
+ (e.g., for Intel® Itanium® processors) that use out-of-line assembly code in *.s or *.asm files
+ (see the assembly code sub-directories in the <A HREF=../src/tbb>src/tbb</A> directory).
+ </UL>
+ </UL>
+ <LI>Modify <A HREF=../include/tbb/tbb_machine.h>include/tbb/tbb_machine.h</A>, if needed, to invoke the appropriate
+ <os>_<architecture>.h file in the <A HREF=../include/tbb/machine>include/tbb/machine</A> directory.
+ </UL>
+<LI>Add an implementation of DetectNumberOfWorkers() in <A HREF=../src/tbb/tbb_misc.h>src/tbb/tbb_misc.h</A>,
+ if needed, that returns the number of cores found on the system. This is used to determine the default
+ number of threads for the TBB task scheduler.
+<LI>Either properly define FillDynamicLinks for use in
+ <A HREF=../src/tbb/cache_aligned_allocator.cpp>src/tbb/cache_aligned_allocator.cpp</A>,
+ or hardcode the allocator to be used.
+<LI>Additional types might be required in the union defined in
+ <A HREF=../include/tbb/aligned_space.h>include/tbb/aligned_space.h</A>
+ to ensure proper alignment on your platform.
+<LI>Changes may be required in <A HREF=../include/tbb/tick_count.h>include/tbb/tick_count.h</A>
+ for systems that do not provide gettimeofday.
+</OL>
+
+<H4>To port the Makefile infrastructure:</H4>
+Modify the appropriate files in the Makefile infrastructure to add a new platform, operating system or architecture as needed.
+See the Makefile infrastructure files for examples.
+<OL>
+<LI>The <A HREF=../Makefile>top-level Makefile</A> includes <A HREF=common.inc>common.inc</A> to determine the operating system.
+ <UL>
+ <LI>To add a new operating system, add the appropriate test to <A HREF=common.inc>common.inc</A>,
+ and create the needed <os>.inc and <os>_<compiler>.inc files (see below).
+ </UL>
+<LI>The <os>.inc file makes OS-specific settings for a particular <os>.
+ <UL>
+ <LI>For example, <A HREF=linux.inc>linux.inc</A> makes settings specific to Linux* systems.
+ <LI>This file performs OS-dependent tests to determine the specific platform and/or architecture,
+ and sets other platform-dependent values.
+ <LI>Add a new <os>.inc file for each new operating system added.
+ </UL>
+<LI>The <os>_<compiler>.inc file makes compiler-specific settings for a particular
+ <os> / <compiler> combination.
+ <UL>
+ <LI>For example, <A HREF=linux.gcc.inc>linux.gcc.inc</A> makes specific settings for using GCC on Linux* systems,
+ and <A HREF=linux.icc.inc>linux.icc.inc</A> makes specific settings for using the Intel® C++ compiler on Linux* systems.
+ <LI>This file sets particular compiler, assembler and linker options required when using a particular
+ <os> / <compiler> combination.
+ <LI>Add a new <os>_<compiler>.inc file for each new <os> / <compiler> combination added.
+ </UL>
+</OL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<P></P>
+Copyright © 2005-2007 Intel Corporation. All Rights Reserved.
+<P></P>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<P></P>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
diff --git a/build/linux.gcc.inc b/build/linux.gcc.inc
new file mode 100644
index 0000000..b0ea2bb
--- /dev/null
+++ b/build/linux.gcc.inc
@@ -0,0 +1,98 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+COMPILE_ONLY = -c -MMD
+PREPROC_ONLY = -E -MMD
+INCLUDE_KEY = -I
+DEFINE_KEY = -D
+OUTPUT_KEY = -o #
+OUTPUTOBJ_KEY = -o #
+PIC_KEY = -fPIC
+WARNING_KEY =
+DYLIB_KEY = -shared
+LIBDL = -ldl
+
+TBB_NOSTRICT = 1
+
+CPLUS = g++
+INCLUDES += -I$(tbb_root)/src/tbb -I$(tbb_root)/include -I$(tbb_root)/src
+LIB_LINK_FLAGS = -shared
+LIBS = -lpthread -lrt -ldl
+C_FLAGS = $(CPLUS_FLAGS) -x c
+
+ifeq ($(cfg), release)
+ CPLUS_FLAGS = -DDO_ITT_NOTIFY -O2 -DUSE_PTHREAD
+endif
+ifeq ($(cfg), debug)
+ CPLUS_FLAGS = -DTBB_DO_ASSERT -DDO_ITT_NOTIFY -g -O0 -DUSE_PTHREAD
+endif
+
+ASM=
+ASM_FLAGS=
+
+TBB_ASM.OBJ=
+
+ifeq (itanium,$(arch))
+# Position-independent code (PIC) is a must for IA-64
+ CPLUS_FLAGS += $(PIC_KEY)
+ $(PIC_KEY) =
+endif
+
+ifeq (em64t,$(arch))
+ CPLUS_FLAGS += -m64
+ LIB_LINK_FLAGS += -m64
+endif
+
+ifeq (ia32,$(arch))
+ CPLUS_FLAGS += -m32
+ LIB_LINK_FLAGS += -m32
+endif
+
+#------------------------------------------------------------------------------
+# Setting assembler data.
+#------------------------------------------------------------------------------
+%.$(OBJ): %.s
+ cpp $(ASM_FLAGS) <$< | grep -v '^#' >$*.tmp
+ $(ASM) -o $@ $*.tmp
+ rm $*.tmp
+
+ASSEMBLY_SOURCE=$(arch)-gas
+ifeq (itanium,$(arch))
+ ASM=ias
+ TBB_ASM.OBJ = atomic_support.o lock_byte.o log2.o pause.o
+endif
+#------------------------------------------------------------------------------
+# End of setting assembler data.
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+M_INCLUDES = $(INCLUDES) -I$(MALLOC_ROOT) -I$(MALLOC_SOURCE_ROOT)
+M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions -fno-schedule-insns2
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
diff --git a/build/linux.icc.inc b/build/linux.icc.inc
new file mode 100644
index 0000000..3e10c6b
--- /dev/null
+++ b/build/linux.icc.inc
@@ -0,0 +1,95 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+COMPILE_ONLY = -c -MMD
+PREPROC_ONLY = -E -MMD
+INCLUDE_KEY = -I
+DEFINE_KEY = -D
+OUTPUT_KEY = -o #
+OUTPUTOBJ_KEY = -o #
+PIC_KEY = -fPIC
+WARNING_KEY =
+DYLIB_KEY = -shared
+LIBDL = -ldl
+export COMPILER_VERSION := ICC: $(shell icc -V </dev/null 2>&1 | grep 'Version')
+
+TBB_NOSTRICT = 1
+
+CPLUS = icpc
+
+ifeq (release,$(cfg))
+CPLUS_FLAGS = -DDO_ITT_NOTIFY -O2 -strict_ansi -DUSE_PTHREAD
+else
+CPLUS_FLAGS = -DTBB_DO_ASSERT -DDO_ITT_NOTIFY -O0 -g -strict_ansi -DUSE_PTHREAD
+endif
+
+ifeq (true,$(codecov))
+ CPLUS_FLAGS += -prof-genx
+endif
+
+OPENMP_FLAG = -openmp
+INCLUDES += -I$(tbb_root)/src/tbb -I$(tbb_root)/include -I$(tbb_root)/src -I.
+LIB_LINK_FLAGS = -shared -i-static
+LIBS = -lpthread -lrt -ldl
+C_FLAGS = $(CPLUS_FLAGS) -x c
+
+ASM=
+ASM_FLAGS=
+
+TBB_ASM.OBJ=
+
+ifeq (itanium,$(arch))
+# Position-independent code (PIC) is a must for IA-64
+ CPLUS_FLAGS += $(PIC_KEY)
+ $(PIC_KEY) =
+endif
+
+#------------------------------------------------------------------------------
+# Setting assembler data.
+#------------------------------------------------------------------------------
+%.$(OBJ): %.s
+ cpp $(ASM_FLAGS) <$< | grep -v '^#' >$*.tmp
+ $(ASM) -o $@ $*.tmp
+ rm $*.tmp
+
+ASSEMBLY_SOURCE=$(arch)-gas
+ifeq (itanium,$(arch))
+ ASM=ias
+ TBB_ASM.OBJ = atomic_support.o lock_byte.o log2.o pause.o
+endif
+#------------------------------------------------------------------------------
+# End of setting assembler data.
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+M_INCLUDES = $(INCLUDES) -I$(MALLOC_ROOT) -I$(MALLOC_SOURCE_ROOT)
+M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
+
diff --git a/build/linux.inc b/build/linux.inc
new file mode 100644
index 0000000..c1fe631
--- /dev/null
+++ b/build/linux.inc
@@ -0,0 +1,89 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+ifndef arch
+ ifeq ($(shell arch),i686)
+ export arch:=ia32
+ endif
+ ifeq ($(shell arch),ia64)
+ export arch:=itanium
+ endif
+ ifeq ($(shell arch),x86_64)
+ export arch:=em64t
+ endif
+endif
+
+ifndef runtime
+ #gcc_version:=$(shell gcc -v 2>&1 | grep 'gcc --version' | sed -e 's/^gcc version //' | sed -e 's/ .*$$//')
+ gcc_version_full=$(shell gcc --version | grep 'gcc'| egrep -o ' [0-9]+\.[0-9]+\.[0-9]+.*' | sed -e 's/^\ //')
+ gcc_version=$(shell echo "$(gcc_version_full)" | egrep -o '^[0-9]+\.[0-9]+\.[0-9]+\s*' | head -n 1 | sed -e 's/ *//g')
+ os_version:=$(shell uname -r)
+ os_kernel_version:=$(shell uname -r | sed -e 's/-.*$$//')
+ export os_glibc_version_full:=$(shell getconf GNU_LIBC_VERSION | grep glibc | sed -e 's/^glibc //')
+ os_glibc_version:=$(shell echo "$(os_glibc_version_full)" | sed -e '2,$$d' -e 's/-.*$$//')
+ export runtime:=cc$(gcc_version)_libc$(os_glibc_version)_kernel$(os_kernel_version)
+endif
+
+native_compiler := gcc
+export compiler ?= gcc
+debugger ?= gdb
+
+CWD=$(shell pwd)
+RM?=rm -f
+RD?=rmdir
+MD?=mkdir -p
+NUL= > /dev/null 2>&1
+SLASH=/
+MAKE_VERSIONS=sh $(tbb_root)/build/version_info_linux.sh $(CPLUS) $(CPLUS_FLAGS) $(INCLUDES) >version_string.tmp
+MAKE_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh
+
+ifdef LD_LIBRARY_PATH
+ export LD_LIBRARY_PATH := .:$(LD_LIBRARY_PATH)
+else
+ export LD_LIBRARY_PATH := .
+endif
+
+####### Build settigns ########################################################
+
+OBJ = o
+DLL = so
+LIBEXT = so
+
+ifeq ($(cfg),debug)
+ DEBUG_SUFFIX = _debug
+endif
+
+TBB.DEF =
+TBB.DLL = libtbb$(DEBUG_SUFFIX).$(DLL)
+TBB.LIB = $(TBB.DLL)
+
+MALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).so
+MALLOC.LIB = $(MALLOC.DLL)
+
+TBB_NOSTRICT=1
+
+
+
diff --git a/build/macos.gcc.inc b/build/macos.gcc.inc
new file mode 100644
index 0000000..73a6744
--- /dev/null
+++ b/build/macos.gcc.inc
@@ -0,0 +1,73 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+CPLUS = g++
+COMPILE_ONLY = -c -MMD
+PREPROC_ONLY = -E -MMD
+INCLUDE_KEY = -I
+DEFINE_KEY = -D
+OUTPUT_KEY = -o #
+OUTPUTOBJ_KEY = -o #
+PIC_KEY = -fPIC
+WARNING_KEY =
+DYLIB_KEY = -dynamiclib
+LIBDL = -ldl
+
+INCLUDES += -I$(tbb_root)/src -I$(tbb_root)/include
+LIBS = -lpthread
+LINK_FLAGS =
+LIB_LINK_FLAGS = -dynamiclib -Wl,-exported_symbols_list,$(TBB.DEF)
+C_FLAGS = $(CPLUS_FLAGS) -x c
+
+ifeq ($(cfg), release)
+ CPLUS_FLAGS = -O2
+else
+ CPLUS_FLAGS = -g -O0 -DTBB_DO_ASSERT
+endif
+
+CPLUS_FLAGS += -DUSE_PTHREAD
+
+ifeq (em64t,$(arch))
+ CPLUS_FLAGS += -m64
+ LINK_FLAGS += -m64
+ LIB_LINK_FLAGS += -m64
+endif
+
+ifeq (ppc64,$(arch))
+ CPLUS_FLAGS += -m64
+ LINK_FLAGS += -m64
+ LIB_LINK_FLAGS += -m64
+endif
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+M_INCLUDES = $(INCLUDES) -I$(MALLOC_ROOT) -I$(MALLOC_SOURCE_ROOT)
+M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions -fno-schedule-insns2
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
+
diff --git a/build/macos.icc.inc b/build/macos.icc.inc
new file mode 100644
index 0000000..1f989fc
--- /dev/null
+++ b/build/macos.icc.inc
@@ -0,0 +1,71 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+CPLUS = icpc
+COMPILE_ONLY = -c -MMD
+PREPROC_ONLY = -E -MMD
+INCLUDE_KEY = -I
+DEFINE_KEY = -D
+OUTPUT_KEY = -o #
+OUTPUTOBJ_KEY = -o #
+PIC_KEY = -fPIC
+WARNING_KEY =
+DYLIB_KEY = -dynamiclib
+LIBDL = -ldl
+export COMPILER_VERSION := $(shell icc -V </dev/null 2>&1 | grep 'Version')
+
+INCLUDES += -I$(tbb_root)/src -I$(tbb_root)/include
+OPENMP_FLAG = -openmp
+LIBS = -lpthread
+LINK_FLAGS =
+LIB_LINK_FLAGS = -dynamiclib -i-static -Wl,-exported_symbols_list,$(TBB.DEF)
+C_FLAGS = $(CPLUS_FLAGS) -x c
+
+ifeq ($(cfg), release)
+ CPLUS_FLAGS = -O2
+else
+ CPLUS_FLAGS = -g -O0 -DTBB_DO_ASSERT
+endif
+
+CPLUS_FLAGS += -DUSE_PTHREAD
+
+ifeq (true,$(codecov))
+ CPLUS_FLAGS += -prof-genx
+endif
+
+ifeq (em64t,$(arch))
+# LINK_FLAGS += -m64
+# LIB_LINK_FLAGS += -m64
+endif
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+M_INCLUDES = $(INCLUDES) -I$(MALLOC_ROOT) -I$(MALLOC_SOURCE_ROOT)
+M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
diff --git a/build/macos.inc b/build/macos.inc
new file mode 100644
index 0000000..0bd6ee4
--- /dev/null
+++ b/build/macos.inc
@@ -0,0 +1,84 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+####### Detections and Commands ###############################################
+ifndef arch
+ ifeq ($(shell /usr/sbin/sysctl -n hw.machine),Power Macintosh)
+ ifeq ($(shell /usr/sbin/sysctl -n hw.optional.64bitops),1)
+ export arch:=ppc64
+ else
+ export arch:=ppc32
+ endif
+ else
+ ifeq ($(shell /usr/sbin/sysctl -n hw.optional.x86_64 2>/dev/null),1)
+ export arch:=em64t
+ else
+ export arch:=ia32
+ endif
+ endif
+endif
+
+ifndef runtime
+ #gcc_version:=$(shell gcc -v 2>&1 | grep 'gcc version' | sed -e 's/^gcc version //' | sed -e 's/ .*$$//' )
+ gcc_version_full=$(shell gcc --version | grep 'gcc'| egrep -o ' [0-9]+\.[0-9]+\.[0-9]+.*' | sed -e 's/^\ //')
+ gcc_version=$(shell echo "$(gcc_version_full)" | egrep -o '^[0-9]+\.[0-9]+\.[0-9]+\s*' | head -n 1 | sed -e 's/ *//g')
+ os_version:=$(shell /usr/bin/sw_vers -productVersion)
+ export runtime:=cc$(gcc_version)_os$(os_version)
+endif
+
+native_compiler := gcc
+export compiler ?= gcc
+debugger ?= gdb
+
+CWD=$(shell pwd)
+RM?=rm -f
+RD?=rmdir
+MD?=mkdir -p
+NUL= > /dev/null 2>&1
+SLASH=/
+MAKE_VERSIONS=sh $(tbb_root)/build/version_info_macos.sh $(CPLUS) $(CPLUS_FLAGS) $(INCLUDES) >version_string.tmp
+MAKE_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh
+
+####### Build settigns ########################################################
+
+OBJ=o
+DLL=dylib
+LIBEXT=dylib
+
+ifeq ($(cfg),debug)
+ DEBUG_SUFFIX = _debug
+endif
+
+TBB.DEF = $(tbb_root)/src/tbb/$(arch)-tbb-mac-export.txt
+TBB.DLL = libtbb$(DEBUG_SUFFIX).$(DLL)
+TBB.LIB = $(TBB.DLL)
+
+MALLOC.DEF = $(MALLOC_ROOT)/$(arch)-malloc-mac-export.txt
+MALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).dylib
+MALLOC.LIB = $(MALLOC.DLL)
+
+TBB_NOSTRICT=1
+
diff --git a/build/version_info_linux.sh b/build/version_info_linux.sh
new file mode 100644
index 0000000..e4bacc5
--- /dev/null
+++ b/build/version_info_linux.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+#
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Script used to generate version info string
+echo "#define __TBB_VERSION_STRINGS \\"
+echo '"TBB: ' "BUILD_HOST\t\t"`hostname -s`" ("`arch`")"'" ENDL \'
+echo '"TBB: ' "BUILD_OS\t\t"`head -1 /etc/issue | sed -e 's/\\\\//g'`'" ENDL \'
+echo '"TBB: ' "BUILD_KERNEL\t"`uname -rv`'" ENDL \'
+echo '"TBB: ' "BUILD_GCC\t\t"`g++ -v </dev/null 2>&1 | grep 'gcc.*version'`'" ENDL \'
+[ -z "$COMPILER_VERSION" ] || echo '"TBB: ' "BUILD_COMPILER\t"$COMPILER_VERSION'" ENDL \'
+echo '"TBB: ' "BUILD_GLIBC\t"`getconf GNU_LIBC_VERSION | grep glibc | sed -e 's/^glibc //'`'" ENDL \'
+echo '"TBB: ' "BUILD_LD\t\t"`ld -v | grep 'version'`'" ENDL \'
+echo '"TBB: ' "BUILD_TARGET\t$arch on $runtime"'" ENDL \'
+echo '"TBB: ' "BUILD_COMMAND\t"$*'" ENDL \'
+echo ""
+echo "#define __TBB_DATETIME \""`date -u`"\""
diff --git a/build/version_info_macos.sh b/build/version_info_macos.sh
new file mode 100644
index 0000000..bd5990c
--- /dev/null
+++ b/build/version_info_macos.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+#
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Script used to generate version info string
+echo "#define __TBB_VERSION_STRINGS \\"
+echo '"TBB: ' "BUILD_HOST\t\t"`hostname -s`" ("`arch`")"'" ENDL \'
+echo '"TBB: ' "BUILD_KERNEL\t"`uname -rv`'" ENDL \'
+echo '"TBB: ' "BUILD_GCC\t\t"`gcc -v </dev/null 2>&1 | grep 'version'`'" ENDL \'
+[ -z "$COMPILER_VERSION" ] || echo '"TBB: ' "BUILD_COMPILER\t"$COMPILER_VERSION'" ENDL \'
+echo '"TBB: ' "BUILD_LD\t\t"`ld -v | grep 'version'`'" ENDL \'
+echo '"TBB: ' "BUILD_TARGET\t$arch on $runtime"'" ENDL \'
+echo '"TBB: ' "BUILD_COMMAND\t"$*'" ENDL \'
+echo ""
+echo "#define __TBB_DATETIME \""`date -u`"\""
diff --git a/build/version_info_windows.js b/build/version_info_windows.js
new file mode 100644
index 0000000..373193f
--- /dev/null
+++ b/build/version_info_windows.js
@@ -0,0 +1,131 @@
+// Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+//
+// This file is part of Threading Building Blocks.
+//
+// Threading Building Blocks is free software; you can redistribute it
+// and/or modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// Threading Building Blocks 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 General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Threading Building Blocks; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+var WshShell = WScript.CreateObject("WScript.Shell");
+
+var tmpExec;
+
+WScript.Echo("#define __TBB_VERSION_STRINGS \\");
+
+//Getting BUILD_HOST
+WScript.echo( "\"TBB: BUILD_HOST\\t\\t" +
+ WshShell.ExpandEnvironmentStrings("%COMPUTERNAME%") +
+ "\" ENDL \\" );
+
+//Getting BUILD_OS
+tmpExec = WshShell.Exec("cmd /c ver");
+while ( tmpExec.Status == 0 ) {
+ WScript.Sleep(100);
+}
+tmpExec.StdOut.ReadLine();
+
+WScript.echo( "\"TBB: BUILD_OS\\t\\t" +
+ tmpExec.StdOut.ReadLine() +
+ "\" ENDL \\" );
+
+
+//Getting BUILD_CL
+tmpExec = WshShell.Exec("cmd /c echo #define 0 0>empty.cpp");
+tmpExec = WshShell.Exec("cl -c empty.cpp ");
+while ( tmpExec.Status == 0 ) {
+ WScript.Sleep(100);
+}
+var clVersion = tmpExec.StdErr.ReadLine();
+WScript.echo( "\"TBB: BUILD_CL\\t\\t" +
+ clVersion +
+ "\" ENDL \\" );
+
+//Getting BUILD_COMPILER
+if ( WScript.Arguments(0).toLowerCase().match("icl") ) {
+ tmpExec = WshShell.Exec("icl -c empty.cpp ");
+ while ( tmpExec.Status == 0 ) {
+ WScript.Sleep(100);
+ }
+ WScript.echo( "\"TBB: BUILD_COMPILER\\t" +
+ tmpExec.StdErr.ReadLine() +
+ "\" ENDL \\" );
+} else {
+ WScript.echo( "\"TBB: BUILD_COMPILER\\t\\t" +
+ clVersion +
+ "\" ENDL \\" );
+}
+
+tmpExec = WshShell.Exec("cmd /c del /F /Q empty.cpp ");
+tmpExec = WshShell.Exec("cmd /c del /F /Q empty.obj ");
+
+//Getting BUILD_TARGET
+WScript.echo( "\"TBB: BUILD_TARGET\\t" +
+ WScript.Arguments(1) +
+ "\" ENDL \\" );
+
+//Getting BUILD_COMMAND
+WScript.echo( "\"TBB: BUILD_COMMAND\\t" + WScript.Arguments(2) + "\" ENDL" );
+
+//Getting __TBB_DATETIME and __TBB_VERSION_YMD
+var date = new Date();
+WScript.echo( "#define __TBB_DATETIME \"" + date.toUTCString() + "\"" );
+WScript.echo( "#define __TBB_VERSION_YMD " + date.getUTCFullYear() + ", " +
+ (date.getUTCMonth() > 8 ? (date.getUTCMonth()+1):("0"+(date.getUTCMonth()+1))) +
+ (date.getUTCDate() > 9 ? date.getUTCDate():("0"+date.getUTCDate())) );
+
+
+/*
+
+Original strings
+
+#define __TBB_VERSION_STRINGS \
+"TBB: BUILD_HOST\t\tvpolin-mobl1 (ia32)" ENDL \
+"TBB: BUILD_OS\t\tMicrosoft Windows XP [Version 5.1.2600]" ENDL \
+"TBB: BUILD_CL\t\tMicrosoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86" ENDL \
+"TBB: BUILD_COMPILER\tIntel(R) C++ Compiler for 32-bit applications, Version 9.1 Build 20070109Z Package ID: W_CC_C_9.1.034 " ENDL \
+"TBB: BUILD_TARGET\t" ENDL \
+"TBB: BUILD_COMMAND\t" ENDL \
+
+#define __TBB_DATETIME "Mon Jun 4 10:16:07 UTC 2007"
+#define __TBB_VERSION_YMD 2007, 0604
+
+
+
+# The script must be run from two directory levels below this level.
+x='"TBB: '
+y='" ENDL \'
+echo "#define __TBB_VERSION_STRINGS \\"
+echo $x "BUILD_HOST\t\t"`hostname`" ("`../../arch.exe`")"$y
+echo $x "BUILD_OS\t\t"`../../win_version.bat|grep -i 'Version'`$y
+echo >empty.cpp
+echo $x "BUILD_CL\t\t"`cl -c empty.cpp 2>&1 | grep -i Version`$y
+echo $x "BUILD_COMPILER\t"`icl -c empty.cpp 2>&1 | grep -i Version`$y
+echo $x "BUILD_TARGET\t"$TBB_ARCH$y
+echo $x "BUILD_COMMAND\t"$*$y
+echo ""
+# A workaround for MKS 8.6 where `date -u` crashes.
+date -u > date.tmp
+echo "#define __TBB_DATETIME \""`cat date.tmp`"\""
+echo "#define __TBB_VERSION_YMD "`date '+%Y, %m%d'`
+rm empty.cpp
+rm empty.obj
+rm date.tmp
+*/
diff --git a/build/windows.cl.inc b/build/windows.cl.inc
new file mode 100644
index 0000000..35f8efc
--- /dev/null
+++ b/build/windows.cl.inc
@@ -0,0 +1,122 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+#------------------------------------------------------------------------------
+# Define compiler-specific variables.
+#------------------------------------------------------------------------------
+
+
+#------------------------------------------------------------------------------
+# Setting default configuration to release.
+#------------------------------------------------------------------------------
+cfg ?= release
+#------------------------------------------------------------------------------
+# End of setting default configuration to release.
+#------------------------------------------------------------------------------
+
+
+#------------------------------------------------------------------------------
+# Setting compiler flags.
+#------------------------------------------------------------------------------
+CPLUS = cl
+LINK_FLAGS = /link /nologo
+LIB_LINK_FLAGS=/link /nologo /DLL \
+ /DEF:"$(TBB.DEF)" /MAP /DEBUG /fixed:no
+
+ifeq ($(cfg), release)
+ CPLUS_FLAGS = /nologo /MD /O2 /Zi /EHsc /Zc:forScope /DDO_ITT_NOTIFY \
+ /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE
+ ASM_FLAGS =
+ifeq (ia32,$(arch))
+ CPLUS_FLAGS += /Oy
+endif
+endif
+ifeq ($(cfg), debug)
+ CPLUS_FLAGS = /nologo /MDd /Od /Ob0 /Zi /EHsc /Zc:forScope \
+ /DTBB_DO_ASSERT /DDO_ITT_NOTIFY
+ ASM_FLAGS = /DUSE_FRAME_POINTER
+endif
+
+
+COMPILE_ONLY = /c
+PREPROC_ONLY = /E
+INCLUDE_KEY = /I
+DEFINE_KEY = /D
+OUTPUT_KEY = /Fe
+OUTPUTOBJ_KEY = /Fo
+WARNING_KEY =
+DYLIB_KEY = /DLL
+ifeq ($(runtime),vc8)
+ OPENMP_FLAG = /openmp
+endif
+
+ifeq (em64t,$(arch))
+ ASM_FLAGS += /DEM64T=1
+ CPLUS_FLAGS += /GS-
+endif
+
+
+
+TARGET_VERSION = 0x0400
+CPLUS_FLAGS += /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE \
+ /D_WIN32_WINNT=$(TARGET_VERSION)
+C_FLAGS = $(CPLUS_FLAGS) /TC
+#------------------------------------------------------------------------------
+# End of setting compiler flags.
+#------------------------------------------------------------------------------
+
+
+#------------------------------------------------------------------------------
+# Setting assembler data.
+#------------------------------------------------------------------------------
+ASSEMBLY_SOURCE=$(arch)-masm
+ifeq (em64t,$(arch))
+ ASM=ml64
+ ASM_FLAGS += /c /Zi
+ TBB_ASM.OBJ = atomic_support.obj
+else
+ ASM=ml
+ ASM_FLAGS += /c /coff /Zi
+ TBB_ASM.OBJ = atomic_support.obj lock_byte.obj
+endif
+#------------------------------------------------------------------------------
+# End of setting assembler data.
+#------------------------------------------------------------------------------
+
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+M_CPLUS_FLAGS = $(subst EHsc,EHs-,$(CPLUS_FLAGS))
+M_INCLUDES = $(INCLUDES) /I$(MALLOC_ROOT) /I$(MALLOC_SOURCE_ROOT)
+M_CPLUS_FLAGS += /EHs- /GR-
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# End of define compiler-specific variables.
+#------------------------------------------------------------------------------
diff --git a/build/windows.icl.inc b/build/windows.icl.inc
new file mode 100644
index 0000000..51cfa24
--- /dev/null
+++ b/build/windows.icl.inc
@@ -0,0 +1,133 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+#------------------------------------------------------------------------------
+# Define compiler-specific variables.
+#------------------------------------------------------------------------------
+
+
+#------------------------------------------------------------------------------
+# Setting default configuration to release.
+#------------------------------------------------------------------------------
+cfg ?= release
+#------------------------------------------------------------------------------
+# End of setting default configuration to release.
+#------------------------------------------------------------------------------
+
+
+#------------------------------------------------------------------------------
+# Setting compiler flags.
+#------------------------------------------------------------------------------
+CPLUS = icl $(VCCOMPAT_FLAG)
+LINK_FLAGS = /link /nologo
+LIB_LINK_FLAGS=/nologo /link /nologo /DLL \
+ /DEF:"$(TBB.DEF)" /MAP /DEBUG /fixed:no
+
+ifeq ($(cfg), release)
+ CPLUS_FLAGS = /nologo /MD /O2 /Zi /EHsc /Zc:forScope /DDO_ITT_NOTIFY
+ ASM_FLAGS =
+ifeq (ia32,$(arch))
+ CPLUS_FLAGS += /Oy
+endif
+endif
+ifeq ($(cfg), debug)
+ CPLUS_FLAGS = /nologo /MDd /Od /Ob0 /Zi /EHsc /Zc:forScope \
+ /DTBB_DO_ASSERT /DDO_ITT_NOTIFY
+ LINK_FLAGS += libmmds.lib /NODEFAULTLIB:libmmdd.lib
+ ASM_FLAGS = /DUSE_FRAME_POINTER
+endif
+
+
+COMPILE_ONLY = /c /QMMD
+PREPROC_ONLY = /E
+INCLUDE_KEY = /I
+DEFINE_KEY = /D
+OUTPUT_KEY = /Fe
+OUTPUTOBJ_KEY = /Fo
+WARNING_KEY =
+DYLIB_KEY = /DLL
+
+ifeq (em64t,$(arch))
+ ASM_FLAGS += /DEM64T=1
+ CPLUS_FLAGS += /GS-
+endif
+
+ifeq (true,$(codecov))
+ CPLUS_FLAGS += /Qprof-genx
+endif
+
+TARGET_VERSION = 0x0400
+OPENMP_FLAG = /Qopenmp
+CPLUS_FLAGS += /DUSE_WINTHREAD /D_CRT_SECURE_NO_DEPRECATE \
+ /D_WIN32_WINNT=$(TARGET_VERSION)
+C_FLAGS = $(CPLUS_FLAGS) /TC
+
+VCVERSION:=$(runtime)
+VCCOMPAT_FLAG := $(if $(findstring vc7.1, $(VCVERSION)),/Qvc7.1)
+ifeq ($(VCCOMPAT_FLAG),)
+ VCCOMPAT_FLAG := $(if $(findstring vc8, $(VCVERSION)),/Qvc8)
+endif
+ifeq ($(VCCOMPAT_FLAG),)
+ $(error VC version not detected correctly: $(VCVERSION) )
+endif
+export VCCOMPAT_FLAG
+#------------------------------------------------------------------------------
+# End of setting compiler flags.
+#------------------------------------------------------------------------------
+
+
+#------------------------------------------------------------------------------
+# Setting assembler data.
+#------------------------------------------------------------------------------
+ASSEMBLY_SOURCE=$(arch)-masm
+ifeq (em64t,$(arch))
+ ASM=ml64
+ ASM_FLAGS += /c /Zi
+ TBB_ASM.OBJ = atomic_support.obj
+else
+ ASM=ml
+ ASM_FLAGS += /c /coff /Zi
+ TBB_ASM.OBJ = atomic_support.obj lock_byte.obj
+endif
+#------------------------------------------------------------------------------
+# End of setting assembler data.
+#------------------------------------------------------------------------------
+
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+M_CPLUS_FLAGS = $(subst EHsc,EHs-,$(CPLUS_FLAGS))
+M_INCLUDES = $(INCLUDES) /I$(MALLOC_ROOT) /I$(MALLOC_SOURCE_ROOT)
+M_CPLUS_FLAGS += /EHs- /GR-
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
+
+
+#------------------------------------------------------------------------------
+# End of define compiler-specific variables.
+#------------------------------------------------------------------------------
diff --git a/build/windows.inc b/build/windows.inc
new file mode 100644
index 0000000..1cd4645
--- /dev/null
+++ b/build/windows.inc
@@ -0,0 +1,73 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+ifdef tbb_build_dir
+ test_dir:=$(tbb_build_dir)
+else
+ test_dir:=.
+endif
+
+ifndef arch
+ export arch:=$(shell cmd /C "cscript /nologo /E:jscript $(tbb_root)/build/detect.js /arch")
+endif
+
+ifndef runtime
+ export runtime:=$(shell cmd /C "cscript /nologo /E:jscript $(tbb_root)/build/detect.js /runtime")
+endif
+
+native_compiler := cl
+export compiler ?= cl
+debugger ?= devenv /debugexe
+
+CWD=$(shell cmd /C echo %CD%)
+RM=cmd /C del /Q /F
+RD=cmd /C rmdir
+MD=cmd /c mkdir
+SLASH=\\
+NUL = >nul 2>&1
+
+INCLUDES += /I$(tbb_root)/src /I$(tbb_root)/include
+OBJ = obj
+DLL = dll
+LIBEXT = lib
+
+ifeq ($(cfg),debug)
+ DEBUG_SUFFIX = _debug
+endif
+
+TBB.DEF = $(tbb_root)/src/tbb/$(arch)-tbb.def
+TBB.DLL = tbb$(DEBUG_SUFFIX).dll
+TBB.LIB = tbb$(DEBUG_SUFFIX).lib
+TBB.RES = tbb_resource.res
+
+MALLOC.DEF = $(MALLOC_ROOT)/$(arch)-malloc.def
+MALLOC.DLL = tbbmalloc$(DEBUG_SUFFIX).dll
+MALLOC.LIB = tbbmalloc$(DEBUG_SUFFIX).lib
+MALLOC.RES = tbbmalloc.res
+
+
+MAKE_VERSIONS = cmd /C cscript /nologo /E:jscript $(tbb_root)/build/version_info_windows.js $(compiler) $(arch) "$(CPLUS) $(CPLUS_FLAGS) $(INCLUDES)" > version_string.tmp
+MAKE_TBBVARS = cmd /C "$(subst /,\,$(tbb_root))\build\generate_tbbvars.bat"
diff --git a/examples/GettingStarted/index.html b/examples/GettingStarted/index.html
new file mode 100644
index 0000000..a83766e
--- /dev/null
+++ b/examples/GettingStarted/index.html
@@ -0,0 +1,25 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory contains the examples referenced by the Threading Building Blocks Getting Started Guide.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="sub_string_finder/index.html">sub_string_finder</A>
+<DD>Finds largest matching substrings.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright © 2005-2007 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/examples/GettingStarted/sub_string_finder/Makefile b/examples/GettingStarted/sub_string_finder/Makefile
new file mode 100644
index 0000000..1fea7f8
--- /dev/null
+++ b/examples/GettingStarted/sub_string_finder/Makefile
@@ -0,0 +1,48 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# GNU Makefile that builds and runs example.
+
+# The C++ compiler
+#CXX=g++
+
+all: release test
+
+release: *.cpp
+ $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o sub_string_finder sub_string_finder.cpp -ltbb
+ $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o sub_string_finder_extended sub_string_finder_extended.cpp -ltbb
+ $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o sub_string_finder_pretty sub_string_finder_pretty.cpp -ltbb
+
+debug: *.cpp
+ $(CXX) -O0 -g -DTBB_DO_ASSERT $(CXXFLAGS) -o sub_string_finder sub_string_finder.cpp -ltbb_debug
+ $(CXX) -O0 -g -DTBB_DO_ASSERT $(CXXFLAGS) -o sub_string_finder_extended sub_string_finder_extended.cpp -ltbb_debug
+ $(CXX) -O0 -g -DTBB_DO_ASSERT $(CXXFLAGS) -o sub_string_finder_pretty sub_string_finder_pretty.cpp -ltbb_debug
+
+clean:
+ rm -f sub_string_finder sub_string_finder_extended sub_string_finder_pretty *.o *.d
+
+test:
+ ./sub_string_finder_extended
diff --git a/examples/GettingStarted/sub_string_finder/Makefile.windows b/examples/GettingStarted/sub_string_finder/Makefile.windows
new file mode 100644
index 0000000..349aa55
--- /dev/null
+++ b/examples/GettingStarted/sub_string_finder/Makefile.windows
@@ -0,0 +1,46 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Common Makefile that builds and runs examples.
+
+# The C++ compiler options
+CXX = cl.exe
+MYCXXFLAGS=/TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
+MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO $(LDFLAGS)
+
+all: release test
+release:
+ $(CXX) sub_string_finder.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(MYLDFLAGS) /OUT:sub_string_finder.exe
+ $(CXX) sub_string_finder_extended.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(MYLDFLAGS) /OUT:sub_string_finder_extended.exe
+ $(CXX) sub_string_finder_pretty.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(MYLDFLAGS) /OUT:sub_string_finder_pretty.exe
+debug:
+ $(CXX) sub_string_finder.cpp /MDd /Od /Zi /D TBB_DO_ASSERT /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(MYLDFLAGS) /OUT:sub_string_finder.exe
+ $(CXX) sub_string_finder_extended.cpp /MDd /Od /Zi /D TBB_DO_ASSERT /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(MYLDFLAGS) /OUT:sub_string_finder_extended.exe
+ $(CXX) sub_string_finder_pretty.cpp /MDd /Od /Zi /D TBB_DO_ASSERT /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(MYLDFLAGS) /OUT:sub_string_finder_pretty.exe
+clean:
+ @cmd.exe /C del sub_string_finder*.exe *.obj *.?db *.manifest
+test:
+ sub_string_finder_extended
diff --git a/examples/GettingStarted/sub_string_finder/index.html b/examples/GettingStarted/sub_string_finder/index.html
new file mode 100644
index 0000000..1aefa5f
--- /dev/null
+++ b/examples/GettingStarted/sub_string_finder/index.html
@@ -0,0 +1,64 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+A simple example that uses the parallel_for template in a substring matching program. For each position
+in a string, the program displays the length of the largest matching substring elsewhere in the string.
+The program also displays the location of a largest match for each position. Consider the string "babba"
+as an example. Starting at position 0, "ba" is the largest substring with a match elsewhere in the
+string (position 3).
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="sub_string_finder.cpp">sub_string_finder.cpp</A>
+<DD>The example as it appears in the Getting Started Guide.
+<DT><A HREF="sub_string_finder_extended.cpp">sub_string_finder_extended.cpp</A>
+<DD>An example similar to the one in the Getting Started Guide, but with an added sequential
+ implementation. The two implementations are both timed, by using tick_count,
+ and the speedup of the parallel version is calculated and displayed.
+<DT><A HREF="sub_string_finder_pretty.cpp">sub_string_finder_pretty.cpp</A>
+<DD>An example similar to the one in the Getting Started Guide, but with more attractive printing of the results.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="vc7.1">vc7.1</A>
+<DD>Contains Microsoft* Visual Studio* .NET 2003 workspace for building and running the example.
+<DT><A HREF="vc8">vc8</A>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example.
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+
+<H2>Usage</H2>
+<DL>
+<DT><TT>sub_string_finder</TT>
+<DD>Runs the example as it appears in the Getting Started Guide.
+<DT><TT>sub_string_finder_extended</TT>
+<DD>Runs the extended example with the added sequential implementation.
+<DT><TT>sub_string_finder_pretty</TT>
+<DD>Runs the similar example with more attractive printing of the results.
+<DT>To run a short version of this example, e.g., for use with Intel® Threading Tools:
+<DD>Build a <I>debug</I> version of the <TT>sub_string_finder_pretty</TT> example
+ (see the <A HREF=../../index.html#build>build directions</A>).
+ <BR>Run it, e.g., <TT>sub_string_finder_pretty</TT>.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright © 2005-2007 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/examples/GettingStarted/sub_string_finder/sub_string_finder.cpp b/examples/GettingStarted/sub_string_finder/sub_string_finder.cpp
new file mode 100644
index 0000000..a43879e
--- /dev/null
+++ b/examples/GettingStarted/sub_string_finder/sub_string_finder.cpp
@@ -0,0 +1,85 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include <iostream>
+#include <string>
+#include <algorithm>
+#include "tbb/task_scheduler_init.h"
+#include "tbb/parallel_for.h"
+#include "tbb/blocked_range.h"
+
+using namespace tbb;
+using namespace std;
+
+static const size_t N = 23;
+
+class SubStringFinder {
+ const string str;
+ size_t *max_array;
+ size_t *pos_array;
+ public:
+ void operator() ( const blocked_range<size_t>& r ) const {
+ for ( size_t i = r.begin(); i != r.end(); ++i ) {
+ size_t max_size = 0, max_pos = 0;
+ for (size_t j = 0; j < str.size(); ++j)
+ if (j != i) {
+ size_t limit = str.size()-( i > j ? i : j );
+ for (size_t k = 0; k < limit; ++k) {
+ if (str[i + k] != str[j + k]) break;
+ if (k > max_size) {
+ max_size = k;
+ max_pos = j;
+ }
+ }
+ }
+ max_array[i] = max_size;
+ pos_array[i] = max_pos;
+ }
+ }
+ SubStringFinder(string &s, size_t *m, size_t *p) :
+ str(s), max_array(m), pos_array(p) { }
+};
+
+int main(size_t argc, char *argv[]) {
+ task_scheduler_init init;
+
+ string str[N] = { string("a"), string("b") };
+ for (size_t i = 2; i < N; ++i) str[i] = str[i-1]+str[i-2];
+ string &to_scan = str[N-1];
+
+ size_t *max = new size_t[to_scan.size()];
+ size_t *pos = new size_t[to_scan.size()];
+
+ parallel_for(blocked_range<size_t>(0, to_scan.size(), 100),
+ SubStringFinder( to_scan, max, pos ) );
+
+ for (size_t i = 0; i < to_scan.size(); ++i)
+ cout << " " << (int)max[i] << "(" << (int)pos[i] << ")" << endl;
+ return 0;
+}
+
diff --git a/examples/GettingStarted/sub_string_finder/sub_string_finder_extended.cpp b/examples/GettingStarted/sub_string_finder/sub_string_finder_extended.cpp
new file mode 100644
index 0000000..a87e1c3
--- /dev/null
+++ b/examples/GettingStarted/sub_string_finder/sub_string_finder_extended.cpp
@@ -0,0 +1,124 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include <iostream>
+#include <string>
+#include <algorithm>
+#include "tbb/task_scheduler_init.h"
+#include "tbb/parallel_for.h"
+#include "tbb/blocked_range.h"
+#include "tbb/tick_count.h"
+
+using namespace tbb;
+using namespace std;
+static const size_t N = 22;
+
+void SerialSubStringFinder ( const string &str, size_t *max_array, size_t *pos_array) {
+ for ( size_t i = 0; i < str.size(); ++i ) {
+ size_t max_size = 0, max_pos = 0;
+ for (size_t j = 0; j < str.size(); ++j)
+ if (j != i) {
+ size_t limit = str.size()-( i > j ? i : j );
+ for (size_t k = 0; k < limit; ++k) {
+ if (str[i + k] != str[j + k]) break;
+ if (k > max_size) {
+ max_size = k;
+ max_pos = j;
+ }
+ }
+ }
+ max_array[i] = max_size;
+ pos_array[i] = max_pos;
+ }
+}
+
+class SubStringFinder {
+ const string str;
+ size_t *max_array;
+ size_t *pos_array;
+ public:
+ void operator() ( const blocked_range<size_t>& r ) const {
+ for ( size_t i = r.begin(); i != r.end(); ++i ) {
+ size_t max_size = 0, max_pos = 0;
+ for (size_t j = 0; j < str.size(); ++j)
+ if (j != i) {
+ size_t limit = str.size()-( i > j ? i : j );
+ for (size_t k = 0; k < limit; ++k) {
+ if (str[i + k] != str[j + k]) break;
+ if (k > max_size) {
+ max_size = k;
+ max_pos = j;
+ }
+ }
+ }
+ max_array[i] = max_size;
+ pos_array[i] = max_pos;
+ }
+ }
+ SubStringFinder(string &s, size_t *m, size_t *p) :
+ str(s), max_array(m), pos_array(p) { }
+};
+
+int main(size_t argc, char *argv[]) {
+ task_scheduler_init init;
+
+ string str[N] = { string("a"), string("b") };
+ for (size_t i = 2; i < N; ++i) str[i] = str[i-1]+str[i-2];
+ string &to_scan = str[N-1];
+
+ size_t *max = new size_t[to_scan.size()];
+ size_t *max2 = new size_t[to_scan.size()];
+ size_t *pos = new size_t[to_scan.size()];
+ size_t *pos2 = new size_t[to_scan.size()];
+ cout << " Done building string." << endl;
+
+
+ tick_count serial_t0 = tick_count::now();
+ SerialSubStringFinder(to_scan, max2, pos2);
+ tick_count serial_t1 = tick_count::now();
+ cout << " Done with serial version." << endl;
+
+ tick_count parallel_t0 = tick_count::now();
+ parallel_for(blocked_range<size_t>(0, to_scan.size(), 100),
+ SubStringFinder( to_scan, max, pos ) );
+ tick_count parallel_t1 = tick_count::now();
+ cout << " Done with parallel version." << endl;
+
+ for (size_t i = 0; i < to_scan.size(); ++i) {
+ if (max[i] != max2[i] || pos[i] != pos2[i]) {
+ cout << "ERROR: Serial and Parallel Results are Different!" << endl;
+ }
+ }
+ cout << " Done validating results." << endl;
+
+ cout << "Serial version ran in " << (serial_t1 - serial_t0).seconds() << " seconds" << endl
+ << "Parallel version ran in " << (parallel_t1 - parallel_t0).seconds() << " seconds" << endl
+ << "Resulting in a speedup of " << (serial_t1 - serial_t0).seconds() / (parallel_t1 - parallel_t0).seconds() << endl;
+ return 0;
+}
+
diff --git a/examples/GettingStarted/sub_string_finder/sub_string_finder_pretty.cpp b/examples/GettingStarted/sub_string_finder/sub_string_finder_pretty.cpp
new file mode 100644
index 0000000..8d7d05f
--- /dev/null
+++ b/examples/GettingStarted/sub_string_finder/sub_string_finder_pretty.cpp
@@ -0,0 +1,95 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include <iostream>
+#include <string>
+#include <algorithm>
+#include "tbb/task_scheduler_init.h"
+#include "tbb/parallel_for.h"
+#include "tbb/blocked_range.h"
+
+using namespace tbb;
+static const size_t N = 9;
+
+class SubStringFinder {
+ const std::string str;
+ size_t *max_array;
+ size_t *pos_array;
+ public:
+ void operator() ( const blocked_range<size_t>& r ) const {
+ for ( size_t i = r.begin(); i != r.end(); ++i ) {
+ size_t max_size = 0, max_pos = 0;
+ for (size_t j = 0; j < str.size(); ++j)
+ if (j != i) {
+ size_t limit = str.size()-( i > j ? i : j );
+ for (size_t k = 0; k < limit; ++k) {
+ if (str[i + k] != str[j + k]) break;
+ if (k+1 > max_size) {
+ max_size = k+1;
+ max_pos = j;
+ }
+ }
+ }
+ max_array[i] = max_size;
+ pos_array[i] = max_pos;
+ }
+ }
+ SubStringFinder(std::string &s, size_t *m, size_t *p) :
+ str(s), max_array(m), pos_array(p) { }
+};
+
+int main(size_t argc, char *argv[]) {
+ task_scheduler_init init;
+
+ std::string str[N] = { std::string("a"), std::string("b") };
+ for (size_t i = 2; i < N; ++i) str[i] = str[i-1]+str[i-2];
+ std::string &to_scan = str[N-1];
+ std::cout << "String to scan: " << to_scan << std::endl;
+
+ size_t *max = new size_t[to_scan.size()];
+ size_t *pos = new size_t[to_scan.size()];
+
+ parallel_for(blocked_range<size_t>(0, to_scan.size(), 100),
+ SubStringFinder( to_scan, max, pos ) );
+
+ for (size_t i = 0; i < to_scan.size(); ++i) {
+ for (size_t j = 0; j < to_scan.size(); ++j) {
+ if (j >= i && j < i + max[i]) std::cout << "_";
+ else std::cout << " ";
+ }
+ std::cout << std::endl << to_scan << std::endl;
+
+ for (size_t j = 0; j < to_scan.size(); ++j) {
+ if (j >= pos[i] && j < pos[i] + max[i]) std::cout << "*";
+ else std::cout << " ";
+ }
+ std::cout << std::endl;
+ }
+ return 0;
+}
+
diff --git a/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder.sln b/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder.sln
new file mode 100644
index 0000000..8d55e19
--- /dev/null
+++ b/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder.sln
@@ -0,0 +1,40 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sub_string_finder", "sub_string_finder.vcproj", "{C64078BC-8A63-4C3D-B48D-ECC2B60E75E6}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sub_string_finder_pretty", "sub_string_finder_pretty.vcproj", "{8DCA120F-7D8C-4D43-A939-9403F03D3F45}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sub_string_finder_extended", "sub_string_finder_extended.vcproj", "{2607C858-EE23-429D-BCCC-D89D2A5EDFFE}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {C64078BC-8A63-4C3D-B48D-ECC2B60E75E6}.Debug.ActiveCfg = Debug|Win32
+ {C64078BC-8A63-4C3D-B48D-ECC2B60E75E6}.Debug.Build.0 = Debug|Win32
+ {C64078BC-8A63-4C3D-B48D-ECC2B60E75E6}.Release.ActiveCfg = Release|Win32
+ {C64078BC-8A63-4C3D-B48D-ECC2B60E75E6}.Release.Build.0 = Release|Win32
+ {8DCA120F-7D8C-4D43-A939-9403F03D3F45}.Debug.ActiveCfg = Debug|Win32
+ {8DCA120F-7D8C-4D43-A939-9403F03D3F45}.Debug.Build.0 = Debug|Win32
+ {8DCA120F-7D8C-4D43-A939-9403F03D3F45}.Release.ActiveCfg = Release|Win32
+ {8DCA120F-7D8C-4D43-A939-9403F03D3F45}.Release.Build.0 = Release|Win32
+ {2607C858-EE23-429D-BCCC-D89D2A5EDFFE}.Debug.ActiveCfg = Debug|Win32
+ {2607C858-EE23-429D-BCCC-D89D2A5EDFFE}.Debug.Build.0 = Debug|Win32
+ {2607C858-EE23-429D-BCCC-D89D2A5EDFFE}.Release.ActiveCfg = Release|Win32
+ {2607C858-EE23-429D-BCCC-D89D2A5EDFFE}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionItems) = postSolution
+ ..\index.html = ..\index.html
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder.suo b/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder.suo
new file mode 100644
index 0000000..47fb326
Binary files /dev/null and b/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder.suo differ
diff --git a/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder.vcproj b/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder.vcproj
new file mode 100644
index 0000000..e3ad67f
--- /dev/null
+++ b/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder.vcproj
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="sub_string_finder"
+ ProjectGUID="{C64078BC-8A63-4C3D-B48D-ECC2B60E75E6}"
+ RootNamespace="sub_string_finder"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+ <File
+ RelativePath="..\sub_string_finder.cpp">
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder_extended.vcproj b/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder_extended.vcproj
new file mode 100644
index 0000000..b98e11c
--- /dev/null
+++ b/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder_extended.vcproj
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="sub_string_finder_extended"
+ ProjectGUID="{2607C858-EE23-429D-BCCC-D89D2A5EDFFE}"
+ RootNamespace="sub_string_finder_extended"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+ <File
+ RelativePath="..\sub_string_finder_extended.cpp">
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder_pretty.vcproj b/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder_pretty.vcproj
new file mode 100644
index 0000000..4bbf8a5
--- /dev/null
+++ b/examples/GettingStarted/sub_string_finder/vc7.1/sub_string_finder_pretty.vcproj
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="sub_string_finder_pretty"
+ ProjectGUID="{8DCA120F-7D8C-4D43-A939-9403F03D3F45}"
+ RootNamespace="sub_string_finder_pretty"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+ <File
+ RelativePath="..\sub_string_finder_pretty.cpp">
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.sln b/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.sln
new file mode 100644
index 0000000..fc96ac1
--- /dev/null
+++ b/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.sln
@@ -0,0 +1,50 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sub_string_finder", "sub_string_finder.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A2525}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sub_string_finder_extended", "sub_string_finder_extended.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A2526}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sub_string_finder_pretty", "sub_string_finder_pretty.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A2524}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{A26B588D-97F7-4466-9672-8A7E3173FBA1}"
+ ProjectSection(SolutionItems) = preProject
+ ..\index.html = ..\index.html
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|Win32.Build.0 = Debug|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|x64.ActiveCfg = Debug|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A2525}.Debug|x64.Build.0 = Debug|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|Win32.ActiveCfg = Release|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|Win32.Build.0 = Release|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|x64.ActiveCfg = Release|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A2525}.Release|x64.Build.0 = Release|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|Win32.Build.0 = Debug|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|x64.ActiveCfg = Debug|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A2526}.Debug|x64.Build.0 = Debug|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|Win32.ActiveCfg = Release|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|Win32.Build.0 = Release|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|x64.ActiveCfg = Release|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A2526}.Release|x64.Build.0 = Release|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|Win32.Build.0 = Debug|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|x64.ActiveCfg = Debug|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A2524}.Debug|x64.Build.0 = Debug|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|Win32.ActiveCfg = Release|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|Win32.Build.0 = Release|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|x64.ActiveCfg = Release|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A2524}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.suo b/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.suo
new file mode 100644
index 0000000..9ad071b
Binary files /dev/null and b/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.suo differ
diff --git a/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.vcproj b/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.vcproj
new file mode 100644
index 0000000..9e992d7
--- /dev/null
+++ b/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder.vcproj
@@ -0,0 +1,348 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="sub_string_finder"
+ ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A2525}"
+ RootNamespace="sub_string_finder"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\sub_string_finder.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder_extended.vcproj b/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder_extended.vcproj
new file mode 100644
index 0000000..1a9c4fe
--- /dev/null
+++ b/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder_extended.vcproj
@@ -0,0 +1,348 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="sub_string_finder_extended"
+ ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A2526}"
+ RootNamespace="sub_string_finder_extended"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\sub_string_finder_extended.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder_pretty.vcproj b/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder_pretty.vcproj
new file mode 100644
index 0000000..5d1d9e2
--- /dev/null
+++ b/examples/GettingStarted/sub_string_finder/vc8/sub_string_finder_pretty.vcproj
@@ -0,0 +1,348 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="sub_string_finder_pretty"
+ ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A2524}"
+ RootNamespace="sub_string_finder_pretty"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\sub_string_finder_pretty.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/GettingStarted/sub_string_finder/xcode/sub_string_finder.xcodeproj/project.pbxproj b/examples/GettingStarted/sub_string_finder/xcode/sub_string_finder.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..0800395
--- /dev/null
+++ b/examples/GettingStarted/sub_string_finder/xcode/sub_string_finder.xcodeproj/project.pbxproj
@@ -0,0 +1,566 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 42;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ A1F593A60B8F042A00073279 /* sub_string_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* sub_string_finder.cpp */; };
+ A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+ A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+ A1F594120B8F1E0C00073279 /* sub_string_finder_pretty.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F594110B8F1E0C00073279 /* sub_string_finder_pretty.cpp */; };
+ A1F594130B8F1E1700073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+ A1F594160B8F1E8000073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+ A1F594240B8F1F5F00073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+ A1F594250B8F1F6800073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+ A1F594270B8F1F8100073279 /* sub_string_finder_extended.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F594260B8F1F8100073279 /* sub_string_finder_extended.cpp */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 8DD76F690486A84900D96B5E /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 12;
+ dstPath = "";
+ dstSubfolderSpec = 16;
+ files = (
+ A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A1F594140B8F1E2D00073279 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 16;
+ files = (
+ A1F594160B8F1E8000073279 /* libtbb.dylib in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A1F5941D0B8F1F2D00073279 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 16;
+ files = (
+ A1F594250B8F1F6800073279 /* libtbb.dylib in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 8DD76F6C0486A84900D96B5E /* sub_string_finder */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sub_string_finder; sourceTree = BUILT_PRODUCTS_DIR; };
+ A1F593A50B8F042A00073279 /* sub_string_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = sub_string_finder.cpp; path = ../sub_string_finder.cpp; sourceTree = SOURCE_ROOT; };
+ A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+ A1F5940A0B8F1D8E00073279 /* sub_string_finder_pretty */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sub_string_finder_pretty; sourceTree = BUILT_PRODUCTS_DIR; };
+ A1F594110B8F1E0C00073279 /* sub_string_finder_pretty.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = sub_string_finder_pretty.cpp; path = ../sub_string_finder_pretty.cpp; sourceTree = SOURCE_ROOT; };
+ A1F5941B0B8F1F0900073279 /* sub_string_finder_extended */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sub_string_finder_extended; sourceTree = BUILT_PRODUCTS_DIR; };
+ A1F594260B8F1F8100073279 /* sub_string_finder_extended.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = sub_string_finder_extended.cpp; path = ../sub_string_finder_extended.cpp; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8DD76F660486A84900D96B5E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A1F594080B8F1D8E00073279 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F594130B8F1E1700073279 /* libtbb.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A1F594190B8F1F0900073279 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F594240B8F1F5F00073279 /* libtbb.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 08FB7794FE84155DC02AAC07 /* sub_string_finder */ = {
+ isa = PBXGroup;
+ children = (
+ 08FB7795FE84155DC02AAC07 /* Source */,
+ A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+ 1AB674ADFE9D54B511CA2CBB /* Products */,
+ );
+ name = sub_string_finder;
+ sourceTree = "<group>";
+ };
+ 08FB7795FE84155DC02AAC07 /* Source */ = {
+ isa = PBXGroup;
+ children = (
+ A1F594260B8F1F8100073279 /* sub_string_finder_extended.cpp */,
+ A1F594110B8F1E0C00073279 /* sub_string_finder_pretty.cpp */,
+ A1F593A50B8F042A00073279 /* sub_string_finder.cpp */,
+ );
+ name = Source;
+ sourceTree = "<group>";
+ };
+ 1AB674ADFE9D54B511CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8DD76F6C0486A84900D96B5E /* sub_string_finder */,
+ A1F5940A0B8F1D8E00073279 /* sub_string_finder_pretty */,
+ A1F5941B0B8F1F0900073279 /* sub_string_finder_extended */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ A1F593B30B8F06F900073279 /* libtbb.dylib */,
+ );
+ name = "External Frameworks and Libraries";
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8DD76F620486A84900D96B5E /* sub_string_finder */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "sub_string_finder" */;
+ buildPhases = (
+ 8DD76F640486A84900D96B5E /* Sources */,
+ 8DD76F660486A84900D96B5E /* Frameworks */,
+ 8DD76F690486A84900D96B5E /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = sub_string_finder;
+ productInstallPath = "$(HOME)/bin";
+ productName = sub_string_finder;
+ productReference = 8DD76F6C0486A84900D96B5E /* sub_string_finder */;
+ productType = "com.apple.product-type.tool";
+ };
+ A1F594090B8F1D8E00073279 /* sub_string_finder_pretty */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = A1F5940C0B8F1DB600073279 /* Build configuration list for PBXNativeTarget "sub_string_finder_pretty" */;
+ buildPhases = (
+ A1F594070B8F1D8E00073279 /* Sources */,
+ A1F594080B8F1D8E00073279 /* Frameworks */,
+ A1F594140B8F1E2D00073279 /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = sub_string_finder_pretty;
+ productName = sub_string_finder_pretty;
+ productReference = A1F5940A0B8F1D8E00073279 /* sub_string_finder_pretty */;
+ productType = "com.apple.product-type.tool";
+ };
+ A1F5941A0B8F1F0900073279 /* sub_string_finder_extended */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = A1F5941F0B8F1F4E00073279 /* Build configuration list for PBXNativeTarget "sub_string_finder_extended" */;
+ buildPhases = (
+ A1F594180B8F1F0900073279 /* Sources */,
+ A1F594190B8F1F0900073279 /* Frameworks */,
+ A1F5941D0B8F1F2D00073279 /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = sub_string_finder_extended;
+ productName = sub_string_finder_extended;
+ productReference = A1F5941B0B8F1F0900073279 /* sub_string_finder_extended */;
+ productType = "com.apple.product-type.tool";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 08FB7793FE84155DC02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "sub_string_finder" */;
+ hasScannedForEncodings = 1;
+ mainGroup = 08FB7794FE84155DC02AAC07 /* sub_string_finder */;
+ projectDirPath = "";
+ targets = (
+ A1F5941A0B8F1F0900073279 /* sub_string_finder_extended */,
+ A1F594090B8F1D8E00073279 /* sub_string_finder_pretty */,
+ 8DD76F620486A84900D96B5E /* sub_string_finder */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8DD76F640486A84900D96B5E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F593A60B8F042A00073279 /* sub_string_finder.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A1F594070B8F1D8E00073279 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F594120B8F1E0C00073279 /* sub_string_finder_pretty.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A1F594180B8F1F0900073279 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F594270B8F1F8100073279 /* sub_string_finder_extended.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 1DEB923208733DC60010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = sub_string_finder;
+ ZERO_LINK = NO;
+ };
+ name = Debug;
+ };
+ 1DEB923308733DC60010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = sub_string_finder;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 1DEB923608733DC60010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Debug;
+ };
+ 1DEB923708733DC60010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Release;
+ };
+ A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = sub_string_finder;
+ ZERO_LINK = NO;
+ };
+ name = Debug64;
+ };
+ A1F593C70B8F0E6E00073279 /* Release64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = sub_string_finder;
+ ZERO_LINK = NO;
+ };
+ name = Release64;
+ };
+ A1F593C80B8F0E6E00073279 /* Debug64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-m64",
+ );
+ OTHER_LDFLAGS = "-m64";
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Debug64;
+ };
+ A1F593C90B8F0E6E00073279 /* Release64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-m64",
+ );
+ OTHER_LDFLAGS = "-m64";
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Release64;
+ };
+ A1F5940D0B8F1DB600073279 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PREBINDING = NO;
+ PRODUCT_NAME = sub_string_finder_pretty;
+ ZERO_LINK = NO;
+ };
+ name = Debug;
+ };
+ A1F5940E0B8F1DB600073279 /* Debug64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PREBINDING = NO;
+ PRODUCT_NAME = sub_string_finder_pretty;
+ ZERO_LINK = NO;
+ };
+ name = Debug64;
+ };
+ A1F5940F0B8F1DB600073279 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PREBINDING = NO;
+ PRODUCT_NAME = sub_string_finder_pretty;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ A1F594100B8F1DB600073279 /* Release64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PREBINDING = NO;
+ PRODUCT_NAME = sub_string_finder_pretty;
+ ZERO_LINK = NO;
+ };
+ name = Release64;
+ };
+ A1F594200B8F1F4E00073279 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PREBINDING = NO;
+ PRODUCT_NAME = sub_string_finder_extended;
+ ZERO_LINK = NO;
+ };
+ name = Debug;
+ };
+ A1F594210B8F1F4E00073279 /* Debug64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PREBINDING = NO;
+ PRODUCT_NAME = sub_string_finder_extended;
+ ZERO_LINK = NO;
+ };
+ name = Debug64;
+ };
+ A1F594220B8F1F4E00073279 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PREBINDING = NO;
+ PRODUCT_NAME = sub_string_finder_extended;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ A1F594230B8F1F4E00073279 /* Release64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PREBINDING = NO;
+ PRODUCT_NAME = sub_string_finder_extended;
+ ZERO_LINK = NO;
+ };
+ name = Release64;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "sub_string_finder" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB923208733DC60010E9CD /* Debug */,
+ A1F593C60B8F0E6E00073279 /* Debug64 */,
+ 1DEB923308733DC60010E9CD /* Release */,
+ A1F593C70B8F0E6E00073279 /* Release64 */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "sub_string_finder" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB923608733DC60010E9CD /* Debug */,
+ A1F593C80B8F0E6E00073279 /* Debug64 */,
+ 1DEB923708733DC60010E9CD /* Release */,
+ A1F593C90B8F0E6E00073279 /* Release64 */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ A1F5940C0B8F1DB600073279 /* Build configuration list for PBXNativeTarget "sub_string_finder_pretty" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ A1F5940D0B8F1DB600073279 /* Debug */,
+ A1F5940E0B8F1DB600073279 /* Debug64 */,
+ A1F5940F0B8F1DB600073279 /* Release */,
+ A1F594100B8F1DB600073279 /* Release64 */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ A1F5941F0B8F1F4E00073279 /* Build configuration list for PBXNativeTarget "sub_string_finder_extended" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ A1F594200B8F1F4E00073279 /* Debug */,
+ A1F594210B8F1F4E00073279 /* Debug64 */,
+ A1F594220B8F1F4E00073279 /* Release */,
+ A1F594230B8F1F4E00073279 /* Release64 */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/examples/Makefile b/examples/Makefile
new file mode 100644
index 0000000..f1127b3
--- /dev/null
+++ b/examples/Makefile
@@ -0,0 +1,106 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# This file should be always located and called in $(tbb_root)/examples
+
+tbb_root?=..
+BUILDING_PHASE:=0
+include ../build/common.inc
+
+ifneq ($(firstword is_abs_path$(subst /, ,$(tbb_root))),is_abs_path)
+ # also changes related variables like work_dir
+ override tbb_root := $(CWD)$(SLASH)..
+ export TBB20_INSTALL_DIR := $(tbb_root)
+endif
+
+ifeq ($(tbb_os),windows)
+ EXAMPLE_MAKEFILE = Makefile.windows
+ EXAMPLES = $(wildcard */*/$(EXAMPLE_MAKEFILE))
+ EXAMPLE_MAKEFILE := $(if $(EXAMPLES),Makefile.windows,Makefile)
+ work_dir := $(subst /,$(SLASH),$(work_dir))
+ export PATH := $(work_dir)_release;$(work_dir)_debug;$(PATH)
+ export LIB := $(work_dir)_release;$(work_dir)_debug;$(LIB)
+ export INCLUDE := $(tbb_root)$(SLASH)include;$(INCLUDE)
+ export TBB_ARCH_PLATFORM = $(arch)\$(runtime)
+else
+ EXAMPLE_MAKEFILE = Makefile
+ EXAMPLES := $(wildcard */*/$(EXAMPLE_MAKEFILE))
+ # platform-specific settings
+ ifeq ($(arch),itanium)
+ export CXXFLAGS += $(PIC_KEY)
+ endif
+ ifeq ($(compiler),gcc)
+ ifeq ($(arch),em64t)
+ export CXXFLAGS += -m64
+ endif
+ ifeq ($(arch),ia32)
+ export CXXFLAGS += -m32
+ endif
+ ifeq ($(arch),ppc64)
+ export CXXFLAGS += -m64
+ endif
+ ifeq ($(arch),ppc32)
+ export CXXFLAGS += -m32
+ endif
+ endif
+ ifeq ($(tbb_os),macos)
+ ifeq ($(arch),em64t)
+ # making GUI examples work in text console due to incompatible arch
+ export UI=con
+ endif
+ ifeq ($(arch),ppc64)
+ # making GUI examples work in text console due to incompatible arch
+ export UI=con
+ endif
+ export DYLD_LIBRARY_PATH := $(DYLD_LIBRARY_PATH):$(work_dir)_release:$(work_dir)_debug
+ else
+ export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH):$(work_dir)_release:$(work_dir)_debug
+ endif
+ export LIBRARY_PATH := $(LIBRARY_PATH):$(work_dir)_release:$(work_dir)_debug
+ export CPATH := $(CPATH):$(tbb_root)/include
+endif
+
+COMMON_TARGETS := all clean release debug test
+EXAMPLES_TARGETS := $(foreach T,$(COMMON_TARGETS),$(addsuffix _target.$(T),$(EXAMPLES)))
+
+.PHONY: $(COMMON_TARGETS) $(EXAMPLES_TARGETS)
+
+.DEFAULT: all
+
+$(COMMON_TARGETS):: % : $(addsuffix _target.%,$(EXAMPLES))
+
+$(EXAMPLES_TARGETS)::
+ -$(MAKE) -C $(@D) -f $(EXAMPLE_MAKEFILE) $(subst .,,$(suffix $@)) CXX="$(CPLUS)"
+
+printenv:
+ifeq ($(tbb_os),windows)
+ @cmd /C set PATH
+ @cmd /C set LIB
+ @cmd /C set INCLUDE
+else
+ @env | grep PATH
+endif
+
diff --git a/examples/common/gui/Makefile.win b/examples/common/gui/Makefile.win
new file mode 100644
index 0000000..57a176a
--- /dev/null
+++ b/examples/common/gui/Makefile.win
@@ -0,0 +1,79 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Per-build Makefile rules (for recursive $(MAKE) calls from Makefile)
+
+# Base compile/link options
+MYCXXFLAGS = /nologo $(TBB_SECURITY_SWITCH) /EHsc /Zc:forScope /D WIN32 /D _CRT_SECURE_NO_DEPRECATE $(CXXFLAGS)
+MYLFLAGS = /link /incremental:no /fixed:no $(LFLAGS)
+CXXFLAGS_NDEBUG = /MD /O2 /Oy /Ot /Gy /D NDEBUG
+CXXFLAGS_DEBUG = /MDd /Od /Zi /D _DEBUG
+
+# Specify library directory for Direct X SDK
+DDLIB_DIR=$(DXSDK_DIR)\lib\$(XARCH:AMD64=x64)
+
+# Input and output files
+#SOURCE = v
+#RCNAME = specified externaly
+#EXE = ^
+# defaults on XARCH = x86
+UISRC = ../../common/gui/$(UI)video.cpp
+
+default:
+
+build_echo:
+ - at echo Building$(DEBUG) $(EXE) with UI=$(UI) XARCH=$(XARCH)
+
+build_one: build_echo build_$(UI)$(DEBUG)
+
+build_con: $(SOURCE) $(UISRC)
+ $(CXX) $(CXXFLAGS_NDEBUG) $(MYCXXFLAGS) $(SOURCE) $(UISRC) $(MYLFLAGS) /subsystem:console /OUT:$(EXE)
+ @cmd.exe /C del *.obj
+
+build_con_debug: $(SOURCE) $(UISRC)
+ $(CXX) $(CXXFLAGS_DEBUG) $(MYCXXFLAGS) $(SOURCE) $(UISRC) $(MYLFLAGS) /debug /subsystem:console /OUT:$(EXE)
+ @cmd.exe /C del *.obj
+
+build_gdi: $(SOURCE) $(UISRC) vc7.1/$(RCNAME).res
+ $(CXX) $(CXXFLAGS_NDEBUG) /D _WINDOWS $(MYCXXFLAGS) $(SOURCE) $(UISRC) $(MYLFLAGS) vc7.1/$(RCNAME).res /subsystem:windows /machine:$(XARCH) /OUT:$(EXE)
+ @cmd.exe /C del *.obj
+
+build_gdi_debug: $(SOURCE) $(UISRC) vc7.1/$(RCNAME).res
+ $(CXX) $(CXXFLAGS_DEBUG) /D _WINDOWS $(MYCXXFLAGS) $(SOURCE) $(UISRC) $(MYLFLAGS) vc7.1/$(RCNAME).res /debug /subsystem:windows /machine:$(XARCH) /OUT:$(EXE)
+ @cmd.exe /C del *.obj
+
+build_dd: $(SOURCE) $(UISRC) vc7.1/$(RCNAME).res
+ - at echo Using DirectX SDK from "$(DDLIB_DIR)"
+ $(CXX) $(CXXFLAGS_NDEBUG) /D _WINDOWS $(MYCXXFLAGS) /I "$(DXSDK_DIR)\include" $(SOURCE) $(UISRC) $(MYLFLAGS) /LIBPATH:"$(DDLIB_DIR)" vc7.1/$(RCNAME).res /subsystem:windows /machine:$(XARCH) /OUT:$(EXE)
+ @cmd.exe /C del *.obj
+
+build_dd_debug: $(SOURCE) $(UISRC) vc7.1/$(RCNAME).res
+ - at echo Using DirectX SDK from "$(DDLIB_DIR)"
+ $(CXX) $(CXXFLAGS_DEBUG) /D _WINDOWS $(MYCXXFLAGS) /I "$(DXSDK_DIR)\include" $(SOURCE) $(UISRC) $(MYLFLAGS) /LIBPATH:"$(DDLIB_DIR)" vc7.1/$(RCNAME).res /debug /subsystem:windows /machine:$(XARCH) /OUT:$(EXE)
+ @cmd.exe /C del *.obj
+
+vc7.1/$(RCNAME).res:
+ rc /r vc7.1/$(RCNAME)
diff --git a/examples/common/gui/convideo.cpp b/examples/common/gui/convideo.cpp
new file mode 100644
index 0000000..5db09fc
--- /dev/null
+++ b/examples/common/gui/convideo.cpp
@@ -0,0 +1,138 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "video.h"
+#include <cassert>
+#include <stdio.h>
+
+unsigned int * g_pImg = 0;
+int g_sizex, g_sizey;
+static video *g_video = 0;
+static int g_fps = 0;
+#if _WIN32 || _WIN64
+static DWORD g_msec = 0;
+
+#ifdef _WINDOWS
+HINSTANCE video::win_hInstance = 0;
+int video::win_iCmdShow = 0;
+void video::win_set_class(WNDCLASSEX &wcex)
+{
+}
+void video::win_load_accelerators(int idc)
+{
+}
+#endif
+
+#elif __linux__ || __APPLE__
+
+#include <sched.h>
+#include <sys/time.h>
+struct timeval g_time;
+#endif
+
+video::video()
+ : red_mask(0xff0000), red_shift(16), green_mask(0xff00),
+ green_shift(8), blue_mask(0xff), blue_shift(0), depth(24)
+{
+ assert(g_video == 0);
+ g_video = this; title = "Video"; updating = calc_fps = false;
+}
+
+bool video::init_window(int x, int y)
+{
+ g_sizex = x; g_sizey = y;
+ g_pImg = new unsigned int[x*y];
+ running = true;
+ return false;
+}
+
+bool video::init_console()
+{
+ running = true;
+ return true;
+}
+
+void video::terminate()
+{
+ if(calc_fps) {
+ double fps = g_fps;
+#if _WIN32 || _WIN64
+ fps /= (GetTickCount()-g_msec)/1000.0;
+#else
+ struct timezone tz; struct timeval end_time; gettimeofday(&end_time, &tz);
+ fps /= (end_time.tv_sec+1.0*end_time.tv_usec/1000000.0) - (g_time.tv_sec+1.0*g_time.tv_usec/1000000.0);
+#endif
+ printf("%s: %.1f fps\n", title, fps);
+ }
+ g_video = 0; running = false;
+ if(g_pImg) { delete[] g_pImg; g_pImg = 0; }
+}
+
+video::~video()
+{
+ if(g_video) terminate();
+}
+
+//! Count and display FPS count in titlebar
+bool video::next_frame()
+{
+ if(!g_fps) {
+#if _WIN32 || _WIN64
+ g_msec = GetTickCount();
+#else
+ struct timezone tz; gettimeofday(&g_time, &tz);
+#endif
+ }
+ g_fps++;
+ return running;
+}
+
+//! Do standart loop
+void video::main_loop()
+{
+ on_process();
+}
+
+//! Change window title
+void video::show_title()
+{
+}
+
+///////////////////////////////////////////// public methods of video class ///////////////////////
+
+drawing_area::drawing_area(int x, int y, int sizex, int sizey)
+ : start_x(x), start_y(y), size_x(sizex), size_y(sizey), pixel_depth(24),
+ base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex), ptr32(g_pImg)
+{
+ assert(x < g_sizex); assert(y < g_sizey);
+ assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);
+
+ index = base_index; // current index
+}
+
+drawing_area::~drawing_area() {}
diff --git a/examples/common/gui/ddvideo.cpp b/examples/common/gui/ddvideo.cpp
new file mode 100644
index 0000000..3060168
--- /dev/null
+++ b/examples/common/gui/ddvideo.cpp
@@ -0,0 +1,574 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+// common Windows parts
+#include "winvideo.h"
+// and another headers
+#include <cassert>
+#include <stdio.h>
+#include <ddraw.h>
+
+#pragma comment(lib, "ddraw.lib")
+#pragma comment(lib, "dxguid.lib")
+
+LPDIRECTDRAW7 g_pDD = NULL; // DirectDraw object
+LPDIRECTDRAWSURFACE7 g_pDDSPrimary = NULL;// DirectDraw primary surface
+LPDIRECTDRAWSURFACE7 g_pDDSBack = NULL; // DirectDraw back surface
+LPDIRECTDRAWSURFACE7 g_pDDSOverlay = NULL;// DirectDraw overlay surface
+LPDIRECTDRAWCLIPPER g_pClipper = NULL; // DirectDraw clipping struct
+DDOVERLAYFX g_OverlayFX; // DirectDraw overlay effects struct
+DDCAPS g_DDCaps; // DirectDraw hardware capabilities struct
+DWORD g_OverlayFlags = 0; // DirectDraw overlay flags variable
+DWORD g_dwXRatio,
+ g_dwYRatio; // The ratios between the src and dst rects
+RECT g_rcSrc = {0, 0, 0, 0},
+ g_rcDst = {0, 0, 0, 0};
+HANDLE g_hVSync;
+
+// check for new DX SDK (8 & 9)
+#ifdef DDSCAPS_PRIMARYSURFACELEFT
+#include <dxerr8.h>
+#pragma comment(lib, "dxerr8.lib")
+#else
+// old SDK (7)
+#include <d3dx.h>
+#pragma comment(lib, "d3dx.lib")
+#endif
+
+//! Create a dialog box and tell the user what went wrong
+bool DisplayError(LPSTR lpstrErr, HRESULT hres)
+{
+ static bool InError = false;
+ int retval = 0;
+ if (!InError)
+ {
+ InError = true;
+#ifdef DDSCAPS_PRIMARYSURFACELEFT
+ const char *message = hres?DXGetErrorString8A(hres):0;
+#else
+ char message[256]; if(hres) D3DXGetErrorString(hres, 256, message);
+#endif
+ retval = MessageBoxA(g_hAppWnd, lpstrErr, hres?message:"Error!", MB_OK|MB_ICONERROR);
+ InError = false;
+ }
+ return false;
+}
+
+//! Releases the overlay surface
+void DestroyOverlay()
+{
+ if (g_pClipper)
+ g_pClipper->Release();
+ if (g_pDDSOverlay) {
+ g_pImg = 0; LPDIRECTDRAWSURFACE7 pDDSOverlay(g_pDDSOverlay);
+ g_pDDSOverlay = NULL; Sleep(0); pDDSOverlay->Release(); // be sure nobody uses old value
+ }
+}
+
+//! Releases the primary surface
+void DestroyPrimary()
+{
+ if (g_pDDSPrimary)
+ {
+ g_pDDSPrimary->Release();
+ g_pDDSPrimary = NULL;
+ }
+}
+
+//! Releases core DirectDraw objects
+void DestroyDDraw()
+{
+ DestroyPrimary();
+ // Release the DDraw object
+ if (g_pDD) {
+ LPDIRECTDRAW7 pDD(g_pDD); // be sure nobody uses old value
+ g_pDD = NULL; Sleep(1); pDD->Release();
+ }
+}
+
+//! Checks and corrects all boundries for alignment and stretching
+void CheckBoundries(void)
+{
+ // Make sure the coordinates fulfill the stretching requirements. Often
+ // the hardware will require a certain ammount of stretching to do
+ // overlays. This stretch factor is held in dwMinOverlayStretch as the
+ // stretch factor multiplied by 1000 (to keep an accuracy of 3 decimal places).
+ if ((g_DDCaps.dwCaps & DDCAPS_OVERLAYSTRETCH) && (g_DDCaps.dwMinOverlayStretch)
+ && (g_dwXRatio < g_DDCaps.dwMinOverlayStretch))
+ {
+ g_rcDst.right = 2 * GetSystemMetrics(SM_CXSIZEFRAME) + g_rcDst.left + (g_sizex
+ * (g_DDCaps.dwMinOverlayStretch + 1)) / 1000;
+ SetWindowTextA(g_hAppWnd, "Window is too small!");
+ }
+ else if ((g_DDCaps.dwCaps & DDCAPS_OVERLAYSTRETCH) && (g_DDCaps.dwMaxOverlayStretch)
+ && (g_dwXRatio > g_DDCaps.dwMaxOverlayStretch))
+ {
+ g_rcDst.right = 2 * GetSystemMetrics(SM_CXSIZEFRAME) + g_rcDst.left + (g_sizey
+ * (g_DDCaps.dwMaxOverlayStretch + 999)) / 1000;
+ SetWindowTextA(g_hAppWnd, "Window is too large!");
+ }
+ else if(!g_video->calc_fps) SetWindowText(g_hAppWnd, g_video->title);
+
+ // Recalculate the ratio's for the upcoming calculations
+ g_dwXRatio = (g_rcDst.right - g_rcDst.left) * 1000 / (g_rcSrc.right - g_rcSrc.left);
+ g_dwYRatio = (g_rcDst.bottom - g_rcDst.top) * 1000 / (g_rcSrc.bottom - g_rcSrc.top);
+
+ // Check to make sure we're within the screen's boundries, if not then fix
+ // the problem by adjusting the source rectangle which we draw from.
+ if (g_rcDst.left < 0)
+ {
+ g_rcSrc.left = -g_rcDst.left * 1000 / g_dwXRatio;
+ g_rcDst.left = 0;
+ }
+ if (g_rcDst.right > GetSystemMetrics(SM_CXSCREEN))
+ {
+ g_rcSrc.right = g_sizex - ((g_rcDst.right - GetSystemMetrics(SM_CXSCREEN)) * 1000 / g_dwXRatio);
+ g_rcDst.right = GetSystemMetrics(SM_CXSCREEN);
+ }
+ if (g_rcDst.bottom > GetSystemMetrics(SM_CYSCREEN))
+ {
+ g_rcSrc.bottom = g_sizey - ((g_rcDst.bottom - GetSystemMetrics(SM_CYSCREEN)) * 1000 / g_dwYRatio);
+ g_rcDst.bottom = GetSystemMetrics(SM_CYSCREEN);
+ }
+ // I don't know how useful this is... but just in case someone can do it - here's the check.
+ if (g_rcDst.top < 0)
+ {
+ g_rcSrc.top = -g_rcDst.top * 1000 / g_dwYRatio;
+ g_rcDst.top = 0;
+ }
+
+ // Make sure the coordinates fulfill the alignment requirements
+ // these expressions (x & -y) just do alignment by dropping low order bits...
+ // so to round up, we add first, then truncate.
+ if ((g_DDCaps.dwCaps & DDCAPS_ALIGNBOUNDARYSRC) && g_DDCaps.dwAlignBoundarySrc)
+ g_rcSrc.left = (g_rcSrc.left + g_DDCaps.dwAlignBoundarySrc / 2) & -(signed)
+ (g_DDCaps.dwAlignBoundarySrc);
+ if ((g_DDCaps.dwCaps & DDCAPS_ALIGNSIZESRC) && g_DDCaps.dwAlignSizeSrc)
+ g_rcSrc.right = g_rcSrc.left + (g_rcSrc.right - g_rcSrc.left + g_DDCaps.dwAlignSizeSrc
+ / 2) & -(signed) (g_DDCaps.dwAlignSizeSrc);
+ if ((g_DDCaps.dwCaps & DDCAPS_ALIGNBOUNDARYDEST) && g_DDCaps.dwAlignBoundaryDest)
+ g_rcDst.left = (g_rcDst.left + g_DDCaps.dwAlignBoundaryDest / 2) & -(signed)
+ (g_DDCaps.dwAlignBoundaryDest);
+ if ((g_DDCaps.dwCaps & DDCAPS_ALIGNSIZEDEST) && g_DDCaps.dwAlignSizeDest)
+ g_rcDst.right = g_rcDst.left + (g_rcDst.right - g_rcDst.left) & -(signed) (g_DDCaps.dwAlignSizeDest);
+}
+
+//! Get translated by system color value
+DWORD DDColorMatch(IDirectDrawSurface7 * pdds, COLORREF rgb)
+{
+ COLORREF rgbT;
+ HDC hdc;
+ DWORD dw = CLR_INVALID;
+ DDSURFACEDESC2 ddsd;
+ HRESULT hres;
+
+ // Use GDI SetPixel to color match for us
+ if (rgb != CLR_INVALID && pdds->GetDC(&hdc) == DD_OK) {
+ rgbT = GetPixel(hdc, 0, 0); // Save current pixel value
+ SetPixel(hdc, 0, 0, rgb); // Set our value
+ pdds->ReleaseDC(hdc);
+ }
+ // Now lock the surface so we can read back the converted color
+ ddsd.dwSize = sizeof(ddsd);
+ while ((hres = pdds->Lock(NULL, &ddsd, 0, NULL)) == DDERR_WASSTILLDRAWING)
+ Sleep(0);
+ if (hres == DD_OK) {
+ dw = *(DWORD *) ddsd.lpSurface; // Get DWORD
+ if (ddsd.ddpfPixelFormat.dwRGBBitCount < 32)
+ dw &= (1 << ddsd.ddpfPixelFormat.dwRGBBitCount) - 1; // Mask it to bpp
+ pdds->Unlock(NULL);
+ }
+ else return DisplayError("Can't lock primary surface", hres);
+ // Now put the color that was there back.
+ if (rgb != CLR_INVALID && pdds->GetDC(&hdc) == DD_OK) {
+ SetPixel(hdc, 0, 0, rgbT);
+ pdds->ReleaseDC(hdc);
+ }
+ return dw;
+}
+
+//! Load the bitmap and copy it to the overlay surface
+bool DrawOverlay()
+{
+ HRESULT hRet; // This is where we put return values from DirectDraw.
+ DDSURFACEDESC2 surfDesc;
+ // Setup structure
+ memset(&surfDesc, 0, sizeof(surfDesc)); surfDesc.dwSize = sizeof(surfDesc);
+
+ hRet = g_pDDSOverlay->Lock(NULL, &surfDesc, DDLOCK_SURFACEMEMORYPTR | DDLOCK_NOSYSLOCK | DDLOCK_WRITEONLY, NULL);
+ if (hRet != DD_OK || surfDesc.lpSurface == NULL)
+ return DisplayError("Can't lock overlay surface", hRet);
+ else {
+ g_pImg = (unsigned int *)surfDesc.lpSurface;
+ //g_pDDSOverlay->Unlock(NULL); is not needed?
+ }
+ // Setup effects structure
+ memset(&g_OverlayFX, 0, sizeof(g_OverlayFX)); g_OverlayFX.dwSize = sizeof(g_OverlayFX);
+ // Setup overlay flags.
+ g_OverlayFlags = DDOVER_SHOW;
+ // Check for destination color keying capability
+ if ((g_DDCaps.dwCKeyCaps & DDCKEYCAPS_DESTOVERLAY) && ((g_DDCaps.dwCaps & DDCAPS_OVERLAYCANTCLIP) || (g_DDCaps.dwCKeyCaps & DDCKEYCAPS_NOCOSTOVERLAY) ))
+ {
+ // If so, we'll use it to clip the bitmap when other windows go on top
+ // of us. Just for the record - this color range for color keying (the
+ // high/low values) are not heavily supported right now, so for almost
+ // all cards, just use the same color for both.
+ g_OverlayFX.dckDestColorkey.dwColorSpaceLowValue =
+ g_OverlayFX.dckDestColorkey.dwColorSpaceHighValue = DDColorMatch(g_pDDSPrimary, RGBKEY);
+ g_OverlayFlags |= DDOVER_DDFX | DDOVER_KEYDESTOVERRIDE;
+ } else {
+ // If not, we'll setup a clipper for the window. This will fix the
+ // problem on a few video cards - but the ones that don't shouldn't care.
+ hRet = g_pDD->CreateClipper(0, &g_pClipper, NULL);
+ if (hRet != DD_OK)
+ return DisplayError("Can't create clipper", hRet);
+ hRet = g_pClipper->SetHWnd(0, g_hAppWnd);
+ if (hRet != DD_OK)
+ return DisplayError("Can't attach clipper", hRet);
+ hRet = g_pDDSPrimary->SetClipper(g_pClipper);
+ if (hRet != DD_OK)
+ return DisplayError("Can't set clipper", hRet);
+ }
+ return true;
+}
+
+//! Init the primary surface
+bool DDPrimaryInit()
+{
+ HRESULT hRet;
+ DDSURFACEDESC2 ddsd; // A surface description structure
+
+ // Create the primary surface. The primary surface is the full screen -
+ // since we're a windowed app - we'll just write to the portion of the
+ // screen within our window.
+ memset(&ddsd, 0, sizeof(ddsd)); // Set all fields of struct to 0 and set .dwSize to
+ ddsd.dwSize = sizeof(ddsd); // Sizeof the variable - these two steps required for most DDraw structs
+ ddsd.dwFlags = DDSD_CAPS; // Set flags for variables we're using...
+ ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; // Set the variables we said we would in dwFlags
+ hRet = g_pDD->CreateSurface(&ddsd, &g_pDDSPrimary, NULL);
+ if (hRet != DD_OK)
+ return DisplayError("Can't create primary surface", hRet);
+ return true;
+}
+
+//! Init DirectDraw Stuff
+bool DDInit()
+{
+ HRESULT hRet;
+ g_rcSrc.right = g_sizex;
+ g_rcSrc.bottom = g_sizey;
+
+ hRet = DirectDrawCreateEx(NULL, (VOID**)&g_pDD, IID_IDirectDraw7, NULL);
+ if (hRet != DD_OK)
+ return DisplayError("Can't create DirectDraw7 instance", hRet);
+
+ // Set cooperation level with other windows to be normal (ie. not full screen)
+ // You MUST set the cooperation level to be SOMETHING, for windowed apps use
+ // DDSCL_NORMAL, for full screen use: DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN.
+ hRet = g_pDD->SetCooperativeLevel(g_hAppWnd, DDSCL_NORMAL);
+ if (hRet != DD_OK)
+ return DisplayError("Can't set cooperative level", hRet);
+ return DDPrimaryInit();
+}
+
+//! Setup the overlay object
+bool DDOverlayInit()
+{
+ // Get hardware's CAPabilitieS
+ memset(&g_DDCaps, 0, sizeof(g_DDCaps));
+ g_DDCaps.dwSize = sizeof(g_DDCaps);
+ if (g_pDD->GetCaps(&g_DDCaps, 0))
+ return DisplayError("Can't get capabilities");
+
+ // Make sure it supports overlays
+ if (!(g_DDCaps.dwCaps & DDCAPS_OVERLAY))
+ return DisplayError("Hardware doesn't support overlays");
+
+ //DO NOT Make sure it supports stretching (scaling)
+ //if (!(g_DDCaps.dwCaps & DDCAPS_OVERLAYSTRETCH)) return false;
+
+ DDSURFACEDESC2 ddsd; // DirectDraw surface descriptor
+ HRESULT hRet; // I'm not even going to try...
+ // The pixel formats that we want the surface to be in
+ DDPIXELFORMAT ddpfOverlayFormats[] = {
+ {sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 32, 0xFF0000, 0x0FF00, 0x0000FF, 0}, // 32-bit RGB
+ {sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x007C00, 0x003e0, 0x00001F, 0}, // 16-bit RGB 5:5:5
+ {sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x00F800, 0x007e0, 0x00001F, 0}, // 16-bit RGB 5:6:5
+ {sizeof(DDPIXELFORMAT), DDPF_FOURCC, mmioFOURCC('U','Y','V','Y'), 16, 0, 0, 0, 0}, // UYVY
+ {sizeof(DDPIXELFORMAT), DDPF_FOURCC, mmioFOURCC('Y','4','2','2'), 16, 0, 0, 0, 0}, // the same as UYVY
+ {sizeof(DDPIXELFORMAT), DDPF_FOURCC, mmioFOURCC('Y','U','Y','2'), 16, 0, 0, 0, 0}, // YUY2 is unsupported color-space here
+ {0}};
+
+ // Setup the overlay surface's attributes in the surface descriptor
+ memset(&ddsd, 0, sizeof(ddsd));
+ ddsd.dwSize = sizeof(ddsd);
+ ddsd.ddsCaps.dwCaps = DDSCAPS_OVERLAY | g_DDCaps.ddsCaps.dwCaps&DDSCAPS_VIDEOMEMORY;
+ ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT;
+ ddsd.dwBackBufferCount = 0;
+ ddsd.dwWidth = g_sizex;
+ ddsd.dwHeight = g_sizey;
+ for(int format = 0; ddpfOverlayFormats[format].dwSize; format++) {
+ ddsd.ddpfPixelFormat = ddpfOverlayFormats[format];
+ // Attempt to create the surface with theses settings
+ hRet = g_pDD->CreateSurface(&ddsd, &g_pDDSOverlay, NULL);
+ if(hRet == DD_OK) break;
+ }
+ if (hRet != DD_OK)
+ return DisplayError("Can't create appropriate overlay surface", hRet);
+ return true;
+}
+
+inline void mouse(int k, LPARAM lParam)
+{
+ int x = (int)LOWORD(lParam), y = (int)HIWORD(lParam);
+ g_video->on_mouse( x*g_sizex/(g_rcDst.right - g_rcDst.left),
+ y*g_sizey/(g_rcDst.bottom - g_rcDst.top), k);
+}
+
+LRESULT CALLBACK InternalWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
+{
+ PAINTSTRUCT ps; // Structure for the paint message
+ POINT p = {0, 0}; // Translation point for the window's client region
+ HRESULT hRet;
+
+ switch (iMsg)
+ {
+ case WM_MOVE:
+ // Make sure we're not moving to be minimized - because otherwise
+ // our ratio varialbes (g_dwXRatio and g_dwYRatio) will end up
+ // being 0, and once we hit CheckBoundries it divides by 0.
+ if (!IsIconic(hwnd))
+ {
+ g_rcSrc.left = 0;
+ g_rcSrc.right = g_sizex;
+ g_rcSrc.top = 0;
+ g_rcSrc.bottom = g_sizey;
+ GetClientRect(hwnd, &g_rcDst);
+ g_dwXRatio = (g_rcDst.right - g_rcDst.left) * 1000 /
+ (g_rcSrc.right - g_rcSrc.left);
+ g_dwYRatio = (g_rcDst.bottom - g_rcDst.top) * 1000 /
+ (g_rcSrc.bottom - g_rcSrc.top);
+ ClientToScreen(hwnd, &p);
+ g_rcDst.left = p.x;
+ g_rcDst.top = p.y;
+ g_rcDst.bottom += p.y;
+ g_rcDst.right += p.x;
+ CheckBoundries();
+ }
+ else
+ // Else, hide the overlay... just in case we can't do
+ // destination color keying, this will pull the overlay
+ // off of the screen for the user.
+ if (g_pDDSOverlay && g_pDDSPrimary)
+ g_pDDSOverlay->UpdateOverlay(NULL, g_pDDSPrimary, NULL, DDOVER_HIDE, NULL);
+ // Check to make sure our window exists before we tell it to
+ // repaint. This will fail the first time (while the window is being created).
+ if (hwnd)
+ {
+ InvalidateRect(hwnd, NULL, FALSE);
+ UpdateWindow(hwnd);
+ }
+ return 0L;
+
+ case WM_SIZE:
+ // Another check for the minimization action. This check is
+ // quicker though...
+ if (wParam != SIZE_MINIMIZED)
+ {
+ GetClientRect(hwnd, &g_rcDst);
+ ClientToScreen(hwnd, &p);
+ g_rcDst.left = p.x;
+ g_rcDst.top = p.y;
+ g_rcDst.bottom += p.y;
+ g_rcDst.right += p.x;
+ g_rcSrc.left = 0;
+ g_rcSrc.right = g_sizex;
+ g_rcSrc.top = 0;
+ g_rcSrc.bottom = g_sizey;
+ // Here we multiply by 1000 to preserve 3 decimal places in the
+ // division opperation (we picked 1000 to be on the same order
+ // of magnitude as the stretch factor for easier comparisons)
+ g_dwXRatio = (g_rcDst.right - g_rcDst.left) * 1000 /
+ (g_rcSrc.right - g_rcSrc.left);
+ g_dwYRatio = (g_rcDst.bottom - g_rcDst.top) * 1000 /
+ (g_rcSrc.bottom - g_rcSrc.top);
+ CheckBoundries();
+ }
+ return 0L;
+
+ case WM_PAINT:
+ BeginPaint(hwnd, &ps);
+ // Check the primary surface to see if it's lost - if so you can
+ // pretty much bet that the other surfaces are also lost - thus
+ // restore EVERYTHING! If we got our surfaces stolen by a full
+ // screen app - then we'll destroy our primary - and won't be able
+ // to initialize it again. When we get our next paint message (the
+ // full screen app closed for example) we'll want to try to reinit
+ // the surfaces again - that's why there is a check for
+ // g_pDDSPrimary == NULL. The other option, is that our program
+ // went through this process, could init the primary again, but it
+ // couldn't init the overlay, that's why there's a third check for
+ // g_pDDSOverlay == NULL. Make sure that the check for
+ // !g_pDDSPrimary is BEFORE the IsLost call - that way if the
+ // pointer is NULL (ie. !g_pDDSPrimary is TRUE) - the compiler
+ // won't try to evaluate the IsLost function (which, since the
+ // g_pDDSPrimary surface is NULL, would be bad...).
+ if (!g_pDDSPrimary || (g_pDDSPrimary->IsLost() != DD_OK) ||
+ (g_pDDSOverlay == NULL))
+ {
+ DestroyOverlay();
+ DestroyPrimary();
+ if (DDPrimaryInit())
+ if (DDOverlayInit())
+ if (!DrawOverlay())
+ DestroyOverlay();
+ }
+ // UpdateOverlay is how we put the overlay on the screen.
+ if (g_pDDSOverlay && g_pDDSPrimary && g_video->updating)
+ {
+ hRet = g_pDDSOverlay->UpdateOverlay(&g_rcSrc, g_pDDSPrimary,
+ &g_rcDst, g_OverlayFlags,
+ &g_OverlayFX);
+#ifdef _DEBUG
+ if(hRet != DD_OK) DisplayError("Can't update overlay", hRet);
+#endif
+ }
+ EndPaint(hwnd, &ps);
+ return 0L;
+
+ // process mouse and keyboard events
+ case WM_LBUTTONDOWN: mouse(1, lParam); break;
+ case WM_LBUTTONUP: mouse(-1, lParam); break;
+ case WM_RBUTTONDOWN: mouse(2, lParam); break;
+ case WM_RBUTTONUP: mouse(-2, lParam); break;
+ case WM_MBUTTONDOWN: mouse(3, lParam); break;
+ case WM_MBUTTONUP: mouse(-3, lParam); break;
+ case WM_CHAR: g_video->on_key(wParam); break;
+
+ case WM_DISPLAYCHANGE: return 0L;
+
+ case WM_DESTROY:
+ // Now, shut down the window...
+ PostQuitMessage(0);
+ return 0L;
+ }
+ return g_pUserProc? g_pUserProc(hwnd, iMsg, wParam, lParam) : DefWindowProc(hwnd, iMsg, wParam, lParam);
+}
+
+DWORD WINAPI thread_vsync(LPVOID lpParameter)
+{
+ BOOL vblank = false;
+ while(g_video && g_video->running) {
+ while(!vblank && g_video && g_video->running) {
+ Sleep(0); LPDIRECTDRAW7 pDD(g_pDD); if(pDD) pDD->GetVerticalBlankStatus(&vblank);
+ }
+ LPDIRECTDRAWSURFACE7 pDDSOverlay(g_pDDSOverlay);
+ if(pDDSOverlay) pDDSOverlay->UpdateOverlay(&g_rcSrc, g_pDDSPrimary, &g_rcDst, g_OverlayFlags | DDOVER_REFRESHALL, &g_OverlayFX);
+ do {
+ Sleep(1); LPDIRECTDRAW7 pDD(g_pDD); if(pDD) pDD->GetVerticalBlankStatus(&vblank);
+ } while(vblank && g_video && g_video->running);
+ while(g_video && !g_video->updating && g_video->running) Sleep(10);
+ }
+ return 0;
+}
+
+///////////////////////////////////////////// public methods of video class ///////////////////////
+
+inline void mask2bits(unsigned int mask, color_t &save, char &shift)
+{
+ save = mask; if(!mask) { shift = 8; return; }
+ shift = 0; while(!(mask&1)) ++shift, mask >>= 1;
+ int bits = 0; while(mask&1) ++bits, mask >>= 1;
+ shift += bits - 8;
+}
+
+bool video::init_window(int sizex, int sizey)
+{
+ assert(win_hInstance != 0);
+ g_sizex = sizex; g_sizey = sizey;
+ if( !WinInit(win_hInstance, win_iCmdShow, gWndClass, title, false) )
+ return DisplayError("Unable to initialize the program's window.");
+ running = true;
+ if( !DDInit() ) {
+ DestroyDDraw();
+ goto fail;
+ }
+ if( !DDOverlayInit() || !DrawOverlay() ) {
+ DestroyOverlay();
+ DestroyDDraw();
+ goto fail;
+ }
+ DDPIXELFORMAT PixelFormat; memset(&PixelFormat, 0, sizeof(PixelFormat)); PixelFormat.dwSize = sizeof(PixelFormat);
+ g_pDDSOverlay->GetPixelFormat(&PixelFormat);
+ mask2bits(PixelFormat.dwRBitMask, red_mask, red_shift);
+ mask2bits(PixelFormat.dwGBitMask, green_mask, green_shift);
+ mask2bits(PixelFormat.dwBBitMask, blue_mask, blue_shift);
+ if(PixelFormat.dwFlags == DDPF_RGB)
+ depth = char(PixelFormat.dwRGBBitCount);
+ else depth = -char(PixelFormat.dwFourCC);
+ for(int i = 0, e = sizex * sizey * PixelFormat.dwRGBBitCount / 32, c = get_color(0, 0, 0); i < e; i++)
+ g_pImg[i] = c; // clear surface
+ ShowWindow(g_hAppWnd, SW_SHOW);
+ g_hVSync = CreateThread (
+ NULL, // LPSECURITY_ATTRIBUTES security_attrs
+ 0, // SIZE_T stacksize
+ (LPTHREAD_START_ROUTINE) thread_vsync,
+ this, // argument
+ 0, 0);
+ SetPriorityClass(g_hVSync, IDLE_PRIORITY_CLASS); // questionable
+ return true;
+fail:
+ g_pImg = new unsigned int[g_sizex * g_sizey];
+ return false;
+}
+
+void video::terminate()
+{
+ running = false;
+ DestroyOverlay();
+ if(WaitForSingleObject(g_hVSync, 100) == WAIT_TIMEOUT) TerminateThread(g_hVSync, 0);
+ CloseHandle(g_hVSync);
+ DestroyDDraw();
+ if(g_pImg) delete[] g_pImg;
+ g_pImg = 0; g_video = 0;
+}
+//////////// drawing area constructor & destructor /////////////
+
+drawing_area::drawing_area(int x, int y, int sizex, int sizey)
+: start_x(x), start_y(y), size_x(sizex), size_y(sizey), pixel_depth(g_video->depth),
+ base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex), ptr32(g_pImg)
+{
+ assert(ptr32); assert(x < g_sizex); assert(y < g_sizey);
+ assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);
+
+ index = base_index; // current index
+}
+
+drawing_area::~drawing_area()
+{
+}
diff --git a/examples/common/gui/dxcheck.bat b/examples/common/gui/dxcheck.bat
new file mode 100644
index 0000000..36ffaac
--- /dev/null
+++ b/examples/common/gui/dxcheck.bat
@@ -0,0 +1,36 @@
+ at echo off
+REM
+REM Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+REM
+REM This file is part of Threading Building Blocks.
+REM
+REM Threading Building Blocks is free software; you can redistribute it
+REM and/or modify it under the terms of the GNU General Public License
+REM version 2 as published by the Free Software Foundation.
+REM
+REM Threading Building Blocks is distributed in the hope that it will be
+REM useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+REM of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+REM GNU General Public License for more details.
+REM
+REM You should have received a copy of the GNU General Public License
+REM along with Threading Building Blocks; if not, write to the Free Software
+REM Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+REM
+REM As a special exception, you may use this file as part of a free software
+REM library without restriction. Specifically, if other files instantiate
+REM templates or use macros or inline functions from this file, or you compile
+REM this file and link it with other files to produce an executable, this
+REM file does not by itself cause the resulting executable to be covered by
+REM the GNU General Public License. This exception does not however
+REM invalidate any other reasons why the executable file might be covered by
+REM the GNU General Public License.
+REM
+if "%DXSDK_DIR%"=="" goto error_no_DXSDK
+goto end
+
+:error_no_DXSDK
+echo DirectX SDK Check : error : This example requires the DirectX SDK. Either (re)-install the DirectX SDK, or set the DXSDK_DIR environment variable to indicate where it is installed.
+
+:end
+
diff --git a/examples/common/gui/gdivideo.cpp b/examples/common/gui/gdivideo.cpp
new file mode 100644
index 0000000..ff206e5
--- /dev/null
+++ b/examples/common/gui/gdivideo.cpp
@@ -0,0 +1,154 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+// common Windows parts
+#include "winvideo.h"
+// include GDI+ headers
+#include <gdiplus.h>
+// and another headers
+#include <stdio.h>
+
+// tag linking library
+#pragma comment(lib, "gdiplus.lib")
+
+// global specific variables
+Gdiplus::Bitmap * g_pBitmap; // main drawing bitmap
+ULONG_PTR gdiplusToken;
+Gdiplus::GdiplusStartupInput gdiplusStartupInput;// GDI+
+
+//! display system error
+bool DisplayError(LPSTR lpstrErr, HRESULT hres)
+{
+ static bool InError = false;
+ int retval = 0;
+ if (!InError)
+ {
+ InError = true;
+ LPCSTR lpMsgBuf;
+ if(!hres) hres = GetLastError();
+ FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL, hres, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL );
+ retval = MessageBox(g_hAppWnd, lpstrErr, lpMsgBuf, MB_OK|MB_ICONERROR);
+ LocalFree( (HLOCAL)lpMsgBuf );
+ InError = false;
+ }
+ return false;
+}
+
+//! Win event processing function
+LRESULT CALLBACK InternalWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
+{
+ switch (iMsg)
+ {
+ case WM_MOVE:
+ // Check to make sure our window exists before we tell it to repaint.
+ // This will fail the first time (while the window is being created).
+ if (hwnd) {
+ InvalidateRect(hwnd, NULL, FALSE);
+ UpdateWindow(hwnd);
+ }
+ return 0L;
+
+ case WM_PAINT:
+ {
+ PAINTSTRUCT ps;
+ Gdiplus::Graphics graphics( BeginPaint(hwnd, &ps) );
+ // redraw just requested area. This call is as fast as simple DrawImage() call.
+ if(g_video->updating) graphics.DrawImage(g_pBitmap, ps.rcPaint.left, ps.rcPaint.top, ps.rcPaint.left, ps.rcPaint.top,
+ ps.rcPaint.right, ps.rcPaint.bottom, Gdiplus::UnitPixel);
+ EndPaint(hwnd, &ps);
+ }
+ return 0L;
+
+ // Proccess all mouse and keyboard events
+ case WM_LBUTTONDOWN: g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), 1); break;
+ case WM_LBUTTONUP: g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), -1); break;
+ case WM_RBUTTONDOWN: g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), 2); break;
+ case WM_RBUTTONUP: g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), -2); break;
+ case WM_MBUTTONDOWN: g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), 3); break;
+ case WM_MBUTTONUP: g_video->on_mouse( (int)LOWORD(lParam), (int)HIWORD(lParam), -3); break;
+ case WM_CHAR: g_video->on_key(wParam); break;
+
+ // some useless stuff
+ case WM_ERASEBKGND: return 1; // keeps erase-background events from happening, reduces chop
+ case WM_DISPLAYCHANGE: return 0;
+
+ // Now, shut down the window...
+ case WM_DESTROY: PostQuitMessage(0); return 0;
+ }
+ // call user defined proc, if exists
+ return g_pUserProc? g_pUserProc(hwnd, iMsg, wParam, lParam) : DefWindowProc(hwnd, iMsg, wParam, lParam);
+}
+
+///////////// video functions ////////////////
+
+bool video::init_window(int sizex, int sizey)
+{
+ assert(win_hInstance != 0);
+ g_sizex = sizex; g_sizey = sizey;
+ if (!WinInit(win_hInstance, win_iCmdShow, gWndClass, title, true)) {
+ DisplayError("Unable to initialize the program's window.");
+ return false;
+ }
+ ShowWindow(g_hAppWnd, SW_SHOW);
+ Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
+ g_pImg = new unsigned int[sizex*sizey];
+ g_pBitmap = new Gdiplus::Bitmap(g_sizex, g_sizey, 4*g_sizex, PixelFormat32bppRGB, (BYTE*)g_pImg );
+ running = true;
+ return true;
+}
+
+void video::terminate()
+{
+ if(g_pBitmap) { delete g_pBitmap; g_pBitmap = 0; }
+ Gdiplus::GdiplusShutdown(gdiplusToken);
+ g_video = 0; running = false;
+ if(g_pImg) { delete[] g_pImg; g_pImg = 0; }
+}
+
+//////////// drawing area constructor & destructor /////////////
+
+drawing_area::drawing_area(int x, int y, int sizex, int sizey)
+: start_x(x), start_y(y), size_x(sizex), size_y(sizey), pixel_depth(24),
+ base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex), ptr32(g_pImg)
+{
+ assert(x < g_sizex); assert(y < g_sizey);
+ assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);
+
+ index = base_index; // current index
+}
+
+drawing_area::~drawing_area()
+{
+ if(g_video->updating) {
+ RECT r;
+ r.left = start_x; r.right = start_x + size_x;
+ r.top = start_y; r.bottom = start_y + size_y;
+ InvalidateRect(g_hAppWnd, &r, false);
+ }
+}
diff --git a/examples/common/gui/macvideo.cpp b/examples/common/gui/macvideo.cpp
new file mode 100644
index 0000000..0de8dc2
--- /dev/null
+++ b/examples/common/gui/macvideo.cpp
@@ -0,0 +1,1491 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ * Based on "OpenGL Image" example from http://developer.apple.com/samplecode/OpenGL_Image/
+ */
+
+#include "video.h"
+#include <sched.h>
+#include <sys/time.h>
+#include <stdio.h>
+#include <string.h>
+#include <pthread.h>
+
+#include <AvailabilityMacros.h>
+#undef DEPRECATED_ATTRIBUTE
+#define DEPRECATED_ATTRIBUTE
+#include <Carbon/Carbon.h>
+#include <AGL/agl.h>
+#include <OpenGL/gl.h> // for OpenGL API
+#include <OpenGL/glext.h> // for OpenGL extension support
+
+unsigned int * g_pImg = 0;
+int g_sizex, g_sizey;
+WindowRef g_window = 0;
+static video * g_video = 0;
+static int g_fps = 0;
+struct timeval g_time;
+static pthread_mutex_t g_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+
+static OSStatus AppEventHandler( EventHandlerCallRef inCaller, EventRef inEvent, void* inRefcon );
+WindowRef HandleNew();
+static OSStatus WindowEventHandler( EventHandlerCallRef inCaller, EventRef inEvent, void* inRefcon );
+
+static IBNibRef sNibRef;
+
+//--------------------------------------------------------------------------------------------
+
+// structure for creating a fullscreen context
+struct structGLInfo // storage for setup info
+{
+ SInt16 width; // input: width of drawable (screen width in full screen mode), return: actual width allocated
+ SInt16 height; // input: height of drawable (screen height in full screen mode), return: actual height allocated
+ UInt32 pixelDepth; // input: requested pixel depth
+ Boolean fDepthMust; // input: pixel depth must be set (if false then current depth will be used if able)
+ Boolean fAcceleratedMust; // input: must renderer be accelerated?
+ GLint aglAttributes[64]; // input: pixel format attributes always required (reset to what was actually allocated)
+ SInt32 VRAM; // input: minimum VRAM; output: actual (if successful otherwise input)
+ SInt32 textureRAM; // input: amount of texture RAM required on card; output: same (used in allcoation to ensure enough texture
+ AGLPixelFormat fmt; // input: none; output pixel format...
+};
+typedef struct structGLInfo structGLInfo;
+typedef struct structGLInfo * pstructGLInfo;
+
+// structure for creating a context from a window
+struct structGLWindowInfo // storage for setup info
+{
+ Boolean fAcceleratedMust; // input: must renderer be accelerated?
+ GLint aglAttributes[64]; // input: pixel format attributes always required (reset to what was actually allocated)
+ SInt32 VRAM; // input: minimum VRAM; output: actual (if successful otherwise input)
+ SInt32 textureRAM; // input: amount of texture RAM required on card; output: same (used in allcoation to ensure enough texture
+ AGLPixelFormat fmt; // input: none; output pixel format...
+ Boolean fDraggable; // input: is window going to be dragable,
+ // if so renderer check (accel, VRAM, textureRAM) will look at all renderers vice just the current one
+ // if window is not dragable renderer check will either check the single device or short
+ // circuit to software if window spans multiple devices
+ // software renderer is consider to have unlimited VRAM, unlimited textureRAM and to not be accelerated
+};
+typedef struct structGLWindowInfo structGLWindowInfo;
+typedef struct structGLWindowInfo * pstructGLWindowInfo;
+
+//--------------------------------------------------------------------------------------------
+
+struct recGLCap // structure to store minimum OpenGL capabilites across all displays and GPUs
+{
+ Boolean f_ext_texture_rectangle; // is texture rectangle extension supported
+ Boolean f_ext_client_storage; // is client storage extension supported
+ Boolean f_ext_packed_pixel; // is packed pixel extension supported
+ Boolean f_ext_texture_edge_clamp; // is SGI texture edge clamp extension supported
+ Boolean f_gl_texture_edge_clamp; // is OpenGL texture edge clamp support (1.2+)
+ unsigned long edgeClampParam; // the param that is passed to the texturing parmeteres
+ long maxTextureSize; // the minimum max texture size across all GPUs
+ long maxNOPTDTextureSize; // the minimum max texture size across all GPUs that support non-power of two texture dimensions
+};
+typedef struct recGLCap recGLCap;
+typedef recGLCap * pRecGLCap;
+
+struct recImage // OpenGL and image information associated with each window
+{
+ // genric OpenGL stuff
+ structGLWindowInfo glInfo; // gl info used with SetupGL to build context
+ AGLContext aglContext; // the OpenGL context (read: state)
+ GLuint fontList; // the display list storing the bitmap font created for the context to display info
+
+ Boolean fAGPTexturing; // 10.1+ only: texture from AGP memory without loading to GPU
+
+ // texture display stuff
+ Boolean fNPOTTextures; // are we using Non-Power Of Two (NPOT) textures?
+ Boolean fTileTextures; // are multiple tiled textures used to display image?
+ Boolean fOverlapTextures; // do tiled textures overlapped to create correct filtering between tiles? (only applies if using tiled textures)
+ Boolean fClientTextures; // 10.1+ only: texture from client memory
+
+ unsigned char * pImageBuffer; // image buffer that contains data for image (disposed after loading into texture if not using client textures)
+ long imageWidth; // height of orginal image
+ long imageHeight; // width of orginal image
+ float imageAspect; // width / height or aspect ratio of orginal image
+ long imageDepth; // depth of image (after loading into gworld, will be either 32 or 16 bits)
+ long textureX; // number of horizontal textures
+ long textureY; // number of vertical textures
+ long maxTextureSize; // max texture size for image
+ GLuint * pTextureName; // array for texture names (# = textureX * textureY)
+ long textureWidth; // total width of texels with cover image (including any border on image, but not internal texture overlaps)
+ long textureHeight; // total height of texels with cover image (including any border on image, but not internal texture overlaps)
+ float zoomX; // zoom from on texel = one pixel is 1.0
+ float zoomY; // zoom from on texel = one pixel is 1.0
+ };
+typedef struct recImage recImage; // typedef for easy declaration
+typedef recImage * pRecImage; // pointer type
+
+// ==================================
+
+// public function declarations -------------------------------------
+
+// Destroys drawable and context
+// Ouputs: *paglDraw, *paglContext should be 0 on exit
+// destorys a context that was associated with an existing window, window is left intacted
+OSStatus DestroyGLFromWindow (AGLContext* paglContext, pstructGLWindowInfo pcontextInfo);
+
+short FindGDHandleFromWindow (WindowPtr pWindow, GDHandle * phgdOnThisDevice);
+
+// disposes OpenGL context, and associated texture list
+OSStatus DisposeGLForWindow (WindowRef window);
+
+// builds the GL context and associated state for the window
+// loads image into a texture or textures
+// disposes of GWorld and image buffer when finished loading textures
+OSStatus BuildGLForWindow (WindowRef window);
+
+// Handle updating context for window moves and resizing
+OSStatus ResizeMoveGLWindow (WindowRef window);
+
+// main GL drawing routine, should be valid window passed in (will setupGL if require). Draw image
+void DrawGL (WindowRef window);
+
+pRecGLCap gpOpenGLCaps;
+
+// prototypes (internal/private) --------------------------------------------
+
+static Boolean CheckRenderer (GDHandle hGD, long *VRAM, long *textureRAM, GLint* , Boolean fAccelMust);
+static Boolean CheckAllDeviceRenderers (long* pVRAM, long* pTextureRAM, GLint* pDepthSizeSupport, Boolean fAccelMust);
+static void DumpCurrent (AGLDrawable* paglDraw, AGLContext* paglContext, pstructGLInfo pcontextInfo);
+static OSStatus BuildGLonWindow (WindowPtr pWindow, AGLContext* paglContext, pstructGLWindowInfo pcontextInfo, AGLContext aglShareContext);
+
+static long GetNextTextureSize (long textureDimension, long maxTextureSize, Boolean textureRectangle);
+static long GetTextureNumFromTextureDim (long textureDimension, long maxTextureSize, Boolean texturesOverlap, Boolean textureRectangle);
+
+// ----------------------------------------------------------------------------------------
+
+// functions (internal/private) ---------------------------------------------
+
+#pragma mark -
+// --------------------------------------------------------------------------
+
+// central error reporting
+
+void ReportErrorNum (char * strError, long numError)
+{
+ char errMsgPStr [257];
+
+ errMsgPStr[0] = (char)snprintf (errMsgPStr+1, 255, "%s %ld (0x%lx)\n", strError, numError, numError);
+
+ // ensure we are faded in
+ DebugStr ( (ConstStr255Param) errMsgPStr );
+}
+
+// --------------------------------------------------------------------------
+
+void ReportError (char * strError)
+{
+ char errMsgPStr [257];
+
+ errMsgPStr[0] = (char)snprintf (errMsgPStr+1, 255, "%s\n", strError);
+
+ // ensure we are faded in
+ DebugStr ( (ConstStr255Param) errMsgPStr );
+}
+
+//-----------------------------------------------------------------------------------------------------------------------
+
+// if error dump agl errors to debugger string, return error
+
+OSStatus aglReportError (void)
+{
+ GLenum err = aglGetError();
+ if (AGL_NO_ERROR != err)
+ ReportError ((char *)aglErrorString(err));
+ // ensure we are returning an OSStatus noErr if no error condition
+ if (err == AGL_NO_ERROR)
+ return noErr;
+ else
+ return (OSStatus) err;
+}
+
+//-----------------------------------------------------------------------------------------------------------------------
+
+// if error dump gl errors to debugger string, return error
+
+OSStatus glReportError (void)
+{
+ GLenum err = glGetError();
+ switch (err)
+ {
+ case GL_NO_ERROR:
+ break;
+ case GL_INVALID_ENUM:
+ ReportError ("GL Error: Invalid enumeration");
+ break;
+ case GL_INVALID_VALUE:
+ ReportError ("GL Error: Invalid value");
+ break;
+ case GL_INVALID_OPERATION:
+ ReportError ("GL Error: Invalid operation");
+ break;
+ case GL_STACK_OVERFLOW:
+ ReportError ("GL Error: Stack overflow");
+ break;
+ case GL_STACK_UNDERFLOW:
+ ReportError ("GL Error: Stack underflow");
+ break;
+ case GL_OUT_OF_MEMORY:
+ ReportError ("GL Error: Out of memory");
+ break;
+ }
+ // ensure we are returning an OSStatus noErr if no error condition
+ if (err == GL_NO_ERROR)
+ return noErr;
+ else
+ return (OSStatus) err;
+}
+
+//--------------------------------------------------------------------------------------------
+
+// functions (internal/private) ---------------------------------------------
+
+// CheckRenderer
+
+// looks at renderer attributes it has at least the VRAM is accelerated
+
+// Inputs: hGD: GDHandle to device to look at
+// pVRAM: pointer to VRAM in bytes required; out is actual VRAM if a renderer was found, otherwise it is the input parameter
+// pTextureRAM: pointer to texture RAM in bytes required; out is same (implementation assume VRAM returned by card is total so we add texture and VRAM)
+// fAccelMust: do we check for acceleration
+
+// Returns: true if renderer for the requested device complies, false otherwise
+
+static Boolean CheckRenderer (GDHandle hGD, long* pVRAM, long* pTextureRAM, GLint* pDepthSizeSupport, Boolean fAccelMust)
+{
+ AGLRendererInfo info, head_info;
+ GLint inum;
+ GLint dAccel = 0;
+ GLint dVRAM = 0, dMaxVRAM = 0;
+ Boolean canAccel = false, found = false;
+ head_info = aglQueryRendererInfo(&hGD, 1);
+ aglReportError ();
+ if(!head_info)
+ {
+ ReportError ("aglQueryRendererInfo error");
+ return false;
+ }
+ else
+ {
+ info = head_info;
+ inum = 0;
+ // see if we have an accelerated renderer, if so ignore non-accelerated ones
+ // this prevents returning info on software renderer when actually we'll get the hardware one
+ while (info)
+ {
+ aglDescribeRenderer(info, AGL_ACCELERATED, &dAccel);
+ aglReportError ();
+ if (dAccel)
+ canAccel = true;
+ info = aglNextRendererInfo(info);
+ aglReportError ();
+ inum++;
+ }
+
+ info = head_info;
+ inum = 0;
+ while (info)
+ {
+ aglDescribeRenderer (info, AGL_ACCELERATED, &dAccel);
+ aglReportError ();
+ // if we can accel then we will choose the accelerated renderer
+ // how about compliant renderers???
+ if ((canAccel && dAccel) || (!canAccel && (!fAccelMust || dAccel)))
+ {
+ aglDescribeRenderer (info, AGL_VIDEO_MEMORY, &dVRAM); // we assume that VRAM returned is total thus add texture and VRAM required
+ aglReportError ();
+ if (dVRAM >= (*pVRAM + *pTextureRAM))
+ {
+ if (dVRAM >= dMaxVRAM) // find card with max VRAM
+ {
+ aglDescribeRenderer (info, AGL_DEPTH_MODES, pDepthSizeSupport); // which depth buffer modes are supported
+ aglReportError ();
+ dMaxVRAM = dVRAM; // store max
+ found = true;
+ }
+ }
+ }
+ info = aglNextRendererInfo(info);
+ aglReportError ();
+ inum++;
+ }
+ }
+ aglDestroyRendererInfo(head_info);
+ if (found) // if we found a card that has enough VRAM and meets the accel criteria
+ {
+ *pVRAM = dMaxVRAM; // return VRAM
+ return true;
+ }
+ // VRAM will remain to same as it did when sent in
+ return false;
+}
+
+//-----------------------------------------------------------------------------------------------------------------------
+
+// CheckAllDeviceRenderers
+
+// looks at renderer attributes and each device must have at least one renderer that fits the profile
+
+// Inputs: pVRAM: pointer to VRAM in bytes required; out is actual min VRAM of all renderers found, otherwise it is the input parameter
+// pTextureRAM: pointer to texture RAM in bytes required; out is same (implementation assume VRAM returned by card is total so we add texture and VRAM)
+// fAccelMust: do we check fro acceleration
+
+// Returns: true if any renderer for on each device complies (not necessarily the same renderer), false otherwise
+
+static Boolean CheckAllDeviceRenderers (long* pVRAM, long* pTextureRAM, GLint* pDepthSizeSupport, Boolean fAccelMust)
+{
+ AGLRendererInfo info, head_info;
+ GLint inum;
+ GLint dAccel = 0;
+ GLint dVRAM = 0, dMaxVRAM = 0;
+ Boolean canAccel = false, found = false, goodCheck = true; // can the renderer accelerate, did we find a valid renderer for the device, are we still successfully on all the devices looked at
+ long MinVRAM = 0x8FFFFFFF; // max long
+ GDHandle hGD = GetDeviceList (); // get the first screen
+ while (hGD && goodCheck)
+ {
+ head_info = aglQueryRendererInfo(&hGD, 1);
+ aglReportError ();
+ if(!head_info)
+ {
+ ReportError ("aglQueryRendererInfo error");
+ return false;
+ }
+ else
+ {
+ info = head_info;
+ inum = 0;
+ // see if we have an accelerated renderer, if so ignore non-accelerated ones
+ // this prevents returning info on software renderer when actually we'll get the hardware one
+ while (info)
+ {
+ aglDescribeRenderer(info, AGL_ACCELERATED, &dAccel);
+ aglReportError ();
+ if (dAccel)
+ canAccel = true;
+ info = aglNextRendererInfo(info);
+ aglReportError ();
+ inum++;
+ }
+
+ info = head_info;
+ inum = 0;
+ while (info)
+ {
+ aglDescribeRenderer(info, AGL_ACCELERATED, &dAccel);
+ aglReportError ();
+ // if we can accel then we will choose the accelerated renderer
+ // how about compliant renderers???
+ if ((canAccel && dAccel) || (!canAccel && (!fAccelMust || dAccel)))
+ {
+ aglDescribeRenderer(info, AGL_VIDEO_MEMORY, &dVRAM); // we assume that VRAM returned is total thus add texture and VRAM required
+ aglReportError ();
+ if (dVRAM >= (*pVRAM + *pTextureRAM))
+ {
+ if (dVRAM >= dMaxVRAM) // find card with max VRAM
+ {
+ aglDescribeRenderer(info, AGL_DEPTH_MODES, pDepthSizeSupport); // which depth buffer modes are supported
+ aglReportError ();
+ dMaxVRAM = dVRAM; // store max
+ found = true;
+ }
+ }
+ }
+ info = aglNextRendererInfo(info);
+ aglReportError ();
+ inum++;
+ }
+ }
+ aglDestroyRendererInfo(head_info);
+ if (found) // if we found a card that has enough VRAM and meets the accel criteria
+ {
+ if (MinVRAM > dMaxVRAM)
+ MinVRAM = dMaxVRAM; // return VRAM
+
+ }
+ else
+ goodCheck = false; // one device failed thus entire requirement fails
+ hGD = GetNextDevice (hGD); // get next device
+ } // while
+ if (goodCheck) // we check all devices and each was good
+ {
+ *pVRAM = MinVRAM; // return VRAM
+ return true;
+ }
+ return false; //at least one device failed to have mins
+}
+
+//-----------------------------------------------------------------------------------------------------------------------
+
+// DumpCurrent
+
+// Kills currently allocated context
+// does not care about being pretty (assumes display is likely faded)
+
+// Inputs: paglDraw, paglContext: things to be destroyed
+
+void DumpCurrent (AGLDrawable* paglDraw, AGLContext* paglContext, pstructGLInfo pcontextInfo)
+{
+ if (*paglContext)
+ {
+ aglSetCurrentContext (NULL);
+ aglReportError ();
+ aglSetDrawable (*paglContext, NULL);
+ aglReportError ();
+ aglDestroyContext (*paglContext);
+ aglReportError ();
+ *paglContext = NULL;
+ }
+
+ if (pcontextInfo->fmt)
+ {
+ aglDestroyPixelFormat (pcontextInfo->fmt); // pixel format is no longer needed
+ aglReportError ();
+ }
+ pcontextInfo->fmt = 0;
+
+ if (*paglDraw) // do not destory a window on DSp since there is no window built in X
+ DisposeWindow (GetWindowFromPort (*paglDraw));
+ *paglDraw = NULL;
+}
+
+#pragma mark -
+// --------------------------------------------------------------------------
+
+// BuildGLonWindow
+
+static OSStatus BuildGLonWindow (WindowPtr pWindow, AGLContext* paglContext, pstructGLWindowInfo pcontextInfo, AGLContext aglShareContext)
+{
+ GDHandle hGD = NULL;
+ GrafPtr cgrafSave = NULL;
+ short numDevices;
+ GLint depthSizeSupport;
+ OSStatus err = noErr;
+
+ if (!pWindow || !pcontextInfo)
+ {
+ ReportError ("NULL parameter passed to BuildGLonWindow.");
+ return paramErr;
+ }
+
+ GetPort (&cgrafSave);
+ SetPortWindowPort(pWindow);
+
+ // check renderere VRAM and acceleration
+ numDevices = FindGDHandleFromWindow (pWindow, &hGD);
+ if (!pcontextInfo->fDraggable) // if numDevices > 1 then we will only be using the software renderer otherwise check only window device
+ {
+ if ((numDevices > 1) || (numDevices == 0)) // this window spans mulitple devices thus will be software only
+ {
+ // software renderer
+ // infinite VRAM, infinite textureRAM, not accelerated
+ if (pcontextInfo->fAcceleratedMust)
+ {
+ ReportError ("Unable to accelerate window that spans multiple devices");
+ return err;
+ }
+ }
+ else // not draggable on single device
+ {
+ if (!CheckRenderer (hGD, &(pcontextInfo->VRAM), &(pcontextInfo->textureRAM), &depthSizeSupport, pcontextInfo->fAcceleratedMust))
+ {
+ ReportError ("Renderer check failed");
+ return err;
+ }
+ }
+ }
+ // else draggable so must check all for support (each device should have at least one renderer that meets the requirements)
+ else if (!CheckAllDeviceRenderers (&(pcontextInfo->VRAM), &(pcontextInfo->textureRAM), &depthSizeSupport, pcontextInfo->fAcceleratedMust))
+ {
+ ReportError ("Renderer check failed");
+ return err;
+ }
+
+ // do agl
+ if ((Ptr) kUnresolvedCFragSymbolAddress == (Ptr) aglChoosePixelFormat) // check for existance of OpenGL
+ {
+ ReportError ("OpenGL not installed");
+ return noErr;
+ }
+ // we successfully passed the renderer check
+
+ if ((!pcontextInfo->fDraggable && (numDevices == 1))) // not draggable on a single device
+ pcontextInfo->fmt = aglChoosePixelFormat (&hGD, 1, pcontextInfo->aglAttributes); // get an appropriate pixel format
+ else
+ pcontextInfo->fmt = aglChoosePixelFormat (NULL, 0, pcontextInfo->aglAttributes); // get an appropriate pixel format
+ aglReportError ();
+ if (NULL == pcontextInfo->fmt)
+ {
+ ReportError("Could not find valid pixel format");
+ return noErr;
+ }
+
+ *paglContext = aglCreateContext (pcontextInfo->fmt, aglShareContext); // Create an AGL context
+ if (AGL_BAD_MATCH == aglGetError())
+ *paglContext = aglCreateContext (pcontextInfo->fmt, 0); // unable to sahre context, create without sharing
+ aglReportError ();
+ if (NULL == *paglContext)
+ {
+ ReportError ("Could not create context");
+ return noErr;
+ }
+
+ if (!aglSetDrawable (*paglContext, GetWindowPort (pWindow))) // attach the CGrafPtr to the context
+ return aglReportError ();
+
+ if(!aglSetCurrentContext (*paglContext)) // make the context the current context
+ return aglReportError ();
+
+ SetPort (cgrafSave);
+
+ return err;
+}
+
+#pragma mark -
+
+// functions (public) -------------------------------------------------------
+
+// DestroyGLFromWindow
+
+// Destroys context that waas allocated with BuildGLonWindow
+// Ouputs: *paglContext should be NULL on exit
+
+OSStatus DestroyGLFromWindow (AGLContext* paglContext, pstructGLWindowInfo pcontextInfo)
+{
+ OSStatus err;
+
+ if ((!paglContext) || (!*paglContext))
+ return paramErr; // not a valid context
+ glFinish ();
+ aglSetCurrentContext (NULL);
+ err = aglReportError ();
+ aglSetDrawable (*paglContext, NULL);
+ err = aglReportError ();
+ aglDestroyContext (*paglContext);
+ err = aglReportError ();
+ *paglContext = NULL;
+
+ if (pcontextInfo->fmt)
+ {
+ aglDestroyPixelFormat (pcontextInfo->fmt); // pixel format is no longer valid
+ err = aglReportError ();
+ }
+ pcontextInfo->fmt = 0;
+
+ return err;
+}
+
+//-----------------------------------------------------------------------------------------------------------------------
+
+// GetWindowDevice
+
+// Inputs: a valid WindowPtr
+
+// Outputs: the GDHandle that that window is mostly on
+
+// returns the number of devices that the windows content touches
+
+short FindGDHandleFromWindow (WindowPtr pWindow, GDHandle * phgdOnThisDevice)
+{
+ GrafPtr pgpSave;
+ Rect rectWind, rectSect;
+ long greatestArea, sectArea;
+ short numDevices = 0;
+ GDHandle hgdNthDevice;
+
+ if (!pWindow || !phgdOnThisDevice)
+ return 0;
+
+ *phgdOnThisDevice = NULL;
+
+ GetPort (&pgpSave);
+ SetPortWindowPort (pWindow);
+
+
+ GetWindowPortBounds (pWindow, &rectWind);
+ LocalToGlobal ((Point*)& rectWind.top); // convert to global coordinates
+ LocalToGlobal ((Point*)& rectWind.bottom);
+ hgdNthDevice = GetDeviceList ();
+ greatestArea = 0;
+ // check window against all gdRects in gDevice list and remember
+ // which gdRect contains largest area of window}
+ while (hgdNthDevice)
+ {
+ if (TestDeviceAttribute (hgdNthDevice, screenDevice))
+ if (TestDeviceAttribute (hgdNthDevice, screenActive))
+ {
+ // The SectRect routine calculates the intersection
+ // of the window rectangle and this gDevice
+ // rectangle and returns TRUE if the rectangles intersect,
+ // FALSE if they don't.
+ SectRect (&rectWind, &(**hgdNthDevice).gdRect, &rectSect);
+ // determine which screen holds greatest window area
+ // first, calculate area of rectangle on current device
+ sectArea = (long) (rectSect.right - rectSect.left) * (rectSect.bottom - rectSect.top);
+ if (sectArea > 0)
+ numDevices++;
+ if (sectArea > greatestArea)
+ {
+ greatestArea = sectArea; // set greatest area so far
+ *phgdOnThisDevice = hgdNthDevice; // set zoom device
+ }
+ hgdNthDevice = GetNextDevice(hgdNthDevice);
+ }
+ }
+
+ SetPort (pgpSave);
+ return numDevices;
+}
+
+//--------------------------------------------------------------------------------------------
+// private
+
+// returns the largest power of 2 texture <= textureDimension
+// or in the case of texture rectangle returns the next texture size (can be non-power of two)
+
+static long GetNextTextureSize (long textureDimension, long maxTextureSize, Boolean textureRectangle)
+{
+ long targetTextureSize = maxTextureSize; // start at max texture size
+ if (textureRectangle)
+ {
+ if (textureDimension >= targetTextureSize) // the texture dimension is greater than the target texture size (i.e., it fits)
+ return targetTextureSize; // return corresponding texture size
+ else
+ return textureDimension; // jusr return the dimension
+ }
+ else
+ {
+ do // while we have txture sizes check for texture value being equal or greater
+ {
+ if (textureDimension >= targetTextureSize) // the texture dimension is greater than the target texture size (i.e., it fits)
+ return targetTextureSize; // return corresponding texture size
+ }
+ while (targetTextureSize >>= 1); // step down to next texture size smaller
+ }
+ return 0; // no textures fit so return zero
+}
+
+// ---------------------------------
+
+// returns the nuber of textures need to represent a size of textureDimension given
+// requirement for power of 2 textures as the maximum texture size
+// for the overlap case each texture effectively covers two less pixels so must iterate through using whole statement
+
+static long GetTextureNumFromTextureDim (long textureDimension, long maxTextureSize, Boolean texturesOverlap, Boolean textureRectangle)
+{
+ // start at max texture size
+ // loop through each texture size, removing textures in turn which are less than the remaining texture dimension
+ // each texture has 2 pixels of overlap (one on each side) thus effective texture removed is 2 less than texture size
+
+ long i = 0; // initially no textures
+ long bitValue = maxTextureSize; // start at max texture size
+ long texOverlapx2 = texturesOverlap ? 2 : 0;
+ textureDimension -= texOverlapx2; // ignore texture border since we are using effective texure size (by subtracting 2 from the initial size)
+ if (textureRectangle)
+ {
+ // count number of full textures
+ while (textureDimension > (bitValue - texOverlapx2)) // while our texture dimension is greater than effective texture size (i.e., minus the border)
+ {
+ i++; // count a texture
+ textureDimension -= bitValue - texOverlapx2; // remove effective texture size
+ }
+ // add one partial texture
+ i++;
+ }
+ else
+ {
+ do
+ {
+ while (textureDimension >= (bitValue - texOverlapx2)) // while our texture dimension is greater than effective texture size (i.e., minus the border)
+ {
+ i++; // count a texture
+ textureDimension -= bitValue - texOverlapx2; // remove effective texture size
+ }
+ }
+ while ((bitValue >>= 1) > texOverlapx2); // step down to next texture while we are greater than two (less than 4 can't be used due to 2 pixel overlap)
+ if (textureDimension > 0x0) // if any textureDimension is left there is an error, because we can't texture these small segments and in anycase should not have image pixels left
+ ReportErrorNum ("GetTextureNumFromTextureDim error: Texture to small to draw, should not ever get here, texture size remaining:", textureDimension);
+ }
+ return i; // return textures counted
+}
+
+#pragma mark -
+// ==================================
+// public
+
+// disposes OpenGL context, and associated texture list
+
+OSStatus DisposeGLForWindow (WindowRef window)
+{
+ if (window)
+ {
+ pRecImage pWindowInfo = (pRecImage) GetWRefCon (window); // get gl data stored in refcon
+ SetWRefCon (window, 0); // ensure the refcon is not used again
+ if (NULL == pWindowInfo) // if this is non-existant
+ return paramErr; // then drop out
+ if (NULL != pWindowInfo->aglContext)
+ {
+ aglSetCurrentContext (pWindowInfo->aglContext); // ensaure the context we are working with is set to current
+ aglUpdateContext (pWindowInfo->aglContext); // ensaure the context we are working with is set to current
+ glFinish (); // ensure all gl commands are complete
+ glDeleteTextures (pWindowInfo->textureX * pWindowInfo->textureY, pWindowInfo->pTextureName); // delete the complete set of textures used for the window
+ DestroyGLFromWindow (&pWindowInfo->aglContext, &pWindowInfo->glInfo); // preoperly destroy GL context and any associated structures
+ pWindowInfo->aglContext = NULL; // ensure we don't use invlad context
+ }
+ if (NULL != pWindowInfo->pTextureName)
+ {
+ DisposePtr ((Ptr) pWindowInfo->pTextureName); // dispose of the allocate4d texture name storage
+ pWindowInfo->pTextureName = NULL; // ensure we do not use it again
+ }
+ if (pWindowInfo->pImageBuffer) // MUST preserve the buffer if texturing from client memory
+ {
+ //DisposePtr ((Ptr) pWindowInfo->pImageBuffer); // or image buffer
+ pWindowInfo->pImageBuffer = NULL;
+ }
+ DisposePtr ((Ptr) pWindowInfo);
+ return noErr; // we are good to go
+ }
+ else
+ return paramErr; // NULL window ref passed in
+}
+
+// ---------------------------------
+
+// builds the GL context and associated state for the window
+// loads image into a texture or textures
+// disposes of GWorld and image buffer when finished loading textures
+
+OSStatus BuildGLForWindow (WindowRef window)
+{
+ GrafPtr portSave = NULL; // port which is set on entrance to this routine
+ pRecImage pWindowInfo = (pRecImage) GetWRefCon (window); // the info structure for the window stored in the refcon
+ short i; // iterator
+ GLenum textureTarget = GL_TEXTURE_2D;
+
+ if (!pWindowInfo->aglContext) // if we get here and do not have a context built, build one
+ {
+ GetPort (&portSave); // save current port
+ SetPort ((GrafPtr) GetWindowPort (window)); // set port to the current window
+ // set parameters for Carbon SetupGL
+ pWindowInfo->glInfo.fAcceleratedMust = false; // must renderer be accelerated?
+ pWindowInfo->glInfo.VRAM = 0 * 1048576; // minimum VRAM (if not zero this is always required)
+ pWindowInfo->glInfo.textureRAM = 0 * 1048576; // minimum texture RAM (if not zero this is always required)
+ pWindowInfo->glInfo.fDraggable = true; // is this a draggable window
+ pWindowInfo->glInfo.fmt = 0; // output pixel format
+
+ i = 0; // first attribute in array
+ pWindowInfo->glInfo.aglAttributes [i++] = AGL_RGBA; // RGB + Alpha pixels
+ pWindowInfo->glInfo.aglAttributes [i++] = AGL_DOUBLEBUFFER; // doble buffered context
+ pWindowInfo->glInfo.aglAttributes [i++] = AGL_ACCELERATED; // require hardware acceleration
+ pWindowInfo->glInfo.aglAttributes [i++] = AGL_NO_RECOVERY; // 10.0.4 has problems with the GL (disregards UNPACK_ROW_LENGTH) resulting from using no recovery
+ // normally we would use no recovery to ensure the minimum pixel size textures are stored by GL.
+ pWindowInfo->glInfo.aglAttributes [i++] = AGL_NONE; // end parameter list
+ BuildGLonWindow (window, &(pWindowInfo->aglContext), &(pWindowInfo->glInfo), NULL); // build opengl context for our window
+ if (!pWindowInfo->aglContext) // if could not create context
+ DestroyGLFromWindow (&pWindowInfo->aglContext, &pWindowInfo->glInfo); // ensure context is destroyed correctly
+ else // we have a valid context
+ {
+ GLint swap = 0; // swap interval (i.e., VBL sync) setting 1 = sync, 0 = no sync
+ Rect rectPort; // window port rectangle
+ long width = pWindowInfo->imageWidth, height = pWindowInfo->imageHeight; // image width and height
+ GDHandle device; // GDevice to find the constrain the window to
+ Rect deviceRect, availRect, rect; // rect of device which window is on (mostly, area wise at least). avialable area for window (minus dock and menu if req), working rect
+
+ GetWindowGreatestAreaDevice (window, kWindowContentRgn, &device, &deviceRect); // find device the window is mostly on
+ GetAvailableWindowPositioningBounds (device, &availRect); // get the geretest available area for te windoew (mminus doc and menu if applicable)
+ if (width > (availRect.right - availRect.left)) // adjust window width if it is greater than available area (orginally set to image width, see above)
+ width = (availRect.right - availRect.left);
+ if (height > (availRect.bottom - availRect.top)) // adjust window height if it is greater than available area (orginally set to image width, see above)
+ height = (availRect.bottom - availRect.top);
+ SizeWindow (window, (short) width, (short) height, true); // size the window to new width and height
+ ConstrainWindowToScreen(window, kWindowStructureRgn, kWindowConstrainMayResize, NULL, &rect); // ensure window structure region is on the screen
+ GetWindowPortBounds (window, &rectPort); // get port rect for viewport reset
+
+ aglSetCurrentContext (pWindowInfo->aglContext); // set our GL context to this one
+ aglUpdateContext (pWindowInfo->aglContext); // update the context to account for the resize
+ InvalWindowRect (window, &rectPort); // inval the entire window to ensure we get a redraw
+ glViewport (0, 0, rectPort.right - rectPort.left, rectPort.bottom - rectPort.top); // reset viewport to entier window area
+
+ aglSetInteger (pWindowInfo->aglContext, AGL_SWAP_INTERVAL, &swap); // set swap interval to account for vbl syncing or not
+
+ // set correct texture target // if building on 10.0 or 9 this will be undefined
+ #ifdef GL_TEXTURE_RECTANGLE_EXT
+ if (pWindowInfo->fNPOTTextures)
+ textureTarget = GL_TEXTURE_RECTANGLE_EXT;
+ #endif
+
+ // Set texture mapping parameters
+ glEnable (textureTarget); // enable texturing
+
+ glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // set clear color buffer to dark gray
+ glClear (GL_COLOR_BUFFER_BIT); // clear just to color buffer
+ aglSwapBuffers (pWindowInfo->aglContext); // swap the cleared buffer to front
+
+ //GetFNum ("\pMonaco", &fNum); // get font number for named font
+ //pWindowInfo->fontList = BuildFontGL (pWindowInfo->aglContext, fNum, normal, 9); // build display list for fonts for this context (see aglString for more info)
+
+ // if we can use texture rectangle // if building on 10.0 or 9 this will be undefined
+ #ifdef GL_TEXTURE_RECTANGLE_EXT
+ if (pWindowInfo->fNPOTTextures)
+ glEnable(GL_TEXTURE_RECTANGLE_EXT);
+ #endif
+ if (pWindowInfo->fAGPTexturing)
+ glTextureRangeAPPLE(textureTarget, pWindowInfo->textureHeight * pWindowInfo->textureWidth * (pWindowInfo->imageDepth >> 3), pWindowInfo->pImageBuffer);
+ glPixelStorei (GL_UNPACK_ROW_LENGTH, pWindowInfo->textureWidth); // set image width in groups (pixels), accounts for border this ensures proper image alignment row to row
+ // get number of textures x and y
+ // extract the number of horiz. textures needed to tile image
+ pWindowInfo->textureX = GetTextureNumFromTextureDim (pWindowInfo->textureWidth, pWindowInfo->maxTextureSize, pWindowInfo->fOverlapTextures, pWindowInfo->fNPOTTextures);
+ // extract the number of horiz. textures needed to tile image
+ pWindowInfo->textureY = GetTextureNumFromTextureDim (pWindowInfo->textureHeight, pWindowInfo->maxTextureSize, pWindowInfo->fOverlapTextures, pWindowInfo->fNPOTTextures);
+ pWindowInfo->pTextureName = (GLuint *) NewPtrClear ((long) sizeof (GLuint) * pWindowInfo->textureX * pWindowInfo->textureY); // allocate storage for texture name lists
+ glGenTextures (pWindowInfo->textureX * pWindowInfo->textureY, pWindowInfo->pTextureName); // generate textures names need to support tiling
+ {
+ long x, y, k = 0, offsetY, offsetX = 0, currWidth, currHeight; // texture iterators, texture name iterator, image offsets for tiling, current texture width and height
+ for (x = 0; x < pWindowInfo->textureX; x++) // for all horizontal textures
+ {
+ currWidth = GetNextTextureSize (pWindowInfo->textureWidth - offsetX, pWindowInfo->maxTextureSize, pWindowInfo->fNPOTTextures); // use remaining to determine next texture size
+ // (basically greatest power of 2 which fits into remaining space)
+ offsetY = 0; // reset vertical offest for every column
+ for (y = 0; y < pWindowInfo->textureY; y++) // for all vertical textures
+ {
+ // buffer pointer is at base + rows * row size + columns
+ unsigned char * pBuffer = pWindowInfo->pImageBuffer +
+ offsetY * pWindowInfo->textureWidth * (pWindowInfo->imageDepth >> 3) +
+ offsetX * (pWindowInfo->imageDepth >> 3);
+ currHeight = GetNextTextureSize (pWindowInfo->textureHeight - offsetY, pWindowInfo->maxTextureSize, pWindowInfo->fNPOTTextures); // use remaining to determine next texture size
+ glBindTexture (textureTarget, pWindowInfo->pTextureName[k++]);
+ if (pWindowInfo->fAGPTexturing) {
+ glTexParameterf (textureTarget, GL_TEXTURE_PRIORITY, 0.0f); // AGP texturing
+ glTexParameteri (textureTarget, GL_TEXTURE_STORAGE_HINT_APPLE, GL_STORAGE_SHARED_APPLE);
+ }
+ else
+ glTexParameterf (textureTarget, GL_TEXTURE_PRIORITY, 1.0f);
+
+ #ifdef GL_UNPACK_CLIENT_STORAGE_APPLE
+ if (pWindowInfo->fClientTextures)
+ glPixelStorei (GL_UNPACK_CLIENT_STORAGE_APPLE, 1);
+ else
+ glPixelStorei (GL_UNPACK_CLIENT_STORAGE_APPLE, 0);
+ #endif
+
+ glTexParameteri (textureTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri (textureTarget, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameteri (textureTarget, GL_TEXTURE_WRAP_S, gpOpenGLCaps->edgeClampParam);
+ glTexParameteri (textureTarget, GL_TEXTURE_WRAP_T, gpOpenGLCaps->edgeClampParam);
+ glReportError (); // report any errors so far
+ glTexImage2D (textureTarget, 0, GL_RGBA, currWidth, currHeight, 0,
+ GL_BGRA_EXT, pWindowInfo->imageDepth == 32 ? GL_UNSIGNED_INT_8_8_8_8_REV : GL_UNSIGNED_SHORT_1_5_5_5_REV,
+ pBuffer); // texture with current width and height at pBuffer location in image buffer with image size as GL_UNPACK_ROW_LENGTH
+ glReportError (); // report any errors
+ offsetY += currHeight - 2 * pWindowInfo->fOverlapTextures; // offset in for the amount of texture used,
+ // since we are overlapping the effective texture used is 2 texels less than texture width
+ }
+ offsetX += currWidth - 2 * pWindowInfo->fOverlapTextures; // offset in for the amount of texture used,
+ // since we are overlapping the effective texture used is 2 texels less than texture width
+ }
+ }
+ if (false == pWindowInfo->fClientTextures) // MUST preserve the buffer if texturing from client memory
+ {
+ DisposePtr ((Ptr) pWindowInfo->pImageBuffer); // or image buffer
+ pWindowInfo->pImageBuffer = NULL;
+ }
+ }
+ SetPort (portSave); //reset port
+ }
+ return noErr; // we done
+}
+
+// ---------------------------------
+
+// Handle updating context for window moves and resizing
+
+OSStatus ResizeMoveGLWindow (WindowRef window)
+{
+ OSStatus err = noErr; // no errors to start
+ Rect rectPort; // new port rect
+ pRecImage pWindowInfo = (pRecImage) GetWRefCon (window); // get GL info;
+ if (window && pWindowInfo) // if we have a window
+ {
+ GetWindowPortBounds (window, &rectPort);
+ pWindowInfo->zoomX = (float) (rectPort.right - rectPort.left) / (float) pWindowInfo->imageWidth;
+ pWindowInfo->zoomY = (float) (rectPort.bottom - rectPort.top) / (float) pWindowInfo->imageHeight;
+
+ if (!aglUpdateContext (pWindowInfo->aglContext)) // update the context to ensure gl knows about the move or resize
+ aglReportError (); // report any error with update context
+ if (noErr != err)
+ ReportErrorNum ("ResizeMoveGLWindow error with InvalWindowRect on window: ", err); // should not get erro here, but who knows
+ err = InvalWindowRect (window, &rectPort);
+ }
+ else
+ err = paramErr; // bad window
+ return err; // return any error
+}
+
+// ---------------------------------
+
+// main GL drawing routine, should be valid window passed in (will setupGL if require). Draw image
+
+void DrawGL (WindowRef window)
+{
+ Rect rectPort; // rectangle for port
+ pRecImage pWindowInfo; // the gl info for the target window
+ long width, height; // width and height or the port and the row of the raster position
+ long effectiveTextureMod = 0; // texture size modification (inset) to account for borders
+ long x, y, k = 0, offsetY, offsetX = 0, currTextureWidth, currTextureHeight;
+ GLenum textureTarget = GL_TEXTURE_2D;
+
+ if (NULL == window) // if we do not have a window
+ return; // drop out
+ pWindowInfo = (pRecImage) GetWRefCon (window); // get the gl info for the window
+ if (NULL == pWindowInfo) // if this is non-existant
+ return; // then drop out
+ if (NULL == pWindowInfo->aglContext) // try to buld the context if we don't have one (safety check)
+ BuildGLForWindow (window);
+ if (NULL == pWindowInfo->aglContext) // if we still don't have one then drop out
+ return;
+
+ if (pWindowInfo->fOverlapTextures)
+ effectiveTextureMod = 2; // if we overlap then we need to inset the textures passed to the drawing code
+ // set texture target
+#ifdef GL_TEXTURE_RECTANGLE_EXT
+ if (pWindowInfo->fNPOTTextures)
+ textureTarget = GL_TEXTURE_RECTANGLE_EXT;
+#endif
+
+ aglSetCurrentContext (pWindowInfo->aglContext); // ensaure the context we are working with is set to current
+ aglUpdateContext (pWindowInfo->aglContext); // ensaure the context we are working with is set to current
+
+ GetWindowPortBounds (window, &rectPort); // get the current port (window) bounds
+ width = rectPort.right - rectPort.left; // find width
+ height = rectPort.bottom - rectPort.top; // and height
+ glViewport (0, 0, width, height); // set the viewport to cover entire window
+
+ glMatrixMode (GL_PROJECTION); // set projection matrix
+ glLoadIdentity (); // to indetity
+ glMatrixMode (GL_MODELVIEW); // set modelview matrix
+ glLoadIdentity (); // to identity
+ glReportError (); // report any GL errors so far
+
+ // set the model view matrix for an orthographic view scaled to one screen pixel equal image pixel (independent of image zoom)
+ glScalef (2.0f / width, -2.0f / height, 1.0f); // scale to port per pixel scale
+ //glTranslatef (pWindowInfo->centerX, pWindowInfo->centerY, 0.0f); // translate for image movement
+ //glRotatef (0.0f, 0.0f, 0.0f, 1.0f); // ratate matrix for image rotation
+ glReportError (); // report any GL errors
+
+ glClear (GL_COLOR_BUFFER_BIT); // clear the color buffer before drawing
+
+ // draw image
+ glEnable (textureTarget); // enable texturing
+ glColor3f (1.0f, 1.0f, 1.0f); // white polygons
+ // offset x and y are used to draw the polygon and need to represent the texture effective edges (without borders)
+ // so walk the texture size images adjusting for each border
+ for (x = 0; x < pWindowInfo->textureX; x++) // for all horizontal textures
+ {
+ // use remaining to determine next texture size
+ currTextureWidth = GetNextTextureSize (pWindowInfo->textureWidth - offsetX, pWindowInfo->maxTextureSize, pWindowInfo->fNPOTTextures) - effectiveTextureMod; // current effective texture width for drawing
+ offsetY = 0; // start at top
+ for (y = 0; y < pWindowInfo->textureY; y++) // for a complete column
+ {
+ // use remaining to determine next texture size
+ currTextureHeight = GetNextTextureSize (pWindowInfo->textureHeight - offsetY, pWindowInfo->maxTextureSize, pWindowInfo->fNPOTTextures) - effectiveTextureMod; // effective texture height for drawing
+ glBindTexture(textureTarget, pWindowInfo->pTextureName[k++]); // work through textures in same order as stored, setting each texture name as current in turn
+ if (!pWindowInfo->fAGPTexturing)
+ glTexSubImage2D(textureTarget, 0, 0, 0, currTextureWidth, currTextureHeight, GL_BGRA, pWindowInfo->imageDepth == 32 ? GL_UNSIGNED_INT_8_8_8_8_REV : GL_UNSIGNED_SHORT_1_5_5_5_REV, pWindowInfo->pImageBuffer);
+ glReportError (); // report any errors
+ {
+ float endX = pWindowInfo->fTileTextures ? currTextureWidth + offsetX : pWindowInfo->imageWidth;
+ float endY = pWindowInfo->fTileTextures ? currTextureHeight + offsetY : pWindowInfo->imageHeight;
+ float startXDraw = (offsetX - pWindowInfo->imageWidth * 0.5f) * pWindowInfo->zoomX; // left edge of poly: offset is in image local coordinates convert to world coordinates
+ float endXDraw = (endX - pWindowInfo->imageWidth * 0.5f) * pWindowInfo->zoomX; // right edge of poly: offset is in image local coordinates convert to world coordinates
+ float startYDraw = (offsetY - pWindowInfo->imageHeight * 0.5f) * pWindowInfo->zoomY; // top edge of poly: offset is in image local coordinates convert to world coordinates
+ float endYDraw = (endY - pWindowInfo->imageHeight * 0.5f) * pWindowInfo->zoomY; // bottom edge of poly: offset is in image local coordinates convert to world coordinates
+ float texOverlap = pWindowInfo->fOverlapTextures ? 1.0f : 0.0f; // size of texture overlap, switch based on whether we are using overlap or not
+ float startXTexCoord = texOverlap / (currTextureWidth + 2.0f * texOverlap); // texture right edge coordinate (stepped in one pixel for border if required)
+ float endXTexCoord = 1.0f - startXTexCoord; // texture left edge coordinate (stepped in one pixel for border if required)
+ float startYTexCoord = texOverlap / (currTextureHeight + 2.0f * texOverlap); // texture top edge coordinate (stepped in one pixel for border if required)
+ float endYTexCoord = 1.0f - startYTexCoord; // texture bottom edge coordinate (stepped in one pixel for border if required)
+ if (pWindowInfo->fNPOTTextures)
+ {
+ startXTexCoord = texOverlap; // texture right edge coordinate (stepped in one pixel for border if required)
+ endXTexCoord = currTextureWidth + texOverlap; // texture left edge coordinate (stepped in one pixel for border if required)
+ startYTexCoord = texOverlap; // texture top edge coordinate (stepped in one pixel for border if required)
+ endYTexCoord = currTextureHeight + texOverlap; // texture bottom edge coordinate (stepped in one pixel for border if required)
+ }
+ if (endX > (pWindowInfo->imageWidth + 0.5)) // handle odd image sizes, (+0.5 is to ensure there is no fp resolution problem in comparing two fp numbers)
+ {
+ endXDraw = (pWindowInfo->imageWidth * 0.5f) * pWindowInfo->zoomX; // end should never be past end of image, so set it there
+ if (pWindowInfo->fNPOTTextures)
+ endXTexCoord -= 1.0f;
+ else
+ endXTexCoord = 1.0f - 2.0f * startXTexCoord; // for the last texture in odd size images there are two texels of padding so step in 2
+ }
+ if (endY > (pWindowInfo->imageHeight + 0.5f)) // handle odd image sizes, (+0.5 is to ensure there is no fp resolution problem in comparing two fp numbers)
+ {
+ endYDraw = (pWindowInfo->imageHeight * 0.5f) * pWindowInfo->zoomY; // end should never be past end of image, so set it there
+ if (pWindowInfo->fNPOTTextures)
+ endYTexCoord -= 1.0f;
+ else
+ endYTexCoord = 1.0f - 2.0f * startYTexCoord; // for the last texture in odd size images there are two texels of padding so step in 2
+ }
+
+ glBegin (GL_TRIANGLE_STRIP); // draw either tri strips of line strips
+ glTexCoord2f (startXTexCoord, startYTexCoord); // draw upper left in world coordinates
+ glVertex3d (startXDraw, startYDraw, 0.0);
+
+ glTexCoord2f (endXTexCoord, startYTexCoord); // draw lower left in world coordinates
+ glVertex3d (endXDraw, startYDraw, 0.0);
+
+ glTexCoord2f (startXTexCoord, endYTexCoord); // draw upper right in world coordinates
+ glVertex3d (startXDraw, endYDraw, 0.0);
+
+ glTexCoord2f (endXTexCoord, endYTexCoord); // draw lower right in world coordinates
+ glVertex3d (endXDraw, endYDraw, 0.0);
+ glEnd();
+
+ }
+
+ //////////////////////
+
+ glReportError (); // report any errors
+ offsetY += currTextureHeight; // offset drawing position for next texture vertically
+ }
+ offsetX += currTextureWidth; // offset drawing position for next texture horizontally
+ }
+ glReportError (); // report any errors
+
+ glDisable (textureTarget); // done with texturing
+
+ aglSwapBuffers (pWindowInfo->aglContext);
+}
+
+// finds the minimum OpenGL capabilites across all displays and GPUs attached to machine.
+
+static void FindMinimumOpenGLCapabilities (pRecGLCap pOpenGLCaps)
+{
+ WindowPtr pWin = NULL;
+ Rect rectWin = {0, 0, 10, 10};
+ GLint attrib[] = { AGL_RGBA, AGL_NONE };
+ AGLPixelFormat fmt = NULL;
+ AGLContext ctx = NULL;
+ GLint deviceMaxTextureSize = 0, NPOTDMaxTextureSize = 0;
+
+ if (NULL != gpOpenGLCaps)
+ {
+ // init desired caps to max values
+ pOpenGLCaps->f_ext_texture_rectangle = true;
+ pOpenGLCaps->f_ext_client_storage = true;
+ pOpenGLCaps->f_ext_packed_pixel = true;
+ pOpenGLCaps->f_ext_texture_edge_clamp = true;
+ pOpenGLCaps->f_gl_texture_edge_clamp = true;
+ pOpenGLCaps->maxTextureSize = 0x7FFFFFFF;
+ pOpenGLCaps->maxNOPTDTextureSize = 0x7FFFFFFF;
+
+ // build window
+ pWin = NewCWindow (0L, &rectWin, NULL, false,
+ plainDBox, (WindowPtr) -1L, true, 0L);
+
+ // build context
+ fmt = aglChoosePixelFormat(NULL, 0, attrib);
+ if (fmt)
+ ctx = aglCreateContext(fmt, NULL);
+ if (ctx)
+ {
+ GDHandle hgdNthDevice;
+
+ aglSetDrawable(ctx, GetWindowPort (pWin));
+ aglSetCurrentContext(ctx);
+
+ // for each display
+ hgdNthDevice = GetDeviceList ();
+ while (hgdNthDevice)
+ {
+ if (TestDeviceAttribute (hgdNthDevice, screenDevice))
+ if (TestDeviceAttribute (hgdNthDevice, screenActive))
+ {
+ // move window to display
+ MoveWindow (pWin, (**hgdNthDevice).gdRect.left + 5, (**hgdNthDevice).gdRect.top + 5, false);
+ aglUpdateContext(ctx);
+
+ // for each cap (this can obviously be expanded)
+ // if this driver/GPU/display is less capable
+ // save this minimum capability
+ {
+ // get strings
+ enum { kShortVersionLength = 32 };
+ const GLubyte * strVersion = glGetString (GL_VERSION); // get version string
+ const GLubyte * strExtension = glGetString (GL_EXTENSIONS); // get extension string
+
+ // get just the non-vendor specific part of version string
+ GLubyte strShortVersion [kShortVersionLength];
+ short i = 0;
+ while ((((strVersion[i] <= '9') && (strVersion[i] >= '0')) || (strVersion[i] == '.')) && (i < kShortVersionLength)) // get only basic version info (until first space)
+ strShortVersion [i] = strVersion[i++];
+ strShortVersion [i] = 0; //truncate string
+
+ // compare capabilities based on extension string and GL version
+ pOpenGLCaps->f_ext_texture_rectangle =
+ pOpenGLCaps->f_ext_texture_rectangle && (NULL != strstr ((const char *) strExtension, "GL_EXT_texture_rectangle"));
+ pOpenGLCaps->f_ext_client_storage =
+ pOpenGLCaps->f_ext_client_storage && (NULL != strstr ((const char *) strExtension, "GL_APPLE_client_storage"));
+ pOpenGLCaps->f_ext_packed_pixel =
+ pOpenGLCaps->f_ext_packed_pixel && (NULL != strstr ((const char *) strExtension, "GL_APPLE_packed_pixel"));
+ pOpenGLCaps->f_ext_texture_edge_clamp =
+ pOpenGLCaps->f_ext_texture_edge_clamp && (NULL != strstr ((const char *) strExtension, "GL_SGIS_texture_edge_clamp"));
+ pOpenGLCaps->f_gl_texture_edge_clamp =
+ pOpenGLCaps->f_gl_texture_edge_clamp && (!strstr ((const char *) strShortVersion, "1.0") && !strstr ((const char *) strShortVersion, "1.1")); // if not 1.0 and not 1.1 must be 1.2 or greater
+
+ // get device max texture size
+ glGetIntegerv (GL_MAX_TEXTURE_SIZE, &deviceMaxTextureSize);
+ if (deviceMaxTextureSize < pOpenGLCaps->maxTextureSize)
+ pOpenGLCaps->maxTextureSize = deviceMaxTextureSize;
+ // get max size of non-power of two texture on devices which support
+ if (NULL != strstr ((const char *) strExtension, "GL_EXT_texture_rectangle"))
+ {
+ #ifdef GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT
+ glGetIntegerv (GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT, &NPOTDMaxTextureSize);
+ if (NPOTDMaxTextureSize < pOpenGLCaps->maxNOPTDTextureSize)
+ pOpenGLCaps->maxNOPTDTextureSize = NPOTDMaxTextureSize;
+ #endif
+ }
+ }
+ // next display
+ hgdNthDevice = GetNextDevice(hgdNthDevice);
+ }
+ }
+ aglDestroyContext( ctx );
+ }
+ else
+ { // could not build context set caps to min
+ pOpenGLCaps->f_ext_texture_rectangle = false;
+ pOpenGLCaps->f_ext_client_storage = false;
+ pOpenGLCaps->f_ext_packed_pixel = false;
+ pOpenGLCaps->f_ext_texture_edge_clamp = false;
+ pOpenGLCaps->f_gl_texture_edge_clamp = false;
+ pOpenGLCaps->maxTextureSize = 0;
+ }
+
+ // set clamp param based on retrieved capabilities
+ if (pOpenGLCaps->f_gl_texture_edge_clamp) // if OpenGL 1.2 or later and texture edge clamp is supported natively
+ pOpenGLCaps->edgeClampParam = GL_CLAMP_TO_EDGE; // use 1.2+ constant to clamp texture coords so as to not sample the border color
+ else if (pOpenGLCaps->f_ext_texture_edge_clamp) // if GL_SGIS_texture_edge_clamp extension supported
+ pOpenGLCaps->edgeClampParam = GL_CLAMP_TO_EDGE_SGIS; // use extension to clamp texture coords so as to not sample the border color
+ else
+ pOpenGLCaps->edgeClampParam = GL_CLAMP; // clamp texture coords to [0, 1]
+
+ aglDestroyPixelFormat( fmt );
+ DisposeWindow( pWin );
+ }
+}
+
+//--------------------------------------------------------------------------------------------
+
+static OSStatus
+WindowEventHandler( EventHandlerCallRef inCaller, EventRef inEvent, void* inRefcon )
+{
+ OSStatus err = eventNotHandledErr;
+ WindowRef window = (WindowRef) inRefcon;
+
+ if( GetEventClass(inEvent) == kEventClassMouse )
+ {
+ Point mousePoint; // UInt32 modifiers;
+ verify_noerr( GetEventParameter(inEvent, kEventParamMouseLocation, typeQDPoint, NULL, sizeof(Point), NULL, &mousePoint) );
+ pRecImage pWindowInfo = (pRecImage) GetWRefCon (window); // get the gl info for the window
+ if(pWindowInfo) {
+ SetPortWindowPort(window);
+ GlobalToLocal (&mousePoint); //convert mouse coordinates to local coordintes prior to recording
+ mousePoint.h /= pWindowInfo->zoomX; mousePoint.v /= pWindowInfo->zoomY;
+ if(mousePoint.h >= 0 && mousePoint.h < pWindowInfo->imageWidth && mousePoint.v >= 0 && mousePoint.v < pWindowInfo->imageHeight)
+ g_video->on_mouse(mousePoint.h, mousePoint.v, GetEventKind(inEvent) == kEventMouseUp?-1:1), err = noErr;
+ }
+ }
+ else if( GetEventClass(inEvent) == kEventClassKeyboard )
+ {
+ char ch;
+ verify_noerr( GetEventParameter( inEvent, kEventParamKeyMacCharCodes, typeChar, NULL, sizeof( ch ), NULL, &ch ) );
+ if(g_video)
+ g_video->on_key(ch);
+ }
+ else //if( GetEventClass(inEvent) == kEventClassWindow )
+ {
+ if (GetEventKind(inEvent) == kEventWindowDrawContent)
+ {
+ //DrawGL(window);
+ err = noErr;
+ }
+ else if (GetEventKind(inEvent) == kEventWindowClose)
+ {
+ if (window)
+ {
+ g_video->running = false;
+ }
+ err = noErr;
+ }
+ else if (GetEventKind(inEvent) == kEventWindowShowing)
+ {
+ err = BuildGLForWindow (window);
+ }
+ else if ((GetEventKind(inEvent) == kEventWindowResizeCompleted) || (GetEventKind(inEvent) == kEventWindowDragCompleted))
+ {
+ err = ResizeMoveGLWindow (window);
+ }
+ else if (GetEventKind(inEvent) == kEventWindowZoomed)
+ {
+ err = ResizeMoveGLWindow (window);
+ }
+ }
+
+ return err;
+}
+//--------------------------------------------------------------------------------------------
+DEFINE_ONE_SHOT_HANDLER_GETTER( WindowEventHandler )
+
+//--------------------------------------------------------------------------------------------
+WindowRef HandleNew()
+{
+ OSStatus err;
+ WindowRef window;
+ pRecImage pWindowInfo = NULL;
+ static const EventTypeSpec kWindowEvents[] =
+ {
+ { kEventClassMouse, kEventMouseUp },
+ { kEventClassMouse, kEventMouseDown },
+ { kEventClassKeyboard, kEventRawKeyDown },
+// { kEventClassCommand, kEventCommandProcess },
+ { kEventClassWindow, kEventWindowShowing },
+ { kEventClassWindow, kEventWindowClose },
+ { kEventClassWindow, kEventWindowDrawContent },
+ { kEventClassWindow, kEventWindowResizeCompleted },
+ { kEventClassWindow, kEventWindowDragCompleted },
+ { kEventClassWindow, kEventWindowZoomed}
+ };
+ if (!gpOpenGLCaps)
+ {
+ gpOpenGLCaps = (pRecGLCap) NewPtrClear (sizeof (recGLCap));
+ FindMinimumOpenGLCapabilities (gpOpenGLCaps);
+ }
+
+ // Create a window. "MainWindow" is the name of the window object. This name is set in
+ // InterfaceBuilder when the nib is created.
+ err = CreateWindowFromNib( sNibRef, CFSTR("MainWindow"), &window );
+ require_noerr( err, CantCreateWindow );
+ // We don't need the nib reference anymore.
+ DisposeNibReference(sNibRef);
+
+ pWindowInfo = (recImage *) NewPtrClear (sizeof (recImage));
+ pWindowInfo->textureWidth = pWindowInfo->imageWidth = g_sizex;
+ pWindowInfo->textureHeight = pWindowInfo->imageHeight = g_sizey;
+ pWindowInfo->imageDepth = 32;
+ pWindowInfo->fTileTextures = true;
+ pWindowInfo->fOverlapTextures = false; // TODO: ???
+ pWindowInfo->maxTextureSize = gpOpenGLCaps->maxTextureSize;
+ pWindowInfo->fNPOTTextures = gpOpenGLCaps->f_ext_texture_rectangle;
+ pWindowInfo->fClientTextures = gpOpenGLCaps->f_ext_client_storage; // texture from client memory if available
+ pWindowInfo->fAGPTexturing = true; // if AGP texturing selected
+ pWindowInfo->pImageBuffer = (unsigned char*) g_pImg;
+ // set default parameters for this image
+ pWindowInfo->zoomX = 1.0f; // pixel 1 to 1 size
+ pWindowInfo->zoomY = 1.0f; // pixel 1 to 1 size
+ SetWRefCon (window, (long) pWindowInfo);
+ char buffer[256]; buffer[0] = snprintf(buffer+1, 255, "%s", g_video->title);
+ SetWTitle (window, (ConstStr255Param)buffer);
+ // Install a command handler on the window. We don't use this handler yet, but nearly all
+ // Carbon apps will need to handle commands, so this saves everyone a little typing.
+ InstallStandardEventHandler(GetWindowEventTarget(window));
+ InstallWindowEventHandler( window, GetWindowEventHandlerUPP(),
+ GetEventTypeCount( kWindowEvents ), kWindowEvents, window, NULL );
+ if (noErr != BuildGLForWindow (window))
+ {
+ DisposeGLForWindow (window);
+ DisposeWindow (window);
+ return 0;
+ }
+
+ // Position new windows in a staggered arrangement on the main screen
+ RepositionWindow( window, NULL, kWindowCascadeOnMainScreen );
+
+ // The window was created hidden, so show it
+ ShowWindow( window );
+ return window;
+
+CantCreateWindow:
+ return 0;
+}
+
+
+//--------------------------------------------------------------------------------------------
+static OSStatus
+AppEventHandler( EventHandlerCallRef inCaller, EventRef inEvent, void* inRefcon )
+{
+ OSStatus result = eventNotHandledErr;
+
+ return result;
+}
+
+//=======================================================================================================
+
+video::video()
+ : red_mask(0xff0000), red_shift(16), green_mask(0xff00),
+ green_shift(8), blue_mask(0xff), blue_shift(0), depth(24)
+{
+ assert(g_video == 0);
+ g_video = this; title = "Video"; updating = true; calc_fps = false;
+}
+
+bool video::init_window(int x, int y)
+{
+ g_sizex = x; g_sizey = y; g_window = 0;
+ g_pImg = new unsigned int[x*y];
+
+ // Check for graphics availability
+ if( CGGetOnlineDisplayList(0, NULL, NULL) ) {
+ running = true; // console mode
+ return false;
+ }
+
+ OSStatus err;
+ static const EventTypeSpec kAppEvents[] =
+ {
+ { kEventClassCommand, kEventCommandProcess }
+ };
+
+ // Create a Nib reference, passing the name of the nib file (without the .nib extension).
+ // CreateNibReference only searches into the application bundle.
+ err = CreateNibReference( CFSTR("main"), &sNibRef );
+ require_noerr( err, ReturnLabel );
+
+ // Install our handler for common commands on the application target
+ // Register for standard event handlers
+ InstallStandardEventHandler(GetApplicationEventTarget()); // Doesn't work?
+ verify_noerr( InstallApplicationEventHandler( NewEventHandlerUPP( AppEventHandler ),
+ GetEventTypeCount( kAppEvents ), kAppEvents, 0, NULL ) );
+
+ // Once the nib reference is created, set the menu bar. "MainMenu" is the name of the menu bar
+ // object. This name is set in InterfaceBuilder when the nib is created.
+ //err = SetMenuBarFromNib( sNibRef, CFSTR("MenuBar") );
+ //require_noerr( err, ReturnLabel );
+ InstallStandardEventHandler(GetMenuEventTarget(AcquireRootMenu()));
+
+ // Create a new window. A full-fledged application would do this from an AppleEvent handler for kAEOpenApplication.
+ g_window = HandleNew();
+
+ReturnLabel:
+ return running = g_window != 0;
+}
+
+bool video::init_console()
+{
+ running = true;
+ return true;
+}
+
+void video::terminate()
+{
+ g_video = 0; running = false;
+ if(g_pImg) { delete[] g_pImg; g_pImg = 0; }
+ if(g_window) {
+ DisposeGLForWindow (g_window);
+ DisposeWindow (g_window);
+ g_window = 0;
+ }
+}
+
+video::~video()
+{
+ if(g_video) terminate();
+}
+
+//! Count and display FPS count in titlebar
+bool video::next_frame()
+{
+ if(!running) return false;
+ if(!g_window) return running;
+ //! try acquire mutex if threaded code, returns on failure
+ if(threaded && pthread_mutex_trylock(&g_mutex))
+ return running;
+ g_fps++;
+ struct timezone tz; struct timeval now_time; gettimeofday(&now_time, &tz);
+ double sec = (now_time.tv_sec+1.0*now_time.tv_usec/1000000.0) - (g_time.tv_sec+1.0*g_time.tv_usec/1000000.0);
+ if(sec > 1) {
+ memcpy(&g_time, &now_time, sizeof(g_time));
+ if(calc_fps) {
+ double fps = g_fps; g_fps = 0;
+ char buffer[256]; buffer[0] = snprintf(buffer+1, 255, "%s%s: %d fps", title, updating?"":" (no updating)", int(fps/sec));
+ SetWTitle (g_window, (ConstStr255Param) buffer );
+ }
+ }
+
+ EventRef theEvent;
+ EventTargetRef theTarget;
+ OSStatus err;
+ // Run the event loop
+
+ theTarget = GetEventDispatcherTarget();
+ while( (err = ReceiveNextEvent(0, NULL, kEventDurationNoWait, true, &theEvent)) == noErr)
+ {
+ SendEventToEventTarget(theEvent, theTarget);
+ ReleaseEvent(theEvent);
+ }
+ if(err != eventLoopTimedOutErr) running = false;
+ if(updating) {
+ pRecImage pWindowInfo = (pRecImage) GetWRefCon (g_window); // get the gl info for the window
+ if(pWindowInfo) DrawGL(g_window);
+ }
+ if(threaded) pthread_mutex_unlock(&g_mutex);
+ return true;
+}
+
+//! Do standart loop
+void video::main_loop()
+{
+ struct timezone tz; gettimeofday(&g_time, &tz);
+ //RunApplicationEventLoop(); -- using another application loop model
+ on_process();
+}
+
+//! Change window title
+void video::show_title()
+{
+ char buffer[256]; buffer[0] = snprintf(buffer+1, 255, "%s", title);
+ SetWTitle (g_window, (ConstStr255Param) buffer );
+}
+
+///////////////////////////////////////////// public methods of video class ///////////////////////
+
+drawing_area::drawing_area(int x, int y, int sizex, int sizey)
+ : start_x(x), start_y(y), size_x(sizex), size_y(sizey), pixel_depth(24),
+ base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex), ptr32(g_pImg)
+{
+ assert(x < g_sizex); assert(y < g_sizey);
+ assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);
+
+ index = base_index; // current index
+}
+
+drawing_area::~drawing_area() {}
diff --git a/examples/common/gui/video.h b/examples/common/gui/video.h
new file mode 100644
index 0000000..d562768
--- /dev/null
+++ b/examples/common/gui/video.h
@@ -0,0 +1,177 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __VIDEO_H__
+#define __VIDEO_H__
+
+#include <cassert>
+#if _WIN32 || _WIN64
+#include <windows.h>
+#else
+#include <unistd.h>
+#endif
+
+typedef unsigned int color_t;
+typedef unsigned char colorcomp_t;
+
+//! Sipmle proxy class for managing of different video systems
+class video
+{
+ //! colorspace information
+ char depth, red_shift, green_shift, blue_shift;
+ color_t red_mask, green_mask, blue_mask;
+ friend class drawing_area;
+
+public:
+ //! Constructor
+ video();
+ //! Destructor
+ ~video();
+ //! member to set window name
+ const char *title;
+ //! true is enable to show fps
+ bool calc_fps;
+ //! if true: on windows fork processing thread for on_process(), on non-windows note that next_frame() is called concurrently.
+ bool threaded;
+ //! true while running within main_loop()
+ bool running;
+ //! if true, do gui updating
+ bool updating;
+ //! initialize graphical video system
+ bool init_window(int sizex, int sizey);
+ //! initialize console. returns true if console is available
+ bool init_console();
+ //! terminate video system
+ void terminate();
+ //! Do standard event & processing loop. Use threaded = true to separate event/updating loop from frame processing
+ void main_loop();
+ //! Process next frame
+ bool next_frame();
+ //! Change window title
+ void show_title();
+ //! translate RGB components into packed type
+ inline color_t get_color(colorcomp_t red, colorcomp_t green, colorcomp_t blue) const;
+
+ //! Mouse events handler.
+ virtual void on_mouse(int x, int y, int key) { }
+ //! Mouse events handler.
+ virtual void on_key(int key) { }
+ //! Main processing loop. Redefine with your own
+ virtual void on_process() { while(next_frame()); }
+
+#ifdef _WINDOWS
+ //! Windows specific members
+ //! if VIDEO_WINMAIN isn't defined then set this just before init() by arguments of WinMain
+ static HINSTANCE win_hInstance; static int win_iCmdShow;
+ //! optionally call it just before init() to set own. Use ascii strings convention
+ void win_set_class(WNDCLASSEX &);
+ //! load and set accelerator table from resources
+ void win_load_accelerators(int idc);
+#endif
+};
+
+//! Drawing class
+class drawing_area
+{
+ const size_t base_index, max_index, index_stride;
+ const char pixel_depth;
+ unsigned int * const ptr32;
+ size_t index;
+public:
+ const int start_x, start_y, size_x, size_y;
+ //! constructor
+ drawing_area(int x, int y, int sizex, int sizey);
+ //! destructor
+ ~drawing_area();
+ //! set current position. local_x could be bigger then size_x
+ inline void set_pos(int local_x, int local_y);
+ //! put pixel in current position with incremental address calculating to next right pixel
+ inline void put_pixel(color_t color);
+ //! draw pixel at position by packed color
+ void set_pixel(int localx, int localy, color_t color)
+ { set_pos(localx, localy); put_pixel(color); }
+};
+
+inline color_t video::get_color(colorcomp_t red, colorcomp_t green, colorcomp_t blue) const
+{
+ if(red_shift == 16) // only for depth == 24 && red_shift > blue_shift
+ return (red<<16) | (green<<8) | blue;
+ else if(depth >= 24)
+ return (red<<red_shift) | (green<<green_shift) | (blue<<blue_shift);
+ else if(depth > 0) {
+ register char bs = blue_shift, rs = red_shift;
+ if(blue_shift < 0) blue >>= -bs, bs = 0;
+ else /*red_shift < 0*/ red >>= -rs, rs = 0;
+ return (red<<rs)&red_mask | (green<<green_shift)&green_mask | (blue<<bs)&blue_mask;
+ } else { // UYVY colorspace
+ register unsigned y, u, v;
+ y = red * 77 + green * 150 + blue * 29; // sum(77+150+29=256) * max(=255): limit->2^16
+ u = (2048 + (blue << 3) - (y >> 5)) >> 4; // (limit->2^12)>>4
+ v = (2048 + (red << 3) - (y >> 5)) >> 4;
+ y = y >> 8;
+ return u | (y << 8) | (v << 16) | (y << 24);
+ }
+}
+
+inline void drawing_area::set_pos(int local_x, int local_y)
+{
+ index = base_index + local_x + local_y*index_stride;
+}
+
+inline void drawing_area::put_pixel(color_t color)
+{
+ assert(index < max_index);
+ if(pixel_depth > 16) ptr32[index++] = color;
+ else if(pixel_depth > 0)
+ ((unsigned short*)ptr32)[index++] = (unsigned short)color;
+ else { // UYVY colorspace
+ if(index&1) color >>= 16;
+ ((unsigned short*)ptr32)[index++] = (unsigned short)color;
+ }
+}
+
+#if defined(_WINDOWS) && (defined(VIDEO_WINMAIN) || defined(VIDEO_WINMAIN_ARGS) )
+#include <cstdlib>
+//! define WinMain for subsystem:windows.
+#ifdef VIDEO_WINMAIN_ARGS
+int main(int, char *[]);
+#else
+int main();
+#endif
+int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR szCmdLine, int iCmdShow)
+{
+ video::win_hInstance = hInstance; video::win_iCmdShow = iCmdShow;
+#ifdef VIDEO_WINMAIN_ARGS
+ return main(__argc, __argv);
+#else
+ return main();
+#endif
+}
+#endif
+
+#endif// __VIDEO_H__
diff --git a/examples/common/gui/winvideo.h b/examples/common/gui/winvideo.h
new file mode 100644
index 0000000..18e6420
--- /dev/null
+++ b/examples/common/gui/winvideo.h
@@ -0,0 +1,271 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/////// Common internal implementation of Windows-specific stuff //////////////
+
+#ifndef _CRT_SECURE_NO_DEPRECATE
+#define _CRT_SECURE_NO_DEPRECATE
+#endif
+#include "video.h"
+#include <fcntl.h>
+#include <io.h>
+#include <iostream>
+#include <fstream>
+
+#pragma comment(lib, "gdi32.lib")
+#pragma comment(lib, "user32.lib")
+
+// maximum mumber of lines the output console should have
+static const WORD MAX_CONSOLE_LINES = 500;
+const COLORREF RGBKEY = RGB(8, 8, 16); // at least 8 for 16-bit palette
+HWND g_hAppWnd; // The program's window handle
+HANDLE g_handles[2] = {0,0};// thread and wake up event
+unsigned int * g_pImg = 0; // drawing memory
+int g_sizex, g_sizey;
+static video * g_video = 0;
+WNDPROC g_pUserProc = 0;
+HINSTANCE video::win_hInstance = 0;
+int video::win_iCmdShow = 0;
+static WNDCLASSEX * gWndClass = 0;
+static HACCEL hAccelTable = 0;
+static DWORD g_msec = 0;
+static int g_fps = 0, g_updates = 0, g_skips = 0;
+
+bool DisplayError(LPSTR lpstrErr, HRESULT hres = 0); // always returns false
+LRESULT CALLBACK InternalWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam);
+
+//! Create window
+bool WinInit(HINSTANCE hInstance, int nCmdShow, WNDCLASSEX *uwc, const char *title, bool fixedsize)
+{
+ WNDCLASSEX wndclass; // Our app's windows class
+ if(uwc) {
+ memcpy(&wndclass, uwc, sizeof(wndclass));
+ g_pUserProc = uwc->lpfnWndProc;
+ } else {
+ memset(&wndclass, 0, sizeof(wndclass));
+ wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
+ wndclass.lpszClassName = title;
+ }
+ wndclass.cbSize = sizeof(wndclass);
+ wndclass.hInstance = hInstance;
+ wndclass.lpfnWndProc = InternalWndProc;
+ wndclass.style |= CS_HREDRAW | CS_VREDRAW;
+ wndclass.hbrBackground = CreateSolidBrush(RGBKEY);
+
+ if( !RegisterClassExA(&wndclass) ) return false;
+ int xaddend = GetSystemMetrics(fixedsize?SM_CXFIXEDFRAME:SM_CXFRAME)*2;
+ int yaddend = GetSystemMetrics(fixedsize?SM_CYFIXEDFRAME:SM_CYFRAME)*2 + GetSystemMetrics(SM_CYCAPTION);
+ if(wndclass.lpszMenuName) yaddend += GetSystemMetrics(SM_CYMENU);
+
+ // Setup the new window's physical parameters - and tell Windows to create it
+ g_hAppWnd = CreateWindowA(wndclass.lpszClassName, // Window class name
+ title, // Window caption
+ !fixedsize ? WS_OVERLAPPEDWINDOW : // Window style
+ WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX,
+ CW_USEDEFAULT, // Initial x pos: use default placement
+ 0, // Initial y pos: not used here
+ g_sizex+xaddend,// Initial x size
+ g_sizey+yaddend,// Initial y size
+ NULL, // parent window handle
+ NULL, // window menu handle
+ hInstance, // program instance handle
+ NULL); // Creation parameters
+ return g_hAppWnd != NULL;
+}
+
+//! create console window with redirection
+static bool RedirectIOToConsole(void)
+{
+ int hConHandle; size_t lStdHandle;
+ CONSOLE_SCREEN_BUFFER_INFO coninfo;
+ FILE *fp;
+ // allocate a console for this app
+ AllocConsole();
+
+ // set the screen buffer to be big enough to let us scroll text
+ GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo);
+ coninfo.dwSize.Y = MAX_CONSOLE_LINES;
+ SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize);
+
+ // redirect unbuffered STDOUT to the console
+ lStdHandle = (size_t)GetStdHandle(STD_OUTPUT_HANDLE);
+ hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
+ if(hConHandle <= 0) return false;
+ fp = _fdopen( hConHandle, "w" );
+ *stdout = *fp;
+ setvbuf( stdout, NULL, _IONBF, 0 );
+
+ // redirect unbuffered STDERR to the console
+ lStdHandle = (size_t)GetStdHandle(STD_ERROR_HANDLE);
+ hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
+ if(hConHandle > 0) {
+ fp = _fdopen( hConHandle, "w" );
+ *stderr = *fp;
+ setvbuf( stderr, NULL, _IONBF, 0 );
+ }
+
+ // redirect unbuffered STDIN to the console
+ lStdHandle = (size_t)GetStdHandle(STD_INPUT_HANDLE);
+ hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
+ if(hConHandle > 0) {
+ fp = _fdopen( hConHandle, "r" );
+ *stdin = *fp;
+ setvbuf( stdin, NULL, _IONBF, 0 );
+ }
+
+ // make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog
+ // point to console as well
+ std::ios::sync_with_stdio();
+ return true;
+}
+
+
+video::video()
+ : red_mask(0xff0000), red_shift(16), green_mask(0xff00),
+ green_shift(8), blue_mask(0xff), blue_shift(0), depth(24)
+{
+ assert(g_video == 0);
+ g_video = this; title = "Video"; running = threaded = calc_fps = false; updating = true;
+}
+
+//! optionally call it just before init() to set own
+void video::win_set_class(WNDCLASSEX &wcex)
+{
+ gWndClass = &wcex;
+}
+
+void video::win_load_accelerators(int idc)
+{
+ hAccelTable = LoadAccelerators(win_hInstance, MAKEINTRESOURCE(idc));
+}
+
+bool video::init_console()
+{
+ if(RedirectIOToConsole()) {
+ if(!g_pImg && g_sizex && g_sizey)
+ g_pImg = new unsigned int[g_sizex * g_sizey];
+ if(g_pImg) running = true;
+ return true;
+ }
+ return false;
+}
+
+video::~video()
+{
+ if(g_video) terminate();
+}
+
+DWORD WINAPI thread_video(LPVOID lpParameter)
+{
+ video *v = (video*)lpParameter;
+ v->on_process();
+ return 0;
+}
+
+static bool loop_once(video *v)
+{
+ // screen update notify
+ if(g_updates) {
+ if(g_video->updating) { g_skips += g_updates-1; g_fps++; }
+ else g_skips += g_updates;
+ g_updates = 0; UpdateWindow(g_hAppWnd);
+ }
+ // update fps
+ DWORD msec = GetTickCount();
+ if(v->calc_fps && msec >= g_msec+1000) {
+ double sec = (msec - g_msec)/1000.0;
+ char buffer[256], n = _snprintf(buffer, 128, "%s: %d fps", v->title, int(double(g_fps + g_skips)/sec));
+ if(g_skips) _snprintf(buffer+n, 128, " - %d skipped = %d updates", int(g_skips/sec), int(g_fps/sec));
+ SetWindowTextA(g_hAppWnd, buffer);
+ g_msec = msec; g_skips = g_fps = 0;
+ }
+ // event processing, including painting
+ MSG msg;
+ if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+ {
+ if( msg.message == WM_QUIT ) { v->running = false; return false; }
+ if( !hAccelTable || !TranslateAccelerator(msg.hwnd, hAccelTable, &msg) )
+ {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+ return true; // try again
+ }
+ return false;
+}
+
+//! Do standart event loop
+void video::main_loop()
+{
+ // let Windows draw and unroll the window
+ InvalidateRect(g_hAppWnd, 0, false);
+ g_msec = GetTickCount(); // let's stay for 0,5 sec
+ while(g_msec + 500 > GetTickCount()) { loop_once(this); Sleep(1); }
+ g_msec = GetTickCount();
+ // now, start main process
+ if(threaded) {
+ g_handles[0] = CreateThread (
+ NULL, // LPSECURITY_ATTRIBUTES security_attrs
+ 0, // SIZE_T stacksize
+ (LPTHREAD_START_ROUTINE) thread_video,
+ this, // argument
+ 0, 0);
+ if(!g_handles[0]) { DisplayError("Can't create thread"); return; }
+ else g_handles[1] = CreateEvent(NULL, false, false, NULL);
+ while(running) {
+ while(loop_once(this));
+ Sleep(0); // give time for processing when running on single CPU
+ DWORD r = MsgWaitForMultipleObjects(2, g_handles, false, INFINITE, QS_ALLINPUT^QS_MOUSEMOVE);
+ if(r == WAIT_OBJECT_0) break; // thread terminated
+ }
+ running = false;
+ if(WaitForSingleObject(g_handles[0], 300) == WAIT_TIMEOUT)
+ TerminateThread(g_handles[0], 0);
+ if(g_handles[0]) CloseHandle(g_handles[0]);
+ if(g_handles[1]) CloseHandle(g_handles[1]);
+ g_handles[0] = g_handles[1] = 0;
+ }
+ else on_process();
+}
+
+//! Refresh screen picture
+bool video::next_frame()
+{
+ if(!running) return false;
+ g_updates++;
+ if(!threaded) while(loop_once(this));
+ else if(g_handles[1]) { SetEvent(g_handles[1]); Sleep(0); }
+ return true;
+}
+
+//! Change window title
+void video::show_title()
+{
+ if(g_hAppWnd)
+ SetWindowTextA(g_hAppWnd, title);
+}
diff --git a/examples/common/gui/xvideo.cpp b/examples/common/gui/xvideo.cpp
new file mode 100644
index 0000000..464506c
--- /dev/null
+++ b/examples/common/gui/xvideo.cpp
@@ -0,0 +1,350 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+// Uncomment next line to disable shared memory features if you have not libXext
+// (http://www.xfree86.org/current/mit-shm.html)
+//#define X_NOSHMEM
+
+#include "video.h"
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/keysym.h>
+#include <sys/time.h>
+#include <signal.h>
+#include <pthread.h>
+
+#ifndef X_NOSHMEM
+#include <errno.h>
+#include <X11/extensions/XShm.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+
+static XShmSegmentInfo shmseginfo;
+static Pixmap pixmap = 0;
+#endif
+static char *display_name = NULL;
+static Display *dpy = NULL;
+static Screen *scrn;
+static Visual *vis;
+static Colormap cmap;
+static GC gc;
+static Window win, rootW;
+static int dispdepth = 0;
+static XGCValues xgcv;
+static XImage *ximage;
+static int x_error = 0;
+static int vidtype = 3;
+static int g_sizex, g_sizey;
+static video *g_video = 0;
+static unsigned int *g_pImg = 0;
+static int g_fps = 0;
+struct timeval g_time;
+static pthread_mutex_t g_mutex = PTHREAD_MUTEX_INITIALIZER;
+Atom _XA_WM_DELETE_WINDOW = 0;// like in Xatom.h
+
+///////////////////////////////////////////// public methods of video class ///////////////////////
+
+video::video()
+{
+ assert(g_video == 0);
+ g_video = this; title = "Video"; calc_fps = running = false; updating = true;
+}
+
+inline void mask2bits(unsigned int mask, unsigned int &save, char &shift)
+{
+ save = mask; if(!mask) { shift = dispdepth/3; return; }
+ shift = 0; while(!(mask&1)) ++shift, mask >>= 1;
+ int bits = 0; while(mask&1) ++bits, mask >>= 1;
+ shift += bits - 8;
+}
+
+int xerr_handler(Display*, XErrorEvent *error)
+{
+ x_error = error->error_code;
+ if(g_video) g_video->running = false;
+ return 0;
+}
+
+bool video::init_window(int xsize, int ysize)
+{
+ { //enclose local variables before fail label
+ g_sizex = xsize; g_sizey = ysize;
+
+ // Open the display
+ if (!dpy) {
+ dpy = XOpenDisplay(display_name);
+ if (!dpy) {
+ fprintf(stderr, "Can't open X11 display %s\n", XDisplayName(display_name));
+ goto fail;
+ }
+ }
+ int theScreen = DefaultScreen(dpy);
+ scrn = ScreenOfDisplay(dpy, theScreen);
+ dispdepth = DefaultDepth(dpy, theScreen);
+ XVisualInfo vinfo;
+ if (!( (dispdepth >= 15 && dispdepth <= 32 && XMatchVisualInfo(dpy, theScreen, dispdepth, TrueColor, &vinfo) )
+ || XMatchVisualInfo(dpy, theScreen, 24, TrueColor, &vinfo)
+ || XMatchVisualInfo(dpy, theScreen, 32, TrueColor, &vinfo)
+ || XMatchVisualInfo(dpy, theScreen, 16, TrueColor, &vinfo)
+ || XMatchVisualInfo(dpy, theScreen, 15, TrueColor, &vinfo)
+ )) {
+ fprintf(stderr, "Display has no appropriate True Color visual\n");
+ goto fail;
+ }
+ vis = vinfo.visual;
+ depth = dispdepth = vinfo.depth;
+ mask2bits(vinfo.red_mask, red_mask, red_shift);
+ mask2bits(vinfo.green_mask, green_mask, green_shift);
+ mask2bits(vinfo.blue_mask, blue_mask, blue_shift);
+ rootW = RootWindow(dpy, theScreen);
+ cmap = XCreateColormap(dpy, rootW, vis, AllocNone);
+ XSetWindowAttributes attrs;
+ attrs.backing_store = Always;
+ attrs.colormap = cmap;
+ attrs.event_mask = StructureNotifyMask|KeyPressMask|ButtonPressMask|ButtonReleaseMask;
+ attrs.background_pixel = BlackPixelOfScreen(scrn);
+ attrs.border_pixel = WhitePixelOfScreen(scrn);
+ win = XCreateWindow(dpy, rootW,
+ 0, 0, xsize, ysize, 2,
+ dispdepth, InputOutput, vis,
+ CWBackingStore | CWColormap | CWEventMask |
+ CWBackPixel | CWBorderPixel,
+ &attrs);
+ if(!win) {
+ fprintf(stderr, "Can't create the window\n");
+ goto fail;
+ }
+ XSizeHints sh;
+ sh.flags = PSize | PMinSize | PMaxSize;
+ sh.width = sh.min_width = sh.max_width = xsize;
+ sh.height = sh.min_height = sh.max_height = ysize;
+ XSetStandardProperties( dpy, win, g_video->title, g_video->title, None, NULL, 0, &sh );
+ _XA_WM_DELETE_WINDOW = XInternAtom(dpy, "WM_DELETE_WINDOW", false);
+ XSetWMProtocols(dpy, win, &_XA_WM_DELETE_WINDOW, 1);
+ gc = XCreateGC(dpy, win, 0L, &xgcv);
+ XMapRaised(dpy, win);
+ XFlush(dpy);
+#ifdef X_FULLSYNC
+ XSynchronize(dpy, true);
+#endif
+ XSetErrorHandler(xerr_handler);
+
+ int imgbytes = xsize*ysize*(dispdepth<=16?2:4);
+ const char *vidstr;
+#ifndef X_NOSHMEM
+ int major, minor, pixmaps;
+ if(XShmQueryExtension(dpy) &&
+ XShmQueryVersion(dpy, &major, &minor, &pixmaps))
+ { // Shared memory
+ shmseginfo.shmid = shmget(IPC_PRIVATE, imgbytes, IPC_CREAT|0777);
+ if(shmseginfo.shmid < 0) {
+ fprintf(stderr, "Warning: Can't get shared memory: %s\n", strerror(errno));
+ goto generic;
+ }
+ g_pImg = (unsigned int*)(shmseginfo.shmaddr = (char*)shmat(shmseginfo.shmid, 0, 0));
+ if(g_pImg == (unsigned int*)-1) {
+ fprintf(stderr, "Warning: Can't attach to shared memory: %s\n", strerror(errno));
+ shmctl(shmseginfo.shmid, IPC_RMID, NULL);
+ goto generic;
+ }
+ shmseginfo.readOnly = false;
+ if(!XShmAttach(dpy, &shmseginfo) || x_error) {
+ char err[256]; XGetErrorText(dpy, x_error, err, 255);
+ fprintf(stderr, "Warning: Can't attach shared memory to display: %s (%d)\n", err, x_error);
+ shmdt(shmseginfo.shmaddr); shmctl(shmseginfo.shmid, IPC_RMID, NULL);
+ goto generic;
+ }
+
+#ifndef X_NOSHMPIX
+ if(pixmaps && XShmPixmapFormat(dpy) == ZPixmap)
+ { // Pixmaps
+ vidtype = 2; vidstr = "X11 shared memory pixmap";
+ pixmap = XShmCreatePixmap(dpy, win, (char*)g_pImg, &shmseginfo, xsize, ysize, dispdepth);
+ XSetWindowBackgroundPixmap(dpy, win, pixmap);
+ } else
+#endif//!X_NOSHMPIX
+ { // Standart
+ vidtype = 1; vidstr = "X11 shared memory";
+ ximage = XShmCreateImage(dpy, vis, dispdepth,
+ ZPixmap, 0, &shmseginfo, xsize, ysize);
+ if(!ximage) {
+ fprintf(stderr, "Can't create the shared image\n");
+ goto fail;
+ }
+ assert(ximage->bytes_per_line == xsize*(dispdepth<=16?2:4));
+ ximage->data = shmseginfo.shmaddr;
+ }
+ } else
+#endif
+ {
+generic:
+ vidtype = 0; vidstr = "generic X11";
+ g_pImg = new unsigned int[imgbytes/sizeof(int)];
+ ximage = XCreateImage(dpy, vis, dispdepth, ZPixmap, 0, (char*)g_pImg, xsize, ysize, 32, imgbytes/ysize);
+ if(!ximage) {
+ fprintf(stderr, "Can't create the image\n");
+ goto fail;
+ }
+ }
+ printf("Note: using %s with %s visual for %d-bit color depth\n", vidstr, vis==DefaultVisual(dpy, theScreen)?"default":"non-default", dispdepth);
+ running = true;
+ return true;
+ } // end of enclosing local varables
+fail:
+ terminate(); init_console();
+ return false;
+}
+
+bool video::init_console()
+{
+ if(!g_pImg && g_sizex && g_sizey) {
+ dispdepth = 24; red_shift = 16; vidtype = 3; // fake video
+ g_pImg = new unsigned int[g_sizex*g_sizey];
+ running = true;
+ }
+ return true;
+}
+
+void video::terminate()
+{
+ running = false;
+ if(dpy) {
+ vidtype = 3; // stop video
+ if(threaded) { pthread_mutex_lock(&g_mutex); pthread_mutex_unlock(&g_mutex); }
+ if(ximage) { XDestroyImage(ximage); ximage = 0; g_pImg = 0; } // it frees g_pImg for vidtype == 0
+#ifndef X_NOSHMEM
+ if(pixmap) XFreePixmap(dpy, pixmap);
+ if(shmseginfo.shmaddr) { XShmDetach(dpy, &shmseginfo); shmdt(shmseginfo.shmaddr); g_pImg = 0; }
+ if(shmseginfo.shmid >= 0) shmctl(shmseginfo.shmid, IPC_RMID, NULL);
+#endif
+ if(gc) XFreeGC(dpy, gc);
+ if(win) XDestroyWindow(dpy, win);
+ XCloseDisplay(dpy); dpy = 0;
+ }
+ if(g_pImg) { delete[] g_pImg; g_pImg = 0; } // if was allocated for console mode
+}
+
+video::~video()
+{
+ if(g_video) terminate();
+ g_video = 0;
+}
+
+//! Do standart event loop
+void video::main_loop()
+{
+ struct timezone tz; gettimeofday(&g_time, &tz);
+ on_process();
+}
+
+//! Check for pending events once
+bool video::next_frame()
+{
+ if(!running) return false;
+ //! try acquire mutex if threaded code, returns on failure
+ if(vidtype == 3 || threaded && pthread_mutex_trylock(&g_mutex))
+ return running;
+ //! Refresh screen picture
+ g_fps++;
+#ifndef X_NOSHMPIX
+ if(vidtype == 2 && updating) XClearWindow(dpy, win);
+#endif
+ while( XPending(dpy) ) {
+ XEvent report; XNextEvent(dpy, &report);
+ switch( report.type ) {
+ case ClientMessage:
+ if(report.xclient.format != 32 || report.xclient.data.l[0] != _XA_WM_DELETE_WINDOW) break;
+ case DestroyNotify:
+ running = false;
+ case KeyPress:
+ on_key( XLookupKeysym(&report.xkey, 0) ); break;
+ case ButtonPress:
+ on_mouse( report.xbutton.x, report.xbutton.y, report.xbutton.button ); break;
+ case ButtonRelease:
+ on_mouse( report.xbutton.x, report.xbutton.y, -report.xbutton.button ); break;
+ }
+ }
+ struct timezone tz; struct timeval now_time; gettimeofday(&now_time, &tz);
+ double sec = (now_time.tv_sec+1.0*now_time.tv_usec/1000000.0) - (g_time.tv_sec+1.0*g_time.tv_usec/1000000.0);
+ if(sec > 1) {
+ memcpy(&g_time, &now_time, sizeof(g_time));
+ if(calc_fps) {
+ double fps = g_fps; g_fps = 0;
+ char buffer[256]; snprintf(buffer, 256, "%s%s: %d fps", title, updating?"":" (no updating)", int(fps/sec));
+ XStoreName(dpy, win, buffer);
+ }
+#ifndef X_FULLSYNC
+ XSync(dpy, false); // It is often better then using XSynchronize(dpy, true)
+#endif//X_FULLSYNC
+ }
+ if(threaded) pthread_mutex_unlock(&g_mutex);
+ return true;
+}
+
+//! Change window title
+void video::show_title()
+{
+ if(vidtype < 3)
+ XStoreName(dpy, win, title);
+}
+
+drawing_area::drawing_area(int x, int y, int sizex, int sizey)
+ : start_x(x), start_y(y), size_x(sizex), size_y(sizey), pixel_depth(dispdepth),
+ base_index(y*g_sizex + x), max_index(g_sizex*g_sizey), index_stride(g_sizex), ptr32(g_pImg)
+{
+ assert(x < g_sizex); assert(y < g_sizey);
+ assert(x+sizex <= g_sizex); assert(y+sizey <= g_sizey);
+
+ index = base_index; // current index
+}
+
+drawing_area::~drawing_area()
+{
+ if(!g_video->updating) return;
+#ifndef X_NOSHMEM
+ switch(vidtype) {
+ case 0:
+#endif
+ pthread_mutex_lock(&g_mutex);
+ if(vidtype == 0) XPutImage(dpy, win, gc, ximage, start_x, start_y, start_x, start_y, size_x, size_y);
+ pthread_mutex_unlock(&g_mutex);
+#ifndef X_NOSHMEM
+ break;
+ case 1:
+ pthread_mutex_lock(&g_mutex);
+ if(vidtype == 1) XShmPutImage(dpy, win, gc, ximage, start_x, start_y, start_x, start_y, size_x, size_y, false);
+ pthread_mutex_unlock(&g_mutex);
+ break;
+ /*case 2: make it in next_frame(); break;*/
+ }
+#endif
+}
diff --git a/examples/common/index.html b/examples/common/index.html
new file mode 100644
index 0000000..855338a
--- /dev/null
+++ b/examples/common/index.html
@@ -0,0 +1,36 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory contains common code that is used in the Threading Building Blocks examples.
+
+<P>
+This code is not intended to be used directly. It is incorporated automatically by the examples that need it.
+</P>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="gui">gui</A>
+<DD>GUI code for examples that have graphical user interfaces. Currently supports:
+ <UL>
+ <LI>GDI+*, Direct Draw (Windows* systems)
+ <LI>OpenGL* (Mac OS* X systems)
+ <LI>X-windows (Linux* or Mac OS* X systems)
+ </UL>
+ See the examples that use the GUI
+ (<A HREF=../parallel_for/tacheon/index.html>tacheon</A> and <A HREF=../parallel_for/seismic/index.html>seismic</A>)
+ for more details.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright © 2005-2007 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
diff --git a/examples/concurrent_hash_map/count_strings/Makefile b/examples/concurrent_hash_map/count_strings/Makefile
new file mode 100644
index 0000000..2e9494b
--- /dev/null
+++ b/examples/concurrent_hash_map/count_strings/Makefile
@@ -0,0 +1,47 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# GNU Makefile that builds and runs example.
+PROG=count_strings
+
+# The C++ compiler
+#CXX=g++
+
+all: release test
+
+release: *.cpp
+ $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb
+
+debug: *.cpp
+ $(CXX) -O0 -g -DTBB_DO_ASSERT $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug
+
+clean:
+ rm -f $(PROG) *.o *.d
+
+test:
+ ./$(PROG) 1
+ ./$(PROG) 2
+ ./$(PROG) 4
diff --git a/examples/concurrent_hash_map/count_strings/Makefile.windows b/examples/concurrent_hash_map/count_strings/Makefile.windows
new file mode 100644
index 0000000..f478790
--- /dev/null
+++ b/examples/concurrent_hash_map/count_strings/Makefile.windows
@@ -0,0 +1,47 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+PROG=Count_Strings
+
+# The C++ compiler options
+CXX = cl.exe
+MYCXXFLAGS=/TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
+MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO /OUT:$(PROG).exe $(LDFLAGS)
+
+all: release test
+release:
+ $(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(MYLDFLAGS)
+debug:
+ $(CXX) *.cpp /MDd /Od /Zi /D TBB_DO_ASSERT /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(MYLDFLAGS)
+clean:
+ @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
+test:
+ $(PROG) 1
+ $(PROG) 2
+ $(PROG) 4
diff --git a/examples/concurrent_hash_map/count_strings/count_strings.cpp b/examples/concurrent_hash_map/count_strings/count_strings.cpp
new file mode 100644
index 0000000..adea8a5
--- /dev/null
+++ b/examples/concurrent_hash_map/count_strings/count_strings.cpp
@@ -0,0 +1,172 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "tbb/concurrent_hash_map.h"
+#include "tbb/blocked_range.h"
+#include "tbb/parallel_for.h"
+#include "tbb/tick_count.h"
+#include "tbb/task_scheduler_init.h"
+#include <string>
+#include <cctype>
+
+using namespace tbb;
+using namespace std;
+
+//! Set to true to counts.
+static bool Verbose = false;
+//! Working threads count
+static int NThread = 1;
+//! Problem size
+const size_t N = 1000000;
+//! Indicates if the number of threads wasn't set explicitly
+static bool is_number_of_threads_set = false;
+
+//! Structure that defines hashing and comparison operations for user's type.
+struct MyHashCompare {
+ static size_t hash( const string& x ) {
+ size_t h = 0;
+ for( const char* s = x.c_str(); *s; s++ )
+ h = (h*17)^*s;
+ return h;
+ }
+ //! True if strings are equal
+ static bool equal( const string& x, const string& y ) {
+ return x==y;
+ }
+};
+
+//! A concurrent hash table that maps strings to ints.
+typedef concurrent_hash_map<string,int,MyHashCompare> StringTable;
+
+//! Function object for counting occurrences of strings.
+struct Tally {
+ StringTable& table;
+ Tally( StringTable& table_ ) : table(table_) {}
+ void operator()( const blocked_range<string*> range ) const {
+ for( string* p=range.begin(); p!=range.end(); ++p ) {
+ StringTable::accessor a;
+ table.insert( a, *p );
+ a->second += 1;
+ }
+ }
+};
+
+static string Data[N];
+
+static void CountOccurrences(int nthreads) {
+ StringTable table;
+
+ tick_count t0 = tick_count::now();
+ parallel_for( blocked_range<string*>( Data, Data+N, 1000 ), Tally(table) );
+ tick_count t1 = tick_count::now();
+
+ int n = 0;
+ for( StringTable::iterator i=table.begin(); i!=table.end(); ++i ) {
+ if( Verbose )
+ printf("%s %d\n",i->first.c_str(),i->second);
+ n+=i->second;
+ }
+ if (is_number_of_threads_set) {
+ printf("threads = %d total = %d time = %g\n", nthreads, n, (t1-t0).seconds());
+ }else{
+ if ( nthreads == 1 ){
+ printf("serial run total = %d time = %g\n", n, (t1-t0).seconds());
+ }else{
+ printf("parallel run total = %d time = %g\n", n, (t1-t0).seconds());
+ }
+ }
+}
+
+static const string Adjective[] = {
+ "sour",
+ "sweet",
+ "bitter",
+ "salty",
+ "big",
+ "small"
+};
+
+static const string Noun[] = {
+ "apple",
+ "banana",
+ "cherry",
+ "date",
+ "eggplant",
+ "fig",
+ "grape",
+ "honeydew",
+ "icao",
+ "jujube"
+};
+
+static void CreateData() {
+ size_t n_adjective = sizeof(Adjective)/sizeof(Adjective[0]);
+ size_t n_noun = sizeof(Noun)/sizeof(Noun[0]);
+ for( int i=0; i<N; ++i ) {
+ Data[i] = Adjective[rand()%n_adjective];
+ Data[i] += " ";
+ Data[i] += Noun[rand()%n_noun];
+ }
+}
+
+static void ParseCommandLine( int argc, char* argv[] ) {
+ int i = 1;
+ if( i<argc && strcmp( argv[i], "verbose" )==0 ) {
+ Verbose = true;
+ ++i;
+ }
+ if( i<argc && !isdigit(argv[i][0]) ) {
+ fprintf(stderr,"Usage: %s [verbose] [number-of-threads]\n",argv[0]);
+ exit(1);
+ }
+ if( i<argc ) {
+ NThread = strtol(argv[i++],0,0);
+ is_number_of_threads_set = true;
+ }
+}
+
+int main( int argc, char* argv[] ) {
+ srand(2);
+ ParseCommandLine( argc, argv );
+ if (is_number_of_threads_set) {
+ task_scheduler_init init(NThread);
+ CreateData();
+ CountOccurrences(NThread);
+ } else { // Number of threads wasn't set explicitly. Run serial and parallel version
+ { // serial run
+ task_scheduler_init init_serial(1);
+ CreateData();
+ CountOccurrences(1);
+ }
+ { // parallel run (number of threads is selected automatically)
+ task_scheduler_init init_parallel;
+ CreateData();
+ CountOccurrences(0);
+ }
+ }
+}
diff --git a/examples/concurrent_hash_map/count_strings/index.html b/examples/concurrent_hash_map/count_strings/index.html
new file mode 100644
index 0000000..46c7cbf
--- /dev/null
+++ b/examples/concurrent_hash_map/count_strings/index.html
@@ -0,0 +1,51 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+Example program that demonstrates template class concurrent_hash_map.
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="count_strings.cpp">count_strings.cpp</A>
+<DD>Source code for example.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="vc7.1">vc7.1</A>
+<DD>Contains Microsoft* Visual Studio* .NET 2003 workspace for building and running the example.
+<DT><A HREF="vc8">vc8</A>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example.
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+
+<H2>Usage</H2>
+<DL>
+<DT><TT>count_strings [verbose] [<I>N</I>]</TT>
+<DD><I>N</I> is the number of threads to be used. The "verbose" option enables printing of extra
+ debug information during execution.
+<DT>To run a short version of this example, e.g., for use with Intel® Threading Tools:
+<DD>Build a <I>debug</I> version of the example
+ (see the <A HREF=../../index.html#build>build directions</A>).
+ <BR>Run it with the desired number of threads, e.g., <TT>count_strings 4</TT>.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright © 2005-2007 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/examples/concurrent_hash_map/count_strings/vc7.1/count_strings.sln b/examples/concurrent_hash_map/count_strings/vc7.1/count_strings.sln
new file mode 100644
index 0000000..2424739
--- /dev/null
+++ b/examples/concurrent_hash_map/count_strings/vc7.1/count_strings.sln
@@ -0,0 +1,21 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "count_strings", "count_strings.vcproj", "{C931C7A2-074E-4150-9E7A-39A03250411C}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {C931C7A2-074E-4150-9E7A-39A03250411C}.Debug.ActiveCfg = Debug|Win32
+ {C931C7A2-074E-4150-9E7A-39A03250411C}.Debug.Build.0 = Debug|Win32
+ {C931C7A2-074E-4150-9E7A-39A03250411C}.Release.ActiveCfg = Release|Win32
+ {C931C7A2-074E-4150-9E7A-39A03250411C}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/examples/concurrent_hash_map/count_strings/vc7.1/count_strings.suo b/examples/concurrent_hash_map/count_strings/vc7.1/count_strings.suo
new file mode 100644
index 0000000..ac4c9d5
Binary files /dev/null and b/examples/concurrent_hash_map/count_strings/vc7.1/count_strings.suo differ
diff --git a/examples/concurrent_hash_map/count_strings/vc7.1/count_strings.vcproj b/examples/concurrent_hash_map/count_strings/vc7.1/count_strings.vcproj
new file mode 100644
index 0000000..f34b173
--- /dev/null
+++ b/examples/concurrent_hash_map/count_strings/vc7.1/count_strings.vcproj
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="count_strings"
+ ProjectGUID="{C931C7A2-074E-4150-9E7A-39A03250411C}"
+ RootNamespace="count_strings"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+ <File
+ RelativePath="..\count_strings.cpp">
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\index.html">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/concurrent_hash_map/count_strings/vc8/count_strings.sln b/examples/concurrent_hash_map/count_strings/vc8/count_strings.sln
new file mode 100644
index 0000000..73768d9
--- /dev/null
+++ b/examples/concurrent_hash_map/count_strings/vc8/count_strings.sln
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "count_strings", "count_strings.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A252C}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {3AA40693-F93D-4D4B-B32E-068F511A252C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A252C}.Debug|Win32.Build.0 = Debug|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A252C}.Debug|x64.ActiveCfg = Debug|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A252C}.Debug|x64.Build.0 = Debug|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A252C}.Release|Win32.ActiveCfg = Release|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A252C}.Release|Win32.Build.0 = Release|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A252C}.Release|x64.ActiveCfg = Release|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A252C}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/examples/concurrent_hash_map/count_strings/vc8/count_strings.suo b/examples/concurrent_hash_map/count_strings/vc8/count_strings.suo
new file mode 100644
index 0000000..83be2c2
Binary files /dev/null and b/examples/concurrent_hash_map/count_strings/vc8/count_strings.suo differ
diff --git a/examples/concurrent_hash_map/count_strings/vc8/count_strings.vcproj b/examples/concurrent_hash_map/count_strings/vc8/count_strings.vcproj
new file mode 100644
index 0000000..d804fcc
--- /dev/null
+++ b/examples/concurrent_hash_map/count_strings/vc8/count_strings.vcproj
@@ -0,0 +1,352 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="count_strings"
+ ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A252C}"
+ RootNamespace="count_strings"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\count_strings.cpp"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\index.html"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/concurrent_hash_map/count_strings/xcode/count_strings.xcodeproj/project.pbxproj b/examples/concurrent_hash_map/count_strings/xcode/count_strings.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..69385b8
--- /dev/null
+++ b/examples/concurrent_hash_map/count_strings/xcode/count_strings.xcodeproj/project.pbxproj
@@ -0,0 +1,296 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 42;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ A1F593A60B8F042A00073279 /* count_strings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* count_strings.cpp */; };
+ A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+ A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 8DD76F690486A84900D96B5E /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 12;
+ dstPath = "";
+ dstSubfolderSpec = 16;
+ files = (
+ A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 8DD76F6C0486A84900D96B5E /* count_strings */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = count_strings; sourceTree = BUILT_PRODUCTS_DIR; };
+ A1F593A50B8F042A00073279 /* count_strings.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = count_strings.cpp; path = ../count_strings.cpp; sourceTree = SOURCE_ROOT; };
+ A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8DD76F660486A84900D96B5E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 08FB7794FE84155DC02AAC07 /* count_strings */ = {
+ isa = PBXGroup;
+ children = (
+ 08FB7795FE84155DC02AAC07 /* Source */,
+ A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+ 1AB674ADFE9D54B511CA2CBB /* Products */,
+ );
+ name = count_strings;
+ sourceTree = "<group>";
+ };
+ 08FB7795FE84155DC02AAC07 /* Source */ = {
+ isa = PBXGroup;
+ children = (
+ A1F593A50B8F042A00073279 /* count_strings.cpp */,
+ );
+ name = Source;
+ sourceTree = "<group>";
+ };
+ 1AB674ADFE9D54B511CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8DD76F6C0486A84900D96B5E /* count_strings */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ A1F593B30B8F06F900073279 /* libtbb.dylib */,
+ );
+ name = "External Frameworks and Libraries";
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8DD76F620486A84900D96B5E /* count_strings */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "count_strings" */;
+ buildPhases = (
+ 8DD76F640486A84900D96B5E /* Sources */,
+ 8DD76F660486A84900D96B5E /* Frameworks */,
+ 8DD76F690486A84900D96B5E /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = count_strings;
+ productInstallPath = "$(HOME)/bin";
+ productName = count_strings;
+ productReference = 8DD76F6C0486A84900D96B5E /* count_strings */;
+ productType = "com.apple.product-type.tool";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 08FB7793FE84155DC02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "count_strings" */;
+ hasScannedForEncodings = 1;
+ mainGroup = 08FB7794FE84155DC02AAC07 /* count_strings */;
+ projectDirPath = "";
+ targets = (
+ 8DD76F620486A84900D96B5E /* count_strings */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8DD76F640486A84900D96B5E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F593A60B8F042A00073279 /* count_strings.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 1DEB923208733DC60010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = count_strings;
+ ZERO_LINK = NO;
+ };
+ name = Debug;
+ };
+ 1DEB923308733DC60010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = count_strings;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 1DEB923608733DC60010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Debug;
+ };
+ 1DEB923708733DC60010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Release;
+ };
+ A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = count_strings;
+ ZERO_LINK = NO;
+ };
+ name = Debug64;
+ };
+ A1F593C70B8F0E6E00073279 /* Release64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = count_strings;
+ ZERO_LINK = NO;
+ };
+ name = Release64;
+ };
+ A1F593C80B8F0E6E00073279 /* Debug64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-m64",
+ );
+ OTHER_LDFLAGS = "-m64";
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Debug64;
+ };
+ A1F593C90B8F0E6E00073279 /* Release64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-m64",
+ );
+ OTHER_LDFLAGS = "-m64";
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Release64;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "count_strings" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB923208733DC60010E9CD /* Debug */,
+ A1F593C60B8F0E6E00073279 /* Debug64 */,
+ 1DEB923308733DC60010E9CD /* Release */,
+ A1F593C70B8F0E6E00073279 /* Release64 */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "count_strings" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB923608733DC60010E9CD /* Debug */,
+ A1F593C80B8F0E6E00073279 /* Debug64 */,
+ 1DEB923708733DC60010E9CD /* Release */,
+ A1F593C90B8F0E6E00073279 /* Release64 */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/examples/concurrent_hash_map/index.html b/examples/concurrent_hash_map/index.html
new file mode 100644
index 0000000..efa546c
--- /dev/null
+++ b/examples/concurrent_hash_map/index.html
@@ -0,0 +1,25 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory has examples of the template <code>concurrent_hash_map</code>.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="count_strings/index.html">count_strings</A>
+<DD>Concurrently inserts strings into a concurrent_hash_map.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright © 2005-2007 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/examples/index.html b/examples/index.html
new file mode 100644
index 0000000..309ef51
--- /dev/null
+++ b/examples/index.html
@@ -0,0 +1,172 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory has example usages of Threading Building Blocks.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="GettingStarted/index.html">GettingStarted</A>
+<DD>Examples from the <A HREF="../doc/Getting_Started.pdf">Getting Started Guide</A>.
+<DT><A HREF="concurrent_hash_map/index.html">concurrent_hash_map</A>
+<DD>Examples using <CODE>concurrent_hash_map</CODE>.
+<DT><A HREF="parallel_for/index.html">parallel_for</A>
+<DD>Examples using <CODE>parallel_for</CODE>.
+<DT><A HREF="parallel_reduce/index.html">parallel_reduce</A>
+<DD>Examples using <CODE>parallel_reduce</CODE>.
+<DT><A HREF="parallel_while/index.html">parallel_while</A>
+<DD>Examples using <CODE>parallel_while</CODE>.
+<DT><A HREF="pipeline/index.html">pipeline</A>
+<DD>Examples using <CODE>pipeline</CODE>.
+<DT><A HREF="task/index.html">task</A>
+<DD>Examples using raw <CODE>task</CODE> interface.
+<DT><A HREF="test_all/index.html">test_all</A>
+<DD>Examples that test all the parts of the package.
+<DT><A HREF="common/index.html">common</A>
+<DD>Common files for building various examples. Not used directly.
+</DL>
+
+<A NAME=build><H2>To Build</H2></A>
+Build each example by using one of the following methods. The specific directions for each
+method can be found below.
+<UL>
+<LI>Build by using a <A HREF=#build_1>Microsoft* Visual Studio* project (Windows* systems only)</A>.
+<LI>Build by using a <A HREF=#build_2>Xcode* IDE project (Mac OS* X systems only)</A>.
+<LI>Build by using a <A HREF=#build_3>Makefile (Windows*, Linux* or Mac OS* X systems)</A>.
+</UL>
+
+<P>
+Some of the following directions refer to a shell window; this refers
+to the command prompt environment/window normally used on your system.
+A shell might be a cmd.exe command prompt window (Windows* systems), or a
+sh, bash, csh, ksh, etc. (or compatible) shell window (Windows*, Linux* or Mac OS* X systems).
+</P>
+
+<A NAME=build_1><H4>To build by using a Microsoft* Visual Studio* project (Windows* systems):</H4></A>
+Perform the following steps:
+<OL>
+<LI>Identify the solution (*.sln) file for the example you wish to build and run.
+ <UL>
+ <LI>For Microsoft* Visual Studio* .NET 2003, the *.sln file is in the example's vc7.1 sub-directory.
+ <LI>For Microsoft* Visual Studio* 2005, the *.sln file is in the example's vc8 sub-directory.
+ </UL>
+<LI>Open the project by using one of the following methods:
+ <UL>
+ <LI>Navigate to the *.sln file from My Computer, by using Windows Explorer, or by using another file browser.
+ Double-click the *.sln file to invoke Microsoft* Visual Studio* and open the project.
+ <LI>Invoke Microsoft* Visual Studio* from the Start menu and use the "Open Project" dialog to navigate to
+ and open the project.
+ </UL>
+<LI>Press <ctrl-F5> to build and run the example.
+</OL>
+
+<A NAME=build_2><H4>To build by using a Xcode* IDE project (Mac OS* X systems):</H4></A>
+Perform the following steps:
+<OL>
+<LI>Identify the project (*.xcodeproj) file for the example you wish to build and run.
+ <UL>
+ <LI>The *.xcodeproj file is in the example's xcode sub-directory.
+ </UL>
+<LI>Open the project by using one of the following methods:
+ <UL>
+ <LI>Navigate to the *.xcodeproj file by using the Finder.
+ Double-click the *.xcodeproj file to invoke the Xcode* IDE and open the project.
+ <LI>Invoke the Xcode* IDE and use the "File ⇒ Open…" dialog to navigate to
+ and open the project.
+ </UL>
+<LI>Press <Apple-R>, or press the "Build and Go" button in the toolbox, to build and run the example.
+</OL>
+
+<A NAME=build_3><H4>To build by using a Makefile (Windows*, Linux* or Mac OS* X systems):</H4></A>
+Perform the following steps:
+<OL>
+<LI>Open a shell window. For Windows* systems, make sure this shell window has the proper environment
+ defined for use with Microsoft* Visual Studio* (.NET 2003 or 2005); such a shell can be invoked
+ from the Start menu, under Visual Studio, Visual Studio Tools, Visual Studio Command Prompt.
+<LI>Set up the environment in this shell window for use with Threading Building Blocks.
+ <BR>See below for how to set up the environment for
+ <A HREF=#env_1>Windows*</A>, <A HREF=#env_23>Linux*</A> or <A HREF=#env_23>Mac OS* X</A> systems.
+<LI>Unless you installed Threading Building Blocks yourself, you may not have write permissions
+ to the directory containing the example. In this case, make a copy of the example, and use the copy
+ for the following steps.
+<LI>In the shell window, navigate to the directory for the example
+ (or to the directory for the copy of the example if you made one in the previous step).
+<LI>Use one or more of the following commands to build and run the example.
+ Here, make refers to the make command normally used on your system: this could be
+ nmake, gmake, or make on Windows* systems, or make or gmake on Linux* or Mac OS* X systems.
+ <DL>
+ <DT><TT>make</TT>
+ <DD>Default build and run. Equivalent to 'make release test'.
+ <DT><TT>make release</TT>
+ <DD>Compile and link against the release version of the Threading Building Blocks library.
+ The resulting executable is left in the directory for the example.
+ <DT><TT>make debug</TT>
+ <DD>Compile and link against the debug version of the Threading Building Blocks library.
+ The resulting executable is left in the directory for the example.
+ <DT><TT>make test</TT>
+ <DD>Run an executable previously produced by one of the above commands.
+ <DT><TT>make <B>[</B>(above options or targets)<B>]</B> CXX=<B>{</B>icl, icc<B>}</B></TT>
+ <DD>Build and run as above, but use Intel® compilers instead of default, native compilers
+ (e.g., icl instead of cl.exe on Windows* systems, or icc instead of g++ on Linux* or Mac OS* X systems).
+ <DT><TT>make clean</TT>
+ <DD>Remove any executables or intermediate files produced by the above commands.
+ </DL>
+</OL>
+
+<A NAME=env_1><H4>To set up the environment (Windows* systems):</H4></A>
+It is <B>strongly</B> recommended that the environment be set up when installing Threading Building Blocks.
+Do this by selecting the appropriate check-box during the install. However, if the environment is not set up
+during installation, or you wish to build for an alternate architecture or Microsoft* Visual Studio* version,
+it may be set up, for a given type of shell window, by using one of the following commands:
+<DL>
+<DT>For cmd.exe (command prompt):
+<DD><TT><<I>installdir</I>>\{ia32,em64t}\{vc7.1,vc8}\bin\tbbvars.bat</TT>
+<DT>For sh, bash, ksh (or compatibles):
+<DD><TT>. <<I>installdir</I>>\{ia32,em64t}\{vc7.1,vc8}\bin\tbbvars.sh</TT>
+<DT>For csh (or compatibles):
+<DD><TT>source <<I>installdir</I>>\{ia32,em64t}\{vc7.1,vc8}\bin\tbbvars.csh</TT>
+<DT><I>Notes:</I>
+<DD><I><SL>
+ <LI>Choose one of {ia32,em64t} depending on the architecture to be used.
+ <LI>Choose one of {vc7.1,vc8} depending on whether Microsoft* Visual Studio* .NET 2003 or
+ Microsoft* Visual Studio* 2005 is to be used.
+ <LI>Environment setup need only be performed once per shell window to be used.
+ <LI>Always source tbbvars.sh or tbbvars.csh rather than executing them directly.
+ </SL></I>
+</DL>
+
+<A NAME=env_23><H4>To set up the environment (Linux* or Mac OS* X systems):</H4></A>
+The environment may be set up, for a given type of shell window, by using one of the following commands:
+<DL>
+<DT>For sh, bash, ksh (or compatibles):
+<DD>. <<I>installdir</I>>/bin/tbbvars.sh
+<DT>For csh (or compatibles):
+<DD>source <<I>installdir</I>>/tbbvars.csh
+<DT>For sh, bash, ksh (or compatibles), when using an alternate architecture or platform:
+<DD>. <<I>installdir</I>>/{ia32,em64t,itanium}/cc<<I>gccversion</I>>_libc<<I>libcversion</I>>_kernel<<I>kernelversion</I>>/bin/tbbvars.sh
+<DT>For csh (or compatibles), when using an alternate architecture or platform:
+<DD>source <<I>installdir</I>>/{ia32,em64t,itanium}/cc<<I>gccversion</I>>_libc<<I>libcversion</I>>_kernel<<I>kernelversion</I>>/bin/tbbvars.csh
+<DT><I>Notes:</I>
+<DD><I><SL>
+ <LI>Choose one of {ia32,em64t,itanium} depending on the architecture to be used.
+ <LI>Choose a cc<<I>gccversion</I>>_libc<<I>libcversion</I>>_kernel<<I>kernelversion</I>>
+ value, from among the available platforms installed with Threading Building Blocks
+ (for <A HREF=../ia32>ia32</A>, <A HREF=../em64t>em64t</A> or <A HREF=../itanium>itanium</A>),
+ depending on the platform to be used.
+ <LI>Environment setup need only be performed once per shell window to be used.
+ <LI>Always source tbbvars.sh or tbbvars.csh rather than executing them directly.
+ </SL></I>
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright © 2005-2007 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
diff --git a/examples/parallel_for/index.html b/examples/parallel_for/index.html
new file mode 100644
index 0000000..7c00ae0
--- /dev/null
+++ b/examples/parallel_for/index.html
@@ -0,0 +1,27 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory has examples of the template <code>parallel_for</code>.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="seismic/index.html">seismic</A>
+<DD>Parallel seismic wave simulation.
+<DT><A HREF="tacheon/index.html">tacheon</A>
+<DD>Parallel 2-D raytracer/renderer.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright © 2005-2007 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/examples/parallel_for/seismic/Makefile b/examples/parallel_for/seismic/Makefile
new file mode 100644
index 0000000..4421f55
--- /dev/null
+++ b/examples/parallel_for/seismic/Makefile
@@ -0,0 +1,96 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# GNU Makefile that builds and runs example.
+NAME=seismic
+
+# The C++ compiler
+#CXX=g++
+
+# detecting x64
+ifeq ($(shell arch),x86_64)
+x64 ?= 64
+endif
+# detecting UI ("mac", "x" or "con")
+ifeq ($(shell uname),Darwin)
+UI ?= mac
+else
+UI ?= $(shell sh -c "[ -f /usr/X11R6/lib$(x64)/libX11.so -o -f /usr/lib$(x64)/libX11.so ] && echo x || echo con")
+endif
+
+
+ifeq ($(UI),x)
+EXE=./$(NAME)
+CXXFLAGS += -I/usr/X11R6/include
+LIBS += -lpthread -L/usr/X11R6/lib$(x64) -lX11
+# detect if libXext can be found
+ifeq ($(shell sh -c "[ -f /usr/X11R6/lib$(x64)/libXext.so -o -f /usr/lib$(x64)/libXext.so ] && echo 0"),0)
+LIBS += -lXext
+else # no libXext
+CXXFLAGS += -DX_NOSHMEM
+endif # libXext
+else # ! X
+
+ifeq ($(UI),mac)
+TBBLIBS = /Library/Frameworks/TBB.framework/Libraries
+CXXFLAGS += -L$(TBBLIBS) -arch i386 -mmacosx-version-min=10.4 -fno-rtti -msse3 -ftree-vectorize
+LIBS += -framework OpenGL -framework AGL -framework Carbon
+APPRES = $(NAME).app/Contents/Resources
+EXE = ./$(NAME).app/Contents/MacOS/$(NAME)
+PBXCP = /System/Library/PrivateFrameworks/DevToolsCore.framework/Resources/pbxcp -resolve-src-symlinks -exclude .DS_Store -exclude CVS
+else # ! Mac
+UI=con
+EXE=./$(NAME)
+endif # Mac
+endif # X
+
+all: release test
+
+resources:
+ifeq ($(UI),mac)
+ mkdir -p $(APPRES)/English.lproj $(NAME).app/Contents/MacOS
+ $(PBXCP) xcode/English.lproj/InfoPlist.strings xcode/English.lproj/main.nib $(APPRES)/English.lproj
+ $(PBXCP) xcode/Info.plist $(APPRES)
+endif
+
+release: ../../common/gui/$(UI)video.cpp SeismicSimulation.cpp resources
+ $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(EXE) $< *.cpp -ltbb $(LIBS)
+
+debug: ../../common/gui/$(UI)video.cpp SeismicSimulation.cpp resources
+ $(CXX) -g -O0 -DTBB_DO_ASSERT $(CXXFLAGS) -o $(EXE) $< *.cpp -ltbb_debug $(LIBS)
+
+clean:
+ rm -f $(EXE) *.o *.d
+ifeq ($(UI),mac)
+ rm -rf $(NAME).app
+endif
+
+test:
+ifeq ($(UI),mac)
+ export DYLD_LIBRARY_PATH="$(DYLD_LIBRARY_PATH):$(TBBLIBS)"; $(EXE) - 300
+else
+ $(EXE) - 300
+endif
diff --git a/examples/parallel_for/seismic/Makefile.windows b/examples/parallel_for/seismic/Makefile.windows
new file mode 100644
index 0000000..c4449d5
--- /dev/null
+++ b/examples/parallel_for/seismic/Makefile.windows
@@ -0,0 +1,59 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+PROG=Seismic
+
+# The C++ compiler options
+CXX = cl.exe
+
+# Uncomment one of next lines to choose user interface type (console, gdiplus, direct draw)
+#UI = con
+UI = gdi
+#UI = dd
+
+# Machine architecture, auto-detected from TBB_ARCH_PLATFORM by default
+# Use XARCH variable to change it. See index.html for more information
+ARCH0 = $(TBB_ARCH_PLATFORM)-
+ARCH1 = $(ARCH0:\vc7.1-=)
+ARCH2 = $(ARCH1:\vc8-=)
+ARCH3 = $(ARCH2:ia32=x86)
+ARCH4 = $(ARCH3:em64t=AMD64)
+XARCH = $(ARCH4:-=x86)
+
+MAKEINC = ../../common/gui/Makefile.win
+
+all: release test
+release:
+ @$(MAKE) -f $(MAKEINC) UI=$(UI) CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)" LFLAGS="$(LDFLAGS) tbb.lib" XARCH=$(XARCH) RCNAME=SeismicSimulation SOURCE=SeismicSimulation.cpp EXE=$(PROG).exe build_one
+debug:
+ @$(MAKE) -f $(MAKEINC) UI=$(UI) DEBUG=_debug CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS) /D TBB_DO_ASSERT" LFLAGS="$(LDFLAGS) tbb_debug.lib" XARCH=$(XARCH) RCNAME=SeismicSimulation SOURCE=SeismicSimulation.cpp EXE=$(PROG).exe build_one
+clean:
+ @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest vc7.1\SeismicSimulation.res
+test:
+ $(PROG) - 300
diff --git a/examples/parallel_for/seismic/SeismicSimulation.cpp b/examples/parallel_for/seismic/SeismicSimulation.cpp
new file mode 100644
index 0000000..f5c2008
--- /dev/null
+++ b/examples/parallel_for/seismic/SeismicSimulation.cpp
@@ -0,0 +1,415 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+//#define _CRT_SECURE_NO_DEPRECATE
+#define VIDEO_WINMAIN_ARGS
+#include "../../common/gui/video.h"
+#include <cstdlib>
+#include <cstdio>
+#include <cstring>
+#include <cctype>
+#include <cassert>
+#include <math.h>
+#include "tbb/task_scheduler_init.h"
+#include "tbb/blocked_range.h"
+#include "tbb/parallel_for.h"
+#include "tbb/tick_count.h"
+
+#ifdef _MSC_VER
+// warning C4068: unknown pragma
+#pragma warning(disable: 4068)
+#endif
+
+#define DEFAULT_NUMBER_OF_FRAMES 100
+int number_of_frames = -1;
+const size_t MAX_WIDTH = 1024;
+const size_t MAX_HEIGHT = 512;
+
+int UniverseHeight=MAX_HEIGHT;
+int UniverseWidth=MAX_WIDTH;
+int GrainSize = 32;
+
+typedef float value;
+static value V[MAX_HEIGHT][MAX_WIDTH];
+static value S[MAX_HEIGHT][MAX_WIDTH];
+static value T[MAX_HEIGHT][MAX_WIDTH];
+static value M[MAX_HEIGHT];
+
+enum MaterialType {
+ WATER=0,
+ SANDSTONE=1,
+ SHALE=2
+};
+
+//! Values are MaterialType, cast to an unsigned char to save space.
+static unsigned char Material[MAX_HEIGHT];
+
+static const colorcomp_t MaterialColor[4][3] = { // BGR
+ {96,0,0}, // WATER
+ {0,48,48}, // SANDSTONE
+ {32,32,23} // SHALE
+};
+
+static const int DamperSize = 32;
+static value Damper[DamperSize];
+
+static const int ColorMapSize = 1024;
+static color_t ColorMap[4][ColorMapSize];
+
+static int PulseTime = 100;
+static int PulseCounter;
+static int PulseX = UniverseWidth/3;
+static int PulseY = UniverseHeight/4;
+
+static bool InitIsParallel = true;
+const char *titles[2] = {"Seismic Simulation: Serial", "Seismic Simulation: Parallel"};
+//! It is used for console mode for test with different number of threads and also has
+//! meaning for gui: threads_low - use sepatate event/updating loop thread (>0) or not (0).
+//! threads_high - initialization value for scheduler
+int threads_low = 0, threads_high = tbb::task_scheduler_init::automatic;
+
+static void UpdatePulse() {
+ if( PulseCounter>0 ) {
+ value t = (PulseCounter-PulseTime/2)*0.05f;
+ V[PulseY][PulseX] += 64*sqrt(M[PulseY])*exp(-t*t);
+ --PulseCounter;
+ }
+}
+
+static void SerialUpdateStress() {
+ drawing_area drawing(0, 0, UniverseWidth, UniverseHeight);
+ for( int i=1; i<UniverseHeight-1; ++i ) {
+ color_t* c = ColorMap[Material[i]];
+ drawing.set_pos(1, i);
+#pragma ivdep
+ for( int j=1; j<UniverseWidth-1; ++j ) {
+ S[i][j] += (V[i][j+1]-V[i][j]);
+ T[i][j] += (V[i+1][j]-V[i][j]);
+ int index = (int)(V[i][j]*(ColorMapSize/2)) + ColorMapSize/2;
+ if( index<0 ) index = 0;
+ if( index>=ColorMapSize ) index = ColorMapSize-1;
+ drawing.put_pixel(c[index]);
+ }
+ }
+}
+
+struct UpdateStressBody {
+ void operator()( const tbb::blocked_range<int>& range ) const {
+ drawing_area drawing(0, range.begin(), UniverseWidth, range.end()-range.begin());
+ int i_end = range.end();
+ for( int y = 0, i=range.begin(); i!=i_end; ++i,y++ ) {
+ color_t* c = ColorMap[Material[i]];
+ drawing.set_pos(1, y);
+#pragma ivdep
+ for( int j=1; j<UniverseWidth-1; ++j ) {
+ S[i][j] += (V[i][j+1]-V[i][j]);
+ T[i][j] += (V[i+1][j]-V[i][j]);
+ int index = (int)(V[i][j]*(ColorMapSize/2)) + ColorMapSize/2;
+ if( index<0 ) index = 0;
+ if( index>=ColorMapSize ) index = ColorMapSize-1;
+ drawing.put_pixel(c[index]);
+ }
+ }
+ }
+};
+
+static void ParallelUpdateStress() {
+ tbb::parallel_for( tbb::blocked_range<int>( 1, UniverseHeight-1, GrainSize ), UpdateStressBody() );
+}
+
+static void SerialUpdateVelocity() {
+ for( int i=1; i<UniverseHeight-1; ++i )
+#pragma ivdep
+ for( int j=1; j<UniverseWidth-1; ++j ) {
+ V[i][j] += (S[i][j] - S[i][j-1] + T[i][j] - T[i-1][j])*M[i];
+ }
+}
+
+struct UpdateVelocityBody {
+ void operator()( const tbb::blocked_range<int>& range ) const {
+ int i_end = range.end();
+ for( int i=range.begin(); i!=i_end; ++i ) {
+#pragma ivdep
+ for( int j=1; j<UniverseWidth-1; ++j ) {
+ V[i][j] += (S[i][j] - S[i][j-1] + T[i][j] - T[i-1][j])*M[i];
+ }
+ }
+ }
+};
+
+static void ParallelUpdateVelocity() {
+ tbb::parallel_for( tbb::blocked_range<int>( 1, UniverseHeight-1, GrainSize ), UpdateVelocityBody() );
+}
+
+static void DrainEnergyFromBorders() {
+#pragma ivdep
+ for( int k=1; k<=DamperSize-1; ++k ) {
+ value d = Damper[k];
+ for( int j=1; j<UniverseWidth-1; ++j ) {
+ V[k][j] *= d;
+ V[UniverseHeight-k][j] *= d;
+ }
+ for( int i=1; i<UniverseHeight-1; ++i ) {
+ V[i][k] *= d;
+ V[i][UniverseWidth-k] *= d;
+ }
+ }
+}
+
+void SerialUpdateUniverse() {
+ UpdatePulse();
+ SerialUpdateStress();
+ SerialUpdateVelocity();
+ DrainEnergyFromBorders();
+}
+
+void ParallelUpdateUniverse() {
+ UpdatePulse();
+ ParallelUpdateStress();
+ ParallelUpdateVelocity();
+ DrainEnergyFromBorders();
+}
+
+class seismic_video : public video
+{
+ void on_mouse(int x, int y, int key) {
+ if(key == 1 && PulseCounter == 0) {
+ PulseCounter = PulseTime;
+ PulseX = x; PulseY = y;
+ }
+ }
+ void on_key(int key) {
+ key &= 0xff;
+ if(char(key) == ' ') InitIsParallel = !InitIsParallel;
+ else if(char(key) == 'p') InitIsParallel = true;
+ else if(char(key) == 's') InitIsParallel = false;
+ else if(char(key) == 'e') updating = true;
+ else if(char(key) == 'd') updating = false;
+ else if(key == 27) running = false;
+ title = InitIsParallel?titles[1]:titles[0];
+ }
+ void on_process() {
+ tbb::task_scheduler_init Init(threads_high);
+ do {
+ if( InitIsParallel )
+ ParallelUpdateUniverse();
+ else
+ SerialUpdateUniverse();
+ if( number_of_frames > 0 ) --number_of_frames;
+ } while(next_frame() && number_of_frames);
+ }
+} video;
+
+void InitializeUniverse() {
+ PulseCounter = PulseTime;
+ // Initialize V, S, and T to slightly non-zero values, in order to avoid denormal waves.
+ for( int i=0; i<UniverseHeight; ++i )
+#pragma ivdep
+ for( int j=0; j<UniverseWidth; ++j ) {
+ T[i][j] = S[i][j] = V[i][j] = value(1.0E-6);
+ }
+ for( int i=1; i<UniverseHeight-1; ++i ) {
+ value t = (value)i/UniverseHeight;
+ MaterialType m = SANDSTONE;
+ M[i] = 1.0/8;
+ if( t<0.3f ) {
+ m = WATER;
+ M[i] = 1.0/32;
+ } else if( 0.5<=t && t<=0.7 ) {
+ m = SHALE;
+ M[i] = 1.0/2;
+ }
+ Material[i] = m;
+ }
+ value scale = 2.0f/ColorMapSize;
+ for( int k=0; k<4; ++k ) {
+ for( int i=0; i<ColorMapSize; ++i ) {
+ colorcomp_t c[3];
+ value t = (i-ColorMapSize/2)*scale;
+ value r = t>0 ? t : 0;
+ value b = t<0 ? -t : 0;
+ value g = 0.5f*fabs(t);
+ memcpy(c, MaterialColor[k], sizeof(c));
+ c[2] = colorcomp_t(r*(255-c[2])+c[2]);
+ c[1] = colorcomp_t(g*(255-c[1])+c[1]);
+ c[0] = colorcomp_t(b*(255-c[0])+c[0]);
+ ColorMap[k][i] = video.get_color(c[2], c[1], c[0]);
+ }
+ }
+ value d = 1.0;
+ for( int k=0; k<DamperSize; ++k ) {
+ d *= 1-1.0f/(DamperSize*DamperSize);
+ Damper[DamperSize-1-k] = d;
+ }
+}
+
+//////////////////////////////// Interface ////////////////////////////////////
+#ifdef _WINDOWS
+#include "vc7.1/resource.h"
+#endif
+
+int main(int argc, char *argv[])
+{
+ // threads number init
+ if(argc > 1 && isdigit(argv[1][0])) {
+ char* end; threads_high = threads_low = (int)strtol(argv[1],&end,0);
+ switch( *end ) {
+ case ':': threads_high = (int)strtol(end+1,0,0); break;
+ case '\0': break;
+ default: printf("unexpected character = %c\n",*end);
+ }
+ }
+ if (argc > 2 && isdigit(argv[2][0])){
+ number_of_frames = (int)strtol(argv[2],0,0);
+ }
+ // video layer init
+ video.title = InitIsParallel?titles[1]:titles[0];
+#ifdef _WINDOWS
+ #define MAX_LOADSTRING 100
+ TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name
+ LoadStringA(video::win_hInstance, IDC_SEISMICSIMULATION, szWindowClass, MAX_LOADSTRING);
+ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
+ WNDCLASSEX wcex; memset(&wcex, 0, sizeof(wcex));
+ wcex.lpfnWndProc = (WNDPROC)WndProc;
+ wcex.hIcon = LoadIcon(video::win_hInstance, MAKEINTRESOURCE(IDI_SEISMICSIMULATION));
+ wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
+ wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
+ wcex.lpszMenuName = LPCTSTR(IDC_SEISMICSIMULATION);
+ wcex.lpszClassName = szWindowClass;
+ wcex.hIconSm = LoadIcon(video::win_hInstance, MAKEINTRESOURCE(IDI_SMALL));
+ video.win_set_class(wcex); // ascii convention here
+ video.win_load_accelerators(IDC_SEISMICSIMULATION);
+#endif
+ if(video.init_window(UniverseWidth, UniverseHeight)) {
+ video.calc_fps = true;
+ video.threaded = threads_low > 0;
+ // video is ok, init universe
+ InitializeUniverse();
+ // main loop
+ video.main_loop();
+ }
+ else if(video.init_console()) {
+ // do console mode
+ if(number_of_frames <= 0) number_of_frames = DEFAULT_NUMBER_OF_FRAMES;
+ if(threads_high == tbb::task_scheduler_init::automatic) threads_high = 4;
+ if(threads_high < threads_low) threads_high = threads_low;
+ for( int p = threads_low; p <= threads_high; ++p ) {
+ InitializeUniverse();
+ tbb::task_scheduler_init init(tbb::task_scheduler_init::deferred);
+ if( p > 0 )
+ init.initialize( p );
+ tbb::tick_count t0 = tbb::tick_count::now();
+ if( p > 0 )
+ for( int i=0; i<number_of_frames; ++i )
+ ParallelUpdateUniverse();
+ else
+ for( int i=0; i<number_of_frames; ++i )
+ SerialUpdateUniverse();
+ tbb::tick_count t1 = tbb::tick_count::now();
+ printf("%.1f frame per sec", number_of_frames/(t1-t0).seconds());
+ if( p > 0 )
+ printf(" with %d way parallelism\n",p);
+ else
+ printf(" with serial version\n");
+ }
+ }
+ video.terminate();
+ return 0;
+}
+
+#ifdef _WINDOWS
+//
+// FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
+//
+// PURPOSE: Processes messages for the main window.
+//
+// WM_COMMAND - process the application menu
+// WM_PAINT - Paint the main window
+// WM_DESTROY - post a quit message and return
+//
+//
+LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ switch (message)
+ {
+ case WM_INITDIALOG: return TRUE;
+ case WM_COMMAND:
+ if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) {
+ EndDialog(hDlg, LOWORD(wParam));
+ return TRUE;
+ }
+ break;
+ }
+ return FALSE;
+}
+
+LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ int wmId, wmEvent;
+ switch (message) {
+ case WM_COMMAND:
+ wmId = LOWORD(wParam);
+ wmEvent = HIWORD(wParam);
+ // Parse the menu selections:
+ switch (wmId)
+ {
+ case IDM_ABOUT:
+ DialogBox(video::win_hInstance, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, (DLGPROC)About);
+ break;
+ case IDM_EXIT:
+ PostQuitMessage(0);
+ break;
+ case ID_FILE_PARALLEL:
+ if( !InitIsParallel ) {
+ InitIsParallel = true;
+ video.title = titles[1];
+ }
+ break;
+ case ID_FILE_SERIAL:
+ if( InitIsParallel ) {
+ InitIsParallel = false;
+ video.title = titles[0];
+ }
+ break;
+ case ID_FILE_ENABLEGUI:
+ video.updating = true;
+ break;
+ case ID_FILE_DISABLEGUI:
+ video.updating = false;
+ break;
+ default:
+ return DefWindowProc(hWnd, message, wParam, lParam);
+ }
+ break;
+ default:
+ return DefWindowProc(hWnd, message, wParam, lParam);
+ }
+ return 0;
+}
+
+#endif
diff --git a/examples/parallel_for/seismic/index.html b/examples/parallel_for/seismic/index.html
new file mode 100644
index 0000000..4385b1d
--- /dev/null
+++ b/examples/parallel_for/seismic/index.html
@@ -0,0 +1,105 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+Parallel seismic simulation that demonstrates use of parallel_for.
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="SeismicSimulation.cpp">SeismicSimulation.cpp</A>
+<DD>Source code that does wave propagation.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="vc7.1">vc7.1</A>
+<DD>Contains Microsoft* Visual Studio* .NET 2003 workspace for building and running the example.
+<DT><A HREF="vc8">vc8</A>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example.
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+The following additional options are supported:
+<DL>
+<DT><TT>make [(general targets: {release, debug} [test])] UI={con, gdi, dd, x, mac}</TT>
+<DD>Build and run as usual, but build with the specified GUI driver: console, GDI+*, Direct Draw*, X11, or OpenGL*
+ (see the description of the <A HREF=../../common/index.html>common GUI code</A>
+ for more information on available graphics support).
+ For Linux* and Mac OS* X systems, the best available driver is detected automatically by the Makefile.
+ For Windows* systems, UI=gdi is the default GUI driver; compiling with UI=dd may offer superior
+ performance, but can only be used if the Microsoft* Direct Draw* SDK is installed on your system
+ and if overlay is supported by your graphics card.
+ Use UI=con to build without the GUI for use in making performance measurements
+ <I>(strongly recommended when measuring performance or scalability; see note below)</I>.
+<DT><TT>make [(above options or targets)] XARCH=x64</TT>
+<DD>Build and run as above, but also specify XARCH=x64
+ (or XARCH=AMD64 for older compilers) when building the example on Windows* as a 64-bit binary.
+<DT><TT>make [(above options or targets)] DDLIB_DIR=<<I>specify path to library directory of Direct Draw* SDK here</I>></TT>
+<DD>If you experience ddraw.lib linking problems, specify the correct library directory via this option.
+<DT><TT>make [(above options or targets)] CXXFLAGS=-DX_FULLSYNC</TT>
+<DD>Build and run as above, but enable full X11 synchronization if you experience "tearing" of motion on slower video systems.
+</DL>
+
+<H2>Usage</H2>
+<DL>
+<DT><TT>seismic [<I>M</I>[:<I>N</I>] [<I>F</I>]]</TT>
+<DD>For non-interactive mode, <I>M</I> and <I>N</I> are a range of numbers of threads to be used.
+ For interactive mode, <I>N</I> is the number of threads to use while <I>M</I> indicates if
+ a separate thread will be used for the GUI (>0) or not (0). For example,
+ <TT>seismic 1:3</TT> will use 3 threads for computation and a separate thread for
+ processing GUI events; this option may give better visible performance on a 4-processor
+ system when using GDI+ graphics.
+<DD><I>F</I> is the number of frames the example processes internally. Default value is 100;
+ reduce it to shorten example run time.
+<DT>To run a short version of this example, e.g., for use with Intel® Threading Tools:
+<DD>Build a <I>debug</I> version of the example
+ (see the <A HREF=../../index.html#build>build directions</A>).
+ <BR>Run it with the desired number of threads and smaller number of frames, e.g., <TT>seismic 4 5</TT>.
+</DL>
+
+<H2>Hot keys</H2>
+The following hot keys can be used in interactive execution mode when the example is compiled with the graphical
+user interface:
+<DL>
+<dt><left mouse button>
+<dd>Starts new seismic wave in place specified by mouse cursor.
+<dt><space>
+<dd>Toggles between parallel and serial execution modes.
+<dt><p>
+<dd>Enables parallel execution mode.
+<dt><s>
+<dd>Enables serial execution mode.
+<dt><e>
+<dd>Enables screen updates.
+<dt><d>
+<dd>Disables screen updates <I>(strongly recommended when measuring performance or scalability; see note below)</I>.
+<dt><esc>
+<dd>Stops execution.
+</DL>
+
+<H2>Notes</H2>
+<UL>
+<LI>While running with the GUI display turned on should yield reasonable performance in most cases, <I>running with the GUI
+ display turned off is strongly recommended</I> in order to demonstrate the full performance and scalability of the example.
+<LI>If using the X-windows (X11) GUI on Mac OS* X systems, X11 might not be installed on the system by default.
+ To install X11 on Mac OS* X systems, use the operating system install disk, choose "Optional installs" and select X11 from
+ the "Applications" list. Alternatively, if X11 is not available, build without the GUI (see build targets above).
+</UL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright © 2005-2007 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
diff --git a/examples/parallel_for/seismic/vc7.1/SeismicSimulation.ico b/examples/parallel_for/seismic/vc7.1/SeismicSimulation.ico
new file mode 100644
index 0000000..d551aa3
Binary files /dev/null and b/examples/parallel_for/seismic/vc7.1/SeismicSimulation.ico differ
diff --git a/examples/parallel_for/seismic/vc7.1/SeismicSimulation.rc b/examples/parallel_for/seismic/vc7.1/SeismicSimulation.rc
new file mode 100644
index 0000000..2be8fab
--- /dev/null
+++ b/examples/parallel_for/seismic/vc7.1/SeismicSimulation.rc
@@ -0,0 +1,146 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#define APSTUDIO_HIDDEN_SYMBOLS
+#include "windows.h"
+#undef APSTUDIO_HIDDEN_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_SEISMICSIMULATION ICON "SeismicSimulation.ico"
+IDI_SMALL ICON "small.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Menu
+//
+
+IDC_SEISMICSIMULATION MENU
+BEGIN
+ POPUP "&File"
+ BEGIN
+ MENUITEM "&Parallel", ID_FILE_PARALLEL
+ MENUITEM "&Serial", ID_FILE_SERIAL
+ MENUITEM SEPARATOR
+ MENUITEM "&Enable GUI", ID_FILE_ENABLEGUI
+ MENUITEM "&Disable GUI", ID_FILE_DISABLEGUI
+ MENUITEM SEPARATOR
+ MENUITEM "E&xit", IDM_EXIT
+ END
+ POPUP "&Help"
+ BEGIN
+ MENUITEM "&About ...", IDM_ABOUT
+ END
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Accelerator
+//
+
+IDC_SEISMICSIMULATION ACCELERATORS
+BEGIN
+ VK_OEM_2, IDM_ABOUT, VIRTKEY, ALT, NOINVERT
+ "P", ID_FILE_PARALLEL, VIRTKEY, ALT, NOINVERT
+ "S", ID_FILE_SERIAL, VIRTKEY, ALT, NOINVERT
+ "D", ID_FILE_DISABLEGUI, VIRTKEY, ALT, NOINVERT
+ "E", ID_FILE_ENABLEGUI, VIRTKEY, ALT, NOINVERT
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_ABOUTBOX DIALOG 22, 17, 230, 75
+STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+CAPTION "About"
+FONT 8, "System"
+BEGIN
+ ICON IDI_SEISMICSIMULATION,IDC_MYICON,14,9,16,16
+ LTEXT "SeismicSimulation Version 1.0",IDC_STATIC,49,10,119,8,
+ SS_NOPREFIX
+ LTEXT "Copyright (C) 2005",IDC_STATIC,49,20,119,8
+ DEFPUSHBUTTON "OK",IDOK,195,6,30,11,WS_GROUP
+END
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
+ "#include ""windows.h""\r\n"
+ "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE
+BEGIN
+ IDS_APP_TITLE "SeismicSimulation"
+ IDC_SEISMICSIMULATION "SEISMICSIMULATION"
+END
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/examples/parallel_for/seismic/vc7.1/SeismicSimulation.sln b/examples/parallel_for/seismic/vc7.1/SeismicSimulation.sln
new file mode 100644
index 0000000..e386444
--- /dev/null
+++ b/examples/parallel_for/seismic/vc7.1/SeismicSimulation.sln
@@ -0,0 +1,27 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SeismicSimulation", "SeismicSimulation.vcproj", "{4A021AFA-E254-4BCE-918D-377DF1C0CBEC}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ DD Debug = DD Debug
+ DD Release = DD Release
+ GDI Debug = GDI Debug
+ GDI Release = GDI Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {4A021AFA-E254-4BCE-918D-377DF1C0CBEC}.DD Debug.ActiveCfg = DD Debug|Win32
+ {4A021AFA-E254-4BCE-918D-377DF1C0CBEC}.DD Debug.Build.0 = DD Debug|Win32
+ {4A021AFA-E254-4BCE-918D-377DF1C0CBEC}.DD Release.ActiveCfg = DD Release|Win32
+ {4A021AFA-E254-4BCE-918D-377DF1C0CBEC}.DD Release.Build.0 = DD Release|Win32
+ {4A021AFA-E254-4BCE-918D-377DF1C0CBEC}.GDI Debug.ActiveCfg = Debug|Win32
+ {4A021AFA-E254-4BCE-918D-377DF1C0CBEC}.GDI Debug.Build.0 = Debug|Win32
+ {4A021AFA-E254-4BCE-918D-377DF1C0CBEC}.GDI Release.ActiveCfg = Release|Win32
+ {4A021AFA-E254-4BCE-918D-377DF1C0CBEC}.GDI Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/examples/parallel_for/seismic/vc7.1/SeismicSimulation.suo b/examples/parallel_for/seismic/vc7.1/SeismicSimulation.suo
new file mode 100644
index 0000000..c08d453
Binary files /dev/null and b/examples/parallel_for/seismic/vc7.1/SeismicSimulation.suo differ
diff --git a/examples/parallel_for/seismic/vc7.1/SeismicSimulation.vcproj b/examples/parallel_for/seismic/vc7.1/SeismicSimulation.vcproj
new file mode 100644
index 0000000..c6dcb8d
--- /dev/null
+++ b/examples/parallel_for/seismic/vc7.1/SeismicSimulation.vcproj
@@ -0,0 +1,309 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="SeismicSimulation"
+ ProjectGUID="{4A021AFA-E254-4BCE-918D-377DF1C0CBEC}"
+ RootNamespace="SeismicSimulation"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(TBB20_INSTALL_DIR)\include""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ EnableFunctionLevelLinking="TRUE"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib""
+ GenerateDebugInformation="TRUE"
+ SubSystem="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(TBB20_INSTALL_DIR)\include""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib""
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="DD Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(TBB20_INSTALL_DIR)\include";"$(DXSDK_DIR)\include""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib";"$(DXSDK_DIR)\lib\x86""
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine="..\..\..\common\gui\dxcheck.bat"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="DD Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="2"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""$(TBB20_INSTALL_DIR)\include";"$(DXSDK_DIR)\include""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ EnableFunctionLevelLinking="TRUE"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib";"$(DXSDK_DIR)\lib\x86""
+ GenerateDebugInformation="TRUE"
+ SubSystem="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine="..\..\..\common\gui\dxcheck.bat"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+ <File
+ RelativePath="..\SeismicSimulation.cpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
+ <File
+ RelativePath=".\Resource.h">
+ </File>
+ <File
+ RelativePath=".\SeismicSimulation.ico">
+ </File>
+ <File
+ RelativePath=".\SeismicSimulation.rc">
+ </File>
+ <File
+ RelativePath=".\small.ico">
+ </File>
+ </Filter>
+ <Filter
+ Name="Video Layer"
+ Filter="">
+ <File
+ RelativePath="..\..\..\common\gui\ddvideo.cpp">
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\common\gui\gdivideo.cpp">
+ <FileConfiguration
+ Name="DD Release|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="DD Debug|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\common\gui\video.h">
+ </File>
+ <File
+ RelativePath="..\..\..\common\gui\winvideo.h">
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\index.html">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/parallel_for/seismic/vc7.1/resource.h b/examples/parallel_for/seismic/vc7.1/resource.h
new file mode 100644
index 0000000..44453d7
--- /dev/null
+++ b/examples/parallel_for/seismic/vc7.1/resource.h
@@ -0,0 +1,32 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by SeismicSimulation.rc
+//
+#define IDC_MYICON 2
+#define IDD_SEISMICSIMULATION_DIALOG 102
+#define IDS_APP_TITLE 103
+#define IDD_ABOUTBOX 103
+#define IDM_ABOUT 104
+#define IDM_EXIT 105
+#define IDI_SEISMICSIMULATION 107
+#define IDI_SMALL 108
+#define IDC_SEISMICSIMULATION 109
+#define IDR_MAINFRAME 128
+#define ID_FILE_PARALLEL 32771
+#define ID_FILE_SERIAL 32772
+#define IDM_PARALLEL 32773
+#define ID_FILE_ENABLEGUI 32774
+#define ID_FILE_DISABLEGUI 32775
+#define IDC_STATIC -1
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NO_MFC 1
+#define _APS_NEXT_RESOURCE_VALUE 129
+#define _APS_NEXT_COMMAND_VALUE 32782
+#define _APS_NEXT_CONTROL_VALUE 1000
+#define _APS_NEXT_SYMED_VALUE 110
+#endif
+#endif
diff --git a/examples/parallel_for/seismic/vc7.1/small.ico b/examples/parallel_for/seismic/vc7.1/small.ico
new file mode 100644
index 0000000..d551aa3
Binary files /dev/null and b/examples/parallel_for/seismic/vc7.1/small.ico differ
diff --git a/examples/parallel_for/seismic/vc8/SeismicSimulation.ico b/examples/parallel_for/seismic/vc8/SeismicSimulation.ico
new file mode 100644
index 0000000..d551aa3
Binary files /dev/null and b/examples/parallel_for/seismic/vc8/SeismicSimulation.ico differ
diff --git a/examples/parallel_for/seismic/vc8/SeismicSimulation.rc b/examples/parallel_for/seismic/vc8/SeismicSimulation.rc
new file mode 100644
index 0000000..acef197
--- /dev/null
+++ b/examples/parallel_for/seismic/vc8/SeismicSimulation.rc
@@ -0,0 +1,145 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#define APSTUDIO_HIDDEN_SYMBOLS
+#include "windows.h"
+#undef APSTUDIO_HIDDEN_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_SEISMICSIMULATION ICON "SeismicSimulation.ico"
+IDI_SMALL ICON "small.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Menu
+//
+
+IDC_SEISMICSIMULATION MENU
+BEGIN
+ POPUP "&File"
+ BEGIN
+ MENUITEM "&Parallel", ID_FILE_PARALLEL
+ MENUITEM "&Serial", ID_FILE_SERIAL
+ MENUITEM SEPARATOR
+ MENUITEM "&Enable GUI", ID_FILE_ENABLEGUI
+ MENUITEM "&Disable GUI", ID_FILE_DISABLEGUI
+ MENUITEM SEPARATOR
+ MENUITEM "E&xit", IDM_EXIT
+ END
+ POPUP "&Help"
+ BEGIN
+ MENUITEM "&About ...", IDM_ABOUT
+ END
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Accelerator
+//
+
+IDC_SEISMICSIMULATION ACCELERATORS
+BEGIN
+ VK_OEM_2, IDM_ABOUT, VIRTKEY, ALT, NOINVERT
+ "P", ID_FILE_PARALLEL, VIRTKEY, ALT, NOINVERT
+ "S", ID_FILE_SERIAL, VIRTKEY, ALT, NOINVERT
+ "D", ID_FILE_DISABLEGUI, VIRTKEY, ALT, NOINVERT
+ "E", ID_FILE_ENABLEGUI, VIRTKEY, ALT, NOINVERT
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_ABOUTBOX DIALOG 22, 17, 230, 75
+STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+CAPTION "About"
+FONT 8, "System"
+BEGIN
+ ICON IDI_SEISMICSIMULATION,IDC_MYICON,14,9,16,16
+ LTEXT "SeismicSimulation Version 1.0",IDC_STATIC,49,10,119,8,SS_NOPREFIX
+ LTEXT "Copyright (C) 2005",IDC_STATIC,49,20,119,8
+ DEFPUSHBUTTON "OK",IDOK,195,6,30,11,WS_GROUP
+END
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
+ "#include ""windows.h""\r\n"
+ "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE
+BEGIN
+ IDS_APP_TITLE "SeismicSimulation"
+ IDC_SEISMICSIMULATION "SEISMICSIMULATION"
+END
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/examples/parallel_for/seismic/vc8/SeismicSimulation.sln b/examples/parallel_for/seismic/vc8/SeismicSimulation.sln
new file mode 100644
index 0000000..b000587
--- /dev/null
+++ b/examples/parallel_for/seismic/vc8/SeismicSimulation.sln
@@ -0,0 +1,37 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SeismicSimulation", "SeismicSimulation.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A2527}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ DD Debug|Win32 = DD Debug|Win32
+ DD Debug|x64 = DD Debug|x64
+ DD Release|Win32 = DD Release|Win32
+ DD Release|x64 = DD Release|x64
+ GDI Debug|Win32 = GDI Debug|Win32
+ GDI Debug|x64 = GDI Debug|x64
+ GDI Release|Win32 = GDI Release|Win32
+ GDI Release|x64 = GDI Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Debug|Win32.ActiveCfg = DD Debug|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Debug|Win32.Build.0 = DD Debug|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Debug|x64.ActiveCfg = DD Debug|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Debug|x64.Build.0 = DD Debug|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Release|Win32.ActiveCfg = DD Release|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Release|Win32.Build.0 = DD Release|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Release|x64.ActiveCfg = DD Release|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A2527}.DD Release|x64.Build.0 = DD Release|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Debug|Win32.Build.0 = Debug|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Debug|x64.ActiveCfg = Debug|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Debug|x64.Build.0 = Debug|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Release|Win32.ActiveCfg = Release|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Release|Win32.Build.0 = Release|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Release|x64.ActiveCfg = Release|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A2527}.GDI Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/examples/parallel_for/seismic/vc8/SeismicSimulation.suo b/examples/parallel_for/seismic/vc8/SeismicSimulation.suo
new file mode 100644
index 0000000..48336f3
Binary files /dev/null and b/examples/parallel_for/seismic/vc8/SeismicSimulation.suo differ
diff --git a/examples/parallel_for/seismic/vc8/SeismicSimulation.vcproj b/examples/parallel_for/seismic/vc8/SeismicSimulation.vcproj
new file mode 100644
index 0000000..9f6bbf2
--- /dev/null
+++ b/examples/parallel_for/seismic/vc8/SeismicSimulation.vcproj
@@ -0,0 +1,812 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="SeismicSimulation"
+ ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A2527}"
+ RootNamespace="SeismicSimulation"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories=""$(TBB20_INSTALL_DIR)\include""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""$(TBB20_INSTALL_DIR)\ia32\vc8\lib""
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories=""$(TBB20_INSTALL_DIR)\include""
+ PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""$(TBB20_INSTALL_DIR)\em64t\vc8\lib""
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories=""$(TBB20_INSTALL_DIR)\include""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""$(TBB20_INSTALL_DIR)\ia32\vc8\lib""
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories=""$(TBB20_INSTALL_DIR)\include""
+ PreprocessorDefinitions="WIN64;NDEBUG;_WINDOWS"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""$(TBB20_INSTALL_DIR)\em64t\vc8\lib""
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="DD Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine="..\..\..\common\gui\dxcheck.bat"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories=""$(TBB20_INSTALL_DIR)\include";"$(DXSDK_DIR)\include""
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""$(TBB20_INSTALL_DIR)\ia32\vc8\lib";"$(DXSDK_DIR)\lib\x86""
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="DD Release|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine="..\..\..\common\gui\dxcheck.bat"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories=""$(TBB20_INSTALL_DIR)\include";"$(DXSDK_DIR)\include""
+ PreprocessorDefinitions="WIN64;NDEBUG;_WINDOWS"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""$(TBB20_INSTALL_DIR)\em64t\vc8\lib";"$(DXSDK_DIR)\lib\x64""
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="DD Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine="..\..\..\common\gui\dxcheck.bat"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories=""$(TBB20_INSTALL_DIR)\include";"$(DXSDK_DIR)\include""
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""$(TBB20_INSTALL_DIR)\ia32\vc8\lib";"$(DXSDK_DIR)\lib\x86""
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="DD Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine="..\..\..\common\gui\dxcheck.bat"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories=""$(TBB20_INSTALL_DIR)\include";"$(DXSDK_DIR)\include""
+ PreprocessorDefinitions="WIN64;_DEBUG;_WINDOWS;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""$(TBB20_INSTALL_DIR)\em64t\vc8\lib";"$(DXSDK_DIR)\lib\x64""
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;h;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\SeismicSimulation.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ <File
+ RelativePath=".\resource.h"
+ >
+ </File>
+ <File
+ RelativePath=".\SeismicSimulation.ico"
+ >
+ </File>
+ <File
+ RelativePath=".\SeismicSimulation.rc"
+ >
+ </File>
+ <File
+ RelativePath=".\small.ico"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Video Layer"
+ >
+ <File
+ RelativePath="..\..\..\common\gui\ddvideo.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\common\gui\gdivideo.cpp"
+ >
+ <FileConfiguration
+ Name="DD Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="DD Release|x64"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="DD Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="DD Debug|x64"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\common\gui\video.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\common\gui\winvideo.h"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\index.html"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/parallel_for/seismic/vc8/resource.h b/examples/parallel_for/seismic/vc8/resource.h
new file mode 100644
index 0000000..44453d7
--- /dev/null
+++ b/examples/parallel_for/seismic/vc8/resource.h
@@ -0,0 +1,32 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by SeismicSimulation.rc
+//
+#define IDC_MYICON 2
+#define IDD_SEISMICSIMULATION_DIALOG 102
+#define IDS_APP_TITLE 103
+#define IDD_ABOUTBOX 103
+#define IDM_ABOUT 104
+#define IDM_EXIT 105
+#define IDI_SEISMICSIMULATION 107
+#define IDI_SMALL 108
+#define IDC_SEISMICSIMULATION 109
+#define IDR_MAINFRAME 128
+#define ID_FILE_PARALLEL 32771
+#define ID_FILE_SERIAL 32772
+#define IDM_PARALLEL 32773
+#define ID_FILE_ENABLEGUI 32774
+#define ID_FILE_DISABLEGUI 32775
+#define IDC_STATIC -1
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NO_MFC 1
+#define _APS_NEXT_RESOURCE_VALUE 129
+#define _APS_NEXT_COMMAND_VALUE 32782
+#define _APS_NEXT_CONTROL_VALUE 1000
+#define _APS_NEXT_SYMED_VALUE 110
+#endif
+#endif
diff --git a/examples/parallel_for/seismic/vc8/small.ico b/examples/parallel_for/seismic/vc8/small.ico
new file mode 100644
index 0000000..d551aa3
Binary files /dev/null and b/examples/parallel_for/seismic/vc8/small.ico differ
diff --git a/examples/parallel_for/seismic/xcode/English.lproj/InfoPlist.strings b/examples/parallel_for/seismic/xcode/English.lproj/InfoPlist.strings
new file mode 100644
index 0000000..c0fdfdc
--- /dev/null
+++ b/examples/parallel_for/seismic/xcode/English.lproj/InfoPlist.strings
@@ -0,0 +1,3 @@
+/* Localized versions of Info.plist keys */
+
+NSHumanReadableCopyright = "(C) Intel, 2007";
diff --git a/examples/parallel_for/seismic/xcode/English.lproj/main.nib/classes.nib b/examples/parallel_for/seismic/xcode/English.lproj/main.nib/classes.nib
new file mode 100644
index 0000000..ea58db1
--- /dev/null
+++ b/examples/parallel_for/seismic/xcode/English.lproj/main.nib/classes.nib
@@ -0,0 +1,4 @@
+{
+IBClasses = ();
+IBVersion = 1;
+}
diff --git a/examples/parallel_for/seismic/xcode/English.lproj/main.nib/info.nib b/examples/parallel_for/seismic/xcode/English.lproj/main.nib/info.nib
new file mode 100644
index 0000000..642ec2d
--- /dev/null
+++ b/examples/parallel_for/seismic/xcode/English.lproj/main.nib/info.nib
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>IBDocumentLocation</key>
+ <string>662 774 356 240 0 0 1680 1028 </string>
+ <key>IBEditorPositions</key>
+ <dict>
+ <key>29</key>
+ <string>863 618 271 44 0 0 1680 1028 </string>
+ </dict>
+ <key>IBFramework Version</key>
+ <string>443.0</string>
+ <key>IBOldestOS</key>
+ <integer>3</integer>
+ <key>IBOpenObjects</key>
+ <array>
+ <integer>29</integer>
+ <integer>166</integer>
+ </array>
+ <key>IBSystem Version</key>
+ <string>8I1119</string>
+ <key>targetFramework</key>
+ <string>IBCarbonFramework</string>
+</dict>
+</plist>
diff --git a/examples/parallel_for/seismic/xcode/English.lproj/main.nib/objects.xib b/examples/parallel_for/seismic/xcode/English.lproj/main.nib/objects.xib
new file mode 100644
index 0000000..1d06d6c
--- /dev/null
+++ b/examples/parallel_for/seismic/xcode/English.lproj/main.nib/objects.xib
@@ -0,0 +1,183 @@
+<?xml version="1.0" standalone="yes"?>
+<object class="NSIBObjectData">
+ <string name="targetFramework">IBCarbonFramework</string>
+ <object name="rootObject" class="NSCustomObject" id="1">
+ <string name="customClass">NSApplication</string>
+ </object>
+ <array count="22" name="allObjects">
+ <object class="IBCarbonMenu" id="29">
+ <string name="title">main</string>
+ <array count="3" name="items">
+ <object class="IBCarbonMenuItem" id="210">
+ <boolean name="updateSingleItem">TRUE</boolean>
+ <string name="title">Seismic Simulation</string>
+ <object name="submenu" class="IBCarbonMenu" id="211">
+ <string name="title">Seismic Simulation</string>
+ <array count="7" name="items">
+ <object class="IBCarbonMenuItem" id="215">
+ <boolean name="checked">TRUE</boolean>
+ <boolean name="dynamic">TRUE</boolean>
+ <boolean name="autoDisable">TRUE</boolean>
+ <boolean name="updateSingleItem">TRUE</boolean>
+ <string name="title">Parallel</string>
+ <ostype name="command">para</ostype>
+ </object>
+ <object class="IBCarbonMenuItem" id="214">
+ <boolean name="dynamic">TRUE</boolean>
+ <boolean name="autoDisable">TRUE</boolean>
+ <boolean name="updateSingleItem">TRUE</boolean>
+ <string name="title">Serial</string>
+ <ostype name="command">seri</ostype>
+ </object>
+ <object class="IBCarbonMenuItem" id="216">
+ <boolean name="separator">TRUE</boolean>
+ <boolean name="updateSingleItem">TRUE</boolean>
+ </object>
+ <object class="IBCarbonMenuItem" id="217">
+ <boolean name="checked">TRUE</boolean>
+ <boolean name="dynamic">TRUE</boolean>
+ <boolean name="autoDisable">TRUE</boolean>
+ <boolean name="updateSingleItem">TRUE</boolean>
+ <string name="title">Enable GUI</string>
+ <ostype name="command">egui</ostype>
+ </object>
+ <object class="IBCarbonMenuItem" id="218">
+ <boolean name="dynamic">TRUE</boolean>
+ <boolean name="autoDisable">TRUE</boolean>
+ <boolean name="updateSingleItem">TRUE</boolean>
+ <string name="title">Disable GUI</string>
+ <ostype name="command">dgui</ostype>
+ </object>
+ <object class="IBCarbonMenuItem" id="213">
+ <boolean name="separator">TRUE</boolean>
+ <boolean name="updateSingleItem">TRUE</boolean>
+ </object>
+ <object class="IBCarbonMenuItem" id="212">
+ <boolean name="updateSingleItem">TRUE</boolean>
+ <string name="title">About Seismic</string>
+ <int name="keyEquivalentModifier">0</int>
+ <ostype name="command">abou</ostype>
+ </object>
+ </array>
+ <string name="name">_NSAppleMenu</string>
+ </object>
+ </object>
+ <object class="IBCarbonMenuItem" id="127">
+ <string name="title">File</string>
+ <object name="submenu" class="IBCarbonMenu" id="131">
+ <string name="title">File</string>
+ <array count="1" name="items">
+ <object class="IBCarbonMenuItem" id="200">
+ <string name="title">Close</string>
+ <string name="keyEquivalent">w</string>
+ <ostype name="command">clos</ostype>
+ </object>
+ </array>
+ </object>
+ </object>
+ <object class="IBCarbonMenuItem" id="192">
+ <string name="title">Window</string>
+ <object name="submenu" class="IBCarbonMenu" id="195">
+ <string name="title">Window</string>
+ <array count="5" name="items">
+ <object class="IBCarbonMenuItem" id="190">
+ <boolean name="dynamic">TRUE</boolean>
+ <string name="title">Minimize</string>
+ <string name="keyEquivalent">m</string>
+ <ostype name="command">mini</ostype>
+ </object>
+ <object class="IBCarbonMenuItem" id="197">
+ <string name="title">Zoom</string>
+ <ostype name="command">zoom</ostype>
+ </object>
+ <object class="IBCarbonMenuItem" id="194">
+ <boolean name="separator">TRUE</boolean>
+ </object>
+ <object class="IBCarbonMenuItem" id="196">
+ <boolean name="dynamic">TRUE</boolean>
+ <string name="title">Bring All to Front</string>
+ <ostype name="command">bfrt</ostype>
+ </object>
+ <object class="IBCarbonMenuItem" id="193">
+ <boolean name="dynamic">TRUE</boolean>
+ <string name="title">Arrange in Front</string>
+ <int name="keyEquivalentModifier">1572864</int>
+ <ostype name="command">frnt</ostype>
+ </object>
+ </array>
+ <string name="name">_NSWindowsMenu</string>
+ </object>
+ </object>
+ </array>
+ <string name="name">_NSMainMenu</string>
+ </object>
+ <reference idRef="127"/>
+ <reference idRef="131"/>
+ <object class="IBCarbonWindow" id="166">
+ <string name="windowRect">338 353 698 833 </string>
+ <string name="title">Seismic Simulation</string>
+ <object name="rootControl" class="IBCarbonRootControl" id="167">
+ <string name="bounds">0 0 360 480 </string>
+ <string name="viewFrame">0 0 480 360 </string>
+ </object>
+ <boolean name="receiveUpdates">FALSE</boolean>
+ <boolean name="compositing">TRUE</boolean>
+ <int name="themeBrush">-1</int>
+ <boolean name="asyncDrag">TRUE</boolean>
+ <boolean name="doesNotCycle">TRUE</boolean>
+ <int name="WindowMinWidth">320</int>
+ <int name="WindowMinHeight">200</int>
+ </object>
+ <reference idRef="167"/>
+ <reference idRef="190"/>
+ <reference idRef="192"/>
+ <reference idRef="193"/>
+ <reference idRef="194"/>
+ <reference idRef="195"/>
+ <reference idRef="196"/>
+ <reference idRef="197"/>
+ <reference idRef="200"/>
+ <reference idRef="210"/>
+ <reference idRef="211"/>
+ <reference idRef="212"/>
+ <reference idRef="213"/>
+ <reference idRef="214"/>
+ <reference idRef="215"/>
+ <reference idRef="216"/>
+ <reference idRef="217"/>
+ <reference idRef="218"/>
+ </array>
+ <array count="22" name="allParents">
+ <reference idRef="1"/>
+ <reference idRef="29"/>
+ <reference idRef="127"/>
+ <reference idRef="1"/>
+ <reference idRef="166"/>
+ <reference idRef="195"/>
+ <reference idRef="29"/>
+ <reference idRef="195"/>
+ <reference idRef="195"/>
+ <reference idRef="192"/>
+ <reference idRef="195"/>
+ <reference idRef="195"/>
+ <reference idRef="131"/>
+ <reference idRef="29"/>
+ <reference idRef="210"/>
+ <reference idRef="211"/>
+ <reference idRef="211"/>
+ <reference idRef="211"/>
+ <reference idRef="211"/>
+ <reference idRef="211"/>
+ <reference idRef="211"/>
+ <reference idRef="211"/>
+ </array>
+ <dictionary count="3" name="nameTable">
+ <string>Files Owner</string>
+ <reference idRef="1"/>
+ <string>MainWindow</string>
+ <reference idRef="166"/>
+ <string>MenuBar</string>
+ <reference idRef="29"/>
+ </dictionary>
+ <unsigned_int name="nextObjectID">219</unsigned_int>
+</object>
diff --git a/examples/parallel_for/seismic/xcode/Info.plist b/examples/parallel_for/seismic/xcode/Info.plist
new file mode 100644
index 0000000..d435fca
--- /dev/null
+++ b/examples/parallel_for/seismic/xcode/Info.plist
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIconFile</key>
+ <string></string>
+ <key>CFBundleIdentifier</key>
+ <string>com.intel.tbb.SeismicSimulation</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1.0</string>
+ <key>CSResourcesFileMapped</key>
+ <true/>
+</dict>
+</plist>
diff --git a/examples/parallel_for/seismic/xcode/SeismicSimulation.pch b/examples/parallel_for/seismic/xcode/SeismicSimulation.pch
new file mode 100644
index 0000000..bacf499
--- /dev/null
+++ b/examples/parallel_for/seismic/xcode/SeismicSimulation.pch
@@ -0,0 +1,5 @@
+//
+// Prefix header for all source files of the 'SeismicSimulation' target in the 'SeismicSimulation' project.
+//
+
+#include <Carbon/Carbon.h>
diff --git a/examples/parallel_for/seismic/xcode/SeismicSimulation.xcodeproj/project.pbxproj b/examples/parallel_for/seismic/xcode/SeismicSimulation.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..b0515d3
--- /dev/null
+++ b/examples/parallel_for/seismic/xcode/SeismicSimulation.xcodeproj/project.pbxproj
@@ -0,0 +1,295 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 42;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 8D0C4E8D0486CD37000505A6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */; };
+ 8D0C4E8E0486CD37000505A6 /* main.nib in Resources */ = {isa = PBXBuildFile; fileRef = 02345980000FD03B11CA0E72 /* main.nib */; };
+ A12649490B8392750091D5AD /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */; };
+ A126495E0B83936D0091D5AD /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D0C4E960486CD37000505A6 /* Info.plist */; };
+ A18D2A340B861B99007D8D2C /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A18D2A330B861B99007D8D2C /* libtbb.dylib */; };
+ A1A8F41E0B8B4DBE001C55B1 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1A8F41D0B8B4DBE001C55B1 /* AGL.framework */; };
+ A1A8F4310B8B4EA8001C55B1 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1A8F4300B8B4EA8001C55B1 /* Carbon.framework */; };
+ A1D44D9A0B861E8A0006E401 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A18D2A330B861B99007D8D2C /* libtbb.dylib */; };
+ A1E3E7BD0B3AD4EC007C3AB5 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */; };
+ A1F591A90B8DFC7100073279 /* SeismicSimulation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F591A80B8DFC7100073279 /* SeismicSimulation.cpp */; };
+ A1F591AC0B8DFC9600073279 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F591AA0B8DFC9600073279 /* macvideo.cpp */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ A18D2A370B861BB7007D8D2C /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 16;
+ files = (
+ A1D44D9A0B861E8A0006E401 /* libtbb.dylib in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 0867D6ABFE840B52C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+ 1870340FFE93FCAF11CA0CD7 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/main.nib; sourceTree = "<group>"; };
+ 32DBCF6D0370B57F00C91783 /* SeismicSimulation.pch */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SeismicSimulation.pch; sourceTree = "<group>"; };
+ 8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
+ 8D0C4E970486CD37000505A6 /* SeismicSimulation.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SeismicSimulation.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ A18D2A330B861B99007D8D2C /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+ A1A8F41D0B8B4DBE001C55B1 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; };
+ A1A8F4300B8B4EA8001C55B1 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
+ A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
+ A1F591A80B8DFC7100073279 /* SeismicSimulation.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = SeismicSimulation.cpp; path = ../SeismicSimulation.cpp; sourceTree = SOURCE_ROOT; };
+ A1F591AA0B8DFC9600073279 /* macvideo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macvideo.cpp; path = ../../../common/gui/macvideo.cpp; sourceTree = SOURCE_ROOT; };
+ A1F591AB0B8DFC9600073279 /* video.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = video.h; path = ../../../common/gui/video.h; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8D0C4E910486CD37000505A6 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1E3E7BD0B3AD4EC007C3AB5 /* OpenGL.framework in Frameworks */,
+ A12649490B8392750091D5AD /* OpenGL.framework in Frameworks */,
+ A18D2A340B861B99007D8D2C /* libtbb.dylib in Frameworks */,
+ A1A8F41E0B8B4DBE001C55B1 /* AGL.framework in Frameworks */,
+ A1A8F4310B8B4EA8001C55B1 /* Carbon.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 195DF8CFFE9D517E11CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8D0C4E970486CD37000505A6 /* SeismicSimulation.app */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 20286C29FDCF999611CA2CEA /* SeismicSimulation */ = {
+ isa = PBXGroup;
+ children = (
+ 20286C2AFDCF999611CA2CEA /* Sources */,
+ 20286C2CFDCF999611CA2CEA /* Resources */,
+ 20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */,
+ 195DF8CFFE9D517E11CA2CBB /* Products */,
+ );
+ name = SeismicSimulation;
+ sourceTree = "<group>";
+ };
+ 20286C2AFDCF999611CA2CEA /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ A1F591A80B8DFC7100073279 /* SeismicSimulation.cpp */,
+ A1F591AA0B8DFC9600073279 /* macvideo.cpp */,
+ A1F591AB0B8DFC9600073279 /* video.h */,
+ 32DBCF6D0370B57F00C91783 /* SeismicSimulation.pch */,
+ );
+ name = Sources;
+ sourceTree = "<group>";
+ };
+ 20286C2CFDCF999611CA2CEA /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ 8D0C4E960486CD37000505A6 /* Info.plist */,
+ 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */,
+ 02345980000FD03B11CA0E72 /* main.nib */,
+ );
+ name = Resources;
+ sourceTree = "<group>";
+ };
+ 20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ A18D2A330B861B99007D8D2C /* libtbb.dylib */,
+ A1A8F4300B8B4EA8001C55B1 /* Carbon.framework */,
+ A1A8F41D0B8B4DBE001C55B1 /* AGL.framework */,
+ A1E3E7BC0B3AD4EC007C3AB5 /* OpenGL.framework */,
+ );
+ name = "External Frameworks and Libraries";
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8D0C4E890486CD37000505A6 /* SeismicSimulation */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "SeismicSimulation" */;
+ buildPhases = (
+ 8D0C4E8C0486CD37000505A6 /* Resources */,
+ 8D0C4E8F0486CD37000505A6 /* Sources */,
+ 8D0C4E910486CD37000505A6 /* Frameworks */,
+ A18D2A370B861BB7007D8D2C /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = SeismicSimulation;
+ productInstallPath = "$(HOME)/Applications";
+ productName = SeismicSimulation;
+ productReference = 8D0C4E970486CD37000505A6 /* SeismicSimulation.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 20286C28FDCF999611CA2CEA /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "SeismicSimulation" */;
+ hasScannedForEncodings = 1;
+ mainGroup = 20286C29FDCF999611CA2CEA /* SeismicSimulation */;
+ projectDirPath = "";
+ targets = (
+ 8D0C4E890486CD37000505A6 /* SeismicSimulation */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 8D0C4E8C0486CD37000505A6 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8D0C4E8D0486CD37000505A6 /* InfoPlist.strings in Resources */,
+ 8D0C4E8E0486CD37000505A6 /* main.nib in Resources */,
+ A126495E0B83936D0091D5AD /* Info.plist in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8D0C4E8F0486CD37000505A6 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F591A90B8DFC7100073279 /* SeismicSimulation.cpp in Sources */,
+ A1F591AC0B8DFC9600073279 /* macvideo.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 02345980000FD03B11CA0E72 /* main.nib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 1870340FFE93FCAF11CA0CD7 /* English */,
+ );
+ name = main.nib;
+ sourceTree = "<group>";
+ };
+ 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 0867D6ABFE840B52C02AAC07 /* English */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "<group>";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ C0E91AC608A95435008D54AB /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_MODEL_TUNING = "";
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/Applications";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = SeismicSimulation;
+ };
+ name = Debug;
+ };
+ C0E91AC708A95435008D54AB /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_MODEL_TUNING = "";
+ INSTALL_PATH = "$(HOME)/Applications";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = SeismicSimulation;
+ };
+ name = Release;
+ };
+ C0E91ACA08A95435008D54AB /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = i386;
+ GCC_AUTO_VECTORIZATION = YES;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_ENABLE_SSE3_EXTENSIONS = YES;
+ GCC_MODEL_TUNING = "";
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
+ MACH_O_TYPE = mh_execute;
+ MACOSX_DEPLOYMENT_TARGET = 10.4;
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Debug;
+ };
+ C0E91ACB08A95435008D54AB /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = i386;
+ GCC_AUTO_VECTORIZATION = YES;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_ENABLE_SSE3_EXTENSIONS = YES;
+ GCC_MODEL_TUNING = "";
+ GCC_OPTIMIZATION_LEVEL = 3;
+ GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
+ MACH_O_TYPE = mh_execute;
+ MACOSX_DEPLOYMENT_TARGET = 10.4;
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "SeismicSimulation" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C0E91AC608A95435008D54AB /* Debug */,
+ C0E91AC708A95435008D54AB /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "SeismicSimulation" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C0E91ACA08A95435008D54AB /* Debug */,
+ C0E91ACB08A95435008D54AB /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 20286C28FDCF999611CA2CEA /* Project object */;
+}
diff --git a/examples/parallel_for/tacheon/Makefile b/examples/parallel_for/tacheon/Makefile
new file mode 100644
index 0000000..5e1deb9
--- /dev/null
+++ b/examples/parallel_for/tacheon/Makefile
@@ -0,0 +1,199 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# The original source for this example is
+# Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+# must display the following acknowledgement:
+# This product includes software developed by John E. Stone
+# 4. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+# GNU Makefile that builds and runs example.
+NAME:=tacheon
+
+# The C++ compiler
+#CXX = g++
+
+# The default dataset
+export DATASET = balls
+# The default runtime arguments
+export ARGS =
+
+# detecting x64
+ifeq ($(shell arch),x86_64)
+x64 ?= 64
+endif
+# detecting UI ("mac", "x" or "con")
+ifeq ($(shell uname),Darwin)
+UI ?= mac
+else
+UI ?= $(shell sh -c "[ -f /usr/X11R6/lib$(x64)/libX11.so -o -f /usr/lib$(x64)/libX11.so ] && echo x || echo con")
+endif
+
+MYCXXFLAGS = -DX_FULLSYNC
+LIBS = -lm
+
+# Platform-specific settings
+ifeq ($(UI),x)
+EXE=$(NAME).$(VERSION)
+MYCXXFLAGS += -I/usr/X11R6/include
+ADD_THREADS=1
+LIBS += -L/usr/X11R6/lib$(x64) -lX11
+# detect if libXext can be found
+ifeq ($(shell sh -c "[ -f /usr/X11R6/lib$(x64)/libXext.so -o -f /usr/lib$(x64)/libXext.so ] && echo 0"),0)
+LIBS += -lXext
+MYCXXFLAGS += -DX_NOSHMPIX
+else
+MYCXXFLAGS += -DX_NOSHMEM
+endif
+else
+
+ifeq ($(UI),mac)
+TBBLIBS = /Library/Frameworks/TBB.framework/Libraries
+CXXFLAGS += -arch i386 -mmacosx-version-min=10.4 -fno-rtti -msse3 -ftree-vectorize
+LIBS += -framework OpenGL -framework AGL -framework Carbon -L$(TBBLIBS)
+RES = $(NAME).$(VERSION).app/Contents/Resources
+EXE = $(NAME).$(VERSION).app/Contents/MacOS/$(NAME).$(VERSION)
+PBXCP = /System/Library/PrivateFrameworks/DevToolsCore.framework/Resources/pbxcp -resolve-src-symlinks -exclude .DS_Store -exclude CVS
+else # ! Mac
+
+UI=con
+EXE=$(NAME).$(VERSION)
+endif # Mac
+endif # X
+
+MYCXXFLAGS += $(CXXFLAGS)
+
+all: build run
+release: build
+debug: build_debug
+test: run
+
+build: build_serial build_tbb1d build_tbb
+build_debug: build_serial_debug build_tbb1d_debug build_tbb_debug
+run: run_serial run_tbb1d run_tbb
+
+serial: build_serial run_serial
+serial_debug: build_serial_debug run_serial
+tbb: build_tbb run_tbb
+tbb_debug: build_tbb_debug run_tbb
+tbb1d: build_tbb1d run_tbb1d
+tbb1d_debug: build_tbb1d_debug run_tbb1d
+
+build_serial:
+ $(MAKE) VERSION=serial build_one
+build_serial_debug:
+ $(MAKE) VERSION=serial ADD_DEBUG=1 build_one
+run_serial:
+ $(MAKE) VERSION=serial run_one
+
+build_tbb:
+ $(MAKE) VERSION=tbb ADD_TBB=1 build_one
+build_tbb_debug:
+ $(MAKE) VERSION=tbb ADD_TBB=1 ADD_DEBUG=1 build_one
+run_tbb:
+ $(MAKE) VERSION=tbb run_one
+
+build_tbb1d:
+ $(MAKE) VERSION=tbb1d ADD_TBB=1 build_one
+build_tbb1d_debug:
+ $(MAKE) VERSION=tbb1d ADD_TBB=1 ADD_DEBUG=1 build_one
+run_tbb1d:
+ $(MAKE) VERSION=tbb1d run_one
+
+
+#
+# Per-build Makefile rules (for recursive $(MAKE) calls from above)
+#
+
+SVERSION = $(VERSION)
+
+ifeq ($(ADD_DEBUG),1)
+MYCXXFLAGS += -O0 -g -D_DEBUG
+else
+MYCXXFLAGS += -O2
+endif
+
+ifeq ($(ADD_THREADS),1)
+LIBS += -lpthread
+endif
+
+
+ifeq ($(ADD_TBB),1)
+MYCXXFLAGS +=
+ifeq ($(ADD_DEBUG),1)
+MYCXXFLAGS += -DTBB_DO_ASSERT
+LIBS += -ltbb_debug
+else
+LIBS += -ltbb
+endif
+endif
+
+SOURCE = ../../common/gui/$(UI)video.cpp src/trace.$(SVERSION).cpp src/pthread.cpp src/video.cpp src/api.cpp src/apigeom.cpp src/apitrigeom.cpp src/bndbox.cpp src/box.cpp src/camera.cpp src/coordsys.cpp src/cylinder.cpp src/extvol.cpp src/getargs.cpp src/global.cpp src/grid.cpp src/imageio.cpp src/imap.cpp src/intersect.cpp src/jpeg.cpp src/light.cpp src/objbound.cpp src/parse.cpp src/plane.cpp src/ppm.cpp src/quadric.cpp src/render.cpp src/ring.cpp src/shade.cpp src/sphere.cpp src/textu [...]
+
+build_one: $(EXE)
+
+run_one:
+ifeq ($(UI),mac)
+ export DYLD_LIBRARY_PATH="$(DYLD_LIBRARY_PATH):$(TBBLIBS)"; ./$(EXE) $(ARGS) dat/$(DATASET).dat
+else
+ ./$(EXE) $(ARGS) dat/$(DATASET).dat
+endif
+
+$(EXE): $(SOURCE)
+ifeq ($(UI),mac)
+ mkdir -p $(RES)/English.lproj $(NAME).$(VERSION).app/Contents/MacOS
+ $(PBXCP) xcode/English.lproj/InfoPlist.strings xcode/English.lproj/main.nib $(RES)/English.lproj
+ $(PBXCP) xcode/Info.plist $(RES)
+endif
+ $(CXX) $(MYCXXFLAGS) -o $@ $(SOURCE) $(LIBS)
+ rm -f *.o
+
+clean:
+ rm -rf $(NAME).* *.o *.d
diff --git a/examples/parallel_for/tacheon/Makefile.windows b/examples/parallel_for/tacheon/Makefile.windows
new file mode 100644
index 0000000..3242239
--- /dev/null
+++ b/examples/parallel_for/tacheon/Makefile.windows
@@ -0,0 +1,133 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# The original source for this example is
+# Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+# must display the following acknowledgement:
+# This product includes software developed by John E. Stone
+# 4. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+# Common Makefile that builds and runs example.
+
+# The C++ compiler
+CXX = cl.exe
+
+# Uncomment one of next lines to choose user interface type (console, gdiplus, direct draw)
+#UI = con
+UI = gdi
+#UI = dd
+
+# Machine architecture, auto-detected from TBB_ARCH_PLATFORM by default
+# Use XARCH variable to change it. See index.html for more information
+ARCH0 = $(TBB_ARCH_PLATFORM)-
+ARCH1 = $(ARCH0:\vc7.1-=)
+ARCH2 = $(ARCH1:\vc8-=)
+ARCH3 = $(ARCH2:ia32=x86)
+ARCH4 = $(ARCH3:em64t=AMD64)
+XARCH = $(ARCH4:-=x86)
+
+# The default dataset
+DATASET = balls
+# The default runtime arguments
+ARGS =
+
+# Add these for tbb/tbb1d release builds
+CXXFLAGS_TBB_NDEBUG = $(CXXFLAGS)
+LIBS_TBB_NDEBUG = tbb.lib
+
+# Add these for tbb/tbb1d debug builds
+CXXFLAGS_TBB_DEBUG = $(CXXFLAGS) /D TBB_DO_ASSERT
+LIBS_TBB_DEBUG = tbb_debug.lib
+
+
+MAKEINC = ../../common/gui/Makefile.win
+SOURCE = src/pthread.cpp src/video.cpp src/api.cpp src/apigeom.cpp src/apitrigeom.cpp src/bndbox.cpp src/box.cpp src/camera.cpp src/coordsys.cpp src/cylinder.cpp src/extvol.cpp src/getargs.cpp src/global.cpp src/grid.cpp src/imageio.cpp src/imap.cpp src/intersect.cpp src/jpeg.cpp src/light.cpp src/objbound.cpp src/parse.cpp src/plane.cpp src/ppm.cpp src/quadric.cpp src/render.cpp src/ring.cpp src/shade.cpp src/sphere.cpp src/texture.cpp src/tgafile.cpp src/trace_rest.cpp src/triangle.cpp [...]
+
+# Targets
+all: build run
+release: build
+debug: build_debug
+test: run
+
+build: build_serial build_tbb1d build_tbb
+build_debug: build_serial_debug build_tbb1d_debug build_tbb_debug
+run: run_serial run_tbb1d run_tbb
+
+serial: build_serial run_serial
+serial_debug: build_serial_debug run_serial
+tbb: build_tbb run_tbb
+tbb_debug: build_tbb_debug run_tbb
+tbb1d: build_tbb1d run_tbb1d
+tbb1d_debug: build_tbb1d_debug run_tbb1d
+
+build_serial:
+ @$(MAKE) -f $(MAKEINC) SOURCE="src/trace.serial.cpp $(SOURCE)" EXE=tacheon.serial.exe RCNAME=gui UI=$(UI) CXX="$(CXX)" CXXFLAGS=$(CXXFLAGS) XARCH=$(XARCH) build_one
+build_serial_debug:
+ @$(MAKE) -f $(MAKEINC) SOURCE="src/trace.serial.cpp $(SOURCE)" EXE=tacheon.serial.exe RCNAME=gui UI=$(UI) DEBUG=_debug CXX="$(CXX)" CXXFLAGS=$(CXXFLAGS) XARCH=$(XARCH) build_one
+run_serial:
+ -.\tacheon.serial.exe $(ARGS) dat\$(DATASET).dat
+
+build_tbb:
+ @$(MAKE) -f $(MAKEINC) SOURCE="src/trace.tbb.cpp $(SOURCE)" EXE=tacheon.tbb.exe RCNAME=gui UI=$(UI) CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS_TBB_NDEBUG)" LFLAGS="$(LIBS_TBB_NDEBUG)" XARCH=$(XARCH) build_one
+build_tbb_debug:
+ @$(MAKE) -f $(MAKEINC) SOURCE="src/trace.tbb.cpp $(SOURCE)" EXE=tacheon.tbb.exe RCNAME=gui UI=$(UI) DEBUG=_debug CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS_TBB_DEBUG)" LFLAGS="$(LIBS_TBB_DEBUG)" XARCH=$(XARCH) build_one
+run_tbb:
+ -.\tacheon.tbb.exe $(ARGS) dat\$(DATASET).dat
+
+build_tbb1d:
+ @$(MAKE) -f $(MAKEINC) SOURCE="src/trace.tbb1d.cpp $(SOURCE)" EXE=tacheon.tbb1d.exe RCNAME=gui UI=$(UI) CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS_TBB_NDEBUG)" LFLAGS="$(LIBS_TBB_NDEBUG)" XARCH=$(XARCH) build_one
+build_tbb1d_debug:
+ @$(MAKE) -f $(MAKEINC) SOURCE="src/trace.tbb1d.cpp $(SOURCE)" EXE=tacheon.tbb1d.exe RCNAME=gui UI=$(UI) DEBUG=_debug CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS_TBB_DEBUG)" LFLAGS="$(LIBS_TBB_DEBUG)" XARCH=$(XARCH) build_one
+run_tbb1d:
+ -.\tacheon.tbb1d.exe $(ARGS) dat\$(DATASET).dat
+
+
+clean:
+ @cmd.exe /C del tacheon.* *.manifest *.obj vc7.1\gui.res *.?db
diff --git a/examples/parallel_for/tacheon/dat/820spheres.dat b/examples/parallel_for/tacheon/dat/820spheres.dat
new file mode 100644
index 0000000..5d5a430
--- /dev/null
+++ b/examples/parallel_for/tacheon/dat/820spheres.dat
@@ -0,0 +1,1671 @@
+BEGIN_SCENE
+ OUTFILE /dev/null
+ RESOLUTION 512 512
+ VERBOSE 0
+
+CAMERA
+ ZOOM 1.0
+ ASPECTRATIO 1.0
+ ANTIALIASING 0
+ RAYDEPTH 12
+ CENTER 0.0 0.0 2.0
+ VIEWDIR 0 0 -1
+ UPDIR 0 1 0
+
+END_CAMERA
+
+LIGHT CENTER 4 3 2 RAD 0.2 COLOR 0.5 0.5 0.5
+
+LIGHT CENTER 1 -4 4 RAD 0.2 COLOR 0.5 0.5 0.5
+
+LIGHT CENTER -3 1 5 RAD 0.2 COLOR 0.5 0.5 0.5
+
+TEXDEF txt001 AMBIENT 0.2 DIFFUSE 0.8 SPECULAR 0 OPACITY 1
+ COLOR 1 0.75 0.33
+ TEXFUNC 0
+
+TEXDEF txt002 AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0
+ COLOR 1.0 1.0 1.0 TEXFUNC 0
+
+ SPHERE CENTER 0 0 0 RAD 0.5
+ txt002
+ SPHERE CENTER 0.272166 0.272166 0.544331 RAD 0.166667
+ txt002
+ SPHERE CENTER 0.420314 0.420314 0.618405 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.470715 0.470715 0.598245 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.461623 0.409245 0.557924 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.409245 0.461623 0.557924 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.429405 0.481784 0.658726 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.367935 0.472692 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.379004 0.431383 0.678886 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.481784 0.429405 0.658726 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.431383 0.379004 0.678886 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.472692 0.367935 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.461844 0.304709 0.43322 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.492085 0.33495 0.372739 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.424345 0.305171 0.369341 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.435193 0.368397 0.406378 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.529584 0.334488 0.436618 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.472692 0.367935 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.499343 0.304247 0.497099 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.518736 0.271262 0.399581 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.488495 0.241021 0.460062 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.450996 0.241483 0.396183 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.304709 0.461844 0.43322 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.33495 0.492085 0.372739 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.368397 0.435193 0.406378 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.305171 0.424345 0.369341 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.271262 0.518736 0.399581 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.241483 0.450996 0.396183 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.241021 0.488495 0.460062 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.334488 0.529584 0.436618 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.304247 0.499343 0.497099 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.367935 0.472692 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.230635 0.38777 0.729516 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.2506 0.446614 0.769837 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.301839 0.407906 0.732914 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.253236 0.449775 0.695877 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.179397 0.426478 0.766439 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.182032 0.429639 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.159431 0.367634 0.726118 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.227999 0.384609 0.803476 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.208034 0.325765 0.763155 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.279238 0.345901 0.766553 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.115031 0.4293 0.544331 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.102505 0.502308 0.544331 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.160392 0.474661 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.160392 0.474661 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0571437 0.456947 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.115031 0.4293 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0696698 0.383939 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0571437 0.456947 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0696698 0.383939 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.115031 0.4293 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.082487 0.239622 0.655442 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.0438957 0.258053 0.715923 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.117687 0.252557 0.719322 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0863845 0.308551 0.682285 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.00869528 0.245118 0.652044 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0511841 0.295616 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0472866 0.226687 0.591563 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0399982 0.189123 0.689081 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0785895 0.170692 0.6286 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.11379 0.183628 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.38777 0.230635 0.729516 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.446614 0.2506 0.769837 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.449775 0.253236 0.695877 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.407906 0.301839 0.732914 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.384609 0.227999 0.803476 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.345901 0.279238 0.766553 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.325765 0.208034 0.763155 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.426478 0.179397 0.766439 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.367634 0.159431 0.726118 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.429639 0.182032 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.239622 0.082487 0.655442 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.258053 0.0438957 0.715923 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.308551 0.0863845 0.682285 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.252557 0.117687 0.719322 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.189123 0.0399982 0.689081 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.183628 0.11379 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.170692 0.0785895 0.6286 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.245118 0.00869528 0.652044 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.226687 0.0472866 0.591563 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.295616 0.0511841 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.4293 0.115031 0.544331 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.502308 0.102505 0.544331 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.474661 0.160392 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.474661 0.160392 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.456947 0.0571437 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.4293 0.115031 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.383939 0.0696698 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.456947 0.0571437 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.383939 0.0696698 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.4293 0.115031 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.643951 0.172546 1.11022e-16 RAD 0.166667
+ txt002
+ SPHERE CENTER 0.802608 0.281471 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.824035 0.30566 -0.177765 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.787796 0.241352 -0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.752156 0.305221 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.838847 0.34578 -0.117284 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.766968 0.345341 -0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.817421 0.321591 -0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.874487 0.28191 -0.129006 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.853061 0.257721 -0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.838248 0.217602 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.643951 0.172546 -0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.61371 0.202787 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.5724 0.191718 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.624779 0.244096 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.68526 0.183615 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.696329 0.224924 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.715501 0.153374 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.632882 0.131237 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.663122 0.100996 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.591572 0.120168 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.594141 0.358439 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.619127 0.408291 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.665691 0.37761 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.638217 0.337042 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.547576 0.389119 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.566667 0.317871 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.522591 0.339267 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.57505 0.429687 -0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.550064 0.379835 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.621614 0.399007 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.802608 0.281471 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.858698 0.329459 0.104938 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.845371 0.280879 0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.798572 0.337088 0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.815936 0.330051 0.165419 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.75581 0.33768 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.759846 0.282063 0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.862735 0.273842 0.153697 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.806645 0.225855 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.849407 0.225263 0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.594141 0.358439 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.613592 0.428945 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.665691 0.37761 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.621614 0.399007 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.542042 0.409774 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.550064 0.379835 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.522591 0.339267 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.586119 0.388377 0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.566667 0.317871 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.638217 0.337042 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.643951 0.172546 0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.674191 0.202787 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.715501 0.191718 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.663122 0.244096 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.602641 0.183615 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.591572 0.224924 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.5724 0.153374 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.655019 0.131237 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.624779 0.100996 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.696329 0.120168 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.852418 0.0955788 2.30268e-16 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.922609 0.11107 -0.0178949 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.867231 0.135698 -0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.877966 0.164775 0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.907797 0.0709499 0.0425863 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.863153 0.124655 0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.837606 0.0554592 0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.897062 0.0418734 -0.0246914 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.826871 0.0263827 -0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.841683 0.0665023 -0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.69376 -0.0133465 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.740325 -0.0440268 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.76531 0.0058253 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.721234 0.0272215 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.668775 -0.0631985 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.649684 0.00804971 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.62221 -0.0325183 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.712851 -0.0845947 0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.666287 -0.0539145 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.737837 -0.0347427 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.69376 -0.0133465 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.745859 -0.0646815 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.76531 0.0058253 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.737837 -0.0347427 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.674309 -0.0838533 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.666287 -0.0539145 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.62221 -0.0325183 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.701782 -0.0432853 -0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.649684 0.00804971 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.721234 0.0272215 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.172546 0.643951 1.11022e-16 RAD 0.166667
+ txt002
+ SPHERE CENTER 0.281471 0.802608 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.30566 0.824035 -0.177765 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.305221 0.752156 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.241352 0.787796 -0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.28191 0.874487 -0.129006 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.217602 0.838248 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.257721 0.853061 -0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.34578 0.838847 -0.117284 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.321591 0.817421 -0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.345341 0.766968 -0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.358439 0.594141 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.408291 0.619127 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.337042 0.638217 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.37761 0.665691 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.429687 0.57505 -0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.399007 0.621614 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.379835 0.550064 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.389119 0.547576 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.339267 0.522591 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.317871 0.566667 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.172546 0.643951 -0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.142305 0.674191 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.100996 0.663122 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.153374 0.715501 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.213855 0.655019 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.224924 0.696329 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.244096 0.624779 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.161477 0.602641 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.191718 0.5724 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.120168 0.591572 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0955788 0.852418 1.31582e-16 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.11107 0.922609 -0.0178949 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.164775 0.877966 0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.135698 0.867231 -0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0418734 0.897062 -0.0246914 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0665023 0.841683 -0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0263827 0.826871 -0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0709499 0.907797 0.0425863 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0554592 0.837606 0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.124655 0.863153 0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0133465 0.69376 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.0646815 0.745859 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0347427 0.737837 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0058253 0.76531 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0432853 0.701782 -0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0272215 0.721234 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.00804971 0.649684 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0838533 0.674309 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0325183 0.62221 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0539145 0.666287 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0133465 0.69376 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.0440268 0.740325 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0272215 0.721234 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0058253 0.76531 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0845947 0.712851 0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0347427 0.737837 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0539145 0.666287 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0631985 0.668775 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0325183 0.62221 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.00804971 0.649684 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.281471 0.802608 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.329459 0.858698 0.104938 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.337088 0.798572 0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.280879 0.845371 0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.273842 0.862735 0.153697 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.225263 0.849407 0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.225855 0.806645 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.330051 0.815936 0.165419 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.282063 0.759846 0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.33768 0.75581 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.172546 0.643951 0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.202787 0.674191 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.244096 0.663122 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.191718 0.715501 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.131237 0.655019 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.120168 0.696329 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.100996 0.624779 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.183615 0.602641 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.153374 0.5724 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.224924 0.591572 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.358439 0.594141 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.428945 0.613592 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.399007 0.621614 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.37761 0.665691 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.388377 0.586119 0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.337042 0.638217 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.317871 0.566667 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.409774 0.542042 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.339267 0.522591 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.379835 0.550064 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.371785 0.0996195 0.544331 RAD 0.166667
+ txt002
+ SPHERE CENTER -0.393621 0.220501 0.729516 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.368601 0.279642 0.766439 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.321889 0.238665 0.726118 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.372464 0.281062 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.440333 0.261479 0.769837 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.444196 0.262898 0.695877 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.465353 0.202338 0.732914 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.389758 0.219082 0.803476 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.414778 0.15994 0.766553 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.343046 0.178104 0.763155 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.191247 0.166275 0.655442 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.130089 0.20793 0.652044 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.154295 0.172673 0.591563 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.192135 0.230419 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.167041 0.201532 0.715923 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.229087 0.224021 0.682285 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.228199 0.159877 0.719322 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.129201 0.143787 0.689081 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.190359 0.102131 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.153407 0.108529 0.6286 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.31427 0.31427 0.544331 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.277961 0.367156 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.252306 0.297666 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.31427 0.31427 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.339925 0.383759 0.544331 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.376234 0.330873 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.376234 0.330873 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.277961 0.367156 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.31427 0.31427 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.252306 0.297666 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.574159 0.153845 0.618405 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.612768 0.202534 0.658726 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.543919 0.184086 0.678886 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.554987 0.225396 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.643008 0.172294 0.598245 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.585228 0.195155 0.557924 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.6044 0.123605 0.557924 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.631939 0.130984 0.658726 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.593331 0.0822954 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.56309 0.112536 0.678886 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.494808 0.247614 0.43322 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.494287 0.313607 0.399581 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.452978 0.302539 0.460062 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.434629 0.269833 0.396183 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.536117 0.258683 0.372739 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.476459 0.214908 0.369341 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.536638 0.19269 0.406378 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.554467 0.291389 0.436618 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.554987 0.225396 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.513157 0.28032 0.497099 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.552323 0.0329639 0.43322 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.625877 0.0248832 0.436618 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.584567 0.0138144 0.497099 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.593331 0.0822954 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.593633 0.0440327 0.372739 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.561087 0.101445 0.406378 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.520079 0.0521134 0.369341 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.584869 -0.0244483 0.399581 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.511316 -0.0163676 0.396183 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.54356 -0.0355172 0.460062 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.451136 0.0058509 0.729516 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.447081 0.0051487 0.803476 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.386138 0.0172804 0.763155 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.439178 0.0688765 0.766553 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.512079 -0.00628079 0.769837 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.504176 0.0574471 0.732914 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.516134 -0.00557859 0.695877 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.459039 -0.0578769 0.766439 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.463094 -0.0571747 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.398096 -0.0457452 0.726118 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.4293 -0.115031 0.544331 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.424299 -0.178985 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.367336 -0.131634 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.4293 -0.115031 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.486264 -0.162382 0.544331 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.491265 -0.0984274 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.491265 -0.0984274 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.424299 -0.178985 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.4293 -0.115031 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.367336 -0.131634 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.248762 -0.0483751 0.655442 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.183785 -0.0599222 0.689081 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.187119 -0.0172857 0.6286 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.215921 0.00673113 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.245428 -0.0910116 0.715923 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.277564 -0.0243582 0.719322 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.310405 -0.0794645 0.682285 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.216626 -0.115028 0.652044 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.281603 -0.103481 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.21996 -0.0723919 0.591563 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.471405 0.471405 1.11022e-16 RAD 0.166667
+ txt002
+ SPHERE CENTER -0.508983 0.690426 1.25414e-16 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.484794 0.755941 -0.0246914 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.436283 0.7029 -0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.478434 0.695668 -0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.557494 0.743468 -0.0178949 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.551134 0.683194 -0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.581682 0.677953 0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.515343 0.7507 0.0425863 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.539531 0.685185 0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.466832 0.697658 0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.335322 0.607487 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.283164 0.659645 0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.286452 0.603979 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.33883 0.656357 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.332034 0.663153 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.3877 0.659866 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.384191 0.610996 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.279656 0.610775 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.331813 0.558618 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.282943 0.555109 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.335322 0.607487 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.313405 0.629404 -0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.331813 0.558618 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.384191 0.610996 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.316914 0.678274 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.3877 0.659866 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.33883 0.656357 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.264535 0.625895 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.286452 0.603979 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.282943 0.555109 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.645066 0.554344 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.681385 0.616373 -0.129006 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.649723 0.609912 -0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.607573 0.617144 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.676727 0.560805 -0.177765 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.602915 0.561576 -0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.640408 0.498776 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.718878 0.553573 -0.117284 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.682558 0.491544 -0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.687216 0.547112 -0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.471405 0.471405 -0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.501645 0.501645 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.542955 0.490576 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.490576 0.542955 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.430095 0.482473 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.419026 0.523783 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.399854 0.452233 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.482473 0.430095 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.452233 0.399854 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.523783 0.419026 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.607487 0.335322 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.659645 0.283164 -0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.603979 0.286452 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.656357 0.33883 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.663153 0.332034 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.659866 0.3877 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.610996 0.384191 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.610775 0.279656 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.558618 0.331813 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.555109 0.282943 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.645066 0.554344 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.668521 0.610229 0.153697 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.598918 0.585648 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.619787 0.622977 0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.714669 0.578925 0.104938 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.665934 0.591673 0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.691213 0.52304 0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.6938 0.541596 0.165419 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.670344 0.48571 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.624197 0.517014 0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.607487 0.335322 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.629404 0.313405 0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.558618 0.331813 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.610996 0.384191 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.678274 0.316914 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.659866 0.3877 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.656357 0.33883 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.625895 0.264535 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.603979 0.286452 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.555109 0.282943 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.471405 0.471405 0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.441164 0.501645 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.399854 0.490576 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.452233 0.542955 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.512714 0.482473 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.523783 0.523783 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.542955 0.452233 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.460336 0.430095 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.490576 0.399854 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.419026 0.419026 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.643951 -0.172546 1.11022e-16 RAD 0.166667
+ txt002
+ SPHERE CENTER -0.835815 -0.157543 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.871646 -0.122136 0.165419 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.799077 -0.135649 0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.82339 -0.0854653 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.908384 -0.14403 0.104938 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.860128 -0.107359 0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.872552 -0.179437 0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.884071 -0.194213 0.153697 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.84824 -0.229621 0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.811502 -0.207727 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.643951 -0.172546 0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.61371 -0.142305 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.5724 -0.153374 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.624779 -0.100996 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.68526 -0.161477 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.696329 -0.120168 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.715501 -0.191718 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.632882 -0.213855 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.663122 -0.244096 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.591572 -0.224924 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.69376 0.0133465 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.674309 0.0838533 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.62221 0.0325183 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.666287 0.0539145 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.745859 0.0646815 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.737837 0.0347427 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.76531 -0.0058253 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.701782 0.0432853 0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.721234 -0.0272215 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.649684 -0.00804971 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.835815 -0.157543 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.899353 -0.119969 -0.117284 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.868703 -0.130205 -0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.836885 -0.0844101 -0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.866465 -0.147308 -0.177765 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.803997 -0.111748 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.802927 -0.184881 -0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.898283 -0.193102 -0.129006 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.834745 -0.230676 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.867633 -0.203337 -0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.69376 0.0133465 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.668775 0.0631985 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.62221 0.0325183 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.649684 -0.00804971 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.740325 0.0440268 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.721234 -0.0272215 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.76531 -0.0058253 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.712851 0.0845947 -0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.737837 0.0347427 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.666287 0.0539145 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.643951 -0.172546 -0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.674191 -0.142305 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.715501 -0.153374 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.663122 -0.100996 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.602641 -0.161477 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.591572 -0.120168 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.5724 -0.191718 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.655019 -0.213855 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.624779 -0.244096 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.696329 -0.224924 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.786005 -0.343435 1.25414e-16 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.82165 -0.392454 0.0425863 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.753118 -0.370774 0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.80984 -0.323622 0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.854538 -0.365116 -0.0178949 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.842728 -0.296284 0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.818893 -0.316097 -0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.797815 -0.412267 -0.0246914 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.76217 -0.363249 -0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.729282 -0.390587 -0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.594141 -0.358439 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.542042 -0.409774 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.522591 -0.339267 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.550064 -0.379835 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.613592 -0.428945 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.621614 -0.399007 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.665691 -0.37761 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.586119 -0.388377 -0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.638217 -0.337042 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.566667 -0.317871 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.594141 -0.358439 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.547576 -0.389119 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.522591 -0.339267 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.566667 -0.317871 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.619127 -0.408291 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.638217 -0.337042 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.665691 -0.37761 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.57505 -0.429687 0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.621614 -0.399007 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.550064 -0.379835 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0996195 -0.371785 0.544331 RAD 0.166667
+ txt002
+ SPHERE CENTER 0.220501 -0.393621 0.729516 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.279642 -0.368601 0.766439 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.281062 -0.372464 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.238665 -0.321889 0.726118 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.219082 -0.389758 0.803476 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.178104 -0.343046 0.763155 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.15994 -0.414778 0.766553 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.261479 -0.440333 0.769837 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.202338 -0.465353 0.732914 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.262898 -0.444196 0.695877 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.31427 -0.31427 0.544331 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.367156 -0.277961 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.31427 -0.31427 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.297666 -0.252306 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.367156 -0.277961 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.297666 -0.252306 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.31427 -0.31427 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.383759 -0.339925 0.544331 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.330873 -0.376234 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.330873 -0.376234 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.166275 -0.191247 0.655442 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.20793 -0.130089 0.652044 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.230419 -0.192135 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.172673 -0.154295 0.591563 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.143787 -0.129201 0.689081 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.108529 -0.153407 0.6286 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.102131 -0.190359 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.201532 -0.167041 0.715923 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.159877 -0.228199 0.719322 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.224021 -0.229087 0.682285 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0058509 -0.451136 0.729516 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.0051487 -0.447081 0.803476 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0688765 -0.439178 0.766553 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0172804 -0.386138 0.763155 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0578769 -0.459039 0.766439 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0457452 -0.398096 0.726118 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0571747 -0.463094 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.00628079 -0.512079 0.769837 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.00557859 -0.516134 0.695877 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0574471 -0.504176 0.732914 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0483751 -0.248762 0.655442 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.0599222 -0.183785 0.689081 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.00673113 -0.215921 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0172857 -0.187119 0.6286 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.115028 -0.216626 0.652044 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0723919 -0.21996 0.591563 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.103481 -0.281603 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0910116 -0.245428 0.715923 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0794645 -0.310405 0.682285 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0243582 -0.277564 0.719322 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.115031 -0.4293 0.544331 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.178985 -0.424299 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.115031 -0.4293 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.131634 -0.367336 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.178985 -0.424299 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.131634 -0.367336 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.115031 -0.4293 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.162382 -0.486264 0.544331 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0984274 -0.491265 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0984274 -0.491265 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.153845 -0.574159 0.618405 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.202534 -0.612768 0.658726 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.225396 -0.554987 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.184086 -0.543919 0.678886 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.130984 -0.631939 0.658726 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.112536 -0.56309 0.678886 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0822954 -0.593331 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.172294 -0.643008 0.598245 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.123605 -0.6044 0.557924 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.195155 -0.585228 0.557924 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0329639 -0.552323 0.43322 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.0248832 -0.625877 0.436618 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0822954 -0.593331 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0138144 -0.584567 0.497099 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0244483 -0.584869 0.399581 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0355172 -0.54356 0.460062 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0163676 -0.511316 0.396183 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0440327 -0.593633 0.372739 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0521134 -0.520079 0.369341 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.101445 -0.561087 0.406378 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.247614 -0.494808 0.43322 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.313607 -0.494287 0.399581 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.269833 -0.434629 0.396183 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.302539 -0.452978 0.460062 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.291389 -0.554467 0.436618 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.28032 -0.513157 0.497099 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.225396 -0.554987 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.258683 -0.536117 0.372739 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.19269 -0.536638 0.406378 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.214908 -0.476459 0.369341 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.172546 -0.643951 1.11022e-16 RAD 0.166667
+ txt002
+ SPHERE CENTER -0.157543 -0.835815 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.122136 -0.871646 0.165419 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0854653 -0.82339 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.135649 -0.799077 0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.194213 -0.884071 0.153697 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.207727 -0.811502 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.229621 -0.84824 0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.14403 -0.908384 0.104938 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.179437 -0.872552 0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.107359 -0.860128 0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0133465 -0.69376 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.0838533 -0.674309 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0539145 -0.666287 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0325183 -0.62221 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0432853 -0.701782 0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.00804971 -0.649684 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0272215 -0.721234 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0646815 -0.745859 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0058253 -0.76531 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0347427 -0.737837 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.172546 -0.643951 0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.142305 -0.61371 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.100996 -0.624779 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.153374 -0.5724 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.213855 -0.632882 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.224924 -0.591572 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.244096 -0.663122 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.161477 -0.68526 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.191718 -0.715501 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.120168 -0.696329 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.343435 -0.786005 1.25414e-16 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.392454 -0.82165 0.0425863 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.323622 -0.80984 0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.370774 -0.753118 0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.412267 -0.797815 -0.0246914 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.390587 -0.729282 -0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.363249 -0.76217 -0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.365116 -0.854538 -0.0178949 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.316097 -0.818893 -0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.296284 -0.842728 0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.358439 -0.594141 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.389119 -0.547576 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.317871 -0.566667 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.339267 -0.522591 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.429687 -0.57505 0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.379835 -0.550064 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.399007 -0.621614 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.408291 -0.619127 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.37761 -0.665691 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.337042 -0.638217 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.358439 -0.594141 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.409774 -0.542042 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.379835 -0.550064 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.339267 -0.522591 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.388377 -0.586119 -0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.317871 -0.566667 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.337042 -0.638217 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.428945 -0.613592 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.37761 -0.665691 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.399007 -0.621614 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.157543 -0.835815 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.119969 -0.899353 -0.117284 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0844101 -0.836885 -0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.130205 -0.868703 -0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.193102 -0.898283 -0.129006 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.203337 -0.867633 -0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.230676 -0.834745 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.147308 -0.866465 -0.177765 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.184881 -0.802927 -0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.111748 -0.803997 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.172546 -0.643951 -0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.202787 -0.61371 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.244096 -0.624779 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.191718 -0.5724 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.131237 -0.632882 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.120168 -0.591572 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.100996 -0.663122 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.183615 -0.68526 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.153374 -0.715501 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.224924 -0.696329 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0133465 -0.69376 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.0631985 -0.668775 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.00804971 -0.649684 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0325183 -0.62221 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0845947 -0.712851 -0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0539145 -0.666287 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0347427 -0.737837 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0440268 -0.740325 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0058253 -0.76531 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0272215 -0.721234 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.471405 -0.471405 1.11022e-16 RAD 0.166667
+ txt002
+ SPHERE CENTER 0.690426 -0.508983 2.241e-16 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.755941 -0.484794 -0.0246914 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.695668 -0.478434 -0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.7029 -0.436283 -0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.7507 -0.515343 0.0425863 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.697658 -0.466832 0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.685185 -0.539531 0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.743468 -0.557494 -0.0178949 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.677953 -0.581682 0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.683194 -0.551134 -0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.607487 -0.335322 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.629404 -0.313405 -0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.610996 -0.384191 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.558618 -0.331813 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.625895 -0.264535 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.555109 -0.282943 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.603979 -0.286452 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.678274 -0.316914 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.656357 -0.33883 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.659866 -0.3877 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.607487 -0.335322 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.659645 -0.283164 0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.656357 -0.33883 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.603979 -0.286452 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.610775 -0.279656 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.555109 -0.282943 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.558618 -0.331813 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.663153 -0.332034 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.610996 -0.384191 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.659866 -0.3877 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.554344 -0.645066 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.610229 -0.668521 0.153697 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.622977 -0.619787 0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.585648 -0.598918 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.541596 -0.6938 0.165419 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.517014 -0.624197 0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.48571 -0.670344 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.578925 -0.714669 0.104938 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.52304 -0.691213 0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.591673 -0.665934 0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.471405 -0.471405 0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.501645 -0.441164 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.542955 -0.452233 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.490576 -0.399854 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.430095 -0.460336 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.419026 -0.419026 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.399854 -0.490576 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.482473 -0.512714 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.452233 -0.542955 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.523783 -0.523783 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.335322 -0.607487 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.313405 -0.629404 0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.384191 -0.610996 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.331813 -0.558618 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.264535 -0.625895 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.282943 -0.555109 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.286452 -0.603979 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.316914 -0.678274 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.33883 -0.656357 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.3877 -0.659866 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.554344 -0.645066 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.616373 -0.681385 -0.129006 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.617144 -0.607573 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.609912 -0.649723 -0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.553573 -0.718878 -0.117284 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.547112 -0.687216 -0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.491544 -0.682558 -0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.560805 -0.676727 -0.177765 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.498776 -0.640408 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.561576 -0.602915 -0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.335322 -0.607487 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.283164 -0.659645 -0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.33883 -0.656357 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.286452 -0.603979 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.279656 -0.610775 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.282943 -0.555109 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.331813 -0.558618 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.332034 -0.663153 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.384191 -0.610996 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.3877 -0.659866 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.471405 -0.471405 -0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.441164 -0.441164 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.399854 -0.452233 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.452233 -0.399854 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.512714 -0.460336 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.523783 -0.419026 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.542955 -0.490576 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.460336 -0.512714 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.490576 -0.542955 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.419026 -0.523783 -0.222222 RAD 0.0185185
+ txt002
+
+END_SCENE
diff --git a/examples/parallel_for/tacheon/dat/balls.dat b/examples/parallel_for/tacheon/dat/balls.dat
new file mode 100644
index 0000000..0d4bbb1
--- /dev/null
+++ b/examples/parallel_for/tacheon/dat/balls.dat
@@ -0,0 +1,14804 @@
+BEGIN_SCENE
+ OUTFILE /dev/null
+ RESOLUTION 512 512
+ VERBOSE 0
+
+CAMERA
+ ZOOM 1.20711
+ASPECTRATIO 1.0
+ ANTIALIASING 0
+ RAYDEPTH 5
+ CENTER 2.1 1.3 1.7
+ VIEWDIR -0.700389 -0.433574 -0.566982
+ UPDIR -0.482085 -0.298433 0.82373
+
+END_CAMERA
+
+BACKGROUND 0.078 0.361 0.753
+
+LIGHT CENTER 4 3 2 RAD 0.002 COLOR 0.5 0.5 0.5
+
+LIGHT CENTER 1 -4 4 RAD 0.002 COLOR 0.5 0.5 0.5
+
+LIGHT CENTER -3 1 5 RAD 0.002 COLOR 0.5 0.5 0.5
+
+TEXDEF txt001 AMBIENT 0.2 DIFFUSE 0.8 SPECULAR 0 OPACITY 1
+PHONG PLASTIC 0 PHONG_SIZE 100000
+ COLOR 1 0.75 0.33
+ TEXFUNC 0
+
+TRI
+ V0 12 12 -0.5 V1 -12 -12 -0.5 V2 12 -12 -0.5
+ txt001
+TRI
+ V0 12 12 -0.5 V1 -12 12 -0.5 V2 -12 -12 -0.5
+ txt001
+TEXDEF txt002 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+PHONG PLASTIC 0.5 PHONG_SIZE 45.2776
+ COLOR 1 0.9 0.7
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0 0 RAD 0.5
+ txt002
+ SPHERE CENTER 0.272166 0.272166 0.544331 RAD 0.166667
+ txt002
+ SPHERE CENTER 0.420314 0.420314 0.618405 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.470715 0.470715 0.598245 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.481689 0.481689 0.57904 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.475329 0.45787 0.577669 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.45787 0.475329 0.577669 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.477074 0.494534 0.599616 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.453255 0.488174 0.598245 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.4661 0.48356 0.618821 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.494534 0.477074 0.599616 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.48356 0.4661 0.618821 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.488174 0.453255 0.598245 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.461623 0.409245 0.557924 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.47044 0.419664 0.537348 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.447954 0.425689 0.545578 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.468014 0.433095 0.557924 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.484109 0.40322 0.549693 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.481683 0.416651 0.57027 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.475292 0.392801 0.57027 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.464049 0.395814 0.537348 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.455233 0.385395 0.557924 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.441563 0.401839 0.545578 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.409245 0.461623 0.557924 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.419664 0.47044 0.537348 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.433095 0.468014 0.557924 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.425689 0.447954 0.545578 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.395814 0.464049 0.537348 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.401839 0.441563 0.545578 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.385395 0.455233 0.557924 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.40322 0.484109 0.549693 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.392801 0.475292 0.57027 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.416651 0.481683 0.57027 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.429405 0.481784 0.658726 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.441197 0.503434 0.660098 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.452601 0.483752 0.650495 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.434161 0.494577 0.63815 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.418001 0.501466 0.668328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.410965 0.492609 0.64638 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.406209 0.479816 0.666956 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.436441 0.490641 0.680674 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.42465 0.46899 0.679302 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.447846 0.470958 0.671072 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.367935 0.472692 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.36376 0.497028 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.383056 0.487812 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.383056 0.487812 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.34864 0.481907 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.367935 0.472692 0.593714 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.352815 0.457572 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.34864 0.481907 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.352815 0.457572 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.367935 0.472692 0.643096 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.379004 0.431383 0.678886 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.376578 0.444814 0.699462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.399064 0.438789 0.691232 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.385395 0.455233 0.678886 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356518 0.437408 0.687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.365335 0.447826 0.666541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.358944 0.423976 0.666541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.370187 0.420964 0.699462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.372614 0.407532 0.678886 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.392673 0.414939 0.691232 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.481784 0.429405 0.658726 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.503434 0.441197 0.660098 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.494577 0.434161 0.63815 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.483752 0.452601 0.650495 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.490641 0.436441 0.680674 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.470958 0.447846 0.671072 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.46899 0.42465 0.679302 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.501466 0.418001 0.668328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.479816 0.406209 0.666956 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.492609 0.410965 0.64638 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.431383 0.379004 0.678886 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.444814 0.376578 0.699462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.455233 0.385395 0.678886 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.438789 0.399064 0.691232 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.420964 0.370187 0.699462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.414939 0.392673 0.691232 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.407532 0.372614 0.678886 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.437408 0.356518 0.687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.423976 0.358944 0.666541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.447826 0.365335 0.666541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.472692 0.367935 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.497028 0.36376 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.487812 0.383056 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.487812 0.383056 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.481907 0.34864 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.472692 0.367935 0.643096 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.457572 0.352815 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.481907 0.34864 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.457572 0.352815 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.472692 0.367935 0.593714 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.461844 0.304709 0.43322 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.492085 0.33495 0.372739 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.492085 0.33495 0.348047 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.488469 0.313874 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.471009 0.331334 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.495701 0.356025 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.474625 0.352409 0.372739 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.495701 0.356025 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.51316 0.338566 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.51316 0.338566 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.509544 0.31749 0.372739 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.424345 0.305171 0.369341 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.40568 0.315605 0.356995 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.403931 0.312107 0.381374 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.419383 0.329161 0.372427 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.426095 0.30867 0.344961 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.439797 0.322225 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.444759 0.298235 0.357307 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.410643 0.291616 0.353908 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.429307 0.281181 0.366254 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.408893 0.288117 0.378288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.435193 0.368397 0.406378 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.440864 0.389015 0.394032 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.457301 0.37895 0.409464 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.451857 0.367697 0.388171 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.418755 0.378463 0.390945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.429748 0.357145 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.413085 0.357845 0.403291 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.4242 0.389715 0.412239 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.418529 0.369098 0.424584 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.440637 0.37965 0.427671 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.529584 0.334488 0.436618 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.546497 0.347572 0.424272 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.532117 0.331508 0.412239 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.522481 0.352406 0.421186 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.543964 0.350552 0.448652 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.519948 0.355387 0.445566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.52705 0.337468 0.460998 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.5536 0.329654 0.439705 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.536686 0.31657 0.45205 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.53922 0.313589 0.427671 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.472692 0.367935 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.48474 0.389488 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.495668 0.369235 0.46131 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.477004 0.379669 0.448964 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.461764 0.388188 0.479204 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.454027 0.37837 0.457911 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.449715 0.366636 0.479204 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.480429 0.377754 0.49155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.46838 0.356202 0.49155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.491357 0.357501 0.482603 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.499343 0.304247 0.497099 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.518259 0.314219 0.509445 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.519922 0.310678 0.485065 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.504895 0.328108 0.494013 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.49768 0.307788 0.521479 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.484316 0.321677 0.506047 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.478764 0.297816 0.509133 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.512708 0.290358 0.512531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.493791 0.280387 0.500186 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.51437 0.286818 0.488152 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.518736 0.271262 0.399581 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.539811 0.274878 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.520873 0.290418 0.384149 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.533373 0.290264 0.405442 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.537674 0.255722 0.402668 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.531235 0.271108 0.420874 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.516598 0.252106 0.415013 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.525174 0.255876 0.381374 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.504099 0.25226 0.39372 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.506236 0.271416 0.378288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.488495 0.241021 0.460062 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.50716 0.230587 0.472408 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.51153 0.24936 0.456976 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.499694 0.253381 0.478269 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.484125 0.222248 0.475494 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.476659 0.245042 0.481355 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.46546 0.232683 0.463149 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.495961 0.218227 0.454201 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.477296 0.228661 0.441856 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.500331 0.237 0.438769 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.450996 0.241483 0.396183 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.455172 0.217147 0.396183 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.472226 0.232599 0.40513 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.45115 0.228983 0.417476 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.433942 0.226031 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.429921 0.237867 0.408529 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.429767 0.250367 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.455018 0.229647 0.37489 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.450842 0.253983 0.37489 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.472072 0.245099 0.383837 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.304709 0.461844 0.43322 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.33495 0.492085 0.372739 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.33495 0.492085 0.348047 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.331334 0.471009 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.313874 0.488469 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.338566 0.51316 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.31749 0.509544 0.372739 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.338566 0.51316 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356025 0.495701 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356025 0.495701 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.352409 0.474625 0.372739 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.368397 0.435193 0.406378 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.389015 0.440864 0.394032 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.367697 0.451857 0.388171 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37895 0.457301 0.409464 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.389715 0.4242 0.412239 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37965 0.440637 0.427671 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.369098 0.418529 0.424584 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.378463 0.418755 0.390945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.357845 0.413085 0.403291 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.357145 0.429748 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.305171 0.424345 0.369341 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.315605 0.40568 0.356995 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.329161 0.419383 0.372427 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.312107 0.403931 0.381374 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.291616 0.410643 0.353908 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.288117 0.408893 0.378288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.281181 0.429307 0.366254 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.30867 0.426095 0.344961 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.298235 0.444759 0.357307 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.322225 0.439797 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.271262 0.518736 0.399581 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.274878 0.539811 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.290264 0.533373 0.405442 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.290418 0.520873 0.384149 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.255876 0.525174 0.381374 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.271416 0.506236 0.378288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.25226 0.504099 0.39372 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.255722 0.537674 0.402668 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.252106 0.516598 0.415013 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.271108 0.531235 0.420874 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.241483 0.450996 0.396183 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.217147 0.455172 0.396183 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.228983 0.45115 0.417476 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.232599 0.472226 0.40513 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.229647 0.455018 0.37489 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.245099 0.472072 0.383837 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.253983 0.450842 0.37489 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.226031 0.433942 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.250367 0.429767 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.237867 0.429921 0.408529 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.241021 0.488495 0.460062 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.230587 0.50716 0.472408 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.253381 0.499694 0.478269 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.24936 0.51153 0.456976 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.218227 0.495961 0.454201 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.237 0.500331 0.438769 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.228661 0.477296 0.441856 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.222248 0.484125 0.475494 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.232683 0.46546 0.463149 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.245042 0.476659 0.481355 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.334488 0.529584 0.436618 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.347572 0.546497 0.424272 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.352406 0.522481 0.421186 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.331508 0.532117 0.412239 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.329654 0.5536 0.439705 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.313589 0.53922 0.427671 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.31657 0.536686 0.45205 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.350552 0.543964 0.448652 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.337468 0.52705 0.460998 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.355387 0.519948 0.445566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.304247 0.499343 0.497099 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.314219 0.518259 0.509445 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.328108 0.504895 0.494013 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.310678 0.519922 0.485065 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.290358 0.512708 0.512531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.286818 0.51437 0.488152 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.280387 0.493791 0.500186 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.307788 0.49768 0.521479 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.297816 0.478764 0.509133 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.321677 0.484316 0.506047 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.367935 0.472692 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.389488 0.48474 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.379669 0.477004 0.448964 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.369235 0.495668 0.46131 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.377754 0.480429 0.49155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.357501 0.491357 0.482603 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356202 0.46838 0.49155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.388188 0.461764 0.479204 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.366636 0.449715 0.479204 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37837 0.454027 0.457911 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.230635 0.38777 0.729516 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.2506 0.446614 0.769837 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.264242 0.467193 0.770086 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.272442 0.447086 0.758332 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.253384 0.459832 0.749168 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.2424 0.46672 0.781591 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.231541 0.459359 0.760673 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.228758 0.446141 0.781342 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.261459 0.453974 0.790755 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.247817 0.433396 0.790506 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.269659 0.433868 0.779001 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.301839 0.407906 0.732914 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.319874 0.420236 0.72141 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.303021 0.407886 0.708251 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.296625 0.428474 0.720288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.318692 0.420256 0.746073 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.295442 0.428494 0.744951 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.300656 0.407926 0.757577 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.325088 0.399668 0.734036 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.307053 0.387338 0.745541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.308235 0.387318 0.720878 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.253236 0.449775 0.695877 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.263032 0.459076 0.675209 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.270029 0.436804 0.683251 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.247378 0.440021 0.673964 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.246239 0.472047 0.687835 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.230585 0.452992 0.68659 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.236443 0.462746 0.708504 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.26889 0.468829 0.697123 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.259094 0.459528 0.717791 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.275887 0.446557 0.705165 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.179397 0.426478 0.766439 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.174744 0.447688 0.778193 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.197172 0.437457 0.779597 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.1895 0.447523 0.758396 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.156968 0.436708 0.765035 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.171724 0.436544 0.745238 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.161621 0.415499 0.753281 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.164641 0.426642 0.786236 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.169293 0.405432 0.774481 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.187069 0.416412 0.787639 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.182032 0.429639 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.177682 0.45215 0.683315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.190087 0.449636 0.704516 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.200611 0.44299 0.683192 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.169628 0.432153 0.671279 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.192556 0.422992 0.671155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.173978 0.409641 0.680442 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.159104 0.438799 0.692603 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.163454 0.416288 0.701767 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.171508 0.436286 0.713804 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.159431 0.367634 0.726118 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.13761 0.368692 0.737623 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.158434 0.366998 0.750781 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.153102 0.387887 0.738744 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.138607 0.369329 0.71296 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.154099 0.388523 0.714081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.160429 0.36827 0.701455 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.14394 0.34844 0.724997 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.165761 0.347381 0.713492 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.164764 0.346745 0.738155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.227999 0.384609 0.803476 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.237348 0.393812 0.824394 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.251829 0.390976 0.804597 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.234368 0.408432 0.804721 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.213518 0.387445 0.823273 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.210538 0.402066 0.8036 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.204169 0.378242 0.802355 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.23098 0.369989 0.823149 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.221631 0.360786 0.802231 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.245461 0.367152 0.803352 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.208034 0.325765 0.763155 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.209548 0.312342 0.783824 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.229235 0.324887 0.775781 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.209827 0.337 0.785069 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.188347 0.31322 0.771198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.188626 0.337878 0.772443 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.186834 0.326643 0.750529 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.207755 0.301107 0.76191 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.206242 0.31453 0.741241 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.227442 0.313652 0.753867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.279238 0.345901 0.766553 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.302145 0.344931 0.775717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.297823 0.356827 0.754517 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.289691 0.366251 0.775841 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.28356 0.334005 0.787754 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.271106 0.355325 0.787878 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.260653 0.334975 0.77859 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.291692 0.324581 0.766429 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.268785 0.325551 0.757266 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.28737 0.336477 0.745229 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.115031 0.4293 0.544331 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.102505 0.502308 0.544331 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.110567 0.524146 0.536101 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.126738 0.506465 0.542066 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.112687 0.504055 0.521905 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0863343 0.519988 0.538366 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0884544 0.499897 0.524171 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0782715 0.49815 0.546597 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.100385 0.522399 0.558526 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0923218 0.500561 0.566757 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.116555 0.504718 0.564491 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.160392 0.474661 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.177777 0.492047 0.579103 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.176681 0.473492 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.159222 0.490951 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.161488 0.493217 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.142932 0.492121 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.144102 0.475831 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.178947 0.475757 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.161561 0.458371 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.177851 0.457202 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.160392 0.474661 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.167697 0.481967 0.484868 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.161561 0.458371 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.144102 0.475831 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.166528 0.498257 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.142932 0.492121 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.159222 0.490951 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.183987 0.480797 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.176681 0.473492 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.177851 0.457202 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0571437 0.456947 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0450372 0.477623 0.501329 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.055591 0.475469 0.523547 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0696413 0.47788 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0465898 0.4591 0.485076 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.071194 0.459357 0.487134 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0586963 0.438424 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0325396 0.45669 0.505236 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0446461 0.436013 0.511201 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0430934 0.454536 0.527454 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.115031 0.4293 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.10495 0.439381 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0911807 0.435691 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.10864 0.45315 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.128801 0.43299 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.13249 0.44676 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.138881 0.42291 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.111341 0.415531 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.121421 0.40545 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0975713 0.411841 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0696698 0.383939 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.052284 0.366554 0.509559 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0708393 0.36765 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0533799 0.385109 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0511144 0.382844 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0522103 0.401399 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0685002 0.400229 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0685739 0.365384 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0859596 0.38277 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0871292 0.36648 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0571437 0.456947 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0493251 0.475575 0.595564 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0725262 0.467381 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.06557 0.479825 0.577461 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0339426 0.465141 0.57931 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0501875 0.46939 0.561208 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0417612 0.446512 0.565115 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0408988 0.452697 0.599471 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0487174 0.434069 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0640999 0.444504 0.601529 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0696698 0.383939 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0623642 0.376634 0.603794 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0859596 0.38277 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0685002 0.400229 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0460743 0.377803 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0522103 0.401399 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0533799 0.385109 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0635337 0.360344 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0708393 0.36765 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0871292 0.36648 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.115031 0.4293 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.125111 0.439381 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.138881 0.435691 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.121421 0.45315 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.101261 0.43299 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0975713 0.44676 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0911807 0.42291 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.11872 0.415531 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.10864 0.40545 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.13249 0.411841 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.082487 0.239622 0.655442 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.0438957 0.258053 0.715923 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0426858 0.273525 0.735128 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.064638 0.265928 0.726759 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0510334 0.281546 0.713318 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0219434 0.26565 0.724292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.030291 0.273671 0.702483 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0231533 0.250178 0.705088 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0355481 0.250032 0.737733 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.036758 0.23456 0.718528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0575003 0.242434 0.729364 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.117687 0.252557 0.719322 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.135677 0.265544 0.730157 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.138361 0.25778 0.706872 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.12224 0.275732 0.71212 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.115003 0.26032 0.742607 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.101567 0.270508 0.72457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.097014 0.247334 0.731771 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.131123 0.242369 0.737359 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.113134 0.229382 0.726523 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.133808 0.234605 0.714074 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0863845 0.308551 0.682285 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0971427 0.330622 0.67968 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.109956 0.310023 0.675083 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.091905 0.317013 0.659755 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0735708 0.329151 0.686881 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0683331 0.315541 0.666956 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0628126 0.30708 0.689486 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0916222 0.322161 0.702209 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.080864 0.30009 0.704814 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.104436 0.301561 0.697613 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00869528 0.245118 0.652044 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0110117 0.257416 0.660413 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00823377 0.253319 0.675329 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0102865 0.269325 0.656641 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0105502 0.249215 0.637128 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.010748 0.261124 0.633356 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00915679 0.236916 0.628759 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0126029 0.233209 0.655816 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00710408 0.22091 0.647447 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00664257 0.229111 0.670732 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0511841 0.295616 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0555846 0.315856 0.604965 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0705987 0.309941 0.623653 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0705297 0.296292 0.603077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.03617 0.301531 0.599717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0511152 0.281968 0.597829 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0317696 0.281291 0.613157 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.036239 0.31518 0.620293 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0318385 0.29494 0.633733 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.051253 0.309265 0.638981 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0472866 0.226687 0.591563 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.025169 0.224935 0.580727 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0281502 0.217281 0.604012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0288111 0.241399 0.598764 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0443054 0.234341 0.568278 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0479475 0.250805 0.586315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.066423 0.236092 0.579113 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0436445 0.210223 0.573526 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0657621 0.211974 0.584361 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0466257 0.202569 0.596811 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0399982 0.189123 0.689081 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0335228 0.179527 0.71089 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0567332 0.187058 0.707118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0385291 0.203632 0.709006 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0167878 0.181593 0.692853 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.021794 0.205698 0.690969 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0232631 0.191189 0.671044 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0349919 0.165018 0.690965 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0414672 0.174615 0.669156 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0582023 0.172549 0.687193 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0785895 0.170692 0.6286 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0867911 0.147549 0.631205 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.101845 0.166573 0.635801 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.083121 0.161663 0.65113 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0635354 0.151669 0.624003 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0598652 0.165782 0.643928 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0553337 0.174812 0.621398 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0822597 0.156579 0.608675 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.074058 0.179722 0.60607 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0973138 0.175603 0.613272 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.11379 0.183628 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.133336 0.176775 0.705919 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.136161 0.192663 0.687231 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.124499 0.199753 0.707807 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.110965 0.167739 0.711167 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.102127 0.190718 0.713055 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0914184 0.174592 0.697727 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.122627 0.160649 0.690591 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.103081 0.167502 0.677151 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.125452 0.176537 0.671903 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.38777 0.230635 0.729516 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.446614 0.2506 0.769837 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.467193 0.264242 0.770086 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.459832 0.253384 0.749168 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.447086 0.272442 0.758332 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.453974 0.261459 0.790755 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.433868 0.269659 0.779001 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.433396 0.247817 0.790506 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.46672 0.2424 0.781591 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.446141 0.228758 0.781342 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.459359 0.231541 0.760673 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.449775 0.253236 0.695877 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.459076 0.263032 0.675209 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.440021 0.247378 0.673964 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.436804 0.270029 0.683251 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.468829 0.26889 0.697123 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.446557 0.275887 0.705165 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.459528 0.259094 0.717791 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.472047 0.246239 0.687835 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.462746 0.236443 0.708504 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.452992 0.230585 0.68659 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.407906 0.301839 0.732914 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.420236 0.319874 0.72141 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.428474 0.296625 0.720288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.407886 0.303021 0.708251 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.399668 0.325088 0.734036 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.387318 0.308235 0.720878 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.387338 0.307053 0.745541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.420256 0.318692 0.746073 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.407926 0.300656 0.757577 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.428494 0.295442 0.744951 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.384609 0.227999 0.803476 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.393812 0.237348 0.824394 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.408432 0.234368 0.804721 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.390976 0.251829 0.804597 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.369989 0.23098 0.823149 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.367152 0.245461 0.803352 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.360786 0.221631 0.802231 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.387445 0.213518 0.823273 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.378242 0.204169 0.802355 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.402066 0.210538 0.8036 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.345901 0.279238 0.766553 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.344931 0.302145 0.775717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.366251 0.289691 0.775841 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356827 0.297823 0.754517 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.324581 0.291692 0.766429 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.336477 0.28737 0.745229 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.325551 0.268785 0.757266 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.334005 0.28356 0.787754 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.334975 0.260653 0.77859 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.355325 0.271106 0.787878 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.325765 0.208034 0.763155 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.312342 0.209548 0.783824 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.337 0.209827 0.785069 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.324887 0.229235 0.775781 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.301107 0.207755 0.76191 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.313652 0.227442 0.753867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.31453 0.206242 0.741241 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.31322 0.188347 0.771198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.326643 0.186834 0.750529 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.337878 0.188626 0.772443 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.426478 0.179397 0.766439 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.447688 0.174744 0.778193 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.447523 0.1895 0.758396 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.437457 0.197172 0.779597 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.426642 0.164641 0.786236 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.416412 0.187069 0.787639 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.405432 0.169293 0.774481 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.436708 0.156968 0.765035 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.415499 0.161621 0.753281 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.436544 0.171724 0.745238 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.367634 0.159431 0.726118 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.368692 0.13761 0.737623 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.387887 0.153102 0.738744 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.366998 0.158434 0.750781 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.34844 0.14394 0.724997 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.346745 0.164764 0.738155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.347381 0.165761 0.713492 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.369329 0.138607 0.71296 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.36827 0.160429 0.701455 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.388523 0.154099 0.714081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.429639 0.182032 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.45215 0.177682 0.683315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.44299 0.200611 0.683192 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.449636 0.190087 0.704516 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.438799 0.159104 0.692603 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.436286 0.171508 0.713804 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.416288 0.163454 0.701767 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.432153 0.169628 0.671279 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.409641 0.173978 0.680442 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.422992 0.192556 0.671155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.239622 0.082487 0.655442 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.258053 0.0438957 0.715923 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.273525 0.0426858 0.735128 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.281546 0.0510334 0.713318 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.265928 0.064638 0.726759 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.250032 0.0355481 0.737733 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.242434 0.0575003 0.729364 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.23456 0.036758 0.718528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.26565 0.0219434 0.724292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.250178 0.0231533 0.705088 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.273671 0.030291 0.702483 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.308551 0.0863845 0.682285 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.330622 0.0971427 0.67968 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.317013 0.091905 0.659755 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.310023 0.109956 0.675083 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.322161 0.0916222 0.702209 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.301561 0.104436 0.697613 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.30009 0.080864 0.704814 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.329151 0.0735708 0.686881 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.30708 0.0628126 0.689486 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.315541 0.0683331 0.666956 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.252557 0.117687 0.719322 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.265544 0.135677 0.730157 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.275732 0.12224 0.71212 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.25778 0.138361 0.706872 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.242369 0.131123 0.737359 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.234605 0.133808 0.714074 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.229382 0.113134 0.726523 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.26032 0.115003 0.742607 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.247334 0.097014 0.731771 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.270508 0.101567 0.72457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.189123 0.0399982 0.689081 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.179527 0.0335228 0.71089 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.203632 0.0385291 0.709006 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.187058 0.0567332 0.707118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.165018 0.0349919 0.690965 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.172549 0.0582023 0.687193 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.174615 0.0414672 0.669156 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.181593 0.0167878 0.692853 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.191189 0.0232631 0.671044 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.205698 0.021794 0.690969 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.183628 0.11379 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.176775 0.133336 0.705919 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.199753 0.124499 0.707807 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.192663 0.136161 0.687231 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.160649 0.122627 0.690591 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.176537 0.125452 0.671903 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.167502 0.103081 0.677151 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.167739 0.110965 0.711167 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.174592 0.0914184 0.697727 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.190718 0.102127 0.713055 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.170692 0.0785895 0.6286 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.147549 0.0867911 0.631205 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.161663 0.083121 0.65113 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.166573 0.101845 0.635801 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.156579 0.0822597 0.608675 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.175603 0.0973138 0.613272 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.179722 0.074058 0.60607 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.151669 0.0635354 0.624003 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.174812 0.0553337 0.621398 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.165782 0.0598652 0.643928 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.245118 0.00869528 0.652044 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.257416 -0.0110117 0.660413 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.269325 0.0102865 0.656641 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.253319 0.00823377 0.675329 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.233209 -0.0126029 0.655816 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.229111 0.00664257 0.670732 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.22091 0.00710408 0.647447 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.249215 -0.0105502 0.637128 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.236916 0.00915679 0.628759 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.261124 0.010748 0.633356 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.226687 0.0472866 0.591563 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.224935 0.025169 0.580727 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.241399 0.0288111 0.598764 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.217281 0.0281502 0.604012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.210223 0.0436445 0.573526 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.202569 0.0466257 0.596811 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.211974 0.0657621 0.584361 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.234341 0.0443054 0.568278 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.236092 0.066423 0.579113 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.250805 0.0479475 0.586315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.295616 0.0511841 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.315856 0.0555846 0.604965 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.296292 0.0705297 0.603077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.309941 0.0705987 0.623653 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.31518 0.036239 0.620293 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.309265 0.051253 0.638981 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.29494 0.0318385 0.633733 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.301531 0.03617 0.599717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.281291 0.0317696 0.613157 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.281968 0.0511152 0.597829 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.4293 0.115031 0.544331 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.502308 0.102505 0.544331 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.524146 0.110567 0.536101 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.504055 0.112687 0.521905 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.506465 0.126738 0.542066 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.522399 0.100385 0.558526 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.504718 0.116555 0.564491 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.500561 0.0923218 0.566757 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.519988 0.0863343 0.538366 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.49815 0.0782715 0.546597 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.499897 0.0884544 0.524171 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.474661 0.160392 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.481967 0.167697 0.484868 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.475831 0.144102 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.458371 0.161561 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.480797 0.183987 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.457202 0.177851 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.473492 0.176681 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.498257 0.166528 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.490951 0.159222 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.492121 0.142932 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.474661 0.160392 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.492047 0.177777 0.579103 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.490951 0.159222 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.473492 0.176681 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.475757 0.178947 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.457202 0.177851 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.458371 0.161561 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.493217 0.161488 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.475831 0.144102 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.492121 0.142932 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.456947 0.0571437 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.475575 0.0493251 0.595564 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.479825 0.06557 0.577461 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.467381 0.0725262 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.452697 0.0408988 0.599471 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.444504 0.0640999 0.601529 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.434069 0.0487174 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.465141 0.0339426 0.57931 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.446512 0.0417612 0.565115 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.46939 0.0501875 0.561208 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.4293 0.115031 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.439381 0.125111 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.45315 0.121421 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.435691 0.138881 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.415531 0.11872 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.411841 0.13249 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.40545 0.10864 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.43299 0.101261 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.42291 0.0911807 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.44676 0.0975713 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.383939 0.0696698 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.376634 0.0623642 0.603794 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.400229 0.0685002 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.38277 0.0859596 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.360344 0.0635337 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.36648 0.0871292 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.36765 0.0708393 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.377803 0.0460743 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.385109 0.0533799 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.401399 0.0522103 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.456947 0.0571437 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.477623 0.0450372 0.501329 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.47788 0.0696413 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.475469 0.055591 0.523547 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.45669 0.0325396 0.505236 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.454536 0.0430934 0.527454 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.436013 0.0446461 0.511201 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.4591 0.0465898 0.485076 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.438424 0.0586963 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.459357 0.071194 0.487134 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.383939 0.0696698 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.366554 0.052284 0.509559 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.385109 0.0533799 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.36765 0.0708393 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.365384 0.0685739 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.36648 0.0871292 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.38277 0.0859596 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.382844 0.0511144 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.400229 0.0685002 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.401399 0.0522103 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.4293 0.115031 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.41922 0.125111 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.40545 0.121421 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.42291 0.138881 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.44307 0.11872 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.44676 0.13249 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.45315 0.10864 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.425611 0.101261 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.435691 0.0911807 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.411841 0.0975713 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.643951 0.172546 1.11022e-16 RAD 0.166667
+ txt002
+ SPHERE CENTER 0.802608 0.281471 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.824035 0.30566 -0.177765 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.822021 0.302088 -0.202114 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.821938 0.282758 -0.186751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.802598 0.298094 -0.187402 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.824119 0.32499 -0.193128 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.804695 0.320997 -0.178416 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.826132 0.328563 -0.16878 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.843459 0.309654 -0.192477 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.845472 0.313227 -0.168128 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.843375 0.290324 -0.177114 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.787796 0.241352 -0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.785699 0.218449 -0.180578 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.802677 0.22345 -0.163362 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.778718 0.223304 -0.157397 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.770818 0.236351 -0.188808 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.763837 0.241205 -0.165627 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.772915 0.259253 -0.179823 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.794777 0.236497 -0.194773 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.796874 0.2594 -0.185788 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.811756 0.241498 -0.177557 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.752156 0.305221 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.741263 0.325175 -0.169507 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.747715 0.32493 -0.145675 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.765112 0.325981 -0.163165 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.745704 0.305466 -0.183703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.769553 0.306272 -0.17736 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.756597 0.285513 -0.174066 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.728307 0.304415 -0.166213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.7392 0.284462 -0.156576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.734759 0.304171 -0.142381 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.838847 0.34578 -0.117284 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.851488 0.360404 -0.132647 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.853509 0.335865 -0.1345 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.832518 0.347059 -0.141116 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.836826 0.370319 -0.115431 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.817857 0.356973 -0.1239 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.824185 0.355695 -0.100068 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.857816 0.359125 -0.108814 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.845176 0.344501 -0.0934517 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.859838 0.334587 -0.110668 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.766968 0.345341 -0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.768944 0.369945 -0.10004 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.788341 0.356172 -0.093424 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.780624 0.356171 -0.116879 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.747572 0.359113 -0.106005 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.759252 0.34534 -0.122844 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.745596 0.33451 -0.105354 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.755289 0.359115 -0.0825505 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.753313 0.334511 -0.0818993 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.774685 0.345342 -0.0759343 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.817421 0.321591 -0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.83071 0.340361 -0.0416443 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.840365 0.325527 -0.0588603 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.822249 0.341208 -0.0648253 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.807766 0.336425 -0.0334138 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.799305 0.337272 -0.0565949 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.794477 0.317654 -0.0423994 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.825882 0.320744 -0.0274488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.812593 0.301973 -0.0364345 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.835537 0.30591 -0.0446649 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.874487 0.28191 -0.129006 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.891539 0.292033 -0.143718 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.868678 0.28812 -0.152187 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.872763 0.305711 -0.135349 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.897348 0.285824 -0.120537 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.878572 0.299501 -0.112168 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.880296 0.275701 -0.105825 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.893263 0.268233 -0.137375 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.876212 0.25811 -0.122663 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.870402 0.264319 -0.145845 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.853061 0.257721 -0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.87538 0.26204 -0.0527151 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.87108 0.266856 -0.0765474 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.860805 0.280934 -0.0590577 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.857361 0.252905 -0.0385197 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.842785 0.271799 -0.0448623 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.835041 0.248586 -0.0481565 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.867636 0.238827 -0.0560094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.845317 0.234508 -0.0656463 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.863337 0.243643 -0.0798417 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.838248 0.217602 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.860225 0.206363 -0.122182 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.858689 0.230102 -0.128798 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.854636 0.223536 -0.105343 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.839784 0.193863 -0.116217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.834196 0.211035 -0.0993785 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.817808 0.205101 -0.116868 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.843837 0.200429 -0.139672 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.821861 0.211667 -0.140323 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.842301 0.224168 -0.146288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.643951 0.172546 -0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.61371 0.202787 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.61556 0.221097 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.621702 0.225035 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.635958 0.210779 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.607567 0.198849 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.627965 0.188531 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.605717 0.180539 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.593312 0.213105 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.591462 0.194794 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.599454 0.217042 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.5724 0.191718 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.556122 0.208861 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.575596 0.203643 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.578791 0.215568 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.552927 0.196936 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.575596 0.203643 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.569205 0.179793 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.549732 0.185011 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.56601 0.167868 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.569205 0.179793 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.624779 0.244096 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.631486 0.266765 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.648629 0.250487 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.636704 0.247291 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.607636 0.260374 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.612854 0.240901 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.600929 0.237705 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.619561 0.26357 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.612854 0.240901 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.636704 0.247291 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.68526 0.183615 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.684921 0.190903 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.665787 0.178397 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.669989 0.201661 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.704395 0.196121 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.689462 0.206879 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.704733 0.188833 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.700193 0.172858 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.700531 0.165569 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.681058 0.160351 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.696329 0.224924 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.710584 0.23918 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.705059 0.216195 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.687599 0.233654 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.701855 0.24791 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.678869 0.242384 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.687599 0.233654 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.719314 0.23045 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.705059 0.216195 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.713788 0.207465 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.715501 0.153374 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.738169 0.160081 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.718696 0.165299 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.721891 0.177224 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.734974 0.148156 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.718696 0.165299 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.712305 0.141449 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.731779 0.136231 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.70911 0.129524 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.712305 0.141449 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.632882 0.131237 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.634145 0.108412 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.650927 0.115965 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.627664 0.111763 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.616099 0.123683 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.609618 0.127034 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.614836 0.146508 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.639363 0.127886 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.6381 0.15071 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.656145 0.135439 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.663122 0.100996 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.680265 0.0847178 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.686972 0.107387 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.675047 0.104191 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.656415 0.0783272 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.651197 0.0978007 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.639272 0.0946054 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.66834 0.0815225 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.651197 0.0978007 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.675047 0.104191 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.591572 0.120168 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.577317 0.105912 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.600302 0.111438 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.582843 0.128897 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.568587 0.114642 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.574113 0.137627 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.582843 0.128897 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.586046 0.0971825 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.600302 0.111438 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.609032 0.102708 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.594141 0.358439 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.619127 0.408291 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.625955 0.411883 -0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.630791 0.390369 -0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.607547 0.396287 -0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.61429 0.429805 -0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.595882 0.414208 -0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.607462 0.426212 -0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.637535 0.423887 -0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.630706 0.420295 -0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.642371 0.402373 -0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.665691 0.37761 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.68332 0.389713 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.665691 0.37761 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.660156 0.398265 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.68332 0.389713 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.660156 0.398265 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.665691 0.37761 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.688854 0.369058 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.671225 0.356956 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.671225 0.356956 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.638217 0.337042 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.652948 0.344865 -0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.632683 0.357697 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.651954 0.357326 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.658482 0.324211 -0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.657489 0.336672 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.643752 0.316388 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.639211 0.324581 -0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.624481 0.316758 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.618946 0.337413 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.547576 0.389119 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.541008 0.410169 -0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.548718 0.410472 -0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.564748 0.405866 -0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.539866 0.388816 -0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.563607 0.384513 -0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.546435 0.367766 -0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.523836 0.393422 -0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.530405 0.372372 -0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.531546 0.393725 -0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.566667 0.317871 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.555534 0.296626 -0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.572202 0.297216 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.550163 0.307914 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.549999 0.31728 -0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.544629 0.328569 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.561133 0.338525 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.572037 0.306582 -0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.583171 0.327827 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.588706 0.307172 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.522591 0.339267 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.501272 0.340934 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.522591 0.339267 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.517056 0.359921 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.501272 0.340934 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.517056 0.359921 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.522591 0.339267 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.506807 0.320279 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.528125 0.318612 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.528125 0.318612 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.57505 0.429687 -0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.58161 0.452905 -0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.5989 0.436077 -0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.586467 0.434777 -0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.55776 0.446515 -0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.562617 0.428387 -0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.5512 0.423296 -0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.570193 0.447815 -0.0882695 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.563633 0.424596 -0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.587483 0.430987 -0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.550064 0.379835 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.547099 0.396248 -0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.569716 0.388263 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.557504 0.403175 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.527447 0.387819 -0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.537852 0.394747 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.530412 0.371406 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.539659 0.372907 -0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.542624 0.356494 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.562276 0.364922 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.621614 0.399007 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.637209 0.41723 -0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.642848 0.401533 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.624734 0.418027 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.615976 0.414703 -0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.603501 0.4155 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.600381 0.39648 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.634089 0.39821 -0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.618494 0.379986 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.639728 0.382513 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.802608 0.281471 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.858698 0.329459 0.104938 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.872345 0.34259 0.0890951 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.86421 0.32016 0.0827387 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.848329 0.338969 0.0846485 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.866833 0.351888 0.111295 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.842817 0.348268 0.106848 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.853186 0.338757 0.127138 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.882715 0.333079 0.109385 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.869068 0.319948 0.125228 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.87458 0.310649 0.103028 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.845371 0.280879 0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.849036 0.291048 0.0284303 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.826067 0.287867 0.0369125 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.840755 0.304882 0.0471312 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.868341 0.28406 0.0421477 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.86006 0.297894 0.0608487 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.864676 0.273891 0.0643473 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.853652 0.267046 0.0319289 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.849987 0.256877 0.0541285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.830683 0.263865 0.0404111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.798572 0.337088 0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.808673 0.346884 0.0420622 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.82298 0.335792 0.0588533 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.807762 0.322361 0.044793 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.784265 0.34818 0.0455609 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.783355 0.323657 0.0482916 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.774164 0.338384 0.0658506 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.799483 0.361611 0.0596212 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.789382 0.351815 0.079911 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.81379 0.350519 0.0764123 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.815936 0.330051 0.165419 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.828769 0.350165 0.171776 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.838905 0.333232 0.156937 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.820583 0.347547 0.148628 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.805799 0.346984 0.180258 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.797614 0.344366 0.157111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.792966 0.32687 0.173902 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.824121 0.332668 0.188567 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.811288 0.312554 0.182211 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.834258 0.315735 0.173728 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.75581 0.33768 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.753851 0.362219 0.124743 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.774086 0.350765 0.133052 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.76987 0.352319 0.108773 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.735575 0.349134 0.114524 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.751594 0.339233 0.0985541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.737534 0.324595 0.112614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.739791 0.347581 0.138803 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.74175 0.323042 0.136894 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.760026 0.336127 0.147112 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.759846 0.282063 0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.756464 0.29233 0.193792 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.779336 0.288514 0.18531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.765125 0.305929 0.175091 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.736973 0.285879 0.180075 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.745634 0.299478 0.161374 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.740355 0.275612 0.157875 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.751185 0.268464 0.190293 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.754567 0.258198 0.168094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.774058 0.264649 0.181811 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.862735 0.273842 0.153697 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.885497 0.282313 0.158144 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.876946 0.281455 0.134996 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.867718 0.29787 0.150967 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.871286 0.274699 0.176845 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.853506 0.290257 0.169668 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.848523 0.266228 0.172398 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.880514 0.258284 0.160875 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.857752 0.249813 0.156428 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.871963 0.257427 0.137727 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.806645 0.225855 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.818054 0.21762 0.18016 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.83061 0.230661 0.163369 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.813612 0.241754 0.177429 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.794089 0.212813 0.176661 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.789647 0.236948 0.173931 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.78268 0.221048 0.156372 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.811087 0.20172 0.162601 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.799677 0.209955 0.142311 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.823642 0.214761 0.14581 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.849407 0.225263 0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.873186 0.21889 0.0974792 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.865588 0.240865 0.0891702 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.866351 0.236437 0.113449 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.857005 0.203288 0.107698 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.850171 0.220835 0.123668 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.833227 0.20966 0.109608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.856242 0.207715 0.0834188 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.832464 0.214088 0.0853287 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.848644 0.22969 0.0751099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.594141 0.358439 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.613592 0.428945 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.626191 0.448155 0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.634643 0.42519 0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.614455 0.43276 0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.60514 0.45191 0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.593404 0.436515 0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.592541 0.4327 0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.625328 0.44434 0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.612729 0.42513 0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.63378 0.421375 0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.665691 0.37761 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.68332 0.389713 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.665691 0.37761 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.660156 0.398265 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.68332 0.389713 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.660156 0.398265 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.665691 0.37761 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.688854 0.369058 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.671225 0.356956 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.671225 0.356956 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.621614 0.399007 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.625435 0.399844 0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.627149 0.378352 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.60511 0.38905 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.619901 0.420499 0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.599576 0.409705 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.61608 0.419661 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.641939 0.409801 0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.638118 0.408963 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.643653 0.388308 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.542042 0.409774 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.53788 0.433888 0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.558395 0.423551 0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.55574 0.426423 0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.521526 0.42011 0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.539387 0.412646 0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.525689 0.395996 0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.524182 0.417238 0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.528344 0.393124 0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.544697 0.406901 0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.550064 0.379835 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.540802 0.399304 0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.54453 0.400489 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.563801 0.400119 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.546337 0.37865 0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.569335 0.379464 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.555599 0.35918 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.527065 0.37902 0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.536327 0.359551 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.530793 0.380205 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.522591 0.339267 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.501272 0.340934 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.522591 0.339267 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.517056 0.359921 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.501272 0.340934 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.517056 0.359921 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.522591 0.339267 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.506807 0.320279 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.528125 0.318612 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.528125 0.318612 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.586119 0.388377 0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.594185 0.405974 0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.609969 0.394768 0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.593017 0.410332 0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.570335 0.399584 0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.569167 0.403942 0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.562269 0.381987 0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.587286 0.384019 0.202664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.57922 0.366422 0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.60307 0.372813 0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.566667 0.317871 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.567308 0.314012 0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.587901 0.320398 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.569787 0.336891 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.546074 0.311485 0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.548554 0.334364 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.545434 0.315344 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.564188 0.294991 0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.563547 0.29885 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.584781 0.301377 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.638217 0.337042 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.659244 0.341809 0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.65787 0.345471 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.645657 0.360383 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.639592 0.33338 0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.626005 0.351955 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.618565 0.328614 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.651804 0.318468 0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.630777 0.313702 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.65043 0.32213 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.643951 0.172546 0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.674191 0.202787 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.690652 0.219248 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.695267 0.206403 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.677807 0.223862 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.669577 0.215632 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.656732 0.220246 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.653116 0.199171 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.687036 0.198172 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.670575 0.181711 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.691651 0.185327 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.715501 0.191718 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.733129 0.203821 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.715501 0.191718 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.709966 0.212373 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.733129 0.203821 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.709966 0.212373 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.715501 0.191718 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.738664 0.183166 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.721035 0.171063 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.721035 0.171063 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.663122 0.244096 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.675225 0.261725 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.683777 0.238562 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.663122 0.244096 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.65457 0.267259 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.642468 0.249631 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.642468 0.249631 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.675225 0.261725 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.663122 0.244096 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.683777 0.238562 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.602641 0.183615 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.600215 0.197046 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.622701 0.191021 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.609032 0.207465 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.580155 0.18964 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.588972 0.200059 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.582581 0.176209 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.593824 0.173196 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.596251 0.159765 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.61631 0.167171 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.591572 0.224924 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.587397 0.24926 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.606693 0.240045 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.606693 0.240045 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.572277 0.23414 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.591572 0.224924 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.576452 0.209804 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.572277 0.23414 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.576452 0.209804 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.591572 0.224924 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.5724 0.153374 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.551082 0.155041 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.5724 0.153374 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.566866 0.174029 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.551082 0.155041 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.566866 0.174029 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.5724 0.153374 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.556617 0.134387 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.577935 0.13272 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.577935 0.13272 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.655019 0.131237 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.668451 0.12881 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.678869 0.137627 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.662426 0.151296 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.644601 0.12242 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.638576 0.144906 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.631169 0.124846 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.661044 0.108751 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.647613 0.111177 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.671463 0.117567 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.624779 0.100996 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.626446 0.0796777 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.645433 0.0954616 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.624779 0.100996 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.605791 0.0852121 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.604124 0.10653 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.604124 0.10653 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.626446 0.0796777 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.624779 0.100996 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.645433 0.0954616 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.696329 0.120168 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.720665 0.115992 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.711449 0.135288 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.711449 0.135288 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.705544 0.100872 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.696329 0.120168 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.681209 0.105047 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.705544 0.100872 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.681209 0.105047 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.696329 0.120168 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.852418 0.0955788 1.89979e-16 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.922609 0.11107 -0.0178949 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.937225 0.122151 -0.0344251 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.916553 0.11086 -0.0418311 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.915202 0.131874 -0.0289382 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.943281 0.12236 -0.0104889 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.921258 0.132084 -0.00500196 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.928665 0.111279 0.00604126 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.944632 0.101346 -0.0233819 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.930016 0.0902645 -0.00685171 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.92396 0.090055 -0.0307879 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.867231 0.135698 -0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.873196 0.134634 -0.0844174 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.882112 0.117797 -0.0687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.858152 0.11765 -0.0746767 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.858315 0.152536 -0.076187 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.843271 0.135552 -0.0664462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.852349 0.1536 -0.0522508 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.882275 0.152682 -0.070222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.876309 0.153747 -0.0462858 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.89119 0.135845 -0.0545162 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.877966 0.164775 0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.890926 0.182656 -0.0042468 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.897331 0.159019 -0.00739901 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.876622 0.167676 -0.0176871 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.871561 0.188412 0.00994863 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.857256 0.173431 -0.00349164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.8586 0.17053 0.0209919 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.89227 0.179755 0.0202367 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.87931 0.161874 0.0312799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.898675 0.156118 0.0170845 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.907797 0.0709499 0.0425863 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.930963 0.0752104 0.0499923 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.924191 0.0806562 0.0268805 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.915684 0.0941344 0.0457385 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.914568 0.0655041 0.065698 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.899289 0.0844281 0.0614442 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.891402 0.0612436 0.058292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.923076 0.0520258 0.0468401 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.89991 0.0477654 0.0394341 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.916304 0.0574717 0.0237283 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.863153 0.124655 0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.875744 0.141535 0.0801706 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.88655 0.129819 0.0613127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.868763 0.146389 0.0569896 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.852347 0.136371 0.0861356 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.845366 0.141225 0.0629546 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.839756 0.119492 0.0732426 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.870135 0.119801 0.0904587 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.857544 0.102922 0.0775657 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.880941 0.108085 0.0716007 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.837606 0.0554592 0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.842832 0.0523913 0.0844174 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.86055 0.0593957 0.0687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.842434 0.0750766 0.0746767 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.819888 0.0484547 0.076187 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.81949 0.07114 0.0664462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.814662 0.0515226 0.0522508 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.838004 0.0327739 0.070222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.832778 0.0358417 0.0462858 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.855722 0.0397783 0.0545162 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.897062 0.0418734 -0.0246914 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.920407 0.0359958 -0.0301783 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.912106 0.0588574 -0.0344321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.915603 0.0511067 -0.0112511 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.905363 0.0190117 -0.0204376 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.900559 0.0341227 -0.00151032 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.882018 0.0248894 -0.0149506 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.901866 0.0267625 -0.0436186 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.878521 0.0326401 -0.0381316 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.893565 0.0496241 -0.0478724 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.826871 0.0263827 -0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.825102 0.00436945 0.0042468 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.84533 0.018173 0.00739901 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.823964 0.025051 0.0176871 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.806642 0.0125791 -0.00994863 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.805505 0.0332607 0.00349164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.808411 0.0345923 -0.0209919 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.828008 0.00570109 -0.0202367 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.829777 0.0277143 -0.0312799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.848237 0.0195047 -0.0170845 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.841683 0.0665023 -0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.840284 0.0454909 -0.0801706 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.856111 0.0473735 -0.0613127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.831823 0.0463379 -0.0569896 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.825856 0.0646197 -0.0861356 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.817395 0.0654667 -0.0629546 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.827255 0.0856311 -0.0732426 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.850144 0.0656554 -0.0904587 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.851543 0.0866667 -0.0775657 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.865971 0.0675379 -0.0716007 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.69376 -0.0133465 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.740325 -0.0440268 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.762259 -0.0417568 0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.759495 -0.0345526 0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.748937 -0.0216407 0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.743089 -0.051231 0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.729767 -0.0311149 0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.721155 -0.053501 0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.753646 -0.0641429 0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.731712 -0.0664129 0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.750882 -0.0569387 0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.76531 0.0058253 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.782939 0.0179281 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.76531 0.0058253 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.759776 0.02648 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.782939 0.0179281 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.759776 0.02648 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.76531 0.0058253 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.788473 -0.00272662 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.770845 -0.0148294 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.770845 -0.0148294 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.721234 0.0272215 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.736829 0.0454452 0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.742467 0.0297485 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.724354 0.046242 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.715595 0.0429182 0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.70312 0.043715 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.7 0.0246945 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.733709 0.0264247 0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.718114 0.00820099 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.739347 0.010728 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.668775 -0.0631985 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.669983 -0.0708196 0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.690113 -0.0618185 0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.671462 -0.0467378 0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.648644 -0.0721997 0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.650123 -0.0481178 0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.647436 -0.0645786 0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.667296 -0.0872804 0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.666087 -0.0796593 0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.687426 -0.0782793 0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.649684 0.00804971 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.646718 0.0244627 0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.669336 0.016478 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.657124 0.0313903 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.627066 0.0160343 0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.637471 0.022962 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.630031 -0.000378614 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.639278 0.00112207 0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.642244 -0.0152909 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.661896 -0.00686255 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.62221 -0.0325183 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.600892 -0.0308513 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.62221 -0.0325183 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.616676 -0.0118635 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.600892 -0.0308513 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.616676 -0.0118635 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.62221 -0.0325183 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.606426 -0.051506 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.627745 -0.053173 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.627745 -0.053173 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.712851 -0.0845947 0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.730141 -0.101422 0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.736701 -0.0782041 0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.725284 -0.0832945 0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.706291 -0.107813 0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.701434 -0.0896851 0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.689001 -0.0909853 0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.717709 -0.102723 0.0882695 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.700418 -0.0858949 0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.724268 -0.0795043 0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.666287 -0.0539145 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.655153 -0.0751594 0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.671821 -0.0745692 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.649783 -0.0638711 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.649619 -0.0545047 0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.644249 -0.0432164 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.660752 -0.0332597 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.671657 -0.0652028 0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.682791 -0.0439578 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.688325 -0.0646126 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.737837 -0.0347427 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.752567 -0.0269197 0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.732303 -0.014088 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.751574 -0.0144587 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.758102 -0.0475745 0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.757108 -0.0351134 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.743371 -0.0553974 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.73883 -0.0472037 0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.7241 -0.0550267 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.718566 -0.0343719 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.69376 -0.0133465 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.745859 -0.0646815 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.770032 -0.0684873 -0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.759394 -0.0481266 -0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.762305 -0.0507391 -0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.756497 -0.0850422 -0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.74877 -0.067294 -0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.732325 -0.0812364 -0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.753586 -0.0824297 -0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.729413 -0.0786239 -0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.742948 -0.062069 -0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.76531 0.0058253 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.782939 0.0179281 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.76531 0.0058253 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.759776 0.02648 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.782939 0.0179281 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.759776 0.02648 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.76531 0.0058253 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.788473 -0.00272662 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.770845 -0.0148294 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.770845 -0.0148294 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.737837 -0.0347427 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.758864 -0.0299763 -0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.757489 -0.0263144 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.745277 -0.0114021 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.739212 -0.0384047 -0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.725625 -0.0198304 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.718185 -0.043171 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.751424 -0.0533169 -0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.730397 -0.0580833 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.750049 -0.0496549 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.674309 -0.0838533 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.675276 -0.106805 -0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.694308 -0.091423 -0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.673094 -0.0875713 -0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.655278 -0.0992356 -0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.653095 -0.0800016 -0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.65431 -0.0762835 -0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.676491 -0.103087 -0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.675524 -0.0801352 -0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.695522 -0.0877049 -0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.666287 -0.0539145 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.666927 -0.0577732 -0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.68752 -0.0513875 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.669407 -0.034894 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.645694 -0.0603001 -0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.648173 -0.0374209 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.645053 -0.0564414 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.663807 -0.0767937 -0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.663167 -0.072935 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.6844 -0.070408 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.62221 -0.0325183 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.600892 -0.0308513 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.62221 -0.0325183 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.616676 -0.0118635 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.600892 -0.0308513 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.616676 -0.0118635 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.62221 -0.0325183 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.606426 -0.051506 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.627745 -0.053173 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.627745 -0.053173 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.701782 -0.0432853 -0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.717566 -0.0544915 -0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.725632 -0.0368947 -0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.718734 -0.0588496 -0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.693716 -0.0608821 -0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.694884 -0.0652402 -0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.677932 -0.0496759 -0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.700615 -0.0389272 -0.202664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.684831 -0.027721 -0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.708681 -0.0213304 -0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.649684 0.00804971 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.640422 0.0275193 -0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.644149 0.0287044 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.66342 0.0283337 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.645956 0.00686453 -0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.668955 0.00767898 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.655218 -0.012605 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.626685 0.00723527 -0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.635947 -0.0122343 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.630413 0.00842045 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.721234 0.0272215 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.725055 0.0280589 -0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.726768 0.00656677 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.70473 0.0172649 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.71952 0.0487136 -0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.699195 0.0379196 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.715699 0.0478762 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.741558 0.0380155 -0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.737738 0.0371781 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.743272 0.0165234 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.172546 0.643951 1.11022e-16 RAD 0.166667
+ txt002
+ SPHERE CENTER 0.281471 0.802608 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.30566 0.824035 -0.177765 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.302088 0.822021 -0.202114 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.298094 0.802598 -0.187402 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282758 0.821938 -0.186751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.309654 0.843459 -0.192477 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.290324 0.843375 -0.177114 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.313227 0.845472 -0.168128 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.32499 0.824119 -0.193128 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.328563 0.826132 -0.16878 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.320997 0.804695 -0.178416 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.305221 0.752156 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.325175 0.741263 -0.169507 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.325981 0.765112 -0.163165 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.32493 0.747715 -0.145675 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.304415 0.728307 -0.166213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.304171 0.734759 -0.142381 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.284462 0.7392 -0.156576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.305466 0.745704 -0.183703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.285513 0.756597 -0.174066 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.306272 0.769553 -0.17736 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.241352 0.787796 -0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.218449 0.785699 -0.180578 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.223304 0.778718 -0.157397 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.22345 0.802677 -0.163362 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.236497 0.794777 -0.194773 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.241498 0.811756 -0.177557 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.2594 0.796874 -0.185788 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.236351 0.770818 -0.188808 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.259253 0.772915 -0.179823 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.241205 0.763837 -0.165627 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.28191 0.874487 -0.129006 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.292033 0.891539 -0.143718 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.305711 0.872763 -0.135349 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.28812 0.868678 -0.152187 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.268233 0.893263 -0.137375 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.264319 0.870402 -0.145845 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.25811 0.876212 -0.122663 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.285824 0.897348 -0.120537 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.275701 0.880296 -0.105825 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.299501 0.878572 -0.112168 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.217602 0.838248 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.206363 0.860225 -0.122182 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.223536 0.854636 -0.105343 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.230102 0.858689 -0.128798 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.200429 0.843837 -0.139672 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.224168 0.842301 -0.146288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.211667 0.821861 -0.140323 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.193863 0.839784 -0.116217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.205101 0.817808 -0.116868 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.211035 0.834196 -0.0993785 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.257721 0.853061 -0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.26204 0.87538 -0.0527151 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.280934 0.860805 -0.0590577 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.266856 0.87108 -0.0765474 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.238827 0.867636 -0.0560094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.243643 0.863337 -0.0798417 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.234508 0.845317 -0.0656463 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.252905 0.857361 -0.0385197 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.248586 0.835041 -0.0481565 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.271799 0.842785 -0.0448623 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.34578 0.838847 -0.117284 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.360404 0.851488 -0.132647 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.347059 0.832518 -0.141116 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.335865 0.853509 -0.1345 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.359125 0.857816 -0.108814 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.334587 0.859838 -0.110668 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.344501 0.845176 -0.0934517 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.370319 0.836826 -0.115431 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.355695 0.824185 -0.100068 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356973 0.817857 -0.1239 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.321591 0.817421 -0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.340361 0.83071 -0.0416443 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.341208 0.822249 -0.0648253 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.325527 0.840365 -0.0588603 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.320744 0.825882 -0.0274488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.30591 0.835537 -0.0446649 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.301973 0.812593 -0.0364345 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.336425 0.807766 -0.0334138 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.317654 0.794477 -0.0423994 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.337272 0.799305 -0.0565949 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.345341 0.766968 -0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.369945 0.768944 -0.10004 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356171 0.780624 -0.116879 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356172 0.788341 -0.093424 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.359115 0.755289 -0.0825505 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.345342 0.774685 -0.0759343 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.334511 0.753313 -0.0818993 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.359113 0.747572 -0.106005 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.33451 0.745596 -0.105354 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.34534 0.759252 -0.122844 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.358439 0.594141 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.408291 0.619127 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.411883 0.625955 -0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.396287 0.607547 -0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.390369 0.630791 -0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.423887 0.637535 -0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.402373 0.642371 -0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.420295 0.630706 -0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.429805 0.61429 -0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.426212 0.607462 -0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.414208 0.595882 -0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.337042 0.638217 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.344865 0.652948 -0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.357326 0.651954 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.357697 0.632683 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.324581 0.639211 -0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.337413 0.618946 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.316758 0.624481 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.324211 0.658482 -0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.316388 0.643752 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.336672 0.657489 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37761 0.665691 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.389713 0.68332 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.398265 0.660156 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37761 0.665691 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.369058 0.688854 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356956 0.671225 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356956 0.671225 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.389713 0.68332 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37761 0.665691 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.398265 0.660156 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.429687 0.57505 -0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.452905 0.58161 -0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.434777 0.586467 -0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.436077 0.5989 -0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.447815 0.570193 -0.0882695 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.430987 0.587483 -0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.424596 0.563633 -0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.446515 0.55776 -0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.423296 0.5512 -0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.428387 0.562617 -0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.399007 0.621614 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.41723 0.637209 -0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.418027 0.624734 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.401533 0.642848 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.39821 0.634089 -0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.382513 0.639728 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.379986 0.618494 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.414703 0.615976 -0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.39648 0.600381 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.4155 0.603501 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.379835 0.550064 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.396248 0.547099 -0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.403175 0.557504 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.388263 0.569716 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.372907 0.539659 -0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.364922 0.562276 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356494 0.542624 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.387819 0.527447 -0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.371406 0.530412 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.394747 0.537852 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.389119 0.547576 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.410169 0.541008 -0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.405866 0.564748 -0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.410472 0.548718 -0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.393422 0.523836 -0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.393725 0.531546 -0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.372372 0.530405 -0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.388816 0.539866 -0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.367766 0.546435 -0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.384513 0.563607 -0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.339267 0.522591 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.340934 0.501272 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.359921 0.517056 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.339267 0.522591 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.320279 0.506807 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.318612 0.528125 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.318612 0.528125 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.340934 0.501272 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.339267 0.522591 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.359921 0.517056 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.317871 0.566667 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.296626 0.555534 -0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.307914 0.550163 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.297216 0.572202 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.306582 0.572037 -0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.307172 0.588706 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.327827 0.583171 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.31728 0.549999 -0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.338525 0.561133 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.328569 0.544629 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.172546 0.643951 -0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.142305 0.674191 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.144155 0.692502 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.150298 0.696439 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.164554 0.682184 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.136163 0.670254 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.156561 0.659936 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.134313 0.651943 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.121907 0.684509 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.120057 0.666199 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.12805 0.688447 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.100996 0.663122 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0847178 0.680265 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.104191 0.675047 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.107387 0.686972 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0815225 0.66834 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.104191 0.675047 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0978007 0.651197 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0783272 0.656415 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0946054 0.639272 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0978007 0.651197 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.153374 0.715501 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.160081 0.738169 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.177224 0.721891 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.165299 0.718696 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.136231 0.731779 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.141449 0.712305 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.129524 0.70911 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.148156 0.734974 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.141449 0.712305 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.165299 0.718696 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.213855 0.655019 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.213517 0.662308 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.194382 0.649801 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.198584 0.673065 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.23299 0.667526 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.218058 0.678283 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.233329 0.660237 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.228788 0.644262 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.229127 0.636974 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.209653 0.631756 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.224924 0.696329 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.23918 0.710584 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.233654 0.687599 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.216195 0.705059 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.23045 0.719314 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.207465 0.713788 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.216195 0.705059 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.24791 0.701855 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.233654 0.687599 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.242384 0.678869 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.244096 0.624779 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.266765 0.631486 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.247291 0.636704 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.250487 0.648629 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.26357 0.619561 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.247291 0.636704 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.240901 0.612854 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.260374 0.607636 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.237705 0.600929 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.240901 0.612854 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.161477 0.602641 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.162741 0.579817 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.179523 0.58737 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.156259 0.583168 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.144695 0.595088 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.138214 0.598439 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.143431 0.617912 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.167958 0.59929 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.166695 0.622115 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.184741 0.606843 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.191718 0.5724 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.208861 0.556122 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.215568 0.578791 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.203643 0.575596 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.185011 0.549732 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.179793 0.569205 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.167868 0.56601 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.196936 0.552927 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.179793 0.569205 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.203643 0.575596 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.120168 0.591572 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.105912 0.577317 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.128897 0.582843 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.111438 0.600302 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0971825 0.586046 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.102708 0.609032 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.111438 0.600302 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.114642 0.568587 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.128897 0.582843 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.137627 0.574113 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0955788 0.852418 9.1293e-17 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.11107 0.922609 -0.0178949 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.122151 0.937225 -0.0344251 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.131874 0.915202 -0.0289382 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.11086 0.916553 -0.0418311 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.101346 0.944632 -0.0233819 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.090055 0.92396 -0.0307879 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0902645 0.930016 -0.00685171 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.12236 0.943281 -0.0104889 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.111279 0.928665 0.00604126 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.132084 0.921258 -0.00500196 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.164775 0.877966 0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.182656 0.890926 -0.0042468 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.167676 0.876622 -0.0176871 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.159019 0.897331 -0.00739901 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.179755 0.89227 0.0202367 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.156118 0.898675 0.0170845 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.161874 0.87931 0.0312799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.188412 0.871561 0.00994863 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.17053 0.8586 0.0209919 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.173431 0.857256 -0.00349164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.135698 0.867231 -0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.134634 0.873196 -0.0844174 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.11765 0.858152 -0.0746767 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.117797 0.882112 -0.0687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.152682 0.882275 -0.070222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.135845 0.89119 -0.0545162 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.153747 0.876309 -0.0462858 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.152536 0.858315 -0.076187 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.1536 0.852349 -0.0522508 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.135552 0.843271 -0.0664462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0418734 0.897062 -0.0246914 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0359958 0.920407 -0.0301783 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0511067 0.915603 -0.0112511 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0588574 0.912106 -0.0344321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0267625 0.901866 -0.0436186 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0496241 0.893565 -0.0478724 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0326401 0.878521 -0.0381316 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0190117 0.905363 -0.0204376 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0248894 0.882018 -0.0149506 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0341227 0.900559 -0.00151032 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0665023 0.841683 -0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0454909 0.840284 -0.0801706 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0463379 0.831823 -0.0569896 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0473735 0.856111 -0.0613127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0656554 0.850144 -0.0904587 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0675379 0.865971 -0.0716007 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0866667 0.851543 -0.0775657 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0646197 0.825856 -0.0861356 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0856311 0.827255 -0.0732426 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0654667 0.817395 -0.0629546 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0263827 0.826871 -0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.00436945 0.825102 0.0042468 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.025051 0.823964 0.0176871 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.018173 0.84533 0.00739901 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00570109 0.828008 -0.0202367 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0195047 0.848237 -0.0170845 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0277143 0.829777 -0.0312799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0125791 0.806642 -0.00994863 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0345923 0.808411 -0.0209919 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0332607 0.805505 0.00349164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0709499 0.907797 0.0425863 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0752104 0.930963 0.0499923 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0941344 0.915684 0.0457385 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0806562 0.924191 0.0268805 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0520258 0.923076 0.0468401 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0574717 0.916304 0.0237283 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0477654 0.89991 0.0394341 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0655041 0.914568 0.065698 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0612436 0.891402 0.058292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0844281 0.899289 0.0614442 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0554592 0.837606 0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0523913 0.842832 0.0844174 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0750766 0.842434 0.0746767 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0593957 0.86055 0.0687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0327739 0.838004 0.070222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0397783 0.855722 0.0545162 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0358417 0.832778 0.0462858 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0484547 0.819888 0.076187 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0515226 0.814662 0.0522508 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.07114 0.81949 0.0664462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.124655 0.863153 0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.141535 0.875744 0.0801706 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.146389 0.868763 0.0569896 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.129819 0.88655 0.0613127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.119801 0.870135 0.0904587 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.108085 0.880941 0.0716007 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.102922 0.857544 0.0775657 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.136371 0.852347 0.0861356 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.119492 0.839756 0.0732426 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.141225 0.845366 0.0629546 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0133465 0.69376 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.0646815 0.745859 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0684873 0.770032 -0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0507391 0.762305 -0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0481266 0.759394 -0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0824297 0.753586 -0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.062069 0.742948 -0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0786239 0.729413 -0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0850422 0.756497 -0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0812364 0.732325 -0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.067294 0.74877 -0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0347427 0.737837 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0299763 0.758864 -0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0114021 0.745277 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0263144 0.757489 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0533169 0.751424 -0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0496549 0.750049 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0580833 0.730397 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0384047 0.739212 -0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.043171 0.718185 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0198304 0.725625 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0058253 0.76531 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0179281 0.782939 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.02648 0.759776 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0058253 0.76531 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00272662 0.788473 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0148294 0.770845 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0148294 0.770845 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0179281 0.782939 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0058253 0.76531 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.02648 0.759776 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0432853 0.701782 -0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0544915 0.717566 -0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0588496 0.718734 -0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0368947 0.725632 -0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0389272 0.700615 -0.202664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0213304 0.708681 -0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.027721 0.684831 -0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0608821 0.693716 -0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0496759 0.677932 -0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0652402 0.694884 -0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0272215 0.721234 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0280589 0.725055 -0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0172649 0.70473 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00656677 0.726768 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0380155 0.741558 -0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0165234 0.743272 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0371781 0.737738 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0487136 0.71952 -0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0478762 0.715699 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0379196 0.699195 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00804971 0.649684 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0275193 0.640422 -0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0283337 0.66342 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0287044 0.644149 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00723527 0.626685 -0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00842045 0.630413 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0122343 0.635947 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00686453 0.645956 -0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.012605 0.655218 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00767898 0.668955 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0838533 0.674309 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.106805 0.675276 -0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0875713 0.673094 -0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.091423 0.694308 -0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.103087 0.676491 -0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0877049 0.695522 -0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0801352 0.675524 -0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0992356 0.655278 -0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0762835 0.65431 -0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0800016 0.653095 -0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0325183 0.62221 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0308513 0.600892 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0118635 0.616676 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0325183 0.62221 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.051506 0.606426 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.053173 0.627745 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.053173 0.627745 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0308513 0.600892 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0325183 0.62221 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0118635 0.616676 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0539145 0.666287 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0577732 0.666927 -0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.034894 0.669407 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0513875 0.68752 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0767937 0.663807 -0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.070408 0.6844 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.072935 0.663167 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0603001 0.645694 -0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0564414 0.645053 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0374209 0.648173 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0133465 0.69376 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.0440268 0.740325 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0417568 0.762259 0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0216407 0.748937 0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0345526 0.759495 0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0641429 0.753646 0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0569387 0.750882 0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0664129 0.731712 0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.051231 0.743089 0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.053501 0.721155 0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0311149 0.729767 0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0272215 0.721234 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0454452 0.736829 0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.046242 0.724354 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0297485 0.742467 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0264247 0.733709 0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.010728 0.739347 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00820099 0.718114 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0429182 0.715595 0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0246945 0.7 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.043715 0.70312 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0058253 0.76531 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0179281 0.782939 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.02648 0.759776 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0058253 0.76531 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00272662 0.788473 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0148294 0.770845 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0148294 0.770845 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0179281 0.782939 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0058253 0.76531 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.02648 0.759776 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0845947 0.712851 0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.101422 0.730141 0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0832945 0.725284 0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0782041 0.736701 0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.102723 0.717709 0.0882695 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0795043 0.724268 0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0858949 0.700418 0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.107813 0.706291 0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0909853 0.689001 0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0896851 0.701434 0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0347427 0.737837 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0269197 0.752567 0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0144587 0.751574 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.014088 0.732303 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0472037 0.73883 0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0343719 0.718566 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0550267 0.7241 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0475745 0.758102 0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0553974 0.743371 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0351134 0.757108 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0539145 0.666287 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0751594 0.655153 0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0638711 0.649783 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0745692 0.671821 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0652028 0.671657 0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0646126 0.688325 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0439578 0.682791 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0545047 0.649619 0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0332597 0.660752 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0432164 0.644249 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0631985 0.668775 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0708196 0.669983 0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0467378 0.671462 0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0618185 0.690113 0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0872804 0.667296 0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0782793 0.687426 0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0796593 0.666087 0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0721997 0.648644 0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0645786 0.647436 0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0481178 0.650123 0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0325183 0.62221 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0308513 0.600892 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0118635 0.616676 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0325183 0.62221 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.051506 0.606426 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.053173 0.627745 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.053173 0.627745 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0308513 0.600892 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0325183 0.62221 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0118635 0.616676 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00804971 0.649684 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0244627 0.646718 0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0313903 0.657124 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.016478 0.669336 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00112207 0.639278 0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00686255 0.661896 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0152909 0.642244 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0160343 0.627066 0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.000378614 0.630031 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.022962 0.637471 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.281471 0.802608 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.329459 0.858698 0.104938 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.34259 0.872345 0.0890951 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.338969 0.848329 0.0846485 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.32016 0.86421 0.0827387 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.333079 0.882715 0.109385 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.310649 0.87458 0.103028 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.319948 0.869068 0.125228 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.351888 0.866833 0.111295 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.338757 0.853186 0.127138 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.348268 0.842817 0.106848 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.337088 0.798572 0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.346884 0.808673 0.0420622 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.322361 0.807762 0.044793 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.335792 0.82298 0.0588533 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.361611 0.799483 0.0596212 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.350519 0.81379 0.0764123 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.351815 0.789382 0.079911 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.34818 0.784265 0.0455609 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.338384 0.774164 0.0658506 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.323657 0.783355 0.0482916 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.280879 0.845371 0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.291048 0.849036 0.0284303 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.304882 0.840755 0.0471312 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.287867 0.826067 0.0369125 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.267046 0.853652 0.0319289 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.263865 0.830683 0.0404111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.256877 0.849987 0.0541285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.28406 0.868341 0.0421477 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.273891 0.864676 0.0643473 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.297894 0.86006 0.0608487 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.273842 0.862735 0.153697 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.282313 0.885497 0.158144 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.29787 0.867718 0.150967 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.281455 0.876946 0.134996 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.258284 0.880514 0.160875 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.257427 0.871963 0.137727 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.249813 0.857752 0.156428 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.274699 0.871286 0.176845 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.266228 0.848523 0.172398 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.290257 0.853506 0.169668 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.225263 0.849407 0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.21889 0.873186 0.0974792 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.236437 0.866351 0.113449 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.240865 0.865588 0.0891702 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.207715 0.856242 0.0834188 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.22969 0.848644 0.0751099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.214088 0.832464 0.0853287 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.203288 0.857005 0.107698 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.20966 0.833227 0.109608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.220835 0.850171 0.123668 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.225855 0.806645 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.21762 0.818054 0.18016 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.241754 0.813612 0.177429 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.230661 0.83061 0.163369 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.20172 0.811087 0.162601 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.214761 0.823642 0.14581 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.209955 0.799677 0.142311 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.212813 0.794089 0.176661 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.221048 0.78268 0.156372 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.236948 0.789647 0.173931 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.330051 0.815936 0.165419 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.350165 0.828769 0.171776 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.347547 0.820583 0.148628 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.333232 0.838905 0.156937 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.332668 0.824121 0.188567 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.315735 0.834258 0.173728 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.312554 0.811288 0.182211 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.346984 0.805799 0.180258 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.32687 0.792966 0.173902 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.344366 0.797614 0.157111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282063 0.759846 0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.29233 0.756464 0.193792 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.305929 0.765125 0.175091 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.288514 0.779336 0.18531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.268464 0.751185 0.190293 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.264649 0.774058 0.181811 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.258198 0.754567 0.168094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.285879 0.736973 0.180075 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.275612 0.740355 0.157875 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.299478 0.745634 0.161374 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.33768 0.75581 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.362219 0.753851 0.124743 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.352319 0.76987 0.108773 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.350765 0.774086 0.133052 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.347581 0.739791 0.138803 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.336127 0.760026 0.147112 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.323042 0.74175 0.136894 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.349134 0.735575 0.114524 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.324595 0.737534 0.112614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.339233 0.751594 0.0985541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.172546 0.643951 0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.202787 0.674191 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.219248 0.690652 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.223862 0.677807 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.206403 0.695267 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.198172 0.687036 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.185327 0.691651 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.181711 0.670575 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.215632 0.669577 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.199171 0.653116 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.220246 0.656732 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.244096 0.663122 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.261725 0.675225 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.244096 0.663122 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.238562 0.683777 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.261725 0.675225 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.238562 0.683777 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.244096 0.663122 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.267259 0.65457 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.249631 0.642468 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.249631 0.642468 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.191718 0.715501 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.203821 0.733129 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.212373 0.709966 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.191718 0.715501 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.183166 0.738664 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.171063 0.721035 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.171063 0.721035 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.203821 0.733129 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.191718 0.715501 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.212373 0.709966 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.131237 0.655019 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.12881 0.668451 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.151296 0.662426 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.137627 0.678869 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.108751 0.661044 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.117567 0.671463 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.111177 0.647613 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.12242 0.644601 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.124846 0.631169 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.144906 0.638576 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.120168 0.696329 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.115992 0.720665 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.135288 0.711449 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.135288 0.711449 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.100872 0.705544 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.120168 0.696329 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.105047 0.681209 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.100872 0.705544 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.105047 0.681209 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.120168 0.696329 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.100996 0.624779 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0796777 0.626446 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.100996 0.624779 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0954616 0.645433 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0796777 0.626446 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0954616 0.645433 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.100996 0.624779 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0852121 0.605791 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.10653 0.604124 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.10653 0.604124 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.183615 0.602641 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.197046 0.600215 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.207465 0.609032 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.191021 0.622701 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.173196 0.593824 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.167171 0.61631 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.159765 0.596251 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.18964 0.580155 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.176209 0.582581 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.200059 0.588972 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.153374 0.5724 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.155041 0.551082 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.174029 0.566866 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.153374 0.5724 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.134387 0.556617 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.13272 0.577935 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.13272 0.577935 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.155041 0.551082 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.153374 0.5724 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.174029 0.566866 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.224924 0.591572 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.24926 0.587397 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.240045 0.606693 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.240045 0.606693 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.23414 0.572277 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.224924 0.591572 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.209804 0.576452 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.23414 0.572277 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.209804 0.576452 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.224924 0.591572 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.358439 0.594141 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.428945 0.613592 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.448155 0.626191 0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.43276 0.614455 0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.42519 0.634643 0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.44434 0.625328 0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.421375 0.63378 0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.42513 0.612729 0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.45191 0.60514 0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.4327 0.592541 0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.436515 0.593404 0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.399007 0.621614 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.399844 0.625435 0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.38905 0.60511 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.378352 0.627149 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.409801 0.641939 0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.388308 0.643653 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.408963 0.638118 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.420499 0.619901 0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.419661 0.61608 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.409705 0.599576 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37761 0.665691 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.389713 0.68332 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.398265 0.660156 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37761 0.665691 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.369058 0.688854 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356956 0.671225 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356956 0.671225 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.389713 0.68332 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37761 0.665691 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.398265 0.660156 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.388377 0.586119 0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.405974 0.594185 0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.410332 0.593017 0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.394768 0.609969 0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.384019 0.587286 0.202664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.372813 0.60307 0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.366422 0.57922 0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.399584 0.570335 0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.381987 0.562269 0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.403942 0.569167 0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.337042 0.638217 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.341809 0.659244 0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.360383 0.645657 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.345471 0.65787 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.318468 0.651804 0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.32213 0.65043 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.313702 0.630777 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.33338 0.639592 0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.328614 0.618565 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.351955 0.626005 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.317871 0.566667 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.314012 0.567308 0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.336891 0.569787 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.320398 0.587901 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.294991 0.564188 0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.301377 0.584781 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.29885 0.563547 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.311485 0.546074 0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.315344 0.545434 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.334364 0.548554 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.409774 0.542042 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.433888 0.53788 0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.426423 0.55574 0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.423551 0.558395 0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.417238 0.524182 0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.406901 0.544697 0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.393124 0.528344 0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.42011 0.521526 0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.395996 0.525689 0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.412646 0.539387 0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.339267 0.522591 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.340934 0.501272 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.359921 0.517056 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.339267 0.522591 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.320279 0.506807 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.318612 0.528125 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.318612 0.528125 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.340934 0.501272 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.339267 0.522591 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.359921 0.517056 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.379835 0.550064 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.399304 0.540802 0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.400119 0.563801 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.400489 0.54453 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37902 0.527065 0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.380205 0.530793 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.359551 0.536327 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37865 0.546337 0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.35918 0.555599 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.379464 0.569335 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.371785 0.0996195 0.544331 RAD 0.166667
+ txt002
+ SPHERE CENTER -0.393621 0.220501 0.729516 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.368601 0.279642 0.766439 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.354293 0.299716 0.765035 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.347717 0.279022 0.753281 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.366989 0.292196 0.745238 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.375177 0.300337 0.778193 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.387873 0.292817 0.758396 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.389485 0.280263 0.779597 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.355904 0.287162 0.786236 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.370213 0.267088 0.787639 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.349329 0.266468 0.774481 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.321889 0.238665 0.726118 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.304702 0.250544 0.71296 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.32307 0.238717 0.701455 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.327715 0.259421 0.714081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.30352 0.250492 0.737623 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.326533 0.259369 0.738744 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.320707 0.238612 0.750781 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.298875 0.229788 0.724997 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.316063 0.217908 0.738155 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.317244 0.21796 0.713492 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.372464 0.281062 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.362978 0.289441 0.671279 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.35549 0.267771 0.680442 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.378255 0.270044 0.671155 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.379952 0.302733 0.683315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.395229 0.283335 0.683192 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.389438 0.294353 0.704516 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.357187 0.30046 0.692603 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.366673 0.29208 0.713804 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.349699 0.278789 0.701767 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.440333 0.261479 0.769837 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.443285 0.282991 0.781591 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.421181 0.271991 0.781342 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.4302 0.282046 0.760673 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.462437 0.27248 0.770086 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.449353 0.271534 0.749168 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.459485 0.250967 0.758332 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.453417 0.262424 0.790755 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.450466 0.240911 0.779001 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.431313 0.251423 0.790506 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.444196 0.262898 0.695877 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.449273 0.285685 0.687835 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.436139 0.282528 0.708504 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.426189 0.27701 0.68659 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.45733 0.266055 0.675209 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.434246 0.257381 0.673964 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.452254 0.243269 0.683251 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.46728 0.271573 0.697123 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.462204 0.248787 0.705165 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.454146 0.268416 0.717791 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.465353 0.202338 0.732914 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.486123 0.204606 0.746073 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.464339 0.202946 0.757577 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.470107 0.223366 0.744951 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.487137 0.203998 0.72141 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.471122 0.222757 0.720288 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.466367 0.201729 0.708251 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.481368 0.183578 0.734036 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.460599 0.18131 0.720878 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.459584 0.181918 0.745541 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.389758 0.219082 0.803476 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.378635 0.228779 0.823273 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.365937 0.225483 0.802355 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.383364 0.24293 0.8036 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.402455 0.222377 0.824394 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.407185 0.236529 0.804721 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.413578 0.21268 0.804597 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.385029 0.20493 0.823149 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.396152 0.195233 0.803352 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.372331 0.201634 0.802231 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.414778 0.15994 0.766553 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.412573 0.147477 0.787754 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.39322 0.15977 0.77859 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.412448 0.172167 0.787878 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.434131 0.147647 0.775717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.434006 0.172338 0.775841 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.436336 0.16011 0.754517 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.414903 0.13525 0.766429 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.417108 0.147713 0.745229 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.39555 0.147543 0.757266 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.343046 0.178104 0.763155 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.319723 0.177083 0.771198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.325124 0.189464 0.750529 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.332294 0.198298 0.772443 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.337645 0.165722 0.783824 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.350216 0.186938 0.785069 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.360967 0.166743 0.775781 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.330475 0.156889 0.76191 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.353797 0.157909 0.753867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.335876 0.16927 0.741241 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.191247 0.166275 0.655442 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.130089 0.20793 0.652044 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.115471 0.221102 0.637128 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.126388 0.200597 0.628759 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.13987 0.220766 0.633356 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.119172 0.228435 0.660413 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.143571 0.228099 0.656641 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.13379 0.215264 0.675329 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.10569 0.208266 0.655816 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.120308 0.195095 0.670732 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.116607 0.187762 0.647447 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.154295 0.172673 0.591563 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.15554 0.180792 0.568278 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.17557 0.171251 0.579113 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.166926 0.19323 0.586315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.134265 0.182215 0.580727 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.145651 0.194652 0.598764 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.133019 0.174096 0.604012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.142909 0.160236 0.573526 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.141663 0.152117 0.596811 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.162939 0.150694 0.584361 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.192135 0.230419 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.18209 0.243049 0.599717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.168159 0.227721 0.613157 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.185251 0.218634 0.597829 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.206066 0.245747 0.604965 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.209227 0.221332 0.603077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.216111 0.233117 0.623653 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.188974 0.254834 0.620293 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.199019 0.242204 0.638981 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.175043 0.239506 0.633733 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.167041 0.201532 0.715923 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.151829 0.219088 0.724292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.14514 0.205084 0.705088 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.163068 0.221861 0.702483 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.173729 0.215537 0.735128 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.184969 0.218309 0.713318 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.188942 0.197981 0.726759 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.155801 0.19876 0.737733 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.171014 0.181204 0.729364 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.149113 0.184756 0.718528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.229087 0.224021 0.682285 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.22829 0.248268 0.686881 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.207937 0.234532 0.689486 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.216949 0.2391 0.666956 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.249439 0.237756 0.67968 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.238098 0.228589 0.659755 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.250236 0.213509 0.675083 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.240428 0.233189 0.702209 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.241225 0.208942 0.697613 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.220075 0.219453 0.704814 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.228199 0.159877 0.719322 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.229756 0.167942 0.742607 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.207683 0.16569 0.731771 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.223214 0.183484 0.72457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.250271 0.162129 0.730157 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.243729 0.177671 0.71212 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.248714 0.154064 0.706872 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.234741 0.144336 0.737359 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.233184 0.13627 0.714074 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.212668 0.142084 0.726523 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.129201 0.143787 0.689081 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.105335 0.14887 0.692853 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.115741 0.153943 0.671044 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.121723 0.167242 0.690969 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.118795 0.138714 0.71089 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.135183 0.157086 0.709006 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.142661 0.13363 0.707118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.112813 0.125414 0.690965 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.136679 0.120331 0.687193 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.123219 0.130487 0.669156 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.190359 0.102131 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.179968 0.0897843 0.711167 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.166467 0.105492 0.697727 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.183804 0.114103 0.713055 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.20386 0.0864233 0.705919 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.207696 0.110742 0.707807 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.214251 0.0987702 0.687231 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.186523 0.0778128 0.690591 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.196914 0.0901597 0.671903 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.173022 0.0935207 0.677151 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.153407 0.108529 0.6286 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.130858 0.0995811 0.624003 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.135326 0.123725 0.621398 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.134736 0.113639 0.643928 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.148938 0.0843858 0.631205 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.152816 0.0984435 0.65113 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.171487 0.0933338 0.635801 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.149528 0.0944715 0.608675 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.172078 0.10342 0.613272 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.153997 0.118615 0.60607 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.31427 0.31427 0.544331 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.277961 0.367156 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.269898 0.374298 0.485076 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.270045 0.350338 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.291334 0.362218 0.487134 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.277815 0.391115 0.501329 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.299251 0.379036 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.285878 0.383973 0.523547 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.256525 0.379235 0.505236 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.264588 0.372093 0.527454 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.256671 0.355276 0.511201 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.252306 0.297666 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.235688 0.305995 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.259438 0.312359 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.245915 0.321516 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.228556 0.291303 0.509559 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.238783 0.306824 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.245173 0.282974 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.242079 0.282145 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.258696 0.273816 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.265828 0.288509 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.31427 0.31427 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.32435 0.32435 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.33812 0.32066 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.32066 0.33812 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.3005 0.317959 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.29681 0.331729 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.29042 0.307879 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.317959 0.3005 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.307879 0.29042 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.331729 0.29681 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.339925 0.383759 0.544331 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.334762 0.407156 0.538366 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.31686 0.392275 0.546597 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.326552 0.388696 0.524171 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.357827 0.39864 0.536101 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.349618 0.380181 0.521905 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.362991 0.375243 0.542066 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.348135 0.402218 0.558526 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.353299 0.378821 0.564491 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.330233 0.387337 0.566757 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.376234 0.330873 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.393346 0.348239 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.383366 0.345565 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.369843 0.354723 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.386213 0.333547 0.484868 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.362711 0.340031 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.369102 0.316181 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.399736 0.324389 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.382624 0.307023 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.389757 0.321715 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.376234 0.330873 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.386461 0.346394 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.362711 0.340031 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.369843 0.354723 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.399983 0.337237 0.579103 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.383366 0.345565 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.389757 0.321715 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.392851 0.322544 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.382624 0.307023 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.369102 0.316181 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.277961 0.367156 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.261966 0.385852 0.57931 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.259422 0.36581 0.565115 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.278159 0.38141 0.561208 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.280504 0.387198 0.595564 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.296698 0.382755 0.577461 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.2965 0.368501 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.261768 0.371598 0.599471 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.277764 0.352901 0.601529 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.259225 0.351556 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.31427 0.31427 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.304189 0.32435 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.29042 0.32066 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.307879 0.33812 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.328039 0.317959 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.331729 0.331729 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.33812 0.307879 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.31058 0.3005 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.32066 0.29042 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.29681 0.29681 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.252306 0.297666 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.228803 0.30415 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.238783 0.306824 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.245915 0.321516 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.242326 0.294992 0.603794 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.259438 0.312359 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.265828 0.288509 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.235194 0.2803 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.258696 0.273816 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.245173 0.282974 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.574159 0.153845 0.618405 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.612768 0.202534 0.658726 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.612732 0.225282 0.668328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.591695 0.212428 0.666956 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.60221 0.22113 0.64638 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.633805 0.215388 0.660098 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.623283 0.211236 0.63815 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.63384 0.192641 0.650495 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.62329 0.206686 0.680674 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.623325 0.183939 0.671072 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.602253 0.193832 0.679302 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.543919 0.184086 0.678886 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.527458 0.200547 0.687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.522843 0.187702 0.666541 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.540303 0.205161 0.666541 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.548533 0.196931 0.699462 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.561378 0.201546 0.678886 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.564994 0.18047 0.691232 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.531074 0.179472 0.699462 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.547535 0.163011 0.691232 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.526459 0.166627 0.678886 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.554987 0.225396 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.542885 0.243024 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.534333 0.219861 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.554987 0.225396 0.593714 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.563539 0.248559 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.575642 0.23093 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.575642 0.23093 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.542885 0.243024 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.554987 0.225396 0.643096 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.534333 0.219861 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.643008 0.172294 0.598245 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.660425 0.189742 0.599616 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.645434 0.185725 0.618821 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.636618 0.196144 0.598245 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.657999 0.17631 0.57904 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.634191 0.182712 0.577669 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.640582 0.158862 0.577669 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.666816 0.165892 0.599616 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.649399 0.148444 0.598245 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.651825 0.161875 0.618821 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.585228 0.195155 0.557924 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.574809 0.203972 0.537348 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.561378 0.201546 0.557924 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.568784 0.181486 0.545578 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.598659 0.197581 0.537348 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.592634 0.175095 0.545578 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.609078 0.188764 0.557924 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.591253 0.217641 0.549693 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.601672 0.208824 0.57027 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.577822 0.215215 0.57027 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.6044 0.123605 0.557924 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.620861 0.107144 0.549693 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.608016 0.102529 0.57027 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.625475 0.119989 0.57027 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.617245 0.128219 0.537348 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.621859 0.141064 0.557924 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.600784 0.14468 0.545578 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.599785 0.11076 0.537348 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.583324 0.127221 0.545578 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.58694 0.106145 0.557924 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.631939 0.130984 0.658726 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.643128 0.132649 0.680674 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.618482 0.133263 0.679302 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.631785 0.152367 0.671072 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.656585 0.130371 0.660098 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.645242 0.150088 0.650495 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.645397 0.128706 0.63815 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.643283 0.111266 0.668328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.632094 0.109601 0.64638 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.618637 0.11188 0.666956 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.593331 0.0822954 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.591664 0.0609772 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.572676 0.076761 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.593331 0.0822954 0.643096 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.612319 0.0665116 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.613986 0.0878298 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.613986 0.0878298 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.591664 0.0609772 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.593331 0.0822954 0.593714 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.572676 0.076761 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.56309 0.112536 0.678886 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.549659 0.11011 0.699462 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.53924 0.118927 0.678886 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555684 0.132596 0.691232 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.573509 0.103719 0.699462 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.579534 0.126205 0.691232 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.58694 0.106145 0.678886 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.557065 0.09005 0.687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.570497 0.0924762 0.666541 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.546646 0.0988668 0.666541 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.494808 0.247614 0.43322 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.494287 0.313607 0.399581 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.484182 0.326876 0.381374 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.470513 0.310432 0.39372 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.488171 0.302705 0.378288 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.507957 0.330051 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.511946 0.305881 0.384149 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.518062 0.316783 0.405442 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.490299 0.337778 0.402668 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.500404 0.324509 0.420874 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.476629 0.321334 0.415013 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.452978 0.302539 0.460062 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.436971 0.320401 0.454201 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.436675 0.29902 0.441856 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.455413 0.3148 0.438769 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.453274 0.32392 0.472408 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.471717 0.318318 0.456976 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.469281 0.306057 0.478269 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.434535 0.30814 0.475494 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.450543 0.290278 0.481355 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.434239 0.286759 0.463149 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.434629 0.269833 0.396183 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.426389 0.279233 0.37489 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.445377 0.263449 0.37489 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.448298 0.286276 0.383837 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.415641 0.285616 0.396183 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.43755 0.29266 0.40513 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.42388 0.276216 0.417476 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.41272 0.262789 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.420959 0.253389 0.408529 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.431707 0.247006 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.536117 0.258683 0.372739 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.549787 0.275127 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.549787 0.275127 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.529727 0.282533 0.372739 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.536117 0.258683 0.348047 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.516058 0.266089 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.522448 0.242239 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.556177 0.251277 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.542508 0.234833 0.372739 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.556177 0.251277 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.476459 0.214908 0.369341 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.457868 0.209819 0.353908 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.458164 0.2312 0.366254 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.453963 0.210053 0.378288 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.476163 0.193527 0.356995 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.472258 0.193761 0.381374 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.494753 0.198616 0.372427 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.480363 0.214674 0.344961 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.498954 0.219763 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.480659 0.236055 0.357307 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.536638 0.19269 0.406378 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.549603 0.17251 0.412239 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.528912 0.177908 0.424584 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.549105 0.191778 0.427671 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.557329 0.187292 0.394032 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.556831 0.20656 0.409464 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.544363 0.207471 0.388171 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.537136 0.173421 0.390945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.524171 0.193601 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.516445 0.178819 0.403291 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.554467 0.291389 0.436618 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.562288 0.314604 0.439705 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.542501 0.306499 0.45205 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.541186 0.310183 0.427671 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.574255 0.299494 0.424272 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.553152 0.295073 0.412239 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.566433 0.276279 0.421186 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.575569 0.29581 0.448652 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.567748 0.272595 0.445566 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555781 0.287705 0.460998 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.554987 0.225396 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.567359 0.227186 0.49155 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.54267 0.227528 0.49155 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555283 0.246777 0.482603 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.579676 0.225054 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.567601 0.244644 0.46131 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.567305 0.223263 0.448964 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.567063 0.205805 0.479204 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.554691 0.204014 0.457911 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.542374 0.206147 0.479204 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.513157 0.28032 0.497099 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.507811 0.298839 0.512531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.489718 0.287442 0.500186 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.505577 0.302049 0.488152 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.531251 0.291716 0.509445 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.529016 0.294927 0.485065 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.536597 0.273198 0.494013 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.515392 0.27711 0.521479 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.520738 0.258591 0.506047 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.497299 0.265714 0.509133 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.552323 0.0329639 0.43322 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.625877 0.0248832 0.436618 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.646362 0.0316054 0.448652 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.625173 0.0287309 0.460998 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.627981 0.0478 0.445566 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.647066 0.0277577 0.424272 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.628685 0.0439523 0.421186 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.62658 0.0210355 0.412239 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.644258 0.00868865 0.439705 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.623773 0.00196644 0.427671 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.623069 0.00581415 0.45205 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.584567 0.0138144 0.497099 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.584898 0.0177119 0.521479 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.56353 0.0185345 0.509133 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.580268 0.0364224 0.506047 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.605935 0.0129918 0.509445 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.601305 0.0317022 0.494013 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.605605 0.00909422 0.485065 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.589197 -0.00489609 0.512531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.588867 -0.00879364 0.488152 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.567829 -0.00407348 0.500186 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.593331 0.0822954 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.593994 0.105299 0.479204 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.572783 0.0926585 0.479204 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.582384 0.100664 0.457911 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.614541 0.0949359 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.602932 0.090301 0.448964 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.613879 0.0719323 0.46131 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.604941 0.0869303 0.49155 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.604278 0.0639267 0.482603 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.58373 0.0742898 0.49155 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.593633 0.0440327 0.372739 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.607302 0.0604766 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.607302 0.0604766 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.587242 0.0678827 0.372739 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.593633 0.0440327 0.348047 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.573573 0.0514389 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.579964 0.0275889 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.613693 0.0366265 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.600023 0.0201827 0.372739 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.613693 0.0366265 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.561087 0.101445 0.406378 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.551884 0.118381 0.390945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.536664 0.103361 0.403291 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.550745 0.0944221 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.576307 0.116465 0.394032 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.575168 0.0925065 0.388171 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.58551 0.0995293 0.409464 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.562225 0.125404 0.412239 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.571428 0.108468 0.427671 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.547006 0.110383 0.424584 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.520079 0.0521134 0.369341 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.523344 0.0542684 0.344961 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.534291 0.0358996 0.357307 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.541988 0.0591566 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.509132 0.0704822 0.356995 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.527777 0.0753703 0.372427 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.505868 0.0683272 0.381374 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.501435 0.0472252 0.353908 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.49817 0.0450702 0.378288 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.512382 0.0288565 0.366254 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.584869 -0.0244483 0.399581 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.5935 -0.0473753 0.402668 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.57344 -0.0399691 0.415013 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.595617 -0.0308315 0.420874 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.604929 -0.0318545 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.607046 -0.0153107 0.405442 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.596298 -0.00892756 0.384149 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.582752 -0.0409921 0.381374 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.574121 -0.0180651 0.378288 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.562692 -0.0335859 0.39372 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.511316 -0.0163676 0.396183 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.48882 -0.0212225 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.497372 0.00194055 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.491256 -0.00896145 0.408529 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.502764 -0.0395307 0.396183 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.505199 -0.0272696 0.417476 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.525259 -0.0346758 0.40513 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.50888 -0.0286287 0.37489 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.531375 -0.0237738 0.383837 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.517432 -0.00546563 0.37489 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.54356 -0.0355172 0.460062 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.530389 -0.0495897 0.475494 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.519442 -0.031221 0.463149 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.53532 -0.0261165 0.481355 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.554507 -0.0538859 0.472408 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.559438 -0.0304127 0.478269 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.567678 -0.0398133 0.456976 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.538628 -0.0589904 0.454201 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.551799 -0.0449178 0.438769 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.527681 -0.0406217 0.441856 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.451136 0.0058509 0.729516 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.447081 0.0051487 0.803476 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.435909 0.01504 0.823149 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.423265 0.0115452 0.802231 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.440694 0.0289993 0.803352 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.459725 0.00864346 0.824394 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.46451 0.0226028 0.804597 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.470897 -0.0012478 0.804721 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.442297 -0.00881065 0.823273 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.453468 -0.0187019 0.8036 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.429652 -0.0123054 0.802355 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.386138 0.0172804 0.763155 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.364644 0.0293677 0.76191 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.375512 0.0213457 0.741241 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.385352 0.0401449 0.753867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.37527 0.0253024 0.783824 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.395978 0.0360796 0.775781 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.396764 0.0132151 0.785069 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.36543 0.0065032 0.771198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.386924 -0.00558411 0.772443 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.376298 -0.00151881 0.750529 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.439178 0.0688765 0.766553 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.426942 0.0903221 0.766429 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.416328 0.0699989 0.757266 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.435083 0.0806307 0.745229 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.449792 0.0891998 0.775717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.457933 0.0795084 0.754517 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.462029 0.0677542 0.775841 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.431037 0.078568 0.787754 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.443274 0.0571224 0.787878 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.420423 0.0582447 0.77859 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.512079 -0.00628079 0.769837 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.523883 -0.000557006 0.790755 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.49924 -0.00208214 0.790506 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.51057 0.0165974 0.779001 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.536722 -0.00475566 0.770086 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.523409 0.0123987 0.758332 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.524918 -0.0104794 0.749168 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.525392 -0.0234352 0.781591 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.513588 -0.029159 0.760673 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.500749 -0.0249603 0.781342 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.504176 0.0574471 0.732914 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.508666 0.0817008 0.734036 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.488971 0.0722467 0.745541 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.489545 0.0732807 0.720878 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.523872 0.0669012 0.72141 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.504751 0.058481 0.708251 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.519382 0.0426474 0.720288 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.523298 0.0658672 0.746073 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.518808 0.0416134 0.744951 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.503602 0.0564131 0.757577 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.516134 -0.00557859 0.695877 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.540463 -0.00154892 0.697123 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.52751 -0.00538221 0.717791 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.524673 0.0156462 0.705165 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.529087 -0.00174531 0.675209 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.513298 0.0154498 0.683251 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.504759 -0.00577498 0.673964 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.531924 -0.0227737 0.687835 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.507596 -0.0268034 0.68659 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.518971 -0.026607 0.708504 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.459039 -0.0578769 0.766439 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.451803 -0.0707378 0.786236 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.435761 -0.0561039 0.774481 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.454158 -0.0461991 0.787639 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.475081 -0.0725109 0.778193 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.477435 -0.0479721 0.779597 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.482316 -0.05965 0.758396 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.456685 -0.0824157 0.765035 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.46392 -0.0695548 0.745238 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.440643 -0.0677817 0.753281 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.463094 -0.0571747 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.459563 -0.081612 0.692603 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.442243 -0.0665888 0.701767 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.463589 -0.0696122 0.713804 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.480415 -0.0721979 0.683315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.48444 -0.0601982 0.704516 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.483946 -0.0477607 0.683192 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.459069 -0.0691745 0.671279 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.4626 -0.0447373 0.671155 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.441749 -0.0541513 0.680442 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.398096 -0.0457452 0.726118 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.373728 -0.0495643 0.724997 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.383722 -0.030137 0.713492 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.382672 -0.0306825 0.738155 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.388102 -0.0651725 0.737623 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.397047 -0.0462908 0.750781 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.41247 -0.0613535 0.738744 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.389151 -0.064627 0.71296 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.41352 -0.060808 0.714081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.399146 -0.0451997 0.701455 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.4293 -0.115031 0.544331 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.424299 -0.178985 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.412497 -0.190929 0.599471 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.400273 -0.174844 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.417001 -0.16674 0.601529 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.436523 -0.195071 0.595564 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.441027 -0.170881 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.448325 -0.183127 0.577461 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.419795 -0.203175 0.57931 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.431597 -0.191231 0.561208 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.407571 -0.18709 0.565115 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.367336 -0.131634 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.343834 -0.12515 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.353814 -0.122476 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.360946 -0.107784 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.357357 -0.134308 0.603794 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.374468 -0.116942 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.380859 -0.140792 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.350225 -0.149 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.373727 -0.155484 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.360204 -0.146326 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.4293 -0.115031 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.41922 -0.10495 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.40545 -0.10864 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.42291 -0.0911807 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.44307 -0.111341 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.44676 -0.0975713 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.45315 -0.121421 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.425611 -0.128801 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.435691 -0.138881 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.411841 -0.13249 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.486264 -0.162382 0.544331 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.502603 -0.174264 0.558526 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.479659 -0.170327 0.566757 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.495376 -0.15142 0.564491 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.509207 -0.166319 0.536101 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.501981 -0.143475 0.542066 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.492868 -0.154437 0.521905 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.49349 -0.185226 0.538366 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.477151 -0.173345 0.524171 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.470546 -0.18129 0.546597 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.491265 -0.0984274 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.501491 -0.082906 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.477742 -0.0892696 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.484874 -0.0745774 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.515014 -0.0920638 0.579103 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.498397 -0.0837352 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.504787 -0.107585 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.507882 -0.106756 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.497655 -0.122277 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.484132 -0.11312 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.491265 -0.0984274 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.508376 -0.0810612 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.498397 -0.0837352 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.484874 -0.0745774 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.501244 -0.0957534 0.484868 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.477742 -0.0892696 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.484132 -0.11312 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.514767 -0.104911 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.497655 -0.122277 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.504787 -0.107585 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.424299 -0.178985 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.411775 -0.200165 0.505236 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.399922 -0.179342 0.511201 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.415187 -0.189948 0.527454 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.436152 -0.199808 0.501329 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.439564 -0.189591 0.523547 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.448677 -0.178629 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.420888 -0.189202 0.485076 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.433412 -0.168023 0.487134 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.409035 -0.168379 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.4293 -0.115031 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.439381 -0.10495 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.45315 -0.10864 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.435691 -0.0911807 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.415531 -0.111341 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.411841 -0.0975713 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.40545 -0.121421 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.43299 -0.128801 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.42291 -0.138881 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.44676 -0.13249 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.367336 -0.131634 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.350719 -0.123305 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.374468 -0.116942 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.360946 -0.107784 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.343587 -0.137998 0.509559 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.353814 -0.122476 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.360204 -0.146326 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.357109 -0.147155 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.373727 -0.155484 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.380859 -0.140792 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.248762 -0.0483751 0.655442 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.183785 -0.0599222 0.689081 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.160406 -0.0522053 0.690965 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.171954 -0.0513956 0.669156 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.178533 -0.0358698 0.687193 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.172236 -0.0607319 0.71089 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.190363 -0.0443964 0.707118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.195615 -0.0684488 0.709006 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.165658 -0.0762577 0.692853 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.189036 -0.0839747 0.690969 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.177206 -0.075448 0.671044 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.187119 -0.0172857 0.6286 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.176731 -0.00705049 0.608675 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.192673 -0.025725 0.60607 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.200733 -0.00352517 0.613272 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.171177 0.00138875 0.631205 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.195179 0.00491406 0.635801 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.181564 -0.00884647 0.65113 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.163117 -0.020811 0.624003 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.173504 -0.0310463 0.643928 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.179058 -0.0394855 0.621398 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.215921 0.00673113 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.20044 0.0258737 0.690591 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.196602 0.00551963 0.677151 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.215612 0.0203763 0.671903 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.21976 0.0270852 0.705919 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.234932 0.0215878 0.687231 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.235241 0.00794264 0.707807 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.200749 0.0122285 0.711167 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.21623 -0.00691403 0.713055 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.196911 -0.00812553 0.697727 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.245428 -0.0910116 0.715923 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.234308 -0.0942304 0.737733 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.221514 -0.0854464 0.718528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.238704 -0.0714204 0.729364 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.258223 -0.0997955 0.735128 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.262619 -0.0769856 0.726759 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.269343 -0.0965768 0.713318 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.241032 -0.113822 0.724292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.252152 -0.110603 0.702483 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.228237 -0.105038 0.705088 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.277564 -0.0243582 0.719322 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.275459 -0.0076281 0.737359 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.255218 -0.0167139 0.726523 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.270078 -0.00142185 0.714074 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.297806 -0.0152725 0.730157 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.292425 -0.00906621 0.706872 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.299911 -0.0320026 0.71212 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.282946 -0.0305645 0.742607 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.285051 -0.0472946 0.72457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.262704 -0.0396503 0.731771 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.310405 -0.0794645 0.682285 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.324811 -0.0817333 0.702209 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.300317 -0.0800146 0.704814 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.313378 -0.0603366 0.697613 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.334899 -0.0811832 0.67968 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.323466 -0.0597864 0.675083 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.320493 -0.0789143 0.659755 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.321838 -0.100861 0.686881 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.307433 -0.0985923 0.666956 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.297345 -0.0991425 0.689486 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.216626 -0.115028 0.652044 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.195663 -0.127519 0.655816 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.194866 -0.104303 0.647447 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.201738 -0.108803 0.670732 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.217423 -0.138245 0.660413 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.223497 -0.119529 0.675329 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.238386 -0.125754 0.656641 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.210551 -0.133744 0.637128 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.231514 -0.121254 0.633356 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.209754 -0.110528 0.628759 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.281603 -0.103481 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.291073 -0.126206 0.620293 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.271345 -0.119897 0.633733 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.293457 -0.110246 0.638981 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.301332 -0.10979 0.604965 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.303716 -0.0938302 0.623653 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.291862 -0.0870656 0.603077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.279219 -0.119442 0.599717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.269749 -0.0967168 0.597829 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.25949 -0.113132 0.613157 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.21996 -0.0723919 0.591563 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.20388 -0.0673141 0.573526 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.216456 -0.0490355 0.584361 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.198742 -0.0609052 0.596811 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.207384 -0.0906706 0.580727 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.202246 -0.0842617 0.604012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.223463 -0.0957484 0.598764 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.225098 -0.0788008 0.568278 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.241177 -0.0838786 0.586315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.237674 -0.0605222 0.579113 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.471405 0.471405 1.11022e-16 RAD 0.166667
+ txt002
+ SPHERE CENTER -0.508983 0.690426 8.51251e-17 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.484794 0.755941 -0.0246914 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.47411 0.767658 -0.0436186 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.467528 0.744501 -0.0381316 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.489758 0.749038 -0.0478724 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.491377 0.779098 -0.0301783 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.507025 0.760478 -0.0344321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.502061 0.767382 -0.0112511 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.469146 0.774562 -0.0204376 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.47983 0.762845 -0.00151032 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.462564 0.751405 -0.0149506 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.436283 0.7029 -0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.418941 0.714226 -0.0202367 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.43889 0.704751 -0.0312799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.44101 0.724842 -0.0170845 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.416335 0.712374 0.0042468 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.438403 0.722991 0.00739901 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.433677 0.701048 0.0176871 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.414215 0.692283 -0.00994863 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.431557 0.680957 0.00349164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.434163 0.682808 -0.0209919 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.478434 0.695668 -0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.481931 0.703418 -0.0904587 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.500827 0.694124 -0.0775657 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.491475 0.716184 -0.0716007 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.459538 0.704962 -0.0801706 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.469082 0.717727 -0.0613127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.456041 0.697211 -0.0569896 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.46889 0.682902 -0.0861356 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.465393 0.675152 -0.0629546 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.487786 0.673608 -0.0732426 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.557494 0.743468 -0.0178949 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.560084 0.767402 -0.0233819 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.543179 0.760285 -0.00685171 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.53997 0.755145 -0.0307879 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.574398 0.750585 -0.0344251 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.554284 0.738328 -0.0418311 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.571808 0.726651 -0.0289382 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.577608 0.755725 -0.0104889 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.575017 0.731791 -0.00500196 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.560703 0.748608 0.00604126 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.551134 0.683194 -0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.573364 0.687731 -0.070222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.571303 0.682033 -0.0462858 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.56324 0.703871 -0.0545162 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.553195 0.688893 -0.0844174 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.543071 0.705033 -0.0687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.530964 0.684356 -0.0746767 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.561258 0.667055 -0.076187 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.539027 0.662518 -0.0664462 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.559196 0.661356 -0.0522508 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.581682 0.677953 0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.601808 0.682851 0.0202367 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.579842 0.680568 0.0312799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.58454 0.700216 0.0170845 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.603648 0.680237 -0.0042468 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.58638 0.697602 -0.00739901 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.583522 0.675339 -0.0176871 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.59895 0.660588 0.00994863 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.578824 0.65569 -0.00349164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.576984 0.658304 0.0209919 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.515343 0.7507 0.0425863 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.506594 0.773394 0.0468401 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.491321 0.755462 0.0394341 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.507924 0.764807 0.0237283 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.530616 0.768632 0.0499923 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.531946 0.760045 0.0268805 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.539365 0.745938 0.0457385 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.514012 0.759287 0.065698 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.522762 0.736593 0.0614442 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.49874 0.741355 0.058292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.539531 0.685185 0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.538818 0.693658 0.0904587 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.517905 0.691194 0.0775657 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.534075 0.708875 0.0716007 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.560445 0.687649 0.0801706 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555702 0.702866 0.0613127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.561158 0.679176 0.0569896 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.544274 0.669969 0.0861356 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.544988 0.661495 0.0629546 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.523361 0.667505 0.0732426 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.466832 0.697658 0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.447385 0.709346 0.070222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.447429 0.703286 0.0462858 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.46231 0.721188 0.0545162 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.466788 0.703718 0.0844174 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.481713 0.71556 0.0687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.486235 0.692031 0.0746767 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.451907 0.685816 0.076187 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.471354 0.674129 0.0664462 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.451951 0.679757 0.0522508 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.335322 0.607487 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.283164 0.659645 0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.269894 0.672915 0.0882695 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.275822 0.649528 0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.293281 0.666987 0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.277236 0.683032 0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.300624 0.677104 0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.290507 0.669762 0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.259777 0.665573 0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.273047 0.652302 0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.265705 0.642185 0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.286452 0.603979 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.279361 0.614273 0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.303327 0.613293 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.288206 0.628413 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.262487 0.604959 0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.271332 0.619099 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.269578 0.594664 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.277607 0.589839 0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.284698 0.579544 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.301572 0.588858 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.33883 0.656357 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.328536 0.663448 0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.314396 0.654603 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.329516 0.639482 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.35297 0.665202 0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.353951 0.641237 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.363265 0.658111 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.33785 0.680322 0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.348145 0.673232 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.32371 0.671477 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.332034 0.663153 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.321274 0.684748 0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.308341 0.666888 0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.326131 0.678752 0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.344967 0.681014 0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.349824 0.675018 0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.355727 0.659419 0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.327177 0.669149 0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.337937 0.647554 0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.314244 0.651289 0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.3877 0.659866 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.391875 0.684201 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.37258 0.674986 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.37258 0.674986 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.406996 0.669081 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.3877 0.659866 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.40282 0.644745 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.406996 0.669081 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.40282 0.644745 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.3877 0.659866 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.384191 0.610996 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.389739 0.622198 0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.366159 0.617804 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.378964 0.63493 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.407771 0.61539 0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.396997 0.628121 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.402224 0.604188 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.394966 0.598265 0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.389418 0.587062 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.371386 0.593871 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.279656 0.610775 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.258061 0.621535 0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.264057 0.616678 0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.275921 0.634468 0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.27366 0.615632 0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.29152 0.628565 0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.295255 0.604872 0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.261795 0.597842 0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.28339 0.587082 0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.267791 0.592985 0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.331813 0.558618 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.320611 0.55307 0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.30788 0.563845 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.325005 0.57665 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.344544 0.547843 0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.348938 0.571423 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.355747 0.553391 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.327419 0.535038 0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.338621 0.540585 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.314688 0.545813 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.282943 0.555109 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.258608 0.550934 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.267823 0.570229 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.267823 0.570229 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.273728 0.535813 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.282943 0.555109 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.298064 0.539989 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.273728 0.535813 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.298064 0.539989 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.282943 0.555109 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.335322 0.607487 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.313405 0.629404 -0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.316595 0.626214 -0.202664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.318408 0.606941 -0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.335868 0.624401 -0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.311592 0.648676 -0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.330864 0.646863 -0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.308402 0.651867 -0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.294133 0.631217 -0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.290942 0.634407 -0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.295946 0.611945 -0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.331813 0.558618 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.319608 0.539107 -0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.307378 0.556863 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.322499 0.541743 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.344043 0.540862 -0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.346933 0.543497 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.356248 0.560372 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.328923 0.555982 -0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.341128 0.575492 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.316693 0.573738 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.384191 0.610996 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.403702 0.623201 -0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.401066 0.62031 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.385946 0.635431 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.386827 0.613886 -0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.369071 0.626116 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.367317 0.601681 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.401947 0.598766 -0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.382437 0.586561 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.399312 0.595876 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.316914 0.678274 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.305407 0.69384 -0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.296616 0.671002 -0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.317721 0.674446 -0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.325704 0.701111 -0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.338018 0.681717 -0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.337211 0.685545 -0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.3046 0.697667 -0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.316107 0.682101 -0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.295809 0.67483 -0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.3877 0.659866 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.391875 0.684201 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.37258 0.674986 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.37258 0.674986 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.406996 0.669081 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.3877 0.659866 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.40282 0.644745 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.406996 0.669081 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.40282 0.644745 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.3877 0.659866 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.33883 0.656357 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.329538 0.677411 -0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.314897 0.661584 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.332022 0.674389 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.353472 0.672184 -0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.355956 0.669162 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.362764 0.65113 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.336346 0.659378 -0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.345639 0.638325 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.321705 0.643552 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.264535 0.625895 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.248969 0.637402 -0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.268363 0.625088 -0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.271807 0.646193 -0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.245142 0.638209 -0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.267979 0.647 -0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.260708 0.626702 -0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.241698 0.617105 -0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.257264 0.605598 -0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.261092 0.604791 -0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.286452 0.603979 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.265398 0.613271 -0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.26842 0.610787 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.281225 0.627912 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.283431 0.606463 -0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.299257 0.621104 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.304484 0.59717 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.270625 0.589337 -0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.291679 0.580045 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.273647 0.586853 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.282943 0.555109 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.258608 0.550934 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.267823 0.570229 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.267823 0.570229 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.273728 0.535813 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.282943 0.555109 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.298064 0.539989 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.273728 0.535813 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.298064 0.539989 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.282943 0.555109 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.645066 0.554344 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.681385 0.616373 -0.129006 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.678928 0.639472 -0.137375 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.661636 0.629767 -0.122663 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.664108 0.621631 -0.145845 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.698678 0.626079 -0.143718 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.683858 0.608237 -0.152187 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.701135 0.602979 -0.135349 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.696205 0.634214 -0.120537 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.698662 0.611115 -0.112168 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.678912 0.624508 -0.105825 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.649723 0.609912 -0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.640648 0.631982 -0.0560094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.625749 0.614812 -0.0656463 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.64267 0.62585 -0.0798417 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.664623 0.627081 -0.0527151 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.666645 0.620949 -0.0765474 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.673698 0.605012 -0.0590577 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.647702 0.616044 -0.0385197 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.656777 0.593974 -0.0448623 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.632802 0.598874 -0.0481565 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.607573 0.617144 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.595495 0.63057 -0.139672 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.594239 0.605919 -0.140323 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.615286 0.617371 -0.146288 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.608828 0.641795 -0.122182 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.628619 0.628595 -0.128798 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.620906 0.628369 -0.105343 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.587782 0.630343 -0.116217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.59986 0.616917 -0.0993785 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.586526 0.605692 -0.116868 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.676727 0.560805 -0.177765 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.689897 0.57563 -0.192477 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.693998 0.575587 -0.168128 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.673115 0.585222 -0.177114 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.672626 0.560848 -0.202114 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.655844 0.57044 -0.186751 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.659456 0.546023 -0.187402 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.693509 0.551213 -0.193128 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.680339 0.536388 -0.178416 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.69761 0.55117 -0.16878 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.602915 0.561576 -0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.602201 0.570049 -0.194773 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.623084 0.560414 -0.185788 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.615021 0.582252 -0.177557 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.582032 0.571211 -0.180578 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.594852 0.583414 -0.163362 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.582745 0.562738 -0.157397 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.590095 0.549372 -0.188808 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.590808 0.540899 -0.165627 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.610978 0.539737 -0.179823 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.640408 0.498776 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.627785 0.478525 -0.166213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.615951 0.497935 -0.156576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.630799 0.484234 -0.142381 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.652241 0.479365 -0.169507 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.655255 0.485075 -0.145675 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.664864 0.499616 -0.163165 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.637394 0.493066 -0.183703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.650016 0.513317 -0.17736 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.62556 0.512476 -0.174066 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.718878 0.553573 -0.117284 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.73992 0.563328 -0.108814 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.720935 0.559693 -0.0934517 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.719679 0.577348 -0.110668 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.737863 0.557208 -0.132647 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.717623 0.571228 -0.1345 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.716821 0.547453 -0.141116 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.739118 0.539553 -0.115431 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.718076 0.529798 -0.1239 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.720133 0.535918 -0.100068 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.682558 0.491544 -0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.688647 0.474542 -0.0825505 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.666351 0.485132 -0.0818993 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.686417 0.498226 -0.0759343 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.704854 0.480953 -0.10004 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.702624 0.504637 -0.093424 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.698765 0.497955 -0.116879 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.684788 0.46786 -0.106005 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.678699 0.484862 -0.122844 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.662492 0.47845 -0.105354 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.687216 0.547112 -0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.690713 0.554862 -0.0274488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.667813 0.552739 -0.0364345 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.682694 0.570641 -0.0446649 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.710116 0.549235 -0.0416443 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.702097 0.565014 -0.0588603 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.706619 0.541484 -0.0648253 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.695235 0.531333 -0.0334138 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.691738 0.523582 -0.0565949 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.672335 0.52921 -0.0423994 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.471405 0.471405 -0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.501645 0.501645 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.499795 0.519956 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.493653 0.523893 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.479397 0.509638 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.507788 0.497708 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.48739 0.48739 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.509638 0.479397 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.522043 0.511963 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.523893 0.493653 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.515901 0.515901 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.542955 0.490576 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.559233 0.507719 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.539759 0.502501 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.536564 0.514426 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.562428 0.495794 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.539759 0.502501 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.54615 0.478651 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.565623 0.483869 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.549345 0.466726 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.54615 0.478651 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.490576 0.542955 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.483869 0.565623 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.466726 0.549345 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.478651 0.54615 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.507719 0.559233 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.502501 0.539759 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.514426 0.536564 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.495794 0.562428 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.502501 0.539759 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.478651 0.54615 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.430095 0.482473 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.430434 0.489762 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.449569 0.477255 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.445366 0.500519 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.41096 0.49498 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.425893 0.505737 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.410622 0.487691 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.415162 0.471716 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.414824 0.464428 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.434297 0.45921 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.419026 0.523783 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.404771 0.538038 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.410297 0.515053 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.427756 0.532513 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.4135 0.546768 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.436486 0.541242 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.427756 0.532513 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.396041 0.529309 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.410297 0.515053 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.401567 0.506323 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.399854 0.452233 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.377186 0.45894 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.396659 0.464158 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.393464 0.476083 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.380381 0.447015 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.396659 0.464158 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.40305 0.440308 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.383576 0.43509 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.406245 0.428383 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.40305 0.440308 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.482473 0.430095 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.48121 0.407271 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.464428 0.414824 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.487691 0.410622 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.499256 0.422542 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.505737 0.425893 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.500519 0.445366 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.475992 0.426744 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.477255 0.449569 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.45921 0.434297 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.452233 0.399854 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.43509 0.383576 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.428383 0.406245 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.440308 0.40305 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.45894 0.377186 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.464158 0.396659 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.476083 0.393464 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.447015 0.380381 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.464158 0.396659 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.440308 0.40305 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.523783 0.419026 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.538038 0.404771 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.515053 0.410297 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.532513 0.427756 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.546768 0.4135 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.541242 0.436486 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.532513 0.427756 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.529309 0.396041 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.515053 0.410297 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.506323 0.401567 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.607487 0.335322 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.659645 0.283164 -0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.672915 0.269894 -0.0882695 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.649528 0.275822 -0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.666987 0.293281 -0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.683032 0.277236 -0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.677104 0.300624 -0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.669762 0.290507 -0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.665573 0.259777 -0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.652302 0.273047 -0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.642185 0.265705 -0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.603979 0.286452 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.592776 0.280905 -0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.580045 0.291679 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.59717 0.304484 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.61671 0.275678 -0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.621104 0.299257 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.627912 0.281225 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.599585 0.262872 -0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.610787 0.26842 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.586853 0.273647 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.656357 0.33883 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.661904 0.350033 -0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.638325 0.345639 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.65113 0.362764 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.679937 0.343224 -0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.669162 0.355956 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.674389 0.332022 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.667131 0.326099 -0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.661584 0.314897 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.643552 0.321705 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.663153 0.332034 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.685865 0.340177 -0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.679339 0.33606 -0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.669651 0.355123 -0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.669679 0.336151 -0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.653465 0.351097 -0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.646968 0.328008 -0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.679367 0.317089 -0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.656656 0.308945 -0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.672841 0.312971 -0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.659866 0.3877 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.664041 0.412036 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.644745 0.40282 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.644745 0.40282 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.679161 0.396915 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.659866 0.3877 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.674986 0.37258 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.679161 0.396915 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.674986 0.37258 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.659866 0.3877 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.610996 0.384191 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.600701 0.391282 -0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.586561 0.382437 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.601681 0.367317 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.625136 0.393037 -0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.626116 0.369071 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.635431 0.385946 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.610016 0.408157 -0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.62031 0.401066 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.595876 0.399312 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.610775 0.279656 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.602632 0.256944 -0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.587686 0.273158 -0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.606749 0.26347 -0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.62572 0.263442 -0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.629838 0.269968 -0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.633864 0.286153 -0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.606658 0.27313 -0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.614801 0.295841 -0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.591712 0.289344 -0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.558618 0.331813 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.551527 0.342108 -0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.575492 0.341128 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.560372 0.356248 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.534652 0.332793 -0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.543497 0.346933 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.541743 0.322499 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.549772 0.317673 -0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.556863 0.307378 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.573738 0.316693 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555109 0.282943 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.530773 0.278768 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.539989 0.298064 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.539989 0.298064 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.545894 0.263648 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555109 0.282943 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.570229 0.267823 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.545894 0.263648 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.570229 0.267823 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555109 0.282943 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.645066 0.554344 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.668521 0.610229 0.153697 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.663938 0.633406 0.160875 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.64522 0.617928 0.156428 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.65892 0.626429 0.137727 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.687239 0.625707 0.158144 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.682221 0.61873 0.134996 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.691822 0.602531 0.150967 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.673539 0.617206 0.176845 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.678123 0.59403 0.169668 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.654822 0.601728 0.172398 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.598918 0.585648 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.580238 0.601562 0.162601 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.581665 0.587563 0.142311 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.59781 0.605914 0.14581 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.597491 0.599646 0.18016 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.615063 0.603999 0.163369 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.616171 0.583732 0.177429 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.581346 0.581295 0.176661 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.600026 0.565381 0.173931 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.582773 0.567297 0.156372 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.619787 0.622977 0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.608008 0.63767 0.0834188 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.601637 0.613891 0.0853287 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.623239 0.620102 0.0751099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.626157 0.646756 0.0974792 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.641389 0.629188 0.0891702 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.637936 0.632063 0.113449 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.604555 0.640545 0.107698 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.616334 0.625852 0.123668 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.598184 0.616766 0.109608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.714669 0.578925 0.104938 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.729812 0.597914 0.109385 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.711617 0.592661 0.125228 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.70632 0.602084 0.103028 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.732864 0.584178 0.0890951 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.709372 0.588348 0.0827387 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.71772 0.565189 0.0846485 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.738161 0.574755 0.111295 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.723017 0.555767 0.106848 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.719965 0.569503 0.127138 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.665934 0.591673 0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.658095 0.605761 0.0319289 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.647455 0.607672 0.0541285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.643855 0.58746 0.0404111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.676573 0.589763 0.0284303 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.662334 0.571461 0.0369125 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.684413 0.575674 0.0471312 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.680174 0.609975 0.0421477 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.688013 0.595887 0.0608487 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.669535 0.611885 0.0643473 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.691213 0.52304 0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.712906 0.511567 0.0596212 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.699372 0.507717 0.079911 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.710453 0.529503 0.0764123 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.704747 0.526889 0.0420622 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.702295 0.544826 0.0588533 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.683054 0.538362 0.044793 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.693665 0.505104 0.0455609 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.671972 0.516576 0.0482916 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.680131 0.501254 0.0658506 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.6938 0.541596 0.165419 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.70016 0.547376 0.188567 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.676324 0.546319 0.182211 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.690564 0.564621 0.173728 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.717636 0.542652 0.171776 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.70804 0.559898 0.156937 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.711276 0.536873 0.148628 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.703396 0.524351 0.180258 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.697037 0.518571 0.157111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.679561 0.523294 0.173902 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.670344 0.48571 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.67091 0.466887 0.138803 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.650637 0.480853 0.136894 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.671107 0.490138 0.147112 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.690617 0.471745 0.124743 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.690815 0.494995 0.133052 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.690052 0.490567 0.108773 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.670147 0.46246 0.114524 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.669581 0.481283 0.0985541 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.649874 0.476425 0.112614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.624197 0.517014 0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.60809 0.516313 0.190293 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.60089 0.524375 0.168094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.616221 0.538029 0.181811 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.631397 0.508952 0.193792 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.639529 0.530668 0.18531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.647504 0.509653 0.175091 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.616065 0.495298 0.180075 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.632172 0.495999 0.161374 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.608865 0.50336 0.157875 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.607487 0.335322 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.629404 0.313405 0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.626214 0.316595 0.202664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.606941 0.318408 0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.624401 0.335868 0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.648676 0.311592 0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.646863 0.330864 0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.651867 0.308402 0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.631217 0.294133 0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.634407 0.290942 0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.611945 0.295946 0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.558618 0.331813 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.537564 0.341105 0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.540585 0.338621 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.553391 0.355747 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555596 0.334297 0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.571423 0.348938 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.57665 0.325005 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.542791 0.317172 0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.563845 0.30788 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.545813 0.314688 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.610996 0.384191 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.601704 0.405245 0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.587062 0.389418 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.604188 0.402224 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.625637 0.400018 0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.628121 0.396997 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.63493 0.378964 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.608512 0.387213 0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.617804 0.366159 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.593871 0.371386 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.678274 0.316914 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.697473 0.31938 0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.674538 0.318074 0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.681812 0.338182 0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.701209 0.31822 0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.685547 0.337022 0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.682009 0.315754 0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.693935 0.298112 0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.674736 0.295646 0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.671 0.296805 0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.659866 0.3877 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.664041 0.412036 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.644745 0.40282 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.644745 0.40282 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.679161 0.396915 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.659866 0.3877 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.674986 0.37258 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.679161 0.396915 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.674986 0.37258 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.659866 0.3877 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.656357 0.33883 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.675867 0.351035 0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.673232 0.348145 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.658111 0.363265 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.658993 0.341721 0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.641237 0.353951 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.639482 0.329516 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.674113 0.3266 0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.654603 0.314396 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.671477 0.32371 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.625895 0.264535 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.623429 0.245336 0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.604627 0.260997 0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.624736 0.268271 0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.644697 0.248874 0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.646004 0.271809 0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.647163 0.268073 0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.624589 0.2416 0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.627055 0.2608 0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.605787 0.257262 0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.603979 0.286452 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.591774 0.266942 0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.579544 0.284698 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.594664 0.269578 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.616209 0.268696 0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.619099 0.271332 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.628413 0.288206 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.601088 0.283817 0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.613293 0.303327 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.588858 0.301572 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555109 0.282943 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.530773 0.278768 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.539989 0.298064 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.539989 0.298064 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.545894 0.263648 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555109 0.282943 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.570229 0.267823 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.545894 0.263648 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.570229 0.267823 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555109 0.282943 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.471405 0.471405 0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.441164 0.501645 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.424703 0.518106 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.420089 0.505261 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.437548 0.522721 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.445778 0.51449 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.458623 0.519105 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.462239 0.498029 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.428319 0.497031 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.44478 0.48057 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.423704 0.484186 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.399854 0.490576 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.382226 0.502679 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.399854 0.490576 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.405389 0.511231 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.382226 0.502679 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.405389 0.511231 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.399854 0.490576 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.376691 0.482024 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.39432 0.469922 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.39432 0.469922 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.452233 0.542955 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.44013 0.560583 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.431578 0.53742 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.452233 0.542955 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.460785 0.566118 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.472887 0.548489 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.472887 0.548489 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.44013 0.560583 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.452233 0.542955 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.431578 0.53742 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.512714 0.482473 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.51514 0.495905 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.492654 0.48988 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.506323 0.506323 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.5352 0.488498 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.526383 0.498917 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.532774 0.475067 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.521531 0.472055 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.519105 0.458623 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.499045 0.46603 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.523783 0.523783 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.527958 0.548119 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.508662 0.538903 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.508662 0.538903 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.543078 0.532998 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.523783 0.523783 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.538903 0.508662 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.543078 0.532998 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.538903 0.508662 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.523783 0.523783 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.542955 0.452233 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.564273 0.4539 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.542955 0.452233 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.548489 0.472887 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.564273 0.4539 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.548489 0.472887 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.542955 0.452233 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.558738 0.433245 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.53742 0.431578 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.53742 0.431578 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.460336 0.430095 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.446904 0.427669 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.436486 0.436486 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.45293 0.450155 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.470754 0.421278 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.47678 0.443764 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.484186 0.423704 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.454311 0.407609 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.467742 0.410035 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.443892 0.416426 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.490576 0.399854 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.488909 0.378536 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.469922 0.39432 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.490576 0.399854 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.509564 0.384071 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.511231 0.405389 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.511231 0.405389 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.488909 0.378536 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.490576 0.399854 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.469922 0.39432 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.419026 0.419026 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.39469 0.414851 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.403906 0.434147 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.403906 0.434147 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.409811 0.399731 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.419026 0.419026 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.434147 0.403906 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.409811 0.399731 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.434147 0.403906 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.419026 0.419026 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.643951 -0.172546 1.11022e-16 RAD 0.166667
+ txt002
+ SPHERE CENTER -0.835815 -0.157543 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.871646 -0.122136 0.165419 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.871334 -0.102403 0.180258 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.850164 -0.113406 0.173902 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.862937 -0.100577 0.157111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.892817 -0.111133 0.171776 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.884419 -0.109307 0.148628 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.893129 -0.130866 0.156937 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.880044 -0.123961 0.188567 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.880356 -0.143694 0.173728 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.858873 -0.134964 0.182211 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.799077 -0.135649 0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.781177 -0.120908 0.180075 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.778973 -0.13149 0.157875 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.795477 -0.113462 0.161374 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.801282 -0.125067 0.193792 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.815582 -0.11762 0.175091 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.819182 -0.139808 0.18531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.784778 -0.143095 0.190293 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.802678 -0.157836 0.181811 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.782573 -0.153678 0.168094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.82339 -0.0854653 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.811594 -0.0654286 0.114524 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.80102 -0.0876595 0.112614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.820516 -0.0820122 0.0985541 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.833964 -0.0632344 0.124743 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.842886 -0.079818 0.108773 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.845761 -0.083271 0.133052 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.814468 -0.0688817 0.138803 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.826265 -0.0889183 0.147112 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.803895 -0.0911125 0.136894 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.908384 -0.14403 0.104938 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.926643 -0.128672 0.111295 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.90826 -0.133221 0.127138 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.904034 -0.1198 0.106848 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.926768 -0.139481 0.0890951 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.904159 -0.130608 0.0846485 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.908508 -0.154838 0.0827387 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.930993 -0.152902 0.109385 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.912733 -0.16826 0.103028 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.912609 -0.157451 0.125228 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.860128 -0.107359 0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.853284 -0.0905999 0.0455609 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.839638 -0.0940331 0.0658506 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.840233 -0.111382 0.0482916 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.873773 -0.103926 0.0420622 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.860723 -0.124708 0.044793 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.880618 -0.120685 0.0588533 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.873178 -0.086577 0.0596212 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.880022 -0.103336 0.0764123 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.859532 -0.0900102 0.079911 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.872552 -0.179437 0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.894035 -0.188167 0.0421477 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.885777 -0.195141 0.0643473 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.89378 -0.172046 0.0608487 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.880811 -0.172463 0.0284303 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.880556 -0.156342 0.0471312 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.859328 -0.163733 0.0369125 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.872807 -0.195558 0.0319289 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.851325 -0.186828 0.0404111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.864549 -0.202532 0.0541285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.884071 -0.194213 0.153697 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.891905 -0.197746 0.176845 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.867957 -0.193701 0.172398 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.884286 -0.175383 0.169668 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.908019 -0.198259 0.158144 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.900401 -0.175896 0.150967 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.900186 -0.194726 0.134996 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.89169 -0.216576 0.160875 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.883856 -0.213043 0.137727 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.867741 -0.212531 0.156428 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.84824 -0.229621 0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.843832 -0.25245 0.107698 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.826426 -0.235043 0.109608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.846687 -0.233837 0.123668 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.865646 -0.247028 0.0974792 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.868501 -0.228415 0.113449 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.870053 -0.224198 0.0891702 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.845385 -0.248234 0.0834188 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.849792 -0.225404 0.0751099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.827978 -0.230827 0.0853287 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.811502 -0.207727 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.794108 -0.212743 0.176661 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.788345 -0.199907 0.156372 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.802328 -0.189621 0.173931 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.817265 -0.220563 0.18016 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.825486 -0.197441 0.177429 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.83466 -0.215547 0.163369 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.803282 -0.230849 0.162601 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.820676 -0.225832 0.14581 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.797518 -0.218012 0.142311 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.643951 -0.172546 0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.61371 -0.142305 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.597249 -0.125845 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.592635 -0.138689 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.610094 -0.12123 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.618324 -0.12946 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.631169 -0.124846 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.634785 -0.145921 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.600865 -0.14692 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.617326 -0.163381 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.596251 -0.159765 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.5724 -0.153374 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.554772 -0.141271 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.5724 -0.153374 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.577935 -0.13272 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.554772 -0.141271 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.577935 -0.13272 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.5724 -0.153374 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.549237 -0.161926 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.566866 -0.174029 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.566866 -0.174029 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.624779 -0.100996 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.612676 -0.0833673 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.604124 -0.10653 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.624779 -0.100996 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.633331 -0.0778329 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.645433 -0.0954616 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.645433 -0.0954616 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.612676 -0.0833673 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.624779 -0.100996 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.604124 -0.10653 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.68526 -0.161477 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.687686 -0.148046 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.6652 -0.154071 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.678869 -0.137627 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.707746 -0.155452 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.698929 -0.145033 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.70532 -0.168883 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.694077 -0.171896 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.691651 -0.185327 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.671591 -0.177921 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.696329 -0.120168 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.700504 -0.095832 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.681209 -0.105047 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.681209 -0.105047 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.715624 -0.110952 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.696329 -0.120168 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.711449 -0.135288 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.715624 -0.110952 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.711449 -0.135288 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.696329 -0.120168 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.715501 -0.191718 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.736819 -0.190051 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.715501 -0.191718 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.721035 -0.171063 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.736819 -0.190051 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.721035 -0.171063 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.715501 -0.191718 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.731284 -0.210706 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.709966 -0.212373 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.709966 -0.212373 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.632882 -0.213855 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.61945 -0.216282 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.609032 -0.207465 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.625476 -0.193796 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.6433 -0.222672 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.649326 -0.200186 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.656732 -0.220246 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.626857 -0.236341 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.640288 -0.233915 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.616438 -0.227525 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.663122 -0.244096 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.661455 -0.265414 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.642468 -0.249631 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.663122 -0.244096 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.68211 -0.25988 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.683777 -0.238562 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.683777 -0.238562 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.661455 -0.265414 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.663122 -0.244096 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.642468 -0.249631 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.591572 -0.224924 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.567237 -0.2291 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.576452 -0.209804 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.576452 -0.209804 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.582357 -0.24422 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.591572 -0.224924 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.606693 -0.240045 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.582357 -0.24422 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.606693 -0.240045 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.591572 -0.224924 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.69376 0.0133465 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.674309 0.0838533 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.66171 0.103063 0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.653258 0.0800983 0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.673446 0.0876683 0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.682761 0.106818 0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.694497 0.0914233 0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.69536 0.0876083 0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.662574 0.0992478 0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.675172 0.0800382 0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.654121 0.0762832 0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.62221 0.0325183 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.604582 0.0446211 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.62221 0.0325183 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.627745 0.053173 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.604582 0.0446211 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.627745 0.053173 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.62221 0.0325183 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.599047 0.0239663 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.616676 0.0118635 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.616676 0.0118635 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.666287 0.0539145 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.662466 0.0547519 0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.660752 0.0332597 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.682791 0.0439578 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.668 0.0754066 0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.688325 0.0646126 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.671821 0.0745692 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.645962 0.0647085 0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.649783 0.0638711 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.644249 0.0432164 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.745859 0.0646815 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.750021 0.0887955 0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.729506 0.078459 0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.732161 0.0813312 0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.766375 0.075018 0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.748514 0.0675537 0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.762212 0.050904 0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.763719 0.0721458 0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.759557 0.0480318 0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.743204 0.0618093 0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.737837 0.0347427 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.747099 0.0542122 0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.743371 0.0553974 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.7241 0.0550267 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.741565 0.0335575 0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.718566 0.0343719 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.732303 0.014088 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.760836 0.0339282 0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.751574 0.0144587 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.757108 0.0351134 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.76531 -0.0058253 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.786629 -0.00415829 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.76531 -0.0058253 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.770845 0.0148294 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.786629 -0.00415829 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.770845 0.0148294 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.76531 -0.0058253 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.781094 -0.024813 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.759776 -0.02648 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.759776 -0.02648 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.701782 0.0432853 0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.693716 0.0608821 0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.677932 0.0496759 0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.694884 0.0652402 0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.717566 0.0544915 0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.718734 0.0588496 0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.725632 0.0368947 0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.700615 0.0389272 0.202664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.708681 0.0213304 0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.684831 0.027721 0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.721234 -0.0272215 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.720593 -0.0310802 0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.7 -0.0246945 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.718114 -0.00820099 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.741827 -0.0336072 0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.739347 -0.010728 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.742467 -0.0297485 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.723713 -0.0501007 0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.724354 -0.046242 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.70312 -0.043715 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.649684 -0.00804971 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.628657 -0.00328338 0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.630031 0.000378614 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.642244 0.0152909 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.648309 -0.0117117 0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.661896 0.00686255 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.669336 -0.016478 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.636097 -0.026624 0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.657124 -0.0313903 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.637471 -0.022962 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.835815 -0.157543 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.899353 -0.119969 -0.117284 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.909872 -0.0977075 -0.115431 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.891613 -0.104052 -0.100068 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.886771 -0.0997803 -0.1239 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.917612 -0.113625 -0.132647 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.894512 -0.115698 -0.141116 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.907093 -0.135886 -0.1345 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.922453 -0.117896 -0.108814 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.911935 -0.140158 -0.110668 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.904194 -0.124241 -0.0934517 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.868703 -0.130205 -0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.867758 -0.11253 -0.0334138 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.846864 -0.122142 -0.0423994 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.860854 -0.107566 -0.0565949 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.889596 -0.120593 -0.0416443 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.882692 -0.115629 -0.0648253 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.890541 -0.138267 -0.0588603 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.875606 -0.135168 -0.0274488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.876551 -0.152843 -0.0446649 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.854713 -0.14478 -0.0364345 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.836885 -0.0844101 -0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.826973 -0.0627848 -0.106005 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.81296 -0.083104 -0.105354 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.830202 -0.0805529 -0.122844 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.850898 -0.0640908 -0.10004 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.854126 -0.0818589 -0.116879 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.860809 -0.0857161 -0.093424 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.833656 -0.0666419 -0.0825505 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.843568 -0.0882673 -0.0759343 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.819643 -0.0869612 -0.0818993 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.866465 -0.147308 -0.177765 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.876203 -0.130609 -0.193128 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.879733 -0.128522 -0.16878 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.857385 -0.124356 -0.178416 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.862935 -0.149395 -0.202114 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.844117 -0.143141 -0.187402 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.853198 -0.166093 -0.186751 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.885283 -0.153561 -0.192477 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.875546 -0.170259 -0.177114 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.888813 -0.151474 -0.168128 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.803997 -0.111748 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.798532 -0.108311 -0.183703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.797989 -0.131037 -0.174066 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.819589 -0.119537 -0.17736 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.80454 -0.0890219 -0.169507 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.825597 -0.100248 -0.163165 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.810005 -0.0924597 -0.145675 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.78294 -0.100522 -0.166213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.788405 -0.10396 -0.142381 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.782397 -0.123249 -0.156576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.802927 -0.184881 -0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.785723 -0.180723 -0.188808 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.798991 -0.161937 -0.179823 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.782104 -0.173028 -0.165627 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.78966 -0.203667 -0.180578 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.786041 -0.195972 -0.157397 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.806864 -0.207825 -0.163362 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.806546 -0.192576 -0.194773 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.82375 -0.196734 -0.177557 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.819813 -0.17379 -0.185788 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.898283 -0.193102 -0.129006 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.920038 -0.201143 -0.120537 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.900209 -0.201384 -0.105825 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.910616 -0.17991 -0.112168 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.918112 -0.192861 -0.143718 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.90869 -0.171628 -0.135349 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.896357 -0.18482 -0.152187 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.907705 -0.214335 -0.137375 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.88595 -0.206294 -0.145845 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.887876 -0.214576 -0.122663 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.834745 -0.230676 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.824206 -0.252002 -0.116217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.810793 -0.231282 -0.116868 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.827952 -0.234336 -0.0993785 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.848158 -0.251396 -0.122182 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.851905 -0.23373 -0.105343 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.858698 -0.23007 -0.128798 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.830999 -0.248342 -0.139672 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.841538 -0.227016 -0.146288 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.817586 -0.227621 -0.140323 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.867633 -0.203337 -0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.868948 -0.209658 -0.0385197 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.84746 -0.202239 -0.0481565 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.865773 -0.186008 -0.0448623 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.889121 -0.210757 -0.0527151 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.885946 -0.187106 -0.0590577 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.887806 -0.204436 -0.0765474 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.870808 -0.226988 -0.0560094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.869493 -0.220667 -0.0798417 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.84932 -0.219569 -0.0656463 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.69376 0.0133465 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.668775 0.0631985 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.661946 0.0667914 -0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.65711 0.0452771 -0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.680354 0.0511945 -0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.673611 0.0847128 -0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.692019 0.069116 -0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.680439 0.08112 -0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.650366 0.0787954 -0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.657195 0.0752026 -0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.64553 0.0572811 -0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.62221 0.0325183 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.604582 0.0446211 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.62221 0.0325183 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.627745 0.053173 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.604582 0.0446211 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.627745 0.053173 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.62221 0.0325183 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.599047 0.0239663 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.616676 0.0118635 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.616676 0.0118635 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.649684 -0.00804971 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.634953 -0.000226782 -0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.655218 0.012605 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.635947 0.0122343 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.629419 -0.0208815 -0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.630413 -0.00842045 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.644149 -0.0287044 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.64869 -0.0205108 -0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.66342 -0.0283337 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.668955 -0.00767898 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.740325 0.0440268 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.746894 0.0650768 -0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.739183 0.0653796 -0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.723153 0.0607735 -0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.748035 0.0437239 -0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.724295 0.0394207 -0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.741466 0.0226739 -0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.764065 0.04833 -0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.757496 0.02728 -0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.756355 0.0486329 -0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.721234 -0.0272215 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.732368 -0.0484665 -0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.715699 -0.0478762 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.737738 -0.0371781 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.737902 -0.0278118 -0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.743272 -0.0165234 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.726768 -0.00656677 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.715864 -0.0385099 -0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.70473 -0.0172649 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.699195 -0.0379196 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.76531 -0.0058253 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.786629 -0.00415829 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.76531 -0.0058253 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.770845 0.0148294 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.786629 -0.00415829 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.770845 0.0148294 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.76531 -0.0058253 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.781094 -0.024813 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.759776 -0.02648 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.759776 -0.02648 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.712851 0.0845947 -0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.706291 0.107813 -0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.689001 0.0909853 -0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.701434 0.0896851 -0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.730141 0.101422 -0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.725284 0.0832945 -0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.736701 0.0782041 -0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.717709 0.102723 -0.0882695 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.724268 0.0795043 -0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.700418 0.0858949 -0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.737837 0.0347427 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.740802 0.0511556 -0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.718185 0.043171 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.730397 0.0580833 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.760455 0.0427273 -0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.750049 0.0496549 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.757489 0.0263144 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.748242 0.027815 -0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.745277 0.0114021 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.725625 0.0198304 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.666287 0.0539145 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.650692 0.0721382 -0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.645053 0.0564414 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.663167 0.072935 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.671925 0.0696112 -0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.6844 0.070408 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.68752 0.0513875 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.653812 0.0531177 -0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.669407 0.034894 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.648173 0.0374209 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.643951 -0.172546 -0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.674191 -0.142305 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.672341 -0.123995 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.666199 -0.120057 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.651943 -0.134313 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.680334 -0.146243 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.659936 -0.156561 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.682184 -0.164554 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.69459 -0.131987 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.696439 -0.150298 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.688447 -0.12805 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.715501 -0.153374 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.731779 -0.136231 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.712305 -0.141449 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.70911 -0.129524 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.734974 -0.148156 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.712305 -0.141449 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.718696 -0.165299 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.738169 -0.160081 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.721891 -0.177224 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.718696 -0.165299 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.663122 -0.100996 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.656415 -0.0783272 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.639272 -0.0946054 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.651197 -0.0978007 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.680265 -0.0847178 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.675047 -0.104191 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.686972 -0.107387 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.66834 -0.0815225 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.675047 -0.104191 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.651197 -0.0978007 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.602641 -0.161477 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.60298 -0.154189 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.622115 -0.166695 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.617912 -0.143431 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.583506 -0.148971 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.598439 -0.138214 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.583168 -0.156259 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.587708 -0.172234 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.58737 -0.179523 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.606843 -0.184741 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.591572 -0.120168 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.577317 -0.105912 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.582843 -0.128897 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.600302 -0.111438 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.586046 -0.0971825 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.609032 -0.102708 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.600302 -0.111438 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.568587 -0.114642 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.582843 -0.128897 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.574113 -0.137627 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.5724 -0.191718 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.549732 -0.185011 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.569205 -0.179793 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.56601 -0.167868 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.552927 -0.196936 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.569205 -0.179793 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.575596 -0.203643 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.556122 -0.208861 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.578791 -0.215568 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.575596 -0.203643 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.655019 -0.213855 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.653756 -0.23668 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.636974 -0.229127 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.660237 -0.233329 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.671802 -0.221409 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.678283 -0.218058 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.673065 -0.198584 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.648538 -0.217207 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.649801 -0.194382 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.631756 -0.209653 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.624779 -0.244096 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.607636 -0.260374 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.600929 -0.237705 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.612854 -0.240901 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.631486 -0.266765 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.636704 -0.247291 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.648629 -0.250487 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.619561 -0.26357 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.636704 -0.247291 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.612854 -0.240901 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.696329 -0.224924 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.710584 -0.23918 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.687599 -0.233654 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.705059 -0.216195 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.719314 -0.23045 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.713788 -0.207465 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.705059 -0.216195 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.701855 -0.24791 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.687599 -0.233654 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.678869 -0.242384 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.786005 -0.343435 8.51251e-17 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.82165 -0.392454 0.0425863 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.824791 -0.400556 0.065698 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.802599 -0.392663 0.058292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.821021 -0.376528 0.0614442 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.843843 -0.400347 0.0499923 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.840073 -0.376319 0.0457385 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.840701 -0.392245 0.0268805 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.82542 -0.416482 0.0468401 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.822279 -0.40838 0.0237283 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.803228 -0.408589 0.0394341 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.753118 -0.370774 0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.734271 -0.367981 0.076187 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.731279 -0.362711 0.0522508 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.745269 -0.348136 0.0664462 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.756109 -0.376044 0.0844174 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.767107 -0.356199 0.0746767 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.774956 -0.378837 0.0687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.74212 -0.390619 0.070222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.760966 -0.393412 0.0545162 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.739128 -0.385349 0.0462858 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.80984 -0.323622 0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.80634 -0.308073 0.0861356 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.786996 -0.316395 0.0732426 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.802721 -0.300378 0.0629546 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.829184 -0.315299 0.0801706 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.825565 -0.307605 0.0569896 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.832685 -0.330849 0.0613127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.813459 -0.331317 0.0904587 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.81696 -0.346866 0.0716007 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.794116 -0.339639 0.0775657 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.854538 -0.365116 -0.0178949 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.878086 -0.365674 -0.0104889 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.859887 -0.367962 0.00604126 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.863875 -0.346241 -0.00500196 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.872736 -0.362827 -0.0344251 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.858526 -0.343394 -0.0289382 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.849188 -0.362269 -0.0418311 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.868748 -0.384548 -0.0233819 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.8452 -0.38399 -0.0307879 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.85055 -0.386837 -0.00685171 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.842728 -0.296284 0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.848999 -0.272611 0.00994863 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.828835 -0.281616 0.0209919 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.829121 -0.278432 -0.00349164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.862893 -0.287278 -0.0042468 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.843015 -0.293099 -0.0176871 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.856621 -0.310951 -0.00739901 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.862606 -0.290462 0.0202367 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.856335 -0.314135 0.0170845 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.842441 -0.299468 0.0312799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.818893 -0.316097 -0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.819591 -0.297057 -0.076187 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.814956 -0.293153 -0.0522508 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.79807 -0.304244 -0.0664462 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.823527 -0.320001 -0.0844174 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.802007 -0.327188 -0.0746767 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.822829 -0.339041 -0.0687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.840413 -0.30891 -0.070222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.839716 -0.32795 -0.0545162 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.835779 -0.305006 -0.0462858 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.797815 -0.412267 -0.0246914 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.793573 -0.436217 -0.0204376 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.776294 -0.419454 -0.0149506 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.796968 -0.420728 -0.00151032 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.815094 -0.42903 -0.0301783 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.818489 -0.413542 -0.0112511 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.819335 -0.405081 -0.0344321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.79442 -0.427756 -0.0436186 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.798662 -0.403807 -0.0478724 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.777141 -0.410993 -0.0381316 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.76217 -0.363249 -0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.747522 -0.356966 -0.0861356 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.759239 -0.339469 -0.0732426 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.740618 -0.352002 -0.0629546 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.750453 -0.380746 -0.0801706 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.743549 -0.375782 -0.0569896 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.765101 -0.387029 -0.0613127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.769074 -0.368213 -0.0904587 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.783722 -0.374496 -0.0716007 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.780791 -0.350716 -0.0775657 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.729282 -0.390587 -0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.704862 -0.392427 -0.00994863 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.717401 -0.374248 -0.0209919 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.714218 -0.373948 0.00349164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.716744 -0.408767 0.0042468 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.726099 -0.390287 0.0176871 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.741164 -0.406927 0.00739901 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.719927 -0.409067 -0.0202367 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.744347 -0.407227 -0.0170845 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.732465 -0.390887 -0.0312799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.594141 -0.358439 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.542042 -0.409774 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.517869 -0.413579 -0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.528508 -0.393219 -0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.525596 -0.395831 -0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.531404 -0.430134 -0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.539131 -0.412386 -0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555577 -0.426328 -0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.534315 -0.427522 -0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.558488 -0.423716 -0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.544953 -0.407161 -0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.522591 -0.339267 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.504962 -0.327164 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.522591 -0.339267 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.528125 -0.318612 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.504962 -0.327164 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.528125 -0.318612 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.522591 -0.339267 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.499428 -0.347819 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.517056 -0.359921 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.517056 -0.359921 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.550064 -0.379835 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.529037 -0.375068 -0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.530412 -0.371406 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.542624 -0.356494 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.548689 -0.383497 -0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.562276 -0.364922 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.569716 -0.388263 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.536477 -0.398409 -0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.557504 -0.403175 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.537852 -0.394747 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.613592 -0.428945 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.612625 -0.451897 -0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.593593 -0.436515 -0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.614807 -0.432663 -0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.632624 -0.444328 -0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.634806 -0.425094 -0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.633591 -0.421376 -0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.61141 -0.448179 -0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.612377 -0.425227 -0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.592379 -0.432797 -0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.621614 -0.399007 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.620974 -0.402865 -0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.600381 -0.39648 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.618494 -0.379986 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.642207 -0.405392 -0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.639728 -0.382513 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.642848 -0.401533 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.624094 -0.421886 -0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.624734 -0.418027 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.603501 -0.4155 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.665691 -0.37761 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.687009 -0.375943 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.665691 -0.37761 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.671225 -0.356956 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.687009 -0.375943 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.671225 -0.356956 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.665691 -0.37761 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.681475 -0.396598 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.660156 -0.398265 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.660156 -0.398265 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.586119 -0.388377 -0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.570335 -0.399584 -0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.562269 -0.381987 -0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.569167 -0.403942 -0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.594185 -0.405974 -0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.593017 -0.410332 -0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.609969 -0.394768 -0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.587286 -0.384019 -0.202664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.60307 -0.372813 -0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.57922 -0.366422 -0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.638217 -0.337042 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.64748 -0.317573 -0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.643752 -0.316388 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.624481 -0.316758 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.641945 -0.338228 -0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.618946 -0.337413 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.632683 -0.357697 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.661216 -0.337857 -0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.651954 -0.357326 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.657489 -0.336672 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.566667 -0.317871 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.562847 -0.317033 -0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.561133 -0.338525 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.583171 -0.327827 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.568381 -0.296378 -0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.588706 -0.307172 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.572202 -0.297216 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.546343 -0.307077 -0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.550163 -0.307914 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.544629 -0.328569 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.594141 -0.358439 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.547576 -0.389119 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.525642 -0.386849 0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.528407 -0.379645 0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.538964 -0.366733 0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.544812 -0.396323 0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.558134 -0.376207 0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.566746 -0.398593 0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.534255 -0.409235 0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.556189 -0.411505 0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.537019 -0.402031 0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.522591 -0.339267 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.504962 -0.327164 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.522591 -0.339267 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.528125 -0.318612 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.504962 -0.327164 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.528125 -0.318612 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.522591 -0.339267 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.499428 -0.347819 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.517056 -0.359921 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.517056 -0.359921 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.566667 -0.317871 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.551072 -0.299647 0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.545434 -0.315344 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.563547 -0.29885 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.572306 -0.302174 0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.584781 -0.301377 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.587901 -0.320398 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.554192 -0.318667 0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.569787 -0.336891 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.548554 -0.334364 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.619127 -0.408291 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.617918 -0.415912 0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.597788 -0.406911 0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.616439 -0.39183 0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.639257 -0.417292 0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.637778 -0.39321 0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.640465 -0.409671 0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.620605 -0.432372 0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.621814 -0.424751 0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.600475 -0.423371 0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.638217 -0.337042 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.641183 -0.320629 0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.618565 -0.328614 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.630777 -0.313702 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.660835 -0.329058 0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.65043 -0.32213 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.65787 -0.345471 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.648623 -0.34397 0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.645657 -0.360383 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.626005 -0.351955 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.665691 -0.37761 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.687009 -0.375943 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.665691 -0.37761 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.671225 -0.356956 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.687009 -0.375943 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.671225 -0.356956 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.665691 -0.37761 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.681475 -0.396598 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.660156 -0.398265 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.660156 -0.398265 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.57505 -0.429687 0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.55776 -0.446515 0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.5512 -0.423296 0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.562617 -0.428387 0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.58161 -0.452905 0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.586467 -0.434777 0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.5989 -0.436077 0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.570193 -0.447815 0.0882695 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.587483 -0.430987 0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.563633 -0.424596 0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.621614 -0.399007 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.632748 -0.420252 0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.61608 -0.419661 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.638118 -0.408963 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.638282 -0.399597 0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.643653 -0.388308 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.627149 -0.378352 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.616244 -0.410295 0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.60511 -0.38905 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.599576 -0.409705 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.550064 -0.379835 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.535334 -0.372012 0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555599 -0.35918 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.536327 -0.359551 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.529799 -0.392667 0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.530793 -0.380205 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.54453 -0.400489 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.549071 -0.392296 0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.563801 -0.400119 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.569335 -0.379464 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0996195 -0.371785 0.544331 RAD 0.166667
+ txt002
+ SPHERE CENTER 0.220501 -0.393621 0.729516 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.279642 -0.368601 0.766439 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.299716 -0.354293 0.765035 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.292196 -0.366989 0.745238 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.279022 -0.347717 0.753281 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.287162 -0.355904 0.786236 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.266468 -0.349329 0.774481 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.267088 -0.370213 0.787639 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.300337 -0.375177 0.778193 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.280263 -0.389485 0.779597 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.292817 -0.387873 0.758396 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.281062 -0.372464 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.289441 -0.362978 0.671279 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.270044 -0.378255 0.671155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.267771 -0.35549 0.680442 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.30046 -0.357187 0.692603 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.278789 -0.349699 0.701767 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.29208 -0.366673 0.713804 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.302733 -0.379952 0.683315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.294353 -0.389438 0.704516 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.283335 -0.395229 0.683192 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.238665 -0.321889 0.726118 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.250544 -0.304702 0.71296 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.259421 -0.327715 0.714081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.238717 -0.32307 0.701455 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.229788 -0.298875 0.724997 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.21796 -0.317244 0.713492 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.217908 -0.316063 0.738155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.250492 -0.30352 0.737623 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.238612 -0.320707 0.750781 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.259369 -0.326533 0.738744 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.219082 -0.389758 0.803476 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.228779 -0.378635 0.823273 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.24293 -0.383364 0.8036 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.225483 -0.365937 0.802355 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.20493 -0.385029 0.823149 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.201634 -0.372331 0.802231 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.195233 -0.396152 0.803352 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.222377 -0.402455 0.824394 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.21268 -0.413578 0.804597 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.236529 -0.407185 0.804721 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.178104 -0.343046 0.763155 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.177083 -0.319723 0.771198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.198298 -0.332294 0.772443 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.189464 -0.325124 0.750529 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.156889 -0.330475 0.76191 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.16927 -0.335876 0.741241 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.157909 -0.353797 0.753867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.165722 -0.337645 0.783824 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.166743 -0.360967 0.775781 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.186938 -0.350216 0.785069 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.15994 -0.414778 0.766553 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.147477 -0.412573 0.787754 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.172167 -0.412448 0.787878 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.15977 -0.39322 0.77859 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.13525 -0.414903 0.766429 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.147543 -0.39555 0.757266 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.147713 -0.417108 0.745229 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.147647 -0.434131 0.775717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.16011 -0.436336 0.754517 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.172338 -0.434006 0.775841 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.261479 -0.440333 0.769837 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.282991 -0.443285 0.781591 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282046 -0.4302 0.760673 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.271991 -0.421181 0.781342 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.262424 -0.453417 0.790755 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.251423 -0.431313 0.790506 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.240911 -0.450466 0.779001 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.27248 -0.462437 0.770086 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.250967 -0.459485 0.758332 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.271534 -0.449353 0.749168 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.202338 -0.465353 0.732914 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.204606 -0.486123 0.746073 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.223366 -0.470107 0.744951 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.202946 -0.464339 0.757577 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.183578 -0.481368 0.734036 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.181918 -0.459584 0.745541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.18131 -0.460599 0.720878 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.203998 -0.487137 0.72141 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.201729 -0.466367 0.708251 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.222757 -0.471122 0.720288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.262898 -0.444196 0.695877 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.285685 -0.449273 0.687835 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.27701 -0.426189 0.68659 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282528 -0.436139 0.708504 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.271573 -0.46728 0.697123 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.268416 -0.454146 0.717791 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.248787 -0.462204 0.705165 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.266055 -0.45733 0.675209 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.243269 -0.452254 0.683251 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.257381 -0.434246 0.673964 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.31427 -0.31427 0.544331 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.367156 -0.277961 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.374298 -0.269898 0.485076 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.362218 -0.291334 0.487134 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.350338 -0.270045 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.379235 -0.256525 0.505236 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.355276 -0.256671 0.511201 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.372093 -0.264588 0.527454 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.391115 -0.277815 0.501329 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.383973 -0.285878 0.523547 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.379036 -0.299251 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.31427 -0.31427 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.304189 -0.304189 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.29042 -0.307879 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.307879 -0.29042 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.328039 -0.31058 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.331729 -0.29681 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.33812 -0.32066 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.31058 -0.328039 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.32066 -0.33812 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.29681 -0.331729 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.297666 -0.252306 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.305995 -0.235688 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.321516 -0.245915 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.312359 -0.259438 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282145 -0.242079 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.288509 -0.265828 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.273816 -0.258696 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.291303 -0.228556 0.509559 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282974 -0.245173 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.306824 -0.238783 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.367156 -0.277961 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.385852 -0.261966 0.57931 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.38141 -0.278159 0.561208 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.36581 -0.259422 0.565115 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.371598 -0.261768 0.599471 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.351556 -0.259225 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.352901 -0.277764 0.601529 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.387198 -0.280504 0.595564 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.368501 -0.2965 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.382755 -0.296698 0.577461 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.297666 -0.252306 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.30415 -0.228803 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.321516 -0.245915 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.306824 -0.238783 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.2803 -0.235194 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282974 -0.245173 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.273816 -0.258696 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.294992 -0.242326 0.603794 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.288509 -0.265828 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.312359 -0.259438 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.31427 -0.31427 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.32435 -0.304189 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.33812 -0.307879 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.32066 -0.29042 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.3005 -0.31058 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.29681 -0.29681 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.29042 -0.32066 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.317959 -0.328039 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.307879 -0.33812 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.331729 -0.331729 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.383759 -0.339925 0.544331 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.407156 -0.334762 0.538366 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.388696 -0.326552 0.524171 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.392275 -0.31686 0.546597 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.402218 -0.348135 0.558526 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.387337 -0.330233 0.566757 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.378821 -0.353299 0.564491 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.39864 -0.357827 0.536101 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.375243 -0.362991 0.542066 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.380181 -0.349618 0.521905 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.330873 -0.376234 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.346394 -0.386461 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.354723 -0.369843 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.340031 -0.362711 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.322544 -0.392851 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.316181 -0.369102 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.307023 -0.382624 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.337237 -0.399983 0.579103 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.321715 -0.389757 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.345565 -0.383366 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.330873 -0.376234 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.348239 -0.393346 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.354723 -0.369843 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.345565 -0.383366 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.324389 -0.399736 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.321715 -0.389757 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.307023 -0.382624 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.333547 -0.386213 0.484868 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.316181 -0.369102 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.340031 -0.362711 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.166275 -0.191247 0.655442 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.20793 -0.130089 0.652044 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.221102 -0.115471 0.637128 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.220766 -0.13987 0.633356 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.200597 -0.126388 0.628759 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.208266 -0.10569 0.655816 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.187762 -0.116607 0.647447 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.195095 -0.120308 0.670732 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.228435 -0.119172 0.660413 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.215264 -0.13379 0.675329 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.228099 -0.143571 0.656641 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.230419 -0.192135 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.243049 -0.18209 0.599717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.218634 -0.185251 0.597829 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.227721 -0.168159 0.613157 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.254834 -0.188974 0.620293 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.239506 -0.175043 0.633733 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.242204 -0.199019 0.638981 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.245747 -0.206066 0.604965 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.233117 -0.216111 0.623653 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.221332 -0.209227 0.603077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.172673 -0.154295 0.591563 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.180792 -0.15554 0.568278 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.19323 -0.166926 0.586315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.171251 -0.17557 0.579113 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.160236 -0.142909 0.573526 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.150694 -0.162939 0.584361 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.152117 -0.141663 0.596811 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.182215 -0.134265 0.580727 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.174096 -0.133019 0.604012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.194652 -0.145651 0.598764 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.143787 -0.129201 0.689081 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.14887 -0.105335 0.692853 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.167242 -0.121723 0.690969 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.153943 -0.115741 0.671044 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.125414 -0.112813 0.690965 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.130487 -0.123219 0.669156 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.120331 -0.136679 0.687193 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.138714 -0.118795 0.71089 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.13363 -0.142661 0.707118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.157086 -0.135183 0.709006 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.108529 -0.153407 0.6286 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0995811 -0.130858 0.624003 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.113639 -0.134736 0.643928 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.123725 -0.135326 0.621398 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0944715 -0.149528 0.608675 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.118615 -0.153997 0.60607 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.10342 -0.172078 0.613272 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0843858 -0.148938 0.631205 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0933338 -0.171487 0.635801 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0984435 -0.152816 0.65113 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.102131 -0.190359 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0897843 -0.179968 0.711167 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.114103 -0.183804 0.713055 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.105492 -0.166467 0.697727 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0778128 -0.186523 0.690591 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0935207 -0.173022 0.677151 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0901597 -0.196914 0.671903 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0864233 -0.20386 0.705919 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0987702 -0.214251 0.687231 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.110742 -0.207696 0.707807 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.201532 -0.167041 0.715923 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.219088 -0.151829 0.724292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.221861 -0.163068 0.702483 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.205084 -0.14514 0.705088 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.19876 -0.155801 0.737733 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.184756 -0.149113 0.718528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.181204 -0.171014 0.729364 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.215537 -0.173729 0.735128 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.197981 -0.188942 0.726759 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.218309 -0.184969 0.713318 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.159877 -0.228199 0.719322 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.167942 -0.229756 0.742607 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.183484 -0.223214 0.72457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.16569 -0.207683 0.731771 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.144336 -0.234741 0.737359 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.142084 -0.212668 0.726523 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.13627 -0.233184 0.714074 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.162129 -0.250271 0.730157 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.154064 -0.248714 0.706872 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.177671 -0.243729 0.71212 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.224021 -0.229087 0.682285 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.248268 -0.22829 0.686881 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.2391 -0.216949 0.666956 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.234532 -0.207937 0.689486 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.233189 -0.240428 0.702209 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.219453 -0.220075 0.704814 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.208942 -0.241225 0.697613 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.237756 -0.249439 0.67968 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.213509 -0.250236 0.675083 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.228589 -0.238098 0.659755 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0058509 -0.451136 0.729516 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.0051487 -0.447081 0.803476 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.01504 -0.435909 0.823149 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0289993 -0.440694 0.803352 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0115452 -0.423265 0.802231 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00881065 -0.442297 0.823273 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0123054 -0.429652 0.802355 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0187019 -0.453468 0.8036 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00864346 -0.459725 0.824394 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0012478 -0.470897 0.804721 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0226028 -0.46451 0.804597 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0688765 -0.439178 0.766553 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0903221 -0.426942 0.766429 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0806307 -0.435083 0.745229 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0699989 -0.416328 0.757266 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.078568 -0.431037 0.787754 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0582447 -0.420423 0.77859 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0571224 -0.443274 0.787878 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0891998 -0.449792 0.775717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0677542 -0.462029 0.775841 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0795084 -0.457933 0.754517 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0172804 -0.386138 0.763155 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0293677 -0.364644 0.76191 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0401449 -0.385352 0.753867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0213457 -0.375512 0.741241 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0065032 -0.36543 0.771198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00151881 -0.376298 0.750529 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00558411 -0.386924 0.772443 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0253024 -0.37527 0.783824 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0132151 -0.396764 0.785069 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0360796 -0.395978 0.775781 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0578769 -0.459039 0.766439 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0707378 -0.451803 0.786236 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0461991 -0.454158 0.787639 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0561039 -0.435761 0.774481 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0824157 -0.456685 0.765035 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0677817 -0.440643 0.753281 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0695548 -0.46392 0.745238 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0725109 -0.475081 0.778193 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.05965 -0.482316 0.758396 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0479721 -0.477435 0.779597 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0457452 -0.398096 0.726118 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0495643 -0.373728 0.724997 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0306825 -0.382672 0.738155 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.030137 -0.383722 0.713492 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.064627 -0.389151 0.71296 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0451997 -0.399146 0.701455 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.060808 -0.41352 0.714081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0651725 -0.388102 0.737623 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0613535 -0.41247 0.738744 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0462908 -0.397047 0.750781 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0571747 -0.463094 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.081612 -0.459563 0.692603 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0696122 -0.463589 0.713804 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0665888 -0.442243 0.701767 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0691745 -0.459069 0.671279 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0541513 -0.441749 0.680442 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0447373 -0.4626 0.671155 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0721979 -0.480415 0.683315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0477607 -0.483946 0.683192 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0601982 -0.48444 0.704516 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00628079 -0.512079 0.769837 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.000557006 -0.523883 0.790755 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0165974 -0.51057 0.779001 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00208214 -0.49924 0.790506 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0234352 -0.525392 0.781591 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0249603 -0.500749 0.781342 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.029159 -0.513588 0.760673 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00475566 -0.536722 0.770086 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0104794 -0.524918 0.749168 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0123987 -0.523409 0.758332 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00557859 -0.516134 0.695877 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.00154892 -0.540463 0.697123 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0156462 -0.524673 0.705165 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00538221 -0.52751 0.717791 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0227737 -0.531924 0.687835 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.026607 -0.518971 0.708504 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0268034 -0.507596 0.68659 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00174531 -0.529087 0.675209 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00577498 -0.504759 0.673964 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0154498 -0.513298 0.683251 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0574471 -0.504176 0.732914 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0817008 -0.508666 0.734036 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0732807 -0.489545 0.720878 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0722467 -0.488971 0.745541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0658672 -0.523298 0.746073 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0564131 -0.503602 0.757577 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0416134 -0.518808 0.744951 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0669012 -0.523872 0.72141 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0426474 -0.519382 0.720288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.058481 -0.504751 0.708251 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0483751 -0.248762 0.655442 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.0599222 -0.183785 0.689081 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0522053 -0.160406 0.690965 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0358698 -0.178533 0.687193 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0513956 -0.171954 0.669156 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0762577 -0.165658 0.692853 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.075448 -0.177206 0.671044 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0839747 -0.189036 0.690969 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0607319 -0.172236 0.71089 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0684488 -0.195615 0.709006 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0443964 -0.190363 0.707118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00673113 -0.215921 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0258737 -0.20044 0.690591 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0203763 -0.215612 0.671903 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00551963 -0.196602 0.677151 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0122285 -0.200749 0.711167 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00812553 -0.196911 0.697727 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00691403 -0.21623 0.713055 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0270852 -0.21976 0.705919 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00794264 -0.235241 0.707807 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0215878 -0.234932 0.687231 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0172857 -0.187119 0.6286 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.00705049 -0.176731 0.608675 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00352517 -0.200733 0.613272 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.025725 -0.192673 0.60607 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.020811 -0.163117 0.624003 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0394855 -0.179058 0.621398 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0310463 -0.173504 0.643928 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00138875 -0.171177 0.631205 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00884647 -0.181564 0.65113 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00491406 -0.195179 0.635801 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.115028 -0.216626 0.652044 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.127519 -0.195663 0.655816 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.108803 -0.201738 0.670732 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.104303 -0.194866 0.647447 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.133744 -0.210551 0.637128 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.110528 -0.209754 0.628759 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.121254 -0.231514 0.633356 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.138245 -0.217423 0.660413 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.125754 -0.238386 0.656641 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.119529 -0.223497 0.675329 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0723919 -0.21996 0.591563 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0673141 -0.20388 0.573526 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0609052 -0.198742 0.596811 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0490355 -0.216456 0.584361 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0788008 -0.225098 0.568278 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0605222 -0.237674 0.579113 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0838786 -0.241177 0.586315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0906706 -0.207384 0.580727 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0957484 -0.223463 0.598764 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0842617 -0.202246 0.604012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.103481 -0.281603 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.126206 -0.291073 0.620293 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.110246 -0.293457 0.638981 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.119897 -0.271345 0.633733 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.119442 -0.279219 0.599717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.113132 -0.25949 0.613157 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0967168 -0.269749 0.597829 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.10979 -0.301332 0.604965 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0870656 -0.291862 0.603077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0938302 -0.303716 0.623653 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0910116 -0.245428 0.715923 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0942304 -0.234308 0.737733 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0714204 -0.238704 0.729364 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0854464 -0.221514 0.718528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.113822 -0.241032 0.724292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.105038 -0.228237 0.705088 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.110603 -0.252152 0.702483 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0997955 -0.258223 0.735128 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0965768 -0.269343 0.713318 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0769856 -0.262619 0.726759 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0794645 -0.310405 0.682285 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0817333 -0.324811 0.702209 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0603366 -0.313378 0.697613 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0800146 -0.300317 0.704814 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.100861 -0.321838 0.686881 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0991425 -0.297345 0.689486 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0985923 -0.307433 0.666956 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0811832 -0.334899 0.67968 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0789143 -0.320493 0.659755 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0597864 -0.323466 0.675083 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0243582 -0.277564 0.719322 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0076281 -0.275459 0.737359 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00142185 -0.270078 0.714074 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0167139 -0.255218 0.726523 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0305645 -0.282946 0.742607 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0396503 -0.262704 0.731771 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0472946 -0.285051 0.72457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0152725 -0.297806 0.730157 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0320026 -0.299911 0.71212 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00906621 -0.292425 0.706872 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.115031 -0.4293 0.544331 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.178985 -0.424299 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.190929 -0.412497 0.599471 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.16674 -0.417001 0.601529 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.174844 -0.400273 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.203175 -0.419795 0.57931 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.18709 -0.407571 0.565115 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.191231 -0.431597 0.561208 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.195071 -0.436523 0.595564 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.183127 -0.448325 0.577461 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.170881 -0.441027 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.115031 -0.4293 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.10495 -0.41922 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0911807 -0.42291 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.10864 -0.40545 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.128801 -0.425611 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.13249 -0.411841 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.138881 -0.435691 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.111341 -0.44307 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.121421 -0.45315 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0975713 -0.44676 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.131634 -0.367336 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.12515 -0.343834 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.107784 -0.360946 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.122476 -0.353814 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.149 -0.350225 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.146326 -0.360204 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.155484 -0.373727 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.134308 -0.357357 0.603794 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.140792 -0.380859 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.116942 -0.374468 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.178985 -0.424299 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.200165 -0.411775 0.505236 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.189948 -0.415187 0.527454 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.179342 -0.399922 0.511201 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.189202 -0.420888 0.485076 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.168379 -0.409035 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.168023 -0.433412 0.487134 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.199808 -0.436152 0.501329 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.178629 -0.448677 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.189591 -0.439564 0.523547 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.131634 -0.367336 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.123305 -0.350719 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.107784 -0.360946 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.116942 -0.374468 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.147155 -0.357109 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.140792 -0.380859 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.155484 -0.373727 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.137998 -0.343587 0.509559 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.146326 -0.360204 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.122476 -0.353814 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.115031 -0.4293 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.125111 -0.41922 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.138881 -0.42291 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.121421 -0.40545 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.101261 -0.425611 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0975713 -0.411841 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0911807 -0.435691 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.11872 -0.44307 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.10864 -0.45315 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.13249 -0.44676 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.162382 -0.486264 0.544331 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.174264 -0.502603 0.558526 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.15142 -0.495376 0.564491 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.170327 -0.479659 0.566757 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.185226 -0.49349 0.538366 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.18129 -0.470546 0.546597 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.173345 -0.477151 0.524171 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.166319 -0.509207 0.536101 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.154437 -0.492868 0.521905 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.143475 -0.501981 0.542066 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0984274 -0.491265 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0810612 -0.508376 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0745774 -0.484874 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0837352 -0.498397 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.104911 -0.514767 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.107585 -0.504787 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.122277 -0.497655 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0957534 -0.501244 0.484868 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.11312 -0.484132 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0892696 -0.477742 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0984274 -0.491265 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.082906 -0.501491 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0745774 -0.484874 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0892696 -0.477742 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.106756 -0.507882 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.11312 -0.484132 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.122277 -0.497655 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0920638 -0.515014 0.579103 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.107585 -0.504787 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0837352 -0.498397 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.153845 -0.574159 0.618405 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.202534 -0.612768 0.658726 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.225282 -0.612732 0.668328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.22113 -0.60221 0.64638 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.212428 -0.591695 0.666956 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.206686 -0.62329 0.680674 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.193832 -0.602253 0.679302 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.183939 -0.623325 0.671072 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.215388 -0.633805 0.660098 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.192641 -0.63384 0.650495 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.211236 -0.623283 0.63815 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.225396 -0.554987 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.243024 -0.542885 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.225396 -0.554987 0.593714 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.219861 -0.534333 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.243024 -0.542885 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.219861 -0.534333 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.225396 -0.554987 0.643096 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.248559 -0.563539 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.23093 -0.575642 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.23093 -0.575642 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.184086 -0.543919 0.678886 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.200547 -0.527458 0.687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.205161 -0.540303 0.666541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.187702 -0.522843 0.666541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.179472 -0.531074 0.699462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.166627 -0.526459 0.678886 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.163011 -0.547535 0.691232 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.196931 -0.548533 0.699462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.18047 -0.564994 0.691232 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.201546 -0.561378 0.678886 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.130984 -0.631939 0.658726 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.132649 -0.643128 0.680674 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.152367 -0.631785 0.671072 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.133263 -0.618482 0.679302 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.111266 -0.643283 0.668328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.11188 -0.618637 0.666956 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.109601 -0.632094 0.64638 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.130371 -0.656585 0.660098 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.128706 -0.645397 0.63815 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.150088 -0.645242 0.650495 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.112536 -0.56309 0.678886 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.11011 -0.549659 0.699462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.132596 -0.555684 0.691232 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.118927 -0.53924 0.678886 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.09005 -0.557065 0.687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0988668 -0.546646 0.666541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0924762 -0.570497 0.666541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.103719 -0.573509 0.699462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.106145 -0.58694 0.678886 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.126205 -0.579534 0.691232 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0822954 -0.593331 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0609772 -0.591664 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0822954 -0.593331 0.643096 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.076761 -0.572676 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0609772 -0.591664 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.076761 -0.572676 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0822954 -0.593331 0.593714 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0665116 -0.612319 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0878298 -0.613986 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0878298 -0.613986 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.172294 -0.643008 0.598245 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.189742 -0.660425 0.599616 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.196144 -0.636618 0.598245 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.185725 -0.645434 0.618821 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.165892 -0.666816 0.599616 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.161875 -0.651825 0.618821 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.148444 -0.649399 0.598245 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.17631 -0.657999 0.57904 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.158862 -0.640582 0.577669 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.182712 -0.634191 0.577669 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.123605 -0.6044 0.557924 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.107144 -0.620861 0.549693 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.119989 -0.625475 0.57027 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.102529 -0.608016 0.57027 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.11076 -0.599785 0.537348 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.106145 -0.58694 0.557924 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.127221 -0.583324 0.545578 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.128219 -0.617245 0.537348 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.14468 -0.600784 0.545578 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.141064 -0.621859 0.557924 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.195155 -0.585228 0.557924 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.203972 -0.574809 0.537348 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.181486 -0.568784 0.545578 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.201546 -0.561378 0.557924 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.217641 -0.591253 0.549693 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.215215 -0.577822 0.57027 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.208824 -0.601672 0.57027 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.197581 -0.598659 0.537348 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.188764 -0.609078 0.557924 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.175095 -0.592634 0.545578 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0329639 -0.552323 0.43322 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.0248832 -0.625877 0.436618 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0316054 -0.646362 0.448652 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0478 -0.627981 0.445566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0287309 -0.625173 0.460998 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00868865 -0.644258 0.439705 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00581415 -0.623069 0.45205 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00196644 -0.623773 0.427671 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0277577 -0.647066 0.424272 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0210355 -0.62658 0.412239 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0439523 -0.628685 0.421186 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0822954 -0.593331 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.105299 -0.593994 0.479204 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.100664 -0.582384 0.457911 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0926585 -0.572783 0.479204 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0869303 -0.604941 0.49155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0742898 -0.58373 0.49155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0639267 -0.604278 0.482603 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0949359 -0.614541 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0719323 -0.613879 0.46131 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.090301 -0.602932 0.448964 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0138144 -0.584567 0.497099 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0177119 -0.584898 0.521479 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0364224 -0.580268 0.506047 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0185345 -0.56353 0.509133 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00489609 -0.589197 0.512531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00407348 -0.567829 0.500186 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00879364 -0.588867 0.488152 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0129918 -0.605935 0.509445 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00909422 -0.605605 0.485065 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0317022 -0.601305 0.494013 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0244483 -0.584869 0.399581 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0473753 -0.5935 0.402668 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0308315 -0.595617 0.420874 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0399691 -0.57344 0.415013 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0409921 -0.582752 0.381374 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0335859 -0.562692 0.39372 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0180651 -0.574121 0.378288 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0318545 -0.604929 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00892756 -0.596298 0.384149 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0153107 -0.607046 0.405442 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0355172 -0.54356 0.460062 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0495897 -0.530389 0.475494 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0261165 -0.53532 0.481355 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.031221 -0.519442 0.463149 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0589904 -0.538628 0.454201 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0406217 -0.527681 0.441856 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0449178 -0.551799 0.438769 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0538859 -0.554507 0.472408 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0398133 -0.567678 0.456976 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0304127 -0.559438 0.478269 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0163676 -0.511316 0.396183 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0212225 -0.48882 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00896145 -0.491256 0.408529 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00194055 -0.497372 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0286287 -0.50888 0.37489 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00546563 -0.517432 0.37489 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0237738 -0.531375 0.383837 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0395307 -0.502764 0.396183 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0346758 -0.525259 0.40513 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0272696 -0.505199 0.417476 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0440327 -0.593633 0.372739 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0604766 -0.607302 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0678827 -0.587242 0.372739 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0604766 -0.607302 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0366265 -0.613693 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0366265 -0.613693 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0201827 -0.600023 0.372739 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0440327 -0.593633 0.348047 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0275889 -0.579964 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0514389 -0.573573 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0521134 -0.520079 0.369341 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0542684 -0.523344 0.344961 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0591566 -0.541988 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0358996 -0.534291 0.357307 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0472252 -0.501435 0.353908 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0288565 -0.512382 0.366254 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0450702 -0.49817 0.378288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0704822 -0.509132 0.356995 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0683272 -0.505868 0.381374 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0753703 -0.527777 0.372427 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.101445 -0.561087 0.406378 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.118381 -0.551884 0.390945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0944221 -0.550745 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.103361 -0.536664 0.403291 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.125404 -0.562225 0.412239 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.110383 -0.547006 0.424584 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.108468 -0.571428 0.427671 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.116465 -0.576307 0.394032 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0995293 -0.58551 0.409464 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0925065 -0.575168 0.388171 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.247614 -0.494808 0.43322 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.313607 -0.494287 0.399581 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.326876 -0.484182 0.381374 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.302705 -0.488171 0.378288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.310432 -0.470513 0.39372 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.337778 -0.490299 0.402668 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.321334 -0.476629 0.415013 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.324509 -0.500404 0.420874 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.330051 -0.507957 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.316783 -0.518062 0.405442 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.305881 -0.511946 0.384149 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.269833 -0.434629 0.396183 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.279233 -0.426389 0.37489 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.286276 -0.448298 0.383837 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.263449 -0.445377 0.37489 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.262789 -0.41272 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.247006 -0.431707 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.253389 -0.420959 0.408529 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.285616 -0.415641 0.396183 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.276216 -0.42388 0.417476 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.29266 -0.43755 0.40513 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.302539 -0.452978 0.460062 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.320401 -0.436971 0.454201 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.3148 -0.455413 0.438769 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.29902 -0.436675 0.441856 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.30814 -0.434535 0.475494 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.286759 -0.434239 0.463149 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.290278 -0.450543 0.481355 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.32392 -0.453274 0.472408 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.306057 -0.469281 0.478269 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.318318 -0.471717 0.456976 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.291389 -0.554467 0.436618 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.314604 -0.562288 0.439705 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.310183 -0.541186 0.427671 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.306499 -0.542501 0.45205 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.29581 -0.575569 0.448652 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.287705 -0.555781 0.460998 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.272595 -0.567748 0.445566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.299494 -0.574255 0.424272 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.276279 -0.566433 0.421186 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.295073 -0.553152 0.412239 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.28032 -0.513157 0.497099 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.298839 -0.507811 0.512531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.302049 -0.505577 0.488152 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.287442 -0.489718 0.500186 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.27711 -0.515392 0.521479 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.265714 -0.497299 0.509133 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.258591 -0.520738 0.506047 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.291716 -0.531251 0.509445 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.273198 -0.536597 0.494013 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.294927 -0.529016 0.485065 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.225396 -0.554987 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.227186 -0.567359 0.49155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.246777 -0.555283 0.482603 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.227528 -0.54267 0.49155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.205805 -0.567063 0.479204 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.206147 -0.542374 0.479204 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.204014 -0.554691 0.457911 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.225054 -0.579676 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.223263 -0.567305 0.448964 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.244644 -0.567601 0.46131 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.258683 -0.536117 0.372739 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.275127 -0.549787 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282533 -0.529727 0.372739 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.275127 -0.549787 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.251277 -0.556177 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.251277 -0.556177 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.234833 -0.542508 0.372739 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.258683 -0.536117 0.348047 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.242239 -0.522448 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.266089 -0.516058 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.19269 -0.536638 0.406378 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.17251 -0.549603 0.412239 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.191778 -0.549105 0.427671 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.177908 -0.528912 0.424584 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.173421 -0.537136 0.390945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.178819 -0.516445 0.403291 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.193601 -0.524171 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.187292 -0.557329 0.394032 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.207471 -0.544363 0.388171 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.20656 -0.556831 0.409464 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.214908 -0.476459 0.369341 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.209819 -0.457868 0.353908 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.210053 -0.453963 0.378288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.2312 -0.458164 0.366254 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.214674 -0.480363 0.344961 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.236055 -0.480659 0.357307 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.219763 -0.498954 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.193527 -0.476163 0.356995 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.198616 -0.494753 0.372427 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.193761 -0.472258 0.381374 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.172546 -0.643951 1.11022e-16 RAD 0.166667
+ txt002
+ SPHERE CENTER -0.157543 -0.835815 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.122136 -0.871646 0.165419 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.102403 -0.871334 0.180258 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.100577 -0.862937 0.157111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.113406 -0.850164 0.173902 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.123961 -0.880044 0.188567 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.134964 -0.858873 0.182211 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.143694 -0.880356 0.173728 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.111133 -0.892817 0.171776 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.130866 -0.893129 0.156937 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.109307 -0.884419 0.148628 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0854653 -0.82339 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0654286 -0.811594 0.114524 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0820122 -0.820516 0.0985541 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0876595 -0.80102 0.112614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0688817 -0.814468 0.138803 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0911125 -0.803895 0.136894 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0889183 -0.826265 0.147112 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0632344 -0.833964 0.124743 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.083271 -0.845761 0.133052 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.079818 -0.842886 0.108773 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.135649 -0.799077 0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.120908 -0.781177 0.180075 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.113462 -0.795477 0.161374 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.13149 -0.778973 0.157875 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.143095 -0.784778 0.190293 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.153678 -0.782573 0.168094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.157836 -0.802678 0.181811 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.125067 -0.801282 0.193792 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.139808 -0.819182 0.18531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.11762 -0.815582 0.175091 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.194213 -0.884071 0.153697 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.197746 -0.891905 0.176845 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.175383 -0.884286 0.169668 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.193701 -0.867957 0.172398 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.216576 -0.89169 0.160875 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.212531 -0.867741 0.156428 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.213043 -0.883856 0.137727 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.198259 -0.908019 0.158144 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.194726 -0.900186 0.134996 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.175896 -0.900401 0.150967 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.207727 -0.811502 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.212743 -0.794108 0.176661 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.189621 -0.802328 0.173931 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.199907 -0.788345 0.156372 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.230849 -0.803282 0.162601 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.218012 -0.797518 0.142311 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.225832 -0.820676 0.14581 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.220563 -0.817265 0.18016 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.215547 -0.83466 0.163369 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.197441 -0.825486 0.177429 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.229621 -0.84824 0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.25245 -0.843832 0.107698 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.233837 -0.846687 0.123668 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.235043 -0.826426 0.109608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.248234 -0.845385 0.0834188 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.230827 -0.827978 0.0853287 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.225404 -0.849792 0.0751099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.247028 -0.865646 0.0974792 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.224198 -0.870053 0.0891702 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.228415 -0.868501 0.113449 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.14403 -0.908384 0.104938 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.128672 -0.926643 0.111295 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.1198 -0.904034 0.106848 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.133221 -0.90826 0.127138 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.152902 -0.930993 0.109385 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.157451 -0.912609 0.125228 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.16826 -0.912733 0.103028 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.139481 -0.926768 0.0890951 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.154838 -0.908508 0.0827387 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.130608 -0.904159 0.0846485 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.179437 -0.872552 0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.188167 -0.894035 0.0421477 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.172046 -0.89378 0.0608487 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.195141 -0.885777 0.0643473 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.195558 -0.872807 0.0319289 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.202532 -0.864549 0.0541285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.186828 -0.851325 0.0404111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.172463 -0.880811 0.0284303 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.163733 -0.859328 0.0369125 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.156342 -0.880556 0.0471312 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.107359 -0.860128 0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0905999 -0.853284 0.0455609 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.111382 -0.840233 0.0482916 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0940331 -0.839638 0.0658506 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.086577 -0.873178 0.0596212 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0900102 -0.859532 0.079911 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.103336 -0.880022 0.0764123 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.103926 -0.873773 0.0420622 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.120685 -0.880618 0.0588533 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.124708 -0.860723 0.044793 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0133465 -0.69376 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.0838533 -0.674309 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.103063 -0.66171 0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0876683 -0.673446 0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0800983 -0.653258 0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0992478 -0.662574 0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0762832 -0.654121 0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0800382 -0.675172 0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.106818 -0.682761 0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0876083 -0.69536 0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0914233 -0.694497 0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0539145 -0.666287 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0547519 -0.662466 0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0439578 -0.682791 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0332597 -0.660752 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0647085 -0.645962 0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0432164 -0.644249 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0638711 -0.649783 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0754066 -0.668 0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0745692 -0.671821 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0646126 -0.688325 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0325183 -0.62221 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0446211 -0.604582 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.053173 -0.627745 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0325183 -0.62221 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0239663 -0.599047 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0118635 -0.616676 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0118635 -0.616676 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0446211 -0.604582 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0325183 -0.62221 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.053173 -0.627745 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0432853 -0.701782 0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0608821 -0.693716 0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0652402 -0.694884 0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0496759 -0.677932 0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0389272 -0.700615 0.202664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.027721 -0.684831 0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0213304 -0.708681 0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0544915 -0.717566 0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0368947 -0.725632 0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0588496 -0.718734 0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00804971 -0.649684 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.00328338 -0.628657 0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0152909 -0.642244 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.000378614 -0.630031 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.026624 -0.636097 0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.022962 -0.637471 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0313903 -0.657124 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0117117 -0.648309 0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.016478 -0.669336 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00686255 -0.661896 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0272215 -0.721234 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0310802 -0.720593 0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00820099 -0.718114 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0246945 -0.7 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0501007 -0.723713 0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.043715 -0.70312 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.046242 -0.724354 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0336072 -0.741827 0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0297485 -0.742467 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.010728 -0.739347 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0646815 -0.745859 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0887955 -0.750021 0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0813312 -0.732161 0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.078459 -0.729506 0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0721458 -0.763719 0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0618093 -0.743204 0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0480318 -0.759557 0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.075018 -0.766375 0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.050904 -0.762212 0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0675537 -0.748514 0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0058253 -0.76531 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.00415829 -0.786629 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0148294 -0.770845 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0058253 -0.76531 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.024813 -0.781094 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.02648 -0.759776 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.02648 -0.759776 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00415829 -0.786629 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0058253 -0.76531 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0148294 -0.770845 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0347427 -0.737837 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0542122 -0.747099 0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0550267 -0.7241 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0553974 -0.743371 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0339282 -0.760836 0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0351134 -0.757108 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0144587 -0.751574 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0335575 -0.741565 0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.014088 -0.732303 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0343719 -0.718566 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.172546 -0.643951 0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.142305 -0.61371 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.125845 -0.597249 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.12123 -0.610094 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.138689 -0.592635 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.14692 -0.600865 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.159765 -0.596251 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.163381 -0.617326 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.12946 -0.618324 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.145921 -0.634785 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.124846 -0.631169 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.100996 -0.624779 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0833673 -0.612676 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.100996 -0.624779 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.10653 -0.604124 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0833673 -0.612676 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.10653 -0.604124 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.100996 -0.624779 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0778329 -0.633331 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0954616 -0.645433 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0954616 -0.645433 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.153374 -0.5724 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.141271 -0.554772 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.13272 -0.577935 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.153374 -0.5724 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.161926 -0.549237 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.174029 -0.566866 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.174029 -0.566866 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.141271 -0.554772 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.153374 -0.5724 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.13272 -0.577935 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.213855 -0.632882 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.216282 -0.61945 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.193796 -0.625476 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.207465 -0.609032 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.236341 -0.626857 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.227525 -0.616438 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.233915 -0.640288 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.222672 -0.6433 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.220246 -0.656732 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.200186 -0.649326 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.224924 -0.591572 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.2291 -0.567237 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.209804 -0.576452 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.209804 -0.576452 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.24422 -0.582357 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.224924 -0.591572 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.240045 -0.606693 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.24422 -0.582357 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.240045 -0.606693 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.224924 -0.591572 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.244096 -0.663122 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.265414 -0.661455 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.244096 -0.663122 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.249631 -0.642468 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.265414 -0.661455 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.249631 -0.642468 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.244096 -0.663122 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.25988 -0.68211 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.238562 -0.683777 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.238562 -0.683777 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.161477 -0.68526 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.148046 -0.687686 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.137627 -0.678869 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.154071 -0.6652 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.171896 -0.694077 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.177921 -0.671591 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.185327 -0.691651 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.155452 -0.707746 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.168883 -0.70532 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.145033 -0.698929 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.191718 -0.715501 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.190051 -0.736819 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.171063 -0.721035 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.191718 -0.715501 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.210706 -0.731284 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.212373 -0.709966 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.212373 -0.709966 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.190051 -0.736819 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.191718 -0.715501 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.171063 -0.721035 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.120168 -0.696329 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.095832 -0.700504 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.105047 -0.681209 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.105047 -0.681209 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.110952 -0.715624 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.120168 -0.696329 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.135288 -0.711449 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.110952 -0.715624 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.135288 -0.711449 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.120168 -0.696329 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.343435 -0.786005 8.51251e-17 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.392454 -0.82165 0.0425863 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.400556 -0.824791 0.065698 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.376528 -0.821021 0.0614442 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.392663 -0.802599 0.058292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.416482 -0.82542 0.0468401 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.408589 -0.803228 0.0394341 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.40838 -0.822279 0.0237283 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.400347 -0.843843 0.0499923 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.392245 -0.840701 0.0268805 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.376319 -0.840073 0.0457385 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.323622 -0.80984 0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.308073 -0.80634 0.0861356 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.300378 -0.802721 0.0629546 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.316395 -0.786996 0.0732426 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.331317 -0.813459 0.0904587 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.339639 -0.794116 0.0775657 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.346866 -0.81696 0.0716007 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.315299 -0.829184 0.0801706 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.330849 -0.832685 0.0613127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.307605 -0.825565 0.0569896 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.370774 -0.753118 0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.367981 -0.734271 0.076187 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.348136 -0.745269 0.0664462 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.362711 -0.731279 0.0522508 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.390619 -0.74212 0.070222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.385349 -0.739128 0.0462858 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.393412 -0.760966 0.0545162 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.376044 -0.756109 0.0844174 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.378837 -0.774956 0.0687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.356199 -0.767107 0.0746767 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.412267 -0.797815 -0.0246914 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.436217 -0.793573 -0.0204376 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.420728 -0.796968 -0.00151032 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.419454 -0.776294 -0.0149506 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.427756 -0.79442 -0.0436186 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.410993 -0.777141 -0.0381316 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.403807 -0.798662 -0.0478724 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.42903 -0.815094 -0.0301783 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.405081 -0.819335 -0.0344321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.413542 -0.818489 -0.0112511 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.390587 -0.729282 -0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.392427 -0.704862 -0.00994863 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.373948 -0.714218 0.00349164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.374248 -0.717401 -0.0209919 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.409067 -0.719927 -0.0202367 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.390887 -0.732465 -0.0312799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.407227 -0.744347 -0.0170845 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.408767 -0.716744 0.0042468 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.406927 -0.741164 0.00739901 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.390287 -0.726099 0.0176871 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.363249 -0.76217 -0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.356966 -0.747522 -0.0861356 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.352002 -0.740618 -0.0629546 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.339469 -0.759239 -0.0732426 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.368213 -0.769074 -0.0904587 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.350716 -0.780791 -0.0775657 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.374496 -0.783722 -0.0716007 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.380746 -0.750453 -0.0801706 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.387029 -0.765101 -0.0613127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.375782 -0.743549 -0.0569896 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.365116 -0.854538 -0.0178949 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.365674 -0.878086 -0.0104889 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.346241 -0.863875 -0.00500196 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.367962 -0.859887 0.00604126 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.384548 -0.868748 -0.0233819 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.386837 -0.85055 -0.00685171 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.38399 -0.8452 -0.0307879 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.362827 -0.872736 -0.0344251 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.362269 -0.849188 -0.0418311 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.343394 -0.858526 -0.0289382 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.316097 -0.818893 -0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.297057 -0.819591 -0.076187 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.304244 -0.79807 -0.0664462 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.293153 -0.814956 -0.0522508 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.30891 -0.840413 -0.070222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.305006 -0.835779 -0.0462858 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.32795 -0.839716 -0.0545162 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.320001 -0.823527 -0.0844174 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.339041 -0.822829 -0.0687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.327188 -0.802007 -0.0746767 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.296284 -0.842728 0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.272611 -0.848999 0.00994863 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.278432 -0.829121 -0.00349164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.281616 -0.828835 0.0209919 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.290462 -0.862606 0.0202367 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.299468 -0.842441 0.0312799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.314135 -0.856335 0.0170845 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.287278 -0.862893 -0.0042468 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.310951 -0.856621 -0.00739901 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.293099 -0.843015 -0.0176871 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.358439 -0.594141 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.389119 -0.547576 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.386849 -0.525642 0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.366733 -0.538964 0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.379645 -0.528407 0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.409235 -0.534255 0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.402031 -0.537019 0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.411505 -0.556189 0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.396323 -0.544812 0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.398593 -0.566746 0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.376207 -0.558134 0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.317871 -0.566667 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.299647 -0.551072 0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.29885 -0.563547 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.315344 -0.545434 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.318667 -0.554192 0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.334364 -0.548554 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.336891 -0.569787 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.302174 -0.572306 0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.320398 -0.587901 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.301377 -0.584781 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.339267 -0.522591 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.327164 -0.504962 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.318612 -0.528125 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.339267 -0.522591 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.347819 -0.499428 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.359921 -0.517056 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.359921 -0.517056 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.327164 -0.504962 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.339267 -0.522591 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.318612 -0.528125 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.429687 -0.57505 0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.446515 -0.55776 0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.428387 -0.562617 0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.423296 -0.5512 0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.447815 -0.570193 0.0882695 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.424596 -0.563633 0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.430987 -0.587483 0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.452905 -0.58161 0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.436077 -0.5989 0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.434777 -0.586467 0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.379835 -0.550064 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.372012 -0.535334 0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.359551 -0.536327 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.35918 -0.555599 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.392296 -0.549071 0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.379464 -0.569335 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.400119 -0.563801 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.392667 -0.529799 0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.400489 -0.54453 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.380205 -0.530793 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.399007 -0.621614 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.420252 -0.632748 0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.408963 -0.638118 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.419661 -0.61608 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.410295 -0.616244 0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.409705 -0.599576 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.38905 -0.60511 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.399597 -0.638282 0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.378352 -0.627149 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.388308 -0.643653 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.408291 -0.619127 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.415912 -0.617918 0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.39183 -0.616439 0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.406911 -0.597788 0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.432372 -0.620605 0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.423371 -0.600475 0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.424751 -0.621814 0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.417292 -0.639257 0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.409671 -0.640465 0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.39321 -0.637778 0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.37761 -0.665691 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.375943 -0.687009 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.356956 -0.671225 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.37761 -0.665691 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.396598 -0.681475 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.398265 -0.660156 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.398265 -0.660156 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.375943 -0.687009 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.37761 -0.665691 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.356956 -0.671225 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.337042 -0.638217 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.320629 -0.641183 0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.313702 -0.630777 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.328614 -0.618565 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.34397 -0.648623 0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.351955 -0.626005 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.360383 -0.645657 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.329058 -0.660835 0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.345471 -0.65787 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.32213 -0.65043 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.358439 -0.594141 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.409774 -0.542042 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.413579 -0.517869 -0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.395831 -0.525596 -0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.393219 -0.528508 -0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.427522 -0.534315 -0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.407161 -0.544953 -0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.423716 -0.558488 -0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.430134 -0.531404 -0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.426328 -0.555577 -0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.412386 -0.539131 -0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.379835 -0.550064 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.375068 -0.529037 -0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.356494 -0.542624 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.371406 -0.530412 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.398409 -0.536477 -0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.394747 -0.537852 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.403175 -0.557504 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.383497 -0.548689 -0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.388263 -0.569716 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.364922 -0.562276 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.339267 -0.522591 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.327164 -0.504962 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.318612 -0.528125 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.339267 -0.522591 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.347819 -0.499428 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.359921 -0.517056 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.359921 -0.517056 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.327164 -0.504962 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.339267 -0.522591 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.318612 -0.528125 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.388377 -0.586119 -0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.399584 -0.570335 -0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.403942 -0.569167 -0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.381987 -0.562269 -0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.384019 -0.587286 -0.202664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.366422 -0.57922 -0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.372813 -0.60307 -0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.405974 -0.594185 -0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.394768 -0.609969 -0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.410332 -0.593017 -0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.317871 -0.566667 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.317033 -0.562847 -0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.327827 -0.583171 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.338525 -0.561133 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.307077 -0.546343 -0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.328569 -0.544629 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.307914 -0.550163 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.296378 -0.568381 -0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.297216 -0.572202 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.307172 -0.588706 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.337042 -0.638217 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.317573 -0.64748 -0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.316758 -0.624481 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.316388 -0.643752 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.337857 -0.661216 -0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.336672 -0.657489 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.357326 -0.651954 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.338228 -0.641945 -0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.357697 -0.632683 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.337413 -0.618946 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.428945 -0.613592 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.451897 -0.612625 -0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.432663 -0.614807 -0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.436515 -0.593593 -0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.448179 -0.61141 -0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.432797 -0.592379 -0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.425227 -0.612377 -0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.444328 -0.632624 -0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.421376 -0.633591 -0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.425094 -0.634806 -0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.37761 -0.665691 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.375943 -0.687009 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.356956 -0.671225 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.37761 -0.665691 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.396598 -0.681475 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.398265 -0.660156 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.398265 -0.660156 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.375943 -0.687009 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.37761 -0.665691 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.356956 -0.671225 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.399007 -0.621614 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.402865 -0.620974 -0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.379986 -0.618494 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.39648 -0.600381 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.421886 -0.624094 -0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.4155 -0.603501 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.418027 -0.624734 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.405392 -0.642207 -0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.401533 -0.642848 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.382513 -0.639728 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.157543 -0.835815 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.119969 -0.899353 -0.117284 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0977075 -0.909872 -0.115431 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0997803 -0.886771 -0.1239 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.104052 -0.891613 -0.100068 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.117896 -0.922453 -0.108814 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.124241 -0.904194 -0.0934517 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.140158 -0.911935 -0.110668 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.113625 -0.917612 -0.132647 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.135886 -0.907093 -0.1345 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.115698 -0.894512 -0.141116 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0844101 -0.836885 -0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0627848 -0.826973 -0.106005 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0805529 -0.830202 -0.122844 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.083104 -0.81296 -0.105354 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0666419 -0.833656 -0.0825505 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0869612 -0.819643 -0.0818993 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0882673 -0.843568 -0.0759343 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0640908 -0.850898 -0.10004 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0857161 -0.860809 -0.093424 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0818589 -0.854126 -0.116879 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.130205 -0.868703 -0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.11253 -0.867758 -0.0334138 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.107566 -0.860854 -0.0565949 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.122142 -0.846864 -0.0423994 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.135168 -0.875606 -0.0274488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.14478 -0.854713 -0.0364345 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.152843 -0.876551 -0.0446649 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.120593 -0.889596 -0.0416443 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.138267 -0.890541 -0.0588603 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.115629 -0.882692 -0.0648253 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.193102 -0.898283 -0.129006 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.201143 -0.920038 -0.120537 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.17991 -0.910616 -0.112168 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.201384 -0.900209 -0.105825 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.214335 -0.907705 -0.137375 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.214576 -0.887876 -0.122663 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.206294 -0.88595 -0.145845 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.192861 -0.918112 -0.143718 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.18482 -0.896357 -0.152187 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.171628 -0.90869 -0.135349 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.203337 -0.867633 -0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.209658 -0.868948 -0.0385197 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.186008 -0.865773 -0.0448623 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.202239 -0.84746 -0.0481565 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.226988 -0.870808 -0.0560094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.219569 -0.84932 -0.0656463 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.220667 -0.869493 -0.0798417 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.210757 -0.889121 -0.0527151 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.204436 -0.887806 -0.0765474 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.187106 -0.885946 -0.0590577 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.230676 -0.834745 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.252002 -0.824206 -0.116217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.234336 -0.827952 -0.0993785 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.231282 -0.810793 -0.116868 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.248342 -0.830999 -0.139672 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.227621 -0.817586 -0.140323 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.227016 -0.841538 -0.146288 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.251396 -0.848158 -0.122182 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.23007 -0.858698 -0.128798 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.23373 -0.851905 -0.105343 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.147308 -0.866465 -0.177765 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.130609 -0.876203 -0.193128 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.124356 -0.857385 -0.178416 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.128522 -0.879733 -0.16878 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.153561 -0.885283 -0.192477 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.151474 -0.888813 -0.168128 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.170259 -0.875546 -0.177114 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.149395 -0.862935 -0.202114 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.166093 -0.853198 -0.186751 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.143141 -0.844117 -0.187402 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.184881 -0.802927 -0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.180723 -0.785723 -0.188808 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.173028 -0.782104 -0.165627 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.161937 -0.798991 -0.179823 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.192576 -0.806546 -0.194773 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.17379 -0.819813 -0.185788 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.196734 -0.82375 -0.177557 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.203667 -0.78966 -0.180578 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.207825 -0.806864 -0.163362 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.195972 -0.786041 -0.157397 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.111748 -0.803997 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.108311 -0.798532 -0.183703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.119537 -0.819589 -0.17736 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.131037 -0.797989 -0.174066 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.100522 -0.78294 -0.166213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.123249 -0.782397 -0.156576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.10396 -0.788405 -0.142381 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0890219 -0.80454 -0.169507 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0924597 -0.810005 -0.145675 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.100248 -0.825597 -0.163165 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.172546 -0.643951 -0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.202787 -0.61371 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.200937 -0.595399 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.194794 -0.591462 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.180539 -0.605717 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.208929 -0.617647 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.188531 -0.627965 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.210779 -0.635958 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.223185 -0.603392 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.225035 -0.621702 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.217042 -0.599454 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.244096 -0.624779 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.260374 -0.607636 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.240901 -0.612854 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.237705 -0.600929 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.26357 -0.619561 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.240901 -0.612854 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.247291 -0.636704 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.266765 -0.631486 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.250487 -0.648629 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.247291 -0.636704 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.191718 -0.5724 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.185011 -0.549732 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.167868 -0.56601 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.179793 -0.569205 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.208861 -0.556122 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.203643 -0.575596 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.215568 -0.578791 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.196936 -0.552927 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.203643 -0.575596 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.179793 -0.569205 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.131237 -0.632882 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.131575 -0.625593 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.15071 -0.6381 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.146508 -0.614836 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.112102 -0.620375 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.127034 -0.609618 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.111763 -0.627664 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.116304 -0.643639 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.115965 -0.650927 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.135439 -0.656145 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.120168 -0.591572 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.105912 -0.577317 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.111438 -0.600302 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.128897 -0.582843 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.114642 -0.568587 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.137627 -0.574113 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.128897 -0.582843 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0971825 -0.586046 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.111438 -0.600302 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.102708 -0.609032 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.100996 -0.663122 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0783272 -0.656415 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0978007 -0.651197 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0946054 -0.639272 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0815225 -0.66834 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0978007 -0.651197 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.104191 -0.675047 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0847178 -0.680265 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.107387 -0.686972 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.104191 -0.675047 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.183615 -0.68526 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.182351 -0.708085 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.165569 -0.700531 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.188833 -0.704733 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.200397 -0.692813 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.206879 -0.689462 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.201661 -0.669989 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.177134 -0.688611 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.178397 -0.665787 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.160351 -0.681058 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.153374 -0.715501 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.136231 -0.731779 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.129524 -0.70911 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.141449 -0.712305 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.160081 -0.738169 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.165299 -0.718696 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.177224 -0.721891 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.148156 -0.734974 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.165299 -0.718696 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.141449 -0.712305 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.224924 -0.696329 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.23918 -0.710584 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.216195 -0.705059 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.233654 -0.687599 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.24791 -0.701855 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.242384 -0.678869 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.233654 -0.687599 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.23045 -0.719314 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.216195 -0.705059 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.207465 -0.713788 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0133465 -0.69376 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.0631985 -0.668775 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0667914 -0.661946 -0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0511945 -0.680354 -0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0452771 -0.65711 -0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0787954 -0.650366 -0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0572811 -0.64553 -0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0752026 -0.657195 -0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0847128 -0.673611 -0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.08112 -0.680439 -0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.069116 -0.692019 -0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00804971 -0.649684 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.000226782 -0.634953 -0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0122343 -0.635947 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.012605 -0.655218 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0205108 -0.64869 -0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00767898 -0.668955 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0283337 -0.66342 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0208815 -0.629419 -0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0287044 -0.644149 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00842045 -0.630413 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0325183 -0.62221 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0446211 -0.604582 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.053173 -0.627745 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0325183 -0.62221 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0239663 -0.599047 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0118635 -0.616676 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0118635 -0.616676 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0446211 -0.604582 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0325183 -0.62221 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.053173 -0.627745 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0845947 -0.712851 -0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.107813 -0.706291 -0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0896851 -0.701434 -0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0909853 -0.689001 -0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.102723 -0.717709 -0.0882695 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0858949 -0.700418 -0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0795043 -0.724268 -0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.101422 -0.730141 -0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0782041 -0.736701 -0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0832945 -0.725284 -0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0539145 -0.666287 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0721382 -0.650692 -0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.072935 -0.663167 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0564414 -0.645053 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0531177 -0.653812 -0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0374209 -0.648173 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.034894 -0.669407 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0696112 -0.671925 -0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0513875 -0.68752 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.070408 -0.6844 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0347427 -0.737837 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0511556 -0.740802 -0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0580833 -0.730397 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.043171 -0.718185 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.027815 -0.748242 -0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0198304 -0.725625 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0114021 -0.745277 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0427273 -0.760455 -0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0263144 -0.757489 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0496549 -0.750049 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0440268 -0.740325 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0650768 -0.746894 -0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0607735 -0.723153 -0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0653796 -0.739183 -0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.04833 -0.764065 -0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0486329 -0.756355 -0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.02728 -0.757496 -0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0437239 -0.748035 -0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0226739 -0.741466 -0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0394207 -0.724295 -0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0058253 -0.76531 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.00415829 -0.786629 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0148294 -0.770845 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0058253 -0.76531 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.024813 -0.781094 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.02648 -0.759776 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.02648 -0.759776 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00415829 -0.786629 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0058253 -0.76531 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0148294 -0.770845 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0272215 -0.721234 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0484665 -0.732368 -0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0371781 -0.737738 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0478762 -0.715699 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0385099 -0.715864 -0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0379196 -0.699195 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0172649 -0.70473 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0278118 -0.737902 -0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00656677 -0.726768 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0165234 -0.743272 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.471405 -0.471405 1.11022e-16 RAD 0.166667
+ txt002
+ SPHERE CENTER 0.690426 -0.508983 1.83812e-16 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.755941 -0.484794 -0.0246914 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.767658 -0.47411 -0.0436186 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.749038 -0.489758 -0.0478724 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.744501 -0.467528 -0.0381316 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.774562 -0.469146 -0.0204376 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.751405 -0.462564 -0.0149506 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.762845 -0.47983 -0.00151032 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.779098 -0.491377 -0.0301783 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.767382 -0.502061 -0.0112511 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.760478 -0.507025 -0.0344321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.695668 -0.478434 -0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.703418 -0.481931 -0.0904587 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.716184 -0.491475 -0.0716007 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.694124 -0.500827 -0.0775657 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.682902 -0.46889 -0.0861356 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.673608 -0.487786 -0.0732426 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.675152 -0.465393 -0.0629546 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.704962 -0.459538 -0.0801706 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.697211 -0.456041 -0.0569896 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.717727 -0.469082 -0.0613127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.7029 -0.436283 -0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.714226 -0.418941 -0.0202367 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.724842 -0.44101 -0.0170845 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.704751 -0.43889 -0.0312799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.692283 -0.414215 -0.00994863 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.682808 -0.434163 -0.0209919 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.680957 -0.431557 0.00349164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.712374 -0.416335 0.0042468 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.701048 -0.433677 0.0176871 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.722991 -0.438403 0.00739901 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.7507 -0.515343 0.0425863 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.773394 -0.506594 0.0468401 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.764807 -0.507924 0.0237283 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.755462 -0.491321 0.0394341 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.759287 -0.514012 0.065698 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.741355 -0.49874 0.058292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.736593 -0.522762 0.0614442 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.768632 -0.530616 0.0499923 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.745938 -0.539365 0.0457385 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.760045 -0.531946 0.0268805 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.697658 -0.466832 0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.709346 -0.447385 0.070222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.721188 -0.46231 0.0545162 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.703286 -0.447429 0.0462858 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.685816 -0.451907 0.076187 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.679757 -0.451951 0.0522508 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.674129 -0.471354 0.0664462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.703718 -0.466788 0.0844174 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.692031 -0.486235 0.0746767 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.71556 -0.481713 0.0687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.685185 -0.539531 0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.693658 -0.538818 0.0904587 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.708875 -0.534075 0.0716007 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.691194 -0.517905 0.0775657 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.669969 -0.544274 0.0861356 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.667505 -0.523361 0.0732426 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.661495 -0.544988 0.0629546 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.687649 -0.560445 0.0801706 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.679176 -0.561158 0.0569896 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.702866 -0.555702 0.0613127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.743468 -0.557494 -0.0178949 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.767402 -0.560084 -0.0233819 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.755145 -0.53997 -0.0307879 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.760285 -0.543179 -0.00685171 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.755725 -0.577608 -0.0104889 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.748608 -0.560703 0.00604126 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.731791 -0.575017 -0.00500196 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.750585 -0.574398 -0.0344251 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.726651 -0.571808 -0.0289382 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.738328 -0.554284 -0.0418311 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.677953 -0.581682 0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.682851 -0.601808 0.0202367 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.700216 -0.58454 0.0170845 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.680568 -0.579842 0.0312799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.660588 -0.59895 0.00994863 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.658304 -0.576984 0.0209919 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.65569 -0.578824 -0.00349164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.680237 -0.603648 -0.0042468 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.675339 -0.583522 -0.0176871 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.697602 -0.58638 -0.00739901 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.683194 -0.551134 -0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.687731 -0.573364 -0.070222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.703871 -0.56324 -0.0545162 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.682033 -0.571303 -0.0462858 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.667055 -0.561258 -0.076187 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.661356 -0.559196 -0.0522508 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.662518 -0.539027 -0.0664462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.688893 -0.553195 -0.0844174 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.684356 -0.530964 -0.0746767 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.705033 -0.543071 -0.0687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.607487 -0.335322 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.629404 -0.313405 -0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.626214 -0.316595 -0.202664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.624401 -0.335868 -0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.606941 -0.318408 -0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.631217 -0.294133 -0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.611945 -0.295946 -0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.634407 -0.290942 -0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.648676 -0.311592 -0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.651867 -0.308402 -0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.646863 -0.330864 -0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.610996 -0.384191 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.623201 -0.403702 -0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.635431 -0.385946 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.62031 -0.401066 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.598766 -0.401947 -0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.595876 -0.399312 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.586561 -0.382437 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.613886 -0.386827 -0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.601681 -0.367317 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.626116 -0.369071 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.558618 -0.331813 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.539107 -0.319608 -0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.541743 -0.322499 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.556863 -0.307378 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.555982 -0.328923 -0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.573738 -0.316693 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.575492 -0.341128 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.540862 -0.344043 -0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.560372 -0.356248 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.543497 -0.346933 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.625895 -0.264535 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.637402 -0.248969 -0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.646193 -0.271807 -0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.625088 -0.268363 -0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.617105 -0.241698 -0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.604791 -0.261092 -0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.605598 -0.257264 -0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.638209 -0.245142 -0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.626702 -0.260708 -0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.647 -0.267979 -0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.555109 -0.282943 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.550934 -0.258608 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.570229 -0.267823 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.570229 -0.267823 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.535813 -0.273728 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.555109 -0.282943 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.539989 -0.298064 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.535813 -0.273728 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.539989 -0.298064 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.555109 -0.282943 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.603979 -0.286452 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.613271 -0.265398 -0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.627912 -0.281225 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.610787 -0.26842 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.589337 -0.270625 -0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.586853 -0.273647 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.580045 -0.291679 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.606463 -0.283431 -0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.59717 -0.304484 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.621104 -0.299257 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.678274 -0.316914 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.69384 -0.305407 -0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.674446 -0.317721 -0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.671002 -0.296616 -0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.697667 -0.3046 -0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.67483 -0.295809 -0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.682101 -0.316107 -0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.701111 -0.325704 -0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.685545 -0.337211 -0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.681717 -0.338018 -0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.656357 -0.33883 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.677411 -0.329538 -0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.674389 -0.332022 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.661584 -0.314897 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.659378 -0.336346 -0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.643552 -0.321705 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.638325 -0.345639 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.672184 -0.353472 -0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.65113 -0.362764 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.669162 -0.355956 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.659866 -0.3877 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.684201 -0.391875 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.674986 -0.37258 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.674986 -0.37258 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.669081 -0.406996 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.659866 -0.3877 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.644745 -0.40282 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.669081 -0.406996 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.644745 -0.40282 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.659866 -0.3877 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.607487 -0.335322 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.659645 -0.283164 0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.672915 -0.269894 0.0882695 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.666987 -0.293281 0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.649528 -0.275822 0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.665573 -0.259777 0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.642185 -0.265705 0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.652302 -0.273047 0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.683032 -0.277236 0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.669762 -0.290507 0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.677104 -0.300624 0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.656357 -0.33883 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.663448 -0.328536 0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.639482 -0.329516 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.654603 -0.314396 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.680322 -0.33785 0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.671477 -0.32371 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.673232 -0.348145 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.665202 -0.35297 0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.658111 -0.363265 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.641237 -0.353951 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.603979 -0.286452 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.614273 -0.279361 0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.628413 -0.288206 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.613293 -0.303327 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.589839 -0.277607 0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.588858 -0.301572 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.579544 -0.284698 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.604959 -0.262487 0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.594664 -0.269578 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.619099 -0.271332 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.610775 -0.279656 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.621535 -0.258061 0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.634468 -0.275921 0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.616678 -0.264057 0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.597842 -0.261795 0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.592985 -0.267791 0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.587082 -0.28339 0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.615632 -0.27366 0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.604872 -0.295255 0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.628565 -0.29152 0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.555109 -0.282943 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.550934 -0.258608 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.570229 -0.267823 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.570229 -0.267823 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.535813 -0.273728 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.555109 -0.282943 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.539989 -0.298064 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.535813 -0.273728 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.539989 -0.298064 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.555109 -0.282943 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.558618 -0.331813 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.55307 -0.320611 0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.57665 -0.325005 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.563845 -0.30788 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.535038 -0.327419 0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.545813 -0.314688 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.540585 -0.338621 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.547843 -0.344544 0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.553391 -0.355747 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.571423 -0.348938 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.663153 -0.332034 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.684748 -0.321274 0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.678752 -0.326131 0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.666888 -0.308341 0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.669149 -0.327177 0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.651289 -0.314244 0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.647554 -0.337937 0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.681014 -0.344967 0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.659419 -0.355727 0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.675018 -0.349824 0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.610996 -0.384191 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.622198 -0.389739 0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.63493 -0.378964 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.617804 -0.366159 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.598265 -0.394966 0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.593871 -0.371386 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.587062 -0.389418 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.61539 -0.407771 0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.604188 -0.402224 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.628121 -0.396997 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.659866 -0.3877 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.684201 -0.391875 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.674986 -0.37258 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.674986 -0.37258 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.669081 -0.406996 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.659866 -0.3877 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.644745 -0.40282 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.669081 -0.406996 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.644745 -0.40282 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.659866 -0.3877 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.554344 -0.645066 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.610229 -0.668521 0.153697 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.633406 -0.663938 0.160875 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.626429 -0.65892 0.137727 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.617928 -0.64522 0.156428 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.617206 -0.673539 0.176845 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.601728 -0.654822 0.172398 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.59403 -0.678123 0.169668 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.625707 -0.687239 0.158144 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.602531 -0.691822 0.150967 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.61873 -0.682221 0.134996 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.622977 -0.619787 0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.63767 -0.608008 0.0834188 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.620102 -0.623239 0.0751099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.613891 -0.601637 0.0853287 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.640545 -0.604555 0.107698 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.616766 -0.598184 0.109608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.625852 -0.616334 0.123668 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.646756 -0.626157 0.0974792 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.632063 -0.637936 0.113449 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.629188 -0.641389 0.0891702 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.585648 -0.598918 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.601562 -0.580238 0.162601 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.605914 -0.59781 0.14581 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.587563 -0.581665 0.142311 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.581295 -0.581346 0.176661 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.567297 -0.582773 0.156372 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.565381 -0.600026 0.173931 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.599646 -0.597491 0.18016 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.583732 -0.616171 0.177429 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.603999 -0.615063 0.163369 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.541596 -0.6938 0.165419 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.547376 -0.70016 0.188567 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.564621 -0.690564 0.173728 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.546319 -0.676324 0.182211 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.524351 -0.703396 0.180258 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.523294 -0.679561 0.173902 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.518571 -0.697037 0.157111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.542652 -0.717636 0.171776 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.536873 -0.711276 0.148628 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.559898 -0.70804 0.156937 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.517014 -0.624197 0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.516313 -0.60809 0.190293 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.538029 -0.616221 0.181811 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.524375 -0.60089 0.168094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.495298 -0.616065 0.180075 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.50336 -0.608865 0.157875 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.495999 -0.632172 0.161374 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.508952 -0.631397 0.193792 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.509653 -0.647504 0.175091 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.530668 -0.639529 0.18531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.48571 -0.670344 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.466887 -0.67091 0.138803 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.490138 -0.671107 0.147112 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.480853 -0.650637 0.136894 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.46246 -0.670147 0.114524 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.476425 -0.649874 0.112614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.481283 -0.669581 0.0985541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.471745 -0.690617 0.124743 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.490567 -0.690052 0.108773 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.494995 -0.690815 0.133052 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.578925 -0.714669 0.104938 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.597914 -0.729812 0.109385 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.602084 -0.70632 0.103028 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.592661 -0.711617 0.125228 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.574755 -0.738161 0.111295 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.569503 -0.719965 0.127138 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.555767 -0.723017 0.106848 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.584178 -0.732864 0.0890951 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.565189 -0.71772 0.0846485 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.588348 -0.709372 0.0827387 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.52304 -0.691213 0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.511567 -0.712906 0.0596212 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.529503 -0.710453 0.0764123 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.507717 -0.699372 0.079911 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.505104 -0.693665 0.0455609 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.501254 -0.680131 0.0658506 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.516576 -0.671972 0.0482916 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.526889 -0.704747 0.0420622 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.538362 -0.683054 0.044793 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.544826 -0.702295 0.0588533 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.591673 -0.665934 0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.605761 -0.658095 0.0319289 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.58746 -0.643855 0.0404111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.607672 -0.647455 0.0541285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.609975 -0.680174 0.0421477 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.611885 -0.669535 0.0643473 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.595887 -0.688013 0.0608487 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.589763 -0.676573 0.0284303 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.575674 -0.684413 0.0471312 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.571461 -0.662334 0.0369125 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.471405 -0.471405 0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.501645 -0.441164 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.518106 -0.424703 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.522721 -0.437548 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.505261 -0.420089 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.497031 -0.428319 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.484186 -0.423704 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.48057 -0.44478 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.51449 -0.445778 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.498029 -0.462239 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.519105 -0.458623 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.542955 -0.452233 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.560583 -0.44013 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.542955 -0.452233 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.53742 -0.431578 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.560583 -0.44013 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.53742 -0.431578 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.542955 -0.452233 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.566118 -0.460785 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.548489 -0.472887 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.548489 -0.472887 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.490576 -0.399854 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.502679 -0.382226 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.511231 -0.405389 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.490576 -0.399854 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.482024 -0.376691 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.469922 -0.39432 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.469922 -0.39432 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.502679 -0.382226 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.490576 -0.399854 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.511231 -0.405389 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.430095 -0.460336 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.427669 -0.446904 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.450155 -0.45293 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.436486 -0.436486 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.407609 -0.454311 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.416426 -0.443892 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.410035 -0.467742 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.421278 -0.470754 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.423704 -0.484186 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.443764 -0.47678 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.419026 -0.419026 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.414851 -0.39469 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.434147 -0.403906 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.434147 -0.403906 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.399731 -0.409811 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.419026 -0.419026 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.403906 -0.434147 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.399731 -0.409811 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.403906 -0.434147 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.419026 -0.419026 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.399854 -0.490576 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.378536 -0.488909 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.399854 -0.490576 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.39432 -0.469922 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.378536 -0.488909 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.39432 -0.469922 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.399854 -0.490576 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.384071 -0.509564 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.405389 -0.511231 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.405389 -0.511231 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.482473 -0.512714 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.495905 -0.51514 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.506323 -0.506323 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.48988 -0.492654 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.472055 -0.521531 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.46603 -0.499045 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.458623 -0.519105 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.488498 -0.5352 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.475067 -0.532774 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.498917 -0.526383 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.452233 -0.542955 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.4539 -0.564273 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.472887 -0.548489 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.452233 -0.542955 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.433245 -0.558738 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.431578 -0.53742 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.431578 -0.53742 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.4539 -0.564273 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.452233 -0.542955 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.472887 -0.548489 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.523783 -0.523783 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.548119 -0.527958 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.538903 -0.508662 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.538903 -0.508662 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.532998 -0.543078 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.523783 -0.523783 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.508662 -0.538903 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.532998 -0.543078 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.508662 -0.538903 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.523783 -0.523783 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.335322 -0.607487 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.313405 -0.629404 0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.316595 -0.626214 0.202664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.335868 -0.624401 0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.318408 -0.606941 0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.294133 -0.631217 0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.295946 -0.611945 0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.290942 -0.634407 0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.311592 -0.648676 0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.308402 -0.651867 0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.330864 -0.646863 0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.384191 -0.610996 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.405245 -0.601704 0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.402224 -0.604188 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.389418 -0.587062 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.387213 -0.608512 0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.371386 -0.593871 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.366159 -0.617804 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.400018 -0.625637 0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.378964 -0.63493 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.396997 -0.628121 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.331813 -0.558618 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.341105 -0.537564 0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.355747 -0.553391 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.338621 -0.540585 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.317172 -0.542791 0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.314688 -0.545813 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.30788 -0.563845 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.334297 -0.555596 0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.325005 -0.57665 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.348938 -0.571423 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.264535 -0.625895 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.245336 -0.623429 0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.268271 -0.624736 0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.260997 -0.604627 0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.2416 -0.624589 0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.257262 -0.605787 0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.2608 -0.627055 0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.248874 -0.644697 0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.268073 -0.647163 0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.271809 -0.646004 0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282943 -0.555109 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.278768 -0.530773 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.298064 -0.539989 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.298064 -0.539989 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.263648 -0.545894 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282943 -0.555109 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.267823 -0.570229 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.263648 -0.545894 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.267823 -0.570229 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282943 -0.555109 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.286452 -0.603979 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.266942 -0.591774 0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.269578 -0.594664 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.284698 -0.579544 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.283817 -0.601088 0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.301572 -0.588858 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.303327 -0.613293 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.268696 -0.616209 0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.288206 -0.628413 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.271332 -0.619099 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.316914 -0.678274 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.31938 -0.697473 0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.338182 -0.681812 0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.318074 -0.674538 0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.298112 -0.693935 0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.296805 -0.671 0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.295646 -0.674736 0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.31822 -0.701209 0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.315754 -0.682009 0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.337022 -0.685547 0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.33883 -0.656357 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.351035 -0.675867 0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.363265 -0.658111 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.348145 -0.673232 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.3266 -0.674113 0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.32371 -0.671477 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.314396 -0.654603 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.341721 -0.658993 0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.329516 -0.639482 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.353951 -0.641237 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.3877 -0.659866 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.412036 -0.664041 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.40282 -0.644745 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.40282 -0.644745 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.396915 -0.679161 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.3877 -0.659866 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37258 -0.674986 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.396915 -0.679161 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37258 -0.674986 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.3877 -0.659866 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.554344 -0.645066 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.616373 -0.681385 -0.129006 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.639472 -0.678928 -0.137375 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.621631 -0.664108 -0.145845 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.629767 -0.661636 -0.122663 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.634214 -0.696205 -0.120537 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.624508 -0.678912 -0.105825 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.611115 -0.698662 -0.112168 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.626079 -0.698678 -0.143718 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.602979 -0.701135 -0.135349 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.608237 -0.683858 -0.152187 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.617144 -0.607573 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.63057 -0.595495 -0.139672 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.617371 -0.615286 -0.146288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.605919 -0.594239 -0.140323 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.630343 -0.587782 -0.116217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.605692 -0.586526 -0.116868 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.616917 -0.59986 -0.0993785 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.641795 -0.608828 -0.122182 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.628369 -0.620906 -0.105343 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.628595 -0.628619 -0.128798 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.609912 -0.649723 -0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.631982 -0.640648 -0.0560094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.62585 -0.64267 -0.0798417 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.614812 -0.625749 -0.0656463 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.616044 -0.647702 -0.0385197 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.598874 -0.632802 -0.0481565 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.593974 -0.656777 -0.0448623 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.627081 -0.664623 -0.0527151 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.605012 -0.673698 -0.0590577 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.620949 -0.666645 -0.0765474 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.553573 -0.718878 -0.117284 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.563328 -0.73992 -0.108814 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.577348 -0.719679 -0.110668 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.559693 -0.720935 -0.0934517 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.539553 -0.739118 -0.115431 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.535918 -0.720133 -0.100068 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.529798 -0.718076 -0.1239 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.557208 -0.737863 -0.132647 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.547453 -0.716821 -0.141116 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.571228 -0.717623 -0.1345 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.547112 -0.687216 -0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.554862 -0.690713 -0.0274488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.570641 -0.682694 -0.0446649 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.552739 -0.667813 -0.0364345 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.531333 -0.695235 -0.0334138 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.52921 -0.672335 -0.0423994 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.523582 -0.691738 -0.0565949 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.549235 -0.710116 -0.0416443 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.541484 -0.706619 -0.0648253 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.565014 -0.702097 -0.0588603 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.491544 -0.682558 -0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.474542 -0.688647 -0.0825505 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.498226 -0.686417 -0.0759343 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.485132 -0.666351 -0.0818993 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.46786 -0.684788 -0.106005 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.47845 -0.662492 -0.105354 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.484862 -0.678699 -0.122844 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.480953 -0.704854 -0.10004 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.497955 -0.698765 -0.116879 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.504637 -0.702624 -0.093424 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.560805 -0.676727 -0.177765 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.57563 -0.689897 -0.192477 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.585222 -0.673115 -0.177114 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.575587 -0.693998 -0.168128 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.551213 -0.693509 -0.193128 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.55117 -0.69761 -0.16878 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.536388 -0.680339 -0.178416 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.560848 -0.672626 -0.202114 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.546023 -0.659456 -0.187402 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.57044 -0.655844 -0.186751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.498776 -0.640408 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.478525 -0.627785 -0.166213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.484234 -0.630799 -0.142381 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.497935 -0.615951 -0.156576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.493066 -0.637394 -0.183703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.512476 -0.62556 -0.174066 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.513317 -0.650016 -0.17736 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.479365 -0.652241 -0.169507 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.499616 -0.664864 -0.163165 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.485075 -0.655255 -0.145675 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.561576 -0.602915 -0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.570049 -0.602201 -0.194773 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.582252 -0.615021 -0.177557 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.560414 -0.623084 -0.185788 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.549372 -0.590095 -0.188808 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.539737 -0.610978 -0.179823 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.540899 -0.590808 -0.165627 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.571211 -0.582032 -0.180578 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.562738 -0.582745 -0.157397 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.583414 -0.594852 -0.163362 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.335322 -0.607487 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.283164 -0.659645 -0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.269894 -0.672915 -0.0882695 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.293281 -0.666987 -0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.275822 -0.649528 -0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.259777 -0.665573 -0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.265705 -0.642185 -0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.273047 -0.652302 -0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.277236 -0.683032 -0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.290507 -0.669762 -0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.300624 -0.677104 -0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.33883 -0.656357 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.350033 -0.661904 -0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.362764 -0.65113 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.345639 -0.638325 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.326099 -0.667131 -0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.321705 -0.643552 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.314897 -0.661584 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.343224 -0.679937 -0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.332022 -0.674389 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.355956 -0.669162 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.286452 -0.603979 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.280905 -0.592776 -0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.304484 -0.59717 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.291679 -0.580045 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.262872 -0.599585 -0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.273647 -0.586853 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.26842 -0.610787 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.275678 -0.61671 -0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.281225 -0.627912 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.299257 -0.621104 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.279656 -0.610775 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.256944 -0.602632 -0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.26347 -0.606749 -0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.273158 -0.587686 -0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.27313 -0.606658 -0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.289344 -0.591712 -0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.295841 -0.614801 -0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.263442 -0.62572 -0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.286153 -0.633864 -0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.269968 -0.629838 -0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282943 -0.555109 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.278768 -0.530773 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.298064 -0.539989 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.298064 -0.539989 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.263648 -0.545894 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282943 -0.555109 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.267823 -0.570229 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.263648 -0.545894 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.267823 -0.570229 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282943 -0.555109 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.331813 -0.558618 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.342108 -0.551527 -0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356248 -0.560372 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.341128 -0.575492 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.317673 -0.549772 -0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.316693 -0.573738 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.307378 -0.556863 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.332793 -0.534652 -0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.322499 -0.541743 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.346933 -0.543497 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.332034 -0.663153 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.340177 -0.685865 -0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.355123 -0.669651 -0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.33606 -0.679339 -0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.317089 -0.679367 -0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.312971 -0.672841 -0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.308945 -0.656656 -0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.336151 -0.669679 -0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.328008 -0.646968 -0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.351097 -0.653465 -0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.384191 -0.610996 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.391282 -0.600701 -0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.367317 -0.601681 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.382437 -0.586561 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.408157 -0.610016 -0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.399312 -0.595876 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.401066 -0.62031 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.393037 -0.625136 -0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.385946 -0.635431 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.369071 -0.626116 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.3877 -0.659866 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.412036 -0.664041 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.40282 -0.644745 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.40282 -0.644745 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.396915 -0.679161 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.3877 -0.659866 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37258 -0.674986 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.396915 -0.679161 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37258 -0.674986 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.3877 -0.659866 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.471405 -0.471405 -0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.441164 -0.441164 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.443014 -0.422853 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.449156 -0.418916 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.463412 -0.433171 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.435021 -0.445101 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.455419 -0.455419 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.433171 -0.463412 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.420766 -0.430846 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.418916 -0.449156 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.426908 -0.426908 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.399854 -0.452233 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.383576 -0.43509 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.40305 -0.440308 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.406245 -0.428383 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.380381 -0.447015 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.40305 -0.440308 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.396659 -0.464158 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.377186 -0.45894 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.393464 -0.476083 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.396659 -0.464158 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.452233 -0.399854 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.45894 -0.377186 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.476083 -0.393464 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.464158 -0.396659 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.43509 -0.383576 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.440308 -0.40305 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.428383 -0.406245 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.447015 -0.380381 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.440308 -0.40305 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.464158 -0.396659 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.512714 -0.460336 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.512375 -0.453047 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.493241 -0.465554 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.497443 -0.44229 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.531849 -0.447829 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.516916 -0.437072 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.532187 -0.455118 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.527647 -0.471093 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.527985 -0.478381 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.508512 -0.483599 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.523783 -0.419026 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.538038 -0.404771 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.532513 -0.427756 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.515053 -0.410297 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.529309 -0.396041 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.506323 -0.401567 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.515053 -0.410297 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.546768 -0.4135 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.532513 -0.427756 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.541242 -0.436486 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.542955 -0.490576 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.565623 -0.483869 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.54615 -0.478651 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.549345 -0.466726 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.562428 -0.495794 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.54615 -0.478651 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.539759 -0.502501 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.559233 -0.507719 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.536564 -0.514426 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.539759 -0.502501 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.460336 -0.512714 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.461599 -0.535539 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.478381 -0.527985 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.455118 -0.532187 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.443553 -0.520267 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.437072 -0.516916 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.44229 -0.497443 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.466817 -0.516065 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.465554 -0.493241 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.483599 -0.508512 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.490576 -0.542955 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.507719 -0.559233 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.514426 -0.536564 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.502501 -0.539759 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.483869 -0.565623 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.478651 -0.54615 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.466726 -0.549345 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.495794 -0.562428 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.478651 -0.54615 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.502501 -0.539759 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.419026 -0.523783 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.404771 -0.538038 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.427756 -0.532513 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.410297 -0.515053 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.396041 -0.529309 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.401567 -0.506323 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.410297 -0.515053 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.4135 -0.546768 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.427756 -0.532513 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.436486 -0.541242 -0.222222 RAD 0.00617284
+ txt002
+
+END_SCENE
diff --git a/examples/parallel_for/tacheon/dat/balls3.dat b/examples/parallel_for/tacheon/dat/balls3.dat
new file mode 100644
index 0000000..2837425
--- /dev/null
+++ b/examples/parallel_for/tacheon/dat/balls3.dat
@@ -0,0 +1,14804 @@
+BEGIN_SCENE
+ OUTFILE /dev/null
+ RESOLUTION 1024 768
+ VERBOSE 0
+
+CAMERA
+ ZOOM 1.20711
+ASPECTRATIO 1.0
+ ANTIALIASING 0
+ RAYDEPTH 5
+ CENTER 2.1 1.3 1.7
+ VIEWDIR -0.700389 -0.433574 -0.566982
+ UPDIR -0.482085 -0.298433 0.82373
+
+END_CAMERA
+
+BACKGROUND 0.078 0.361 0.753
+
+LIGHT CENTER 4 3 2 RAD 0.002 COLOR 0.5 0.5 0.5
+
+LIGHT CENTER 1 -4 4 RAD 0.002 COLOR 0.5 0.5 0.5
+
+LIGHT CENTER -3 1 5 RAD 0.002 COLOR 0.5 0.5 0.5
+
+TEXDEF txt001 AMBIENT 0.2 DIFFUSE 0.8 SPECULAR 0 OPACITY 1
+PHONG PLASTIC 0 PHONG_SIZE 100000
+ COLOR 1 0.75 0.33
+ TEXFUNC 0
+
+TRI
+ V0 12 12 -0.5 V1 -12 -12 -0.5 V2 12 -12 -0.5
+ txt001
+TRI
+ V0 12 12 -0.5 V1 -12 12 -0.5 V2 -12 -12 -0.5
+ txt001
+TEXDEF txt002 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+PHONG PLASTIC 0.5 PHONG_SIZE 45.2776
+ COLOR 1 0.9 0.7
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0 0 RAD 0.5
+ txt002
+ SPHERE CENTER 0.272166 0.272166 0.544331 RAD 0.166667
+ txt002
+ SPHERE CENTER 0.420314 0.420314 0.618405 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.470715 0.470715 0.598245 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.481689 0.481689 0.57904 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.475329 0.45787 0.577669 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.45787 0.475329 0.577669 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.477074 0.494534 0.599616 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.453255 0.488174 0.598245 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.4661 0.48356 0.618821 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.494534 0.477074 0.599616 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.48356 0.4661 0.618821 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.488174 0.453255 0.598245 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.461623 0.409245 0.557924 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.47044 0.419664 0.537348 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.447954 0.425689 0.545578 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.468014 0.433095 0.557924 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.484109 0.40322 0.549693 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.481683 0.416651 0.57027 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.475292 0.392801 0.57027 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.464049 0.395814 0.537348 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.455233 0.385395 0.557924 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.441563 0.401839 0.545578 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.409245 0.461623 0.557924 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.419664 0.47044 0.537348 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.433095 0.468014 0.557924 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.425689 0.447954 0.545578 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.395814 0.464049 0.537348 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.401839 0.441563 0.545578 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.385395 0.455233 0.557924 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.40322 0.484109 0.549693 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.392801 0.475292 0.57027 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.416651 0.481683 0.57027 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.429405 0.481784 0.658726 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.441197 0.503434 0.660098 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.452601 0.483752 0.650495 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.434161 0.494577 0.63815 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.418001 0.501466 0.668328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.410965 0.492609 0.64638 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.406209 0.479816 0.666956 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.436441 0.490641 0.680674 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.42465 0.46899 0.679302 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.447846 0.470958 0.671072 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.367935 0.472692 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.36376 0.497028 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.383056 0.487812 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.383056 0.487812 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.34864 0.481907 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.367935 0.472692 0.593714 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.352815 0.457572 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.34864 0.481907 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.352815 0.457572 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.367935 0.472692 0.643096 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.379004 0.431383 0.678886 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.376578 0.444814 0.699462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.399064 0.438789 0.691232 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.385395 0.455233 0.678886 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356518 0.437408 0.687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.365335 0.447826 0.666541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.358944 0.423976 0.666541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.370187 0.420964 0.699462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.372614 0.407532 0.678886 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.392673 0.414939 0.691232 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.481784 0.429405 0.658726 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.503434 0.441197 0.660098 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.494577 0.434161 0.63815 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.483752 0.452601 0.650495 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.490641 0.436441 0.680674 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.470958 0.447846 0.671072 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.46899 0.42465 0.679302 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.501466 0.418001 0.668328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.479816 0.406209 0.666956 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.492609 0.410965 0.64638 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.431383 0.379004 0.678886 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.444814 0.376578 0.699462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.455233 0.385395 0.678886 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.438789 0.399064 0.691232 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.420964 0.370187 0.699462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.414939 0.392673 0.691232 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.407532 0.372614 0.678886 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.437408 0.356518 0.687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.423976 0.358944 0.666541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.447826 0.365335 0.666541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.472692 0.367935 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.497028 0.36376 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.487812 0.383056 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.487812 0.383056 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.481907 0.34864 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.472692 0.367935 0.643096 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.457572 0.352815 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.481907 0.34864 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.457572 0.352815 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.472692 0.367935 0.593714 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.461844 0.304709 0.43322 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.492085 0.33495 0.372739 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.492085 0.33495 0.348047 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.488469 0.313874 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.471009 0.331334 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.495701 0.356025 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.474625 0.352409 0.372739 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.495701 0.356025 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.51316 0.338566 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.51316 0.338566 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.509544 0.31749 0.372739 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.424345 0.305171 0.369341 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.40568 0.315605 0.356995 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.403931 0.312107 0.381374 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.419383 0.329161 0.372427 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.426095 0.30867 0.344961 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.439797 0.322225 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.444759 0.298235 0.357307 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.410643 0.291616 0.353908 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.429307 0.281181 0.366254 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.408893 0.288117 0.378288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.435193 0.368397 0.406378 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.440864 0.389015 0.394032 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.457301 0.37895 0.409464 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.451857 0.367697 0.388171 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.418755 0.378463 0.390945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.429748 0.357145 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.413085 0.357845 0.403291 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.4242 0.389715 0.412239 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.418529 0.369098 0.424584 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.440637 0.37965 0.427671 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.529584 0.334488 0.436618 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.546497 0.347572 0.424272 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.532117 0.331508 0.412239 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.522481 0.352406 0.421186 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.543964 0.350552 0.448652 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.519948 0.355387 0.445566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.52705 0.337468 0.460998 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.5536 0.329654 0.439705 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.536686 0.31657 0.45205 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.53922 0.313589 0.427671 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.472692 0.367935 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.48474 0.389488 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.495668 0.369235 0.46131 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.477004 0.379669 0.448964 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.461764 0.388188 0.479204 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.454027 0.37837 0.457911 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.449715 0.366636 0.479204 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.480429 0.377754 0.49155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.46838 0.356202 0.49155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.491357 0.357501 0.482603 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.499343 0.304247 0.497099 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.518259 0.314219 0.509445 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.519922 0.310678 0.485065 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.504895 0.328108 0.494013 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.49768 0.307788 0.521479 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.484316 0.321677 0.506047 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.478764 0.297816 0.509133 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.512708 0.290358 0.512531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.493791 0.280387 0.500186 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.51437 0.286818 0.488152 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.518736 0.271262 0.399581 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.539811 0.274878 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.520873 0.290418 0.384149 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.533373 0.290264 0.405442 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.537674 0.255722 0.402668 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.531235 0.271108 0.420874 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.516598 0.252106 0.415013 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.525174 0.255876 0.381374 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.504099 0.25226 0.39372 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.506236 0.271416 0.378288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.488495 0.241021 0.460062 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.50716 0.230587 0.472408 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.51153 0.24936 0.456976 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.499694 0.253381 0.478269 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.484125 0.222248 0.475494 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.476659 0.245042 0.481355 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.46546 0.232683 0.463149 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.495961 0.218227 0.454201 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.477296 0.228661 0.441856 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.500331 0.237 0.438769 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.450996 0.241483 0.396183 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.455172 0.217147 0.396183 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.472226 0.232599 0.40513 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.45115 0.228983 0.417476 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.433942 0.226031 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.429921 0.237867 0.408529 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.429767 0.250367 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.455018 0.229647 0.37489 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.450842 0.253983 0.37489 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.472072 0.245099 0.383837 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.304709 0.461844 0.43322 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.33495 0.492085 0.372739 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.33495 0.492085 0.348047 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.331334 0.471009 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.313874 0.488469 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.338566 0.51316 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.31749 0.509544 0.372739 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.338566 0.51316 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356025 0.495701 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356025 0.495701 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.352409 0.474625 0.372739 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.368397 0.435193 0.406378 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.389015 0.440864 0.394032 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.367697 0.451857 0.388171 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37895 0.457301 0.409464 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.389715 0.4242 0.412239 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37965 0.440637 0.427671 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.369098 0.418529 0.424584 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.378463 0.418755 0.390945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.357845 0.413085 0.403291 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.357145 0.429748 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.305171 0.424345 0.369341 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.315605 0.40568 0.356995 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.329161 0.419383 0.372427 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.312107 0.403931 0.381374 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.291616 0.410643 0.353908 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.288117 0.408893 0.378288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.281181 0.429307 0.366254 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.30867 0.426095 0.344961 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.298235 0.444759 0.357307 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.322225 0.439797 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.271262 0.518736 0.399581 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.274878 0.539811 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.290264 0.533373 0.405442 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.290418 0.520873 0.384149 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.255876 0.525174 0.381374 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.271416 0.506236 0.378288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.25226 0.504099 0.39372 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.255722 0.537674 0.402668 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.252106 0.516598 0.415013 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.271108 0.531235 0.420874 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.241483 0.450996 0.396183 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.217147 0.455172 0.396183 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.228983 0.45115 0.417476 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.232599 0.472226 0.40513 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.229647 0.455018 0.37489 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.245099 0.472072 0.383837 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.253983 0.450842 0.37489 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.226031 0.433942 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.250367 0.429767 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.237867 0.429921 0.408529 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.241021 0.488495 0.460062 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.230587 0.50716 0.472408 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.253381 0.499694 0.478269 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.24936 0.51153 0.456976 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.218227 0.495961 0.454201 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.237 0.500331 0.438769 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.228661 0.477296 0.441856 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.222248 0.484125 0.475494 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.232683 0.46546 0.463149 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.245042 0.476659 0.481355 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.334488 0.529584 0.436618 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.347572 0.546497 0.424272 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.352406 0.522481 0.421186 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.331508 0.532117 0.412239 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.329654 0.5536 0.439705 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.313589 0.53922 0.427671 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.31657 0.536686 0.45205 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.350552 0.543964 0.448652 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.337468 0.52705 0.460998 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.355387 0.519948 0.445566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.304247 0.499343 0.497099 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.314219 0.518259 0.509445 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.328108 0.504895 0.494013 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.310678 0.519922 0.485065 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.290358 0.512708 0.512531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.286818 0.51437 0.488152 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.280387 0.493791 0.500186 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.307788 0.49768 0.521479 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.297816 0.478764 0.509133 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.321677 0.484316 0.506047 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.367935 0.472692 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.389488 0.48474 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.379669 0.477004 0.448964 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.369235 0.495668 0.46131 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.377754 0.480429 0.49155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.357501 0.491357 0.482603 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356202 0.46838 0.49155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.388188 0.461764 0.479204 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.366636 0.449715 0.479204 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37837 0.454027 0.457911 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.230635 0.38777 0.729516 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.2506 0.446614 0.769837 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.264242 0.467193 0.770086 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.272442 0.447086 0.758332 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.253384 0.459832 0.749168 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.2424 0.46672 0.781591 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.231541 0.459359 0.760673 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.228758 0.446141 0.781342 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.261459 0.453974 0.790755 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.247817 0.433396 0.790506 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.269659 0.433868 0.779001 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.301839 0.407906 0.732914 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.319874 0.420236 0.72141 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.303021 0.407886 0.708251 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.296625 0.428474 0.720288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.318692 0.420256 0.746073 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.295442 0.428494 0.744951 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.300656 0.407926 0.757577 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.325088 0.399668 0.734036 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.307053 0.387338 0.745541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.308235 0.387318 0.720878 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.253236 0.449775 0.695877 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.263032 0.459076 0.675209 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.270029 0.436804 0.683251 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.247378 0.440021 0.673964 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.246239 0.472047 0.687835 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.230585 0.452992 0.68659 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.236443 0.462746 0.708504 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.26889 0.468829 0.697123 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.259094 0.459528 0.717791 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.275887 0.446557 0.705165 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.179397 0.426478 0.766439 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.174744 0.447688 0.778193 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.197172 0.437457 0.779597 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.1895 0.447523 0.758396 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.156968 0.436708 0.765035 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.171724 0.436544 0.745238 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.161621 0.415499 0.753281 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.164641 0.426642 0.786236 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.169293 0.405432 0.774481 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.187069 0.416412 0.787639 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.182032 0.429639 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.177682 0.45215 0.683315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.190087 0.449636 0.704516 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.200611 0.44299 0.683192 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.169628 0.432153 0.671279 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.192556 0.422992 0.671155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.173978 0.409641 0.680442 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.159104 0.438799 0.692603 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.163454 0.416288 0.701767 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.171508 0.436286 0.713804 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.159431 0.367634 0.726118 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.13761 0.368692 0.737623 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.158434 0.366998 0.750781 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.153102 0.387887 0.738744 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.138607 0.369329 0.71296 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.154099 0.388523 0.714081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.160429 0.36827 0.701455 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.14394 0.34844 0.724997 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.165761 0.347381 0.713492 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.164764 0.346745 0.738155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.227999 0.384609 0.803476 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.237348 0.393812 0.824394 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.251829 0.390976 0.804597 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.234368 0.408432 0.804721 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.213518 0.387445 0.823273 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.210538 0.402066 0.8036 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.204169 0.378242 0.802355 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.23098 0.369989 0.823149 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.221631 0.360786 0.802231 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.245461 0.367152 0.803352 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.208034 0.325765 0.763155 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.209548 0.312342 0.783824 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.229235 0.324887 0.775781 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.209827 0.337 0.785069 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.188347 0.31322 0.771198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.188626 0.337878 0.772443 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.186834 0.326643 0.750529 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.207755 0.301107 0.76191 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.206242 0.31453 0.741241 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.227442 0.313652 0.753867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.279238 0.345901 0.766553 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.302145 0.344931 0.775717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.297823 0.356827 0.754517 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.289691 0.366251 0.775841 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.28356 0.334005 0.787754 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.271106 0.355325 0.787878 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.260653 0.334975 0.77859 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.291692 0.324581 0.766429 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.268785 0.325551 0.757266 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.28737 0.336477 0.745229 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.115031 0.4293 0.544331 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.102505 0.502308 0.544331 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.110567 0.524146 0.536101 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.126738 0.506465 0.542066 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.112687 0.504055 0.521905 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0863343 0.519988 0.538366 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0884544 0.499897 0.524171 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0782715 0.49815 0.546597 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.100385 0.522399 0.558526 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0923218 0.500561 0.566757 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.116555 0.504718 0.564491 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.160392 0.474661 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.177777 0.492047 0.579103 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.176681 0.473492 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.159222 0.490951 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.161488 0.493217 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.142932 0.492121 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.144102 0.475831 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.178947 0.475757 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.161561 0.458371 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.177851 0.457202 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.160392 0.474661 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.167697 0.481967 0.484868 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.161561 0.458371 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.144102 0.475831 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.166528 0.498257 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.142932 0.492121 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.159222 0.490951 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.183987 0.480797 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.176681 0.473492 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.177851 0.457202 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0571437 0.456947 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0450372 0.477623 0.501329 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.055591 0.475469 0.523547 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0696413 0.47788 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0465898 0.4591 0.485076 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.071194 0.459357 0.487134 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0586963 0.438424 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0325396 0.45669 0.505236 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0446461 0.436013 0.511201 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0430934 0.454536 0.527454 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.115031 0.4293 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.10495 0.439381 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0911807 0.435691 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.10864 0.45315 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.128801 0.43299 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.13249 0.44676 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.138881 0.42291 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.111341 0.415531 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.121421 0.40545 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0975713 0.411841 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0696698 0.383939 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.052284 0.366554 0.509559 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0708393 0.36765 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0533799 0.385109 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0511144 0.382844 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0522103 0.401399 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0685002 0.400229 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0685739 0.365384 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0859596 0.38277 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0871292 0.36648 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0571437 0.456947 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0493251 0.475575 0.595564 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0725262 0.467381 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.06557 0.479825 0.577461 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0339426 0.465141 0.57931 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0501875 0.46939 0.561208 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0417612 0.446512 0.565115 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0408988 0.452697 0.599471 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0487174 0.434069 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0640999 0.444504 0.601529 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0696698 0.383939 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0623642 0.376634 0.603794 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0859596 0.38277 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0685002 0.400229 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0460743 0.377803 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0522103 0.401399 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0533799 0.385109 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0635337 0.360344 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0708393 0.36765 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0871292 0.36648 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.115031 0.4293 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.125111 0.439381 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.138881 0.435691 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.121421 0.45315 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.101261 0.43299 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0975713 0.44676 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0911807 0.42291 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.11872 0.415531 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.10864 0.40545 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.13249 0.411841 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.082487 0.239622 0.655442 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.0438957 0.258053 0.715923 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0426858 0.273525 0.735128 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.064638 0.265928 0.726759 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0510334 0.281546 0.713318 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0219434 0.26565 0.724292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.030291 0.273671 0.702483 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0231533 0.250178 0.705088 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0355481 0.250032 0.737733 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.036758 0.23456 0.718528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0575003 0.242434 0.729364 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.117687 0.252557 0.719322 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.135677 0.265544 0.730157 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.138361 0.25778 0.706872 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.12224 0.275732 0.71212 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.115003 0.26032 0.742607 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.101567 0.270508 0.72457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.097014 0.247334 0.731771 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.131123 0.242369 0.737359 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.113134 0.229382 0.726523 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.133808 0.234605 0.714074 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0863845 0.308551 0.682285 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0971427 0.330622 0.67968 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.109956 0.310023 0.675083 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.091905 0.317013 0.659755 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0735708 0.329151 0.686881 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0683331 0.315541 0.666956 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0628126 0.30708 0.689486 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0916222 0.322161 0.702209 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.080864 0.30009 0.704814 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.104436 0.301561 0.697613 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00869528 0.245118 0.652044 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0110117 0.257416 0.660413 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00823377 0.253319 0.675329 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0102865 0.269325 0.656641 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0105502 0.249215 0.637128 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.010748 0.261124 0.633356 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00915679 0.236916 0.628759 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0126029 0.233209 0.655816 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00710408 0.22091 0.647447 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00664257 0.229111 0.670732 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0511841 0.295616 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0555846 0.315856 0.604965 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0705987 0.309941 0.623653 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0705297 0.296292 0.603077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.03617 0.301531 0.599717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0511152 0.281968 0.597829 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0317696 0.281291 0.613157 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.036239 0.31518 0.620293 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0318385 0.29494 0.633733 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.051253 0.309265 0.638981 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0472866 0.226687 0.591563 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.025169 0.224935 0.580727 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0281502 0.217281 0.604012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0288111 0.241399 0.598764 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0443054 0.234341 0.568278 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0479475 0.250805 0.586315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.066423 0.236092 0.579113 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0436445 0.210223 0.573526 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0657621 0.211974 0.584361 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0466257 0.202569 0.596811 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0399982 0.189123 0.689081 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0335228 0.179527 0.71089 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0567332 0.187058 0.707118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0385291 0.203632 0.709006 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0167878 0.181593 0.692853 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.021794 0.205698 0.690969 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0232631 0.191189 0.671044 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0349919 0.165018 0.690965 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0414672 0.174615 0.669156 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0582023 0.172549 0.687193 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0785895 0.170692 0.6286 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0867911 0.147549 0.631205 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.101845 0.166573 0.635801 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.083121 0.161663 0.65113 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0635354 0.151669 0.624003 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0598652 0.165782 0.643928 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0553337 0.174812 0.621398 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0822597 0.156579 0.608675 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.074058 0.179722 0.60607 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0973138 0.175603 0.613272 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.11379 0.183628 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.133336 0.176775 0.705919 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.136161 0.192663 0.687231 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.124499 0.199753 0.707807 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.110965 0.167739 0.711167 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.102127 0.190718 0.713055 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0914184 0.174592 0.697727 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.122627 0.160649 0.690591 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.103081 0.167502 0.677151 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.125452 0.176537 0.671903 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.38777 0.230635 0.729516 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.446614 0.2506 0.769837 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.467193 0.264242 0.770086 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.459832 0.253384 0.749168 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.447086 0.272442 0.758332 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.453974 0.261459 0.790755 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.433868 0.269659 0.779001 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.433396 0.247817 0.790506 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.46672 0.2424 0.781591 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.446141 0.228758 0.781342 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.459359 0.231541 0.760673 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.449775 0.253236 0.695877 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.459076 0.263032 0.675209 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.440021 0.247378 0.673964 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.436804 0.270029 0.683251 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.468829 0.26889 0.697123 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.446557 0.275887 0.705165 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.459528 0.259094 0.717791 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.472047 0.246239 0.687835 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.462746 0.236443 0.708504 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.452992 0.230585 0.68659 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.407906 0.301839 0.732914 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.420236 0.319874 0.72141 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.428474 0.296625 0.720288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.407886 0.303021 0.708251 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.399668 0.325088 0.734036 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.387318 0.308235 0.720878 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.387338 0.307053 0.745541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.420256 0.318692 0.746073 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.407926 0.300656 0.757577 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.428494 0.295442 0.744951 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.384609 0.227999 0.803476 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.393812 0.237348 0.824394 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.408432 0.234368 0.804721 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.390976 0.251829 0.804597 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.369989 0.23098 0.823149 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.367152 0.245461 0.803352 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.360786 0.221631 0.802231 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.387445 0.213518 0.823273 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.378242 0.204169 0.802355 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.402066 0.210538 0.8036 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.345901 0.279238 0.766553 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.344931 0.302145 0.775717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.366251 0.289691 0.775841 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356827 0.297823 0.754517 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.324581 0.291692 0.766429 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.336477 0.28737 0.745229 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.325551 0.268785 0.757266 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.334005 0.28356 0.787754 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.334975 0.260653 0.77859 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.355325 0.271106 0.787878 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.325765 0.208034 0.763155 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.312342 0.209548 0.783824 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.337 0.209827 0.785069 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.324887 0.229235 0.775781 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.301107 0.207755 0.76191 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.313652 0.227442 0.753867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.31453 0.206242 0.741241 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.31322 0.188347 0.771198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.326643 0.186834 0.750529 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.337878 0.188626 0.772443 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.426478 0.179397 0.766439 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.447688 0.174744 0.778193 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.447523 0.1895 0.758396 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.437457 0.197172 0.779597 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.426642 0.164641 0.786236 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.416412 0.187069 0.787639 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.405432 0.169293 0.774481 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.436708 0.156968 0.765035 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.415499 0.161621 0.753281 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.436544 0.171724 0.745238 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.367634 0.159431 0.726118 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.368692 0.13761 0.737623 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.387887 0.153102 0.738744 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.366998 0.158434 0.750781 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.34844 0.14394 0.724997 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.346745 0.164764 0.738155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.347381 0.165761 0.713492 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.369329 0.138607 0.71296 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.36827 0.160429 0.701455 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.388523 0.154099 0.714081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.429639 0.182032 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.45215 0.177682 0.683315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.44299 0.200611 0.683192 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.449636 0.190087 0.704516 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.438799 0.159104 0.692603 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.436286 0.171508 0.713804 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.416288 0.163454 0.701767 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.432153 0.169628 0.671279 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.409641 0.173978 0.680442 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.422992 0.192556 0.671155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.239622 0.082487 0.655442 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.258053 0.0438957 0.715923 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.273525 0.0426858 0.735128 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.281546 0.0510334 0.713318 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.265928 0.064638 0.726759 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.250032 0.0355481 0.737733 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.242434 0.0575003 0.729364 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.23456 0.036758 0.718528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.26565 0.0219434 0.724292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.250178 0.0231533 0.705088 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.273671 0.030291 0.702483 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.308551 0.0863845 0.682285 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.330622 0.0971427 0.67968 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.317013 0.091905 0.659755 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.310023 0.109956 0.675083 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.322161 0.0916222 0.702209 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.301561 0.104436 0.697613 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.30009 0.080864 0.704814 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.329151 0.0735708 0.686881 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.30708 0.0628126 0.689486 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.315541 0.0683331 0.666956 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.252557 0.117687 0.719322 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.265544 0.135677 0.730157 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.275732 0.12224 0.71212 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.25778 0.138361 0.706872 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.242369 0.131123 0.737359 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.234605 0.133808 0.714074 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.229382 0.113134 0.726523 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.26032 0.115003 0.742607 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.247334 0.097014 0.731771 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.270508 0.101567 0.72457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.189123 0.0399982 0.689081 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.179527 0.0335228 0.71089 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.203632 0.0385291 0.709006 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.187058 0.0567332 0.707118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.165018 0.0349919 0.690965 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.172549 0.0582023 0.687193 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.174615 0.0414672 0.669156 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.181593 0.0167878 0.692853 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.191189 0.0232631 0.671044 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.205698 0.021794 0.690969 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.183628 0.11379 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.176775 0.133336 0.705919 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.199753 0.124499 0.707807 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.192663 0.136161 0.687231 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.160649 0.122627 0.690591 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.176537 0.125452 0.671903 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.167502 0.103081 0.677151 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.167739 0.110965 0.711167 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.174592 0.0914184 0.697727 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.190718 0.102127 0.713055 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.170692 0.0785895 0.6286 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.147549 0.0867911 0.631205 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.161663 0.083121 0.65113 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.166573 0.101845 0.635801 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.156579 0.0822597 0.608675 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.175603 0.0973138 0.613272 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.179722 0.074058 0.60607 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.151669 0.0635354 0.624003 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.174812 0.0553337 0.621398 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.165782 0.0598652 0.643928 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.245118 0.00869528 0.652044 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.257416 -0.0110117 0.660413 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.269325 0.0102865 0.656641 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.253319 0.00823377 0.675329 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.233209 -0.0126029 0.655816 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.229111 0.00664257 0.670732 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.22091 0.00710408 0.647447 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.249215 -0.0105502 0.637128 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.236916 0.00915679 0.628759 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.261124 0.010748 0.633356 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.226687 0.0472866 0.591563 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.224935 0.025169 0.580727 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.241399 0.0288111 0.598764 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.217281 0.0281502 0.604012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.210223 0.0436445 0.573526 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.202569 0.0466257 0.596811 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.211974 0.0657621 0.584361 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.234341 0.0443054 0.568278 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.236092 0.066423 0.579113 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.250805 0.0479475 0.586315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.295616 0.0511841 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.315856 0.0555846 0.604965 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.296292 0.0705297 0.603077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.309941 0.0705987 0.623653 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.31518 0.036239 0.620293 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.309265 0.051253 0.638981 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.29494 0.0318385 0.633733 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.301531 0.03617 0.599717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.281291 0.0317696 0.613157 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.281968 0.0511152 0.597829 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.4293 0.115031 0.544331 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.502308 0.102505 0.544331 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.524146 0.110567 0.536101 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.504055 0.112687 0.521905 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.506465 0.126738 0.542066 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.522399 0.100385 0.558526 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.504718 0.116555 0.564491 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.500561 0.0923218 0.566757 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.519988 0.0863343 0.538366 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.49815 0.0782715 0.546597 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.499897 0.0884544 0.524171 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.474661 0.160392 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.481967 0.167697 0.484868 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.475831 0.144102 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.458371 0.161561 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.480797 0.183987 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.457202 0.177851 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.473492 0.176681 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.498257 0.166528 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.490951 0.159222 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.492121 0.142932 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.474661 0.160392 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.492047 0.177777 0.579103 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.490951 0.159222 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.473492 0.176681 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.475757 0.178947 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.457202 0.177851 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.458371 0.161561 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.493217 0.161488 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.475831 0.144102 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.492121 0.142932 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.456947 0.0571437 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.475575 0.0493251 0.595564 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.479825 0.06557 0.577461 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.467381 0.0725262 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.452697 0.0408988 0.599471 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.444504 0.0640999 0.601529 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.434069 0.0487174 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.465141 0.0339426 0.57931 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.446512 0.0417612 0.565115 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.46939 0.0501875 0.561208 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.4293 0.115031 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.439381 0.125111 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.45315 0.121421 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.435691 0.138881 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.415531 0.11872 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.411841 0.13249 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.40545 0.10864 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.43299 0.101261 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.42291 0.0911807 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.44676 0.0975713 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.383939 0.0696698 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.376634 0.0623642 0.603794 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.400229 0.0685002 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.38277 0.0859596 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.360344 0.0635337 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.36648 0.0871292 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.36765 0.0708393 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.377803 0.0460743 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.385109 0.0533799 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.401399 0.0522103 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.456947 0.0571437 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.477623 0.0450372 0.501329 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.47788 0.0696413 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.475469 0.055591 0.523547 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.45669 0.0325396 0.505236 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.454536 0.0430934 0.527454 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.436013 0.0446461 0.511201 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.4591 0.0465898 0.485076 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.438424 0.0586963 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.459357 0.071194 0.487134 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.383939 0.0696698 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.366554 0.052284 0.509559 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.385109 0.0533799 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.36765 0.0708393 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.365384 0.0685739 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.36648 0.0871292 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.38277 0.0859596 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.382844 0.0511144 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.400229 0.0685002 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.401399 0.0522103 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.4293 0.115031 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.41922 0.125111 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.40545 0.121421 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.42291 0.138881 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.44307 0.11872 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.44676 0.13249 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.45315 0.10864 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.425611 0.101261 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.435691 0.0911807 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.411841 0.0975713 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.643951 0.172546 1.11022e-16 RAD 0.166667
+ txt002
+ SPHERE CENTER 0.802608 0.281471 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.824035 0.30566 -0.177765 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.822021 0.302088 -0.202114 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.821938 0.282758 -0.186751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.802598 0.298094 -0.187402 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.824119 0.32499 -0.193128 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.804695 0.320997 -0.178416 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.826132 0.328563 -0.16878 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.843459 0.309654 -0.192477 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.845472 0.313227 -0.168128 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.843375 0.290324 -0.177114 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.787796 0.241352 -0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.785699 0.218449 -0.180578 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.802677 0.22345 -0.163362 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.778718 0.223304 -0.157397 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.770818 0.236351 -0.188808 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.763837 0.241205 -0.165627 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.772915 0.259253 -0.179823 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.794777 0.236497 -0.194773 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.796874 0.2594 -0.185788 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.811756 0.241498 -0.177557 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.752156 0.305221 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.741263 0.325175 -0.169507 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.747715 0.32493 -0.145675 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.765112 0.325981 -0.163165 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.745704 0.305466 -0.183703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.769553 0.306272 -0.17736 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.756597 0.285513 -0.174066 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.728307 0.304415 -0.166213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.7392 0.284462 -0.156576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.734759 0.304171 -0.142381 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.838847 0.34578 -0.117284 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.851488 0.360404 -0.132647 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.853509 0.335865 -0.1345 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.832518 0.347059 -0.141116 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.836826 0.370319 -0.115431 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.817857 0.356973 -0.1239 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.824185 0.355695 -0.100068 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.857816 0.359125 -0.108814 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.845176 0.344501 -0.0934517 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.859838 0.334587 -0.110668 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.766968 0.345341 -0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.768944 0.369945 -0.10004 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.788341 0.356172 -0.093424 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.780624 0.356171 -0.116879 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.747572 0.359113 -0.106005 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.759252 0.34534 -0.122844 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.745596 0.33451 -0.105354 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.755289 0.359115 -0.0825505 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.753313 0.334511 -0.0818993 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.774685 0.345342 -0.0759343 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.817421 0.321591 -0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.83071 0.340361 -0.0416443 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.840365 0.325527 -0.0588603 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.822249 0.341208 -0.0648253 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.807766 0.336425 -0.0334138 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.799305 0.337272 -0.0565949 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.794477 0.317654 -0.0423994 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.825882 0.320744 -0.0274488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.812593 0.301973 -0.0364345 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.835537 0.30591 -0.0446649 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.874487 0.28191 -0.129006 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.891539 0.292033 -0.143718 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.868678 0.28812 -0.152187 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.872763 0.305711 -0.135349 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.897348 0.285824 -0.120537 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.878572 0.299501 -0.112168 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.880296 0.275701 -0.105825 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.893263 0.268233 -0.137375 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.876212 0.25811 -0.122663 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.870402 0.264319 -0.145845 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.853061 0.257721 -0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.87538 0.26204 -0.0527151 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.87108 0.266856 -0.0765474 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.860805 0.280934 -0.0590577 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.857361 0.252905 -0.0385197 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.842785 0.271799 -0.0448623 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.835041 0.248586 -0.0481565 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.867636 0.238827 -0.0560094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.845317 0.234508 -0.0656463 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.863337 0.243643 -0.0798417 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.838248 0.217602 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.860225 0.206363 -0.122182 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.858689 0.230102 -0.128798 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.854636 0.223536 -0.105343 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.839784 0.193863 -0.116217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.834196 0.211035 -0.0993785 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.817808 0.205101 -0.116868 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.843837 0.200429 -0.139672 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.821861 0.211667 -0.140323 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.842301 0.224168 -0.146288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.643951 0.172546 -0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.61371 0.202787 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.61556 0.221097 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.621702 0.225035 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.635958 0.210779 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.607567 0.198849 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.627965 0.188531 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.605717 0.180539 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.593312 0.213105 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.591462 0.194794 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.599454 0.217042 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.5724 0.191718 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.556122 0.208861 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.575596 0.203643 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.578791 0.215568 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.552927 0.196936 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.575596 0.203643 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.569205 0.179793 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.549732 0.185011 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.56601 0.167868 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.569205 0.179793 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.624779 0.244096 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.631486 0.266765 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.648629 0.250487 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.636704 0.247291 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.607636 0.260374 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.612854 0.240901 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.600929 0.237705 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.619561 0.26357 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.612854 0.240901 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.636704 0.247291 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.68526 0.183615 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.684921 0.190903 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.665787 0.178397 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.669989 0.201661 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.704395 0.196121 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.689462 0.206879 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.704733 0.188833 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.700193 0.172858 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.700531 0.165569 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.681058 0.160351 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.696329 0.224924 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.710584 0.23918 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.705059 0.216195 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.687599 0.233654 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.701855 0.24791 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.678869 0.242384 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.687599 0.233654 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.719314 0.23045 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.705059 0.216195 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.713788 0.207465 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.715501 0.153374 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.738169 0.160081 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.718696 0.165299 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.721891 0.177224 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.734974 0.148156 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.718696 0.165299 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.712305 0.141449 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.731779 0.136231 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.70911 0.129524 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.712305 0.141449 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.632882 0.131237 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.634145 0.108412 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.650927 0.115965 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.627664 0.111763 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.616099 0.123683 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.609618 0.127034 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.614836 0.146508 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.639363 0.127886 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.6381 0.15071 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.656145 0.135439 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.663122 0.100996 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.680265 0.0847178 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.686972 0.107387 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.675047 0.104191 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.656415 0.0783272 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.651197 0.0978007 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.639272 0.0946054 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.66834 0.0815225 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.651197 0.0978007 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.675047 0.104191 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.591572 0.120168 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.577317 0.105912 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.600302 0.111438 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.582843 0.128897 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.568587 0.114642 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.574113 0.137627 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.582843 0.128897 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.586046 0.0971825 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.600302 0.111438 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.609032 0.102708 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.594141 0.358439 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.619127 0.408291 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.625955 0.411883 -0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.630791 0.390369 -0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.607547 0.396287 -0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.61429 0.429805 -0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.595882 0.414208 -0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.607462 0.426212 -0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.637535 0.423887 -0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.630706 0.420295 -0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.642371 0.402373 -0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.665691 0.37761 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.68332 0.389713 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.665691 0.37761 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.660156 0.398265 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.68332 0.389713 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.660156 0.398265 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.665691 0.37761 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.688854 0.369058 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.671225 0.356956 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.671225 0.356956 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.638217 0.337042 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.652948 0.344865 -0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.632683 0.357697 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.651954 0.357326 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.658482 0.324211 -0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.657489 0.336672 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.643752 0.316388 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.639211 0.324581 -0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.624481 0.316758 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.618946 0.337413 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.547576 0.389119 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.541008 0.410169 -0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.548718 0.410472 -0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.564748 0.405866 -0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.539866 0.388816 -0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.563607 0.384513 -0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.546435 0.367766 -0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.523836 0.393422 -0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.530405 0.372372 -0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.531546 0.393725 -0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.566667 0.317871 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.555534 0.296626 -0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.572202 0.297216 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.550163 0.307914 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.549999 0.31728 -0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.544629 0.328569 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.561133 0.338525 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.572037 0.306582 -0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.583171 0.327827 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.588706 0.307172 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.522591 0.339267 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.501272 0.340934 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.522591 0.339267 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.517056 0.359921 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.501272 0.340934 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.517056 0.359921 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.522591 0.339267 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.506807 0.320279 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.528125 0.318612 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.528125 0.318612 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.57505 0.429687 -0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.58161 0.452905 -0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.5989 0.436077 -0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.586467 0.434777 -0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.55776 0.446515 -0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.562617 0.428387 -0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.5512 0.423296 -0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.570193 0.447815 -0.0882695 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.563633 0.424596 -0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.587483 0.430987 -0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.550064 0.379835 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.547099 0.396248 -0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.569716 0.388263 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.557504 0.403175 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.527447 0.387819 -0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.537852 0.394747 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.530412 0.371406 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.539659 0.372907 -0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.542624 0.356494 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.562276 0.364922 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.621614 0.399007 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.637209 0.41723 -0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.642848 0.401533 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.624734 0.418027 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.615976 0.414703 -0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.603501 0.4155 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.600381 0.39648 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.634089 0.39821 -0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.618494 0.379986 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.639728 0.382513 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.802608 0.281471 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.858698 0.329459 0.104938 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.872345 0.34259 0.0890951 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.86421 0.32016 0.0827387 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.848329 0.338969 0.0846485 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.866833 0.351888 0.111295 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.842817 0.348268 0.106848 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.853186 0.338757 0.127138 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.882715 0.333079 0.109385 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.869068 0.319948 0.125228 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.87458 0.310649 0.103028 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.845371 0.280879 0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.849036 0.291048 0.0284303 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.826067 0.287867 0.0369125 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.840755 0.304882 0.0471312 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.868341 0.28406 0.0421477 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.86006 0.297894 0.0608487 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.864676 0.273891 0.0643473 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.853652 0.267046 0.0319289 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.849987 0.256877 0.0541285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.830683 0.263865 0.0404111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.798572 0.337088 0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.808673 0.346884 0.0420622 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.82298 0.335792 0.0588533 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.807762 0.322361 0.044793 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.784265 0.34818 0.0455609 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.783355 0.323657 0.0482916 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.774164 0.338384 0.0658506 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.799483 0.361611 0.0596212 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.789382 0.351815 0.079911 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.81379 0.350519 0.0764123 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.815936 0.330051 0.165419 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.828769 0.350165 0.171776 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.838905 0.333232 0.156937 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.820583 0.347547 0.148628 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.805799 0.346984 0.180258 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.797614 0.344366 0.157111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.792966 0.32687 0.173902 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.824121 0.332668 0.188567 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.811288 0.312554 0.182211 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.834258 0.315735 0.173728 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.75581 0.33768 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.753851 0.362219 0.124743 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.774086 0.350765 0.133052 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.76987 0.352319 0.108773 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.735575 0.349134 0.114524 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.751594 0.339233 0.0985541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.737534 0.324595 0.112614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.739791 0.347581 0.138803 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.74175 0.323042 0.136894 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.760026 0.336127 0.147112 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.759846 0.282063 0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.756464 0.29233 0.193792 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.779336 0.288514 0.18531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.765125 0.305929 0.175091 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.736973 0.285879 0.180075 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.745634 0.299478 0.161374 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.740355 0.275612 0.157875 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.751185 0.268464 0.190293 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.754567 0.258198 0.168094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.774058 0.264649 0.181811 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.862735 0.273842 0.153697 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.885497 0.282313 0.158144 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.876946 0.281455 0.134996 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.867718 0.29787 0.150967 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.871286 0.274699 0.176845 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.853506 0.290257 0.169668 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.848523 0.266228 0.172398 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.880514 0.258284 0.160875 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.857752 0.249813 0.156428 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.871963 0.257427 0.137727 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.806645 0.225855 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.818054 0.21762 0.18016 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.83061 0.230661 0.163369 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.813612 0.241754 0.177429 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.794089 0.212813 0.176661 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.789647 0.236948 0.173931 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.78268 0.221048 0.156372 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.811087 0.20172 0.162601 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.799677 0.209955 0.142311 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.823642 0.214761 0.14581 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.849407 0.225263 0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.873186 0.21889 0.0974792 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.865588 0.240865 0.0891702 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.866351 0.236437 0.113449 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.857005 0.203288 0.107698 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.850171 0.220835 0.123668 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.833227 0.20966 0.109608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.856242 0.207715 0.0834188 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.832464 0.214088 0.0853287 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.848644 0.22969 0.0751099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.594141 0.358439 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.613592 0.428945 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.626191 0.448155 0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.634643 0.42519 0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.614455 0.43276 0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.60514 0.45191 0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.593404 0.436515 0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.592541 0.4327 0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.625328 0.44434 0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.612729 0.42513 0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.63378 0.421375 0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.665691 0.37761 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.68332 0.389713 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.665691 0.37761 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.660156 0.398265 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.68332 0.389713 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.660156 0.398265 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.665691 0.37761 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.688854 0.369058 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.671225 0.356956 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.671225 0.356956 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.621614 0.399007 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.625435 0.399844 0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.627149 0.378352 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.60511 0.38905 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.619901 0.420499 0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.599576 0.409705 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.61608 0.419661 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.641939 0.409801 0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.638118 0.408963 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.643653 0.388308 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.542042 0.409774 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.53788 0.433888 0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.558395 0.423551 0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.55574 0.426423 0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.521526 0.42011 0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.539387 0.412646 0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.525689 0.395996 0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.524182 0.417238 0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.528344 0.393124 0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.544697 0.406901 0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.550064 0.379835 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.540802 0.399304 0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.54453 0.400489 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.563801 0.400119 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.546337 0.37865 0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.569335 0.379464 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.555599 0.35918 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.527065 0.37902 0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.536327 0.359551 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.530793 0.380205 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.522591 0.339267 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.501272 0.340934 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.522591 0.339267 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.517056 0.359921 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.501272 0.340934 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.517056 0.359921 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.522591 0.339267 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.506807 0.320279 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.528125 0.318612 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.528125 0.318612 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.586119 0.388377 0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.594185 0.405974 0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.609969 0.394768 0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.593017 0.410332 0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.570335 0.399584 0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.569167 0.403942 0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.562269 0.381987 0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.587286 0.384019 0.202664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.57922 0.366422 0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.60307 0.372813 0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.566667 0.317871 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.567308 0.314012 0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.587901 0.320398 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.569787 0.336891 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.546074 0.311485 0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.548554 0.334364 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.545434 0.315344 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.564188 0.294991 0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.563547 0.29885 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.584781 0.301377 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.638217 0.337042 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.659244 0.341809 0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.65787 0.345471 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.645657 0.360383 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.639592 0.33338 0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.626005 0.351955 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.618565 0.328614 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.651804 0.318468 0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.630777 0.313702 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.65043 0.32213 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.643951 0.172546 0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.674191 0.202787 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.690652 0.219248 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.695267 0.206403 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.677807 0.223862 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.669577 0.215632 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.656732 0.220246 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.653116 0.199171 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.687036 0.198172 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.670575 0.181711 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.691651 0.185327 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.715501 0.191718 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.733129 0.203821 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.715501 0.191718 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.709966 0.212373 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.733129 0.203821 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.709966 0.212373 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.715501 0.191718 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.738664 0.183166 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.721035 0.171063 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.721035 0.171063 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.663122 0.244096 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.675225 0.261725 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.683777 0.238562 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.663122 0.244096 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.65457 0.267259 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.642468 0.249631 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.642468 0.249631 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.675225 0.261725 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.663122 0.244096 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.683777 0.238562 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.602641 0.183615 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.600215 0.197046 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.622701 0.191021 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.609032 0.207465 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.580155 0.18964 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.588972 0.200059 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.582581 0.176209 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.593824 0.173196 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.596251 0.159765 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.61631 0.167171 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.591572 0.224924 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.587397 0.24926 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.606693 0.240045 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.606693 0.240045 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.572277 0.23414 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.591572 0.224924 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.576452 0.209804 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.572277 0.23414 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.576452 0.209804 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.591572 0.224924 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.5724 0.153374 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.551082 0.155041 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.5724 0.153374 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.566866 0.174029 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.551082 0.155041 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.566866 0.174029 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.5724 0.153374 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.556617 0.134387 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.577935 0.13272 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.577935 0.13272 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.655019 0.131237 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.668451 0.12881 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.678869 0.137627 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.662426 0.151296 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.644601 0.12242 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.638576 0.144906 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.631169 0.124846 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.661044 0.108751 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.647613 0.111177 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.671463 0.117567 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.624779 0.100996 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.626446 0.0796777 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.645433 0.0954616 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.624779 0.100996 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.605791 0.0852121 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.604124 0.10653 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.604124 0.10653 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.626446 0.0796777 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.624779 0.100996 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.645433 0.0954616 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.696329 0.120168 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.720665 0.115992 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.711449 0.135288 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.711449 0.135288 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.705544 0.100872 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.696329 0.120168 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.681209 0.105047 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.705544 0.100872 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.681209 0.105047 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.696329 0.120168 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.852418 0.0955788 1.89979e-16 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.922609 0.11107 -0.0178949 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.937225 0.122151 -0.0344251 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.916553 0.11086 -0.0418311 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.915202 0.131874 -0.0289382 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.943281 0.12236 -0.0104889 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.921258 0.132084 -0.00500196 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.928665 0.111279 0.00604126 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.944632 0.101346 -0.0233819 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.930016 0.0902645 -0.00685171 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.92396 0.090055 -0.0307879 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.867231 0.135698 -0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.873196 0.134634 -0.0844174 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.882112 0.117797 -0.0687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.858152 0.11765 -0.0746767 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.858315 0.152536 -0.076187 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.843271 0.135552 -0.0664462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.852349 0.1536 -0.0522508 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.882275 0.152682 -0.070222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.876309 0.153747 -0.0462858 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.89119 0.135845 -0.0545162 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.877966 0.164775 0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.890926 0.182656 -0.0042468 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.897331 0.159019 -0.00739901 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.876622 0.167676 -0.0176871 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.871561 0.188412 0.00994863 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.857256 0.173431 -0.00349164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.8586 0.17053 0.0209919 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.89227 0.179755 0.0202367 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.87931 0.161874 0.0312799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.898675 0.156118 0.0170845 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.907797 0.0709499 0.0425863 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.930963 0.0752104 0.0499923 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.924191 0.0806562 0.0268805 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.915684 0.0941344 0.0457385 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.914568 0.0655041 0.065698 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.899289 0.0844281 0.0614442 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.891402 0.0612436 0.058292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.923076 0.0520258 0.0468401 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.89991 0.0477654 0.0394341 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.916304 0.0574717 0.0237283 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.863153 0.124655 0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.875744 0.141535 0.0801706 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.88655 0.129819 0.0613127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.868763 0.146389 0.0569896 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.852347 0.136371 0.0861356 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.845366 0.141225 0.0629546 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.839756 0.119492 0.0732426 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.870135 0.119801 0.0904587 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.857544 0.102922 0.0775657 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.880941 0.108085 0.0716007 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.837606 0.0554592 0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.842832 0.0523913 0.0844174 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.86055 0.0593957 0.0687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.842434 0.0750766 0.0746767 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.819888 0.0484547 0.076187 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.81949 0.07114 0.0664462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.814662 0.0515226 0.0522508 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.838004 0.0327739 0.070222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.832778 0.0358417 0.0462858 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.855722 0.0397783 0.0545162 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.897062 0.0418734 -0.0246914 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.920407 0.0359958 -0.0301783 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.912106 0.0588574 -0.0344321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.915603 0.0511067 -0.0112511 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.905363 0.0190117 -0.0204376 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.900559 0.0341227 -0.00151032 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.882018 0.0248894 -0.0149506 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.901866 0.0267625 -0.0436186 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.878521 0.0326401 -0.0381316 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.893565 0.0496241 -0.0478724 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.826871 0.0263827 -0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.825102 0.00436945 0.0042468 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.84533 0.018173 0.00739901 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.823964 0.025051 0.0176871 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.806642 0.0125791 -0.00994863 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.805505 0.0332607 0.00349164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.808411 0.0345923 -0.0209919 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.828008 0.00570109 -0.0202367 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.829777 0.0277143 -0.0312799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.848237 0.0195047 -0.0170845 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.841683 0.0665023 -0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.840284 0.0454909 -0.0801706 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.856111 0.0473735 -0.0613127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.831823 0.0463379 -0.0569896 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.825856 0.0646197 -0.0861356 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.817395 0.0654667 -0.0629546 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.827255 0.0856311 -0.0732426 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.850144 0.0656554 -0.0904587 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.851543 0.0866667 -0.0775657 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.865971 0.0675379 -0.0716007 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.69376 -0.0133465 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.740325 -0.0440268 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.762259 -0.0417568 0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.759495 -0.0345526 0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.748937 -0.0216407 0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.743089 -0.051231 0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.729767 -0.0311149 0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.721155 -0.053501 0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.753646 -0.0641429 0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.731712 -0.0664129 0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.750882 -0.0569387 0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.76531 0.0058253 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.782939 0.0179281 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.76531 0.0058253 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.759776 0.02648 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.782939 0.0179281 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.759776 0.02648 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.76531 0.0058253 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.788473 -0.00272662 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.770845 -0.0148294 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.770845 -0.0148294 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.721234 0.0272215 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.736829 0.0454452 0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.742467 0.0297485 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.724354 0.046242 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.715595 0.0429182 0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.70312 0.043715 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.7 0.0246945 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.733709 0.0264247 0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.718114 0.00820099 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.739347 0.010728 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.668775 -0.0631985 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.669983 -0.0708196 0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.690113 -0.0618185 0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.671462 -0.0467378 0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.648644 -0.0721997 0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.650123 -0.0481178 0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.647436 -0.0645786 0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.667296 -0.0872804 0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.666087 -0.0796593 0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.687426 -0.0782793 0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.649684 0.00804971 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.646718 0.0244627 0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.669336 0.016478 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.657124 0.0313903 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.627066 0.0160343 0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.637471 0.022962 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.630031 -0.000378614 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.639278 0.00112207 0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.642244 -0.0152909 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.661896 -0.00686255 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.62221 -0.0325183 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.600892 -0.0308513 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.62221 -0.0325183 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.616676 -0.0118635 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.600892 -0.0308513 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.616676 -0.0118635 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.62221 -0.0325183 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.606426 -0.051506 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.627745 -0.053173 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.627745 -0.053173 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.712851 -0.0845947 0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.730141 -0.101422 0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.736701 -0.0782041 0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.725284 -0.0832945 0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.706291 -0.107813 0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.701434 -0.0896851 0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.689001 -0.0909853 0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.717709 -0.102723 0.0882695 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.700418 -0.0858949 0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.724268 -0.0795043 0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.666287 -0.0539145 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.655153 -0.0751594 0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.671821 -0.0745692 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.649783 -0.0638711 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.649619 -0.0545047 0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.644249 -0.0432164 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.660752 -0.0332597 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.671657 -0.0652028 0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.682791 -0.0439578 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.688325 -0.0646126 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.737837 -0.0347427 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.752567 -0.0269197 0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.732303 -0.014088 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.751574 -0.0144587 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.758102 -0.0475745 0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.757108 -0.0351134 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.743371 -0.0553974 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.73883 -0.0472037 0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.7241 -0.0550267 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.718566 -0.0343719 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.69376 -0.0133465 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.745859 -0.0646815 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.770032 -0.0684873 -0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.759394 -0.0481266 -0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.762305 -0.0507391 -0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.756497 -0.0850422 -0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.74877 -0.067294 -0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.732325 -0.0812364 -0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.753586 -0.0824297 -0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.729413 -0.0786239 -0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.742948 -0.062069 -0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.76531 0.0058253 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.782939 0.0179281 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.76531 0.0058253 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.759776 0.02648 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.782939 0.0179281 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.759776 0.02648 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.76531 0.0058253 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.788473 -0.00272662 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.770845 -0.0148294 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.770845 -0.0148294 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.737837 -0.0347427 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.758864 -0.0299763 -0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.757489 -0.0263144 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.745277 -0.0114021 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.739212 -0.0384047 -0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.725625 -0.0198304 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.718185 -0.043171 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.751424 -0.0533169 -0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.730397 -0.0580833 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.750049 -0.0496549 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.674309 -0.0838533 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.675276 -0.106805 -0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.694308 -0.091423 -0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.673094 -0.0875713 -0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.655278 -0.0992356 -0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.653095 -0.0800016 -0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.65431 -0.0762835 -0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.676491 -0.103087 -0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.675524 -0.0801352 -0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.695522 -0.0877049 -0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.666287 -0.0539145 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.666927 -0.0577732 -0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.68752 -0.0513875 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.669407 -0.034894 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.645694 -0.0603001 -0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.648173 -0.0374209 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.645053 -0.0564414 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.663807 -0.0767937 -0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.663167 -0.072935 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.6844 -0.070408 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.62221 -0.0325183 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.600892 -0.0308513 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.62221 -0.0325183 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.616676 -0.0118635 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.600892 -0.0308513 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.616676 -0.0118635 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.62221 -0.0325183 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.606426 -0.051506 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.627745 -0.053173 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.627745 -0.053173 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.701782 -0.0432853 -0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.717566 -0.0544915 -0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.725632 -0.0368947 -0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.718734 -0.0588496 -0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.693716 -0.0608821 -0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.694884 -0.0652402 -0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.677932 -0.0496759 -0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.700615 -0.0389272 -0.202664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.684831 -0.027721 -0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.708681 -0.0213304 -0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.649684 0.00804971 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.640422 0.0275193 -0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.644149 0.0287044 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.66342 0.0283337 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.645956 0.00686453 -0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.668955 0.00767898 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.655218 -0.012605 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.626685 0.00723527 -0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.635947 -0.0122343 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.630413 0.00842045 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.721234 0.0272215 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.725055 0.0280589 -0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.726768 0.00656677 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.70473 0.0172649 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.71952 0.0487136 -0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.699195 0.0379196 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.715699 0.0478762 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.741558 0.0380155 -0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.737738 0.0371781 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.743272 0.0165234 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.172546 0.643951 1.11022e-16 RAD 0.166667
+ txt002
+ SPHERE CENTER 0.281471 0.802608 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.30566 0.824035 -0.177765 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.302088 0.822021 -0.202114 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.298094 0.802598 -0.187402 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282758 0.821938 -0.186751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.309654 0.843459 -0.192477 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.290324 0.843375 -0.177114 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.313227 0.845472 -0.168128 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.32499 0.824119 -0.193128 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.328563 0.826132 -0.16878 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.320997 0.804695 -0.178416 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.305221 0.752156 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.325175 0.741263 -0.169507 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.325981 0.765112 -0.163165 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.32493 0.747715 -0.145675 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.304415 0.728307 -0.166213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.304171 0.734759 -0.142381 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.284462 0.7392 -0.156576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.305466 0.745704 -0.183703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.285513 0.756597 -0.174066 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.306272 0.769553 -0.17736 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.241352 0.787796 -0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.218449 0.785699 -0.180578 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.223304 0.778718 -0.157397 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.22345 0.802677 -0.163362 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.236497 0.794777 -0.194773 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.241498 0.811756 -0.177557 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.2594 0.796874 -0.185788 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.236351 0.770818 -0.188808 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.259253 0.772915 -0.179823 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.241205 0.763837 -0.165627 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.28191 0.874487 -0.129006 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.292033 0.891539 -0.143718 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.305711 0.872763 -0.135349 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.28812 0.868678 -0.152187 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.268233 0.893263 -0.137375 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.264319 0.870402 -0.145845 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.25811 0.876212 -0.122663 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.285824 0.897348 -0.120537 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.275701 0.880296 -0.105825 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.299501 0.878572 -0.112168 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.217602 0.838248 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.206363 0.860225 -0.122182 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.223536 0.854636 -0.105343 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.230102 0.858689 -0.128798 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.200429 0.843837 -0.139672 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.224168 0.842301 -0.146288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.211667 0.821861 -0.140323 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.193863 0.839784 -0.116217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.205101 0.817808 -0.116868 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.211035 0.834196 -0.0993785 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.257721 0.853061 -0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.26204 0.87538 -0.0527151 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.280934 0.860805 -0.0590577 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.266856 0.87108 -0.0765474 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.238827 0.867636 -0.0560094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.243643 0.863337 -0.0798417 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.234508 0.845317 -0.0656463 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.252905 0.857361 -0.0385197 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.248586 0.835041 -0.0481565 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.271799 0.842785 -0.0448623 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.34578 0.838847 -0.117284 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.360404 0.851488 -0.132647 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.347059 0.832518 -0.141116 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.335865 0.853509 -0.1345 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.359125 0.857816 -0.108814 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.334587 0.859838 -0.110668 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.344501 0.845176 -0.0934517 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.370319 0.836826 -0.115431 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.355695 0.824185 -0.100068 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356973 0.817857 -0.1239 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.321591 0.817421 -0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.340361 0.83071 -0.0416443 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.341208 0.822249 -0.0648253 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.325527 0.840365 -0.0588603 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.320744 0.825882 -0.0274488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.30591 0.835537 -0.0446649 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.301973 0.812593 -0.0364345 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.336425 0.807766 -0.0334138 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.317654 0.794477 -0.0423994 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.337272 0.799305 -0.0565949 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.345341 0.766968 -0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.369945 0.768944 -0.10004 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356171 0.780624 -0.116879 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356172 0.788341 -0.093424 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.359115 0.755289 -0.0825505 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.345342 0.774685 -0.0759343 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.334511 0.753313 -0.0818993 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.359113 0.747572 -0.106005 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.33451 0.745596 -0.105354 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.34534 0.759252 -0.122844 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.358439 0.594141 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.408291 0.619127 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.411883 0.625955 -0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.396287 0.607547 -0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.390369 0.630791 -0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.423887 0.637535 -0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.402373 0.642371 -0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.420295 0.630706 -0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.429805 0.61429 -0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.426212 0.607462 -0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.414208 0.595882 -0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.337042 0.638217 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.344865 0.652948 -0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.357326 0.651954 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.357697 0.632683 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.324581 0.639211 -0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.337413 0.618946 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.316758 0.624481 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.324211 0.658482 -0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.316388 0.643752 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.336672 0.657489 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37761 0.665691 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.389713 0.68332 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.398265 0.660156 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37761 0.665691 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.369058 0.688854 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356956 0.671225 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356956 0.671225 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.389713 0.68332 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37761 0.665691 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.398265 0.660156 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.429687 0.57505 -0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.452905 0.58161 -0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.434777 0.586467 -0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.436077 0.5989 -0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.447815 0.570193 -0.0882695 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.430987 0.587483 -0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.424596 0.563633 -0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.446515 0.55776 -0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.423296 0.5512 -0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.428387 0.562617 -0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.399007 0.621614 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.41723 0.637209 -0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.418027 0.624734 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.401533 0.642848 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.39821 0.634089 -0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.382513 0.639728 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.379986 0.618494 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.414703 0.615976 -0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.39648 0.600381 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.4155 0.603501 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.379835 0.550064 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.396248 0.547099 -0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.403175 0.557504 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.388263 0.569716 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.372907 0.539659 -0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.364922 0.562276 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356494 0.542624 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.387819 0.527447 -0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.371406 0.530412 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.394747 0.537852 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.389119 0.547576 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.410169 0.541008 -0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.405866 0.564748 -0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.410472 0.548718 -0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.393422 0.523836 -0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.393725 0.531546 -0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.372372 0.530405 -0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.388816 0.539866 -0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.367766 0.546435 -0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.384513 0.563607 -0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.339267 0.522591 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.340934 0.501272 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.359921 0.517056 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.339267 0.522591 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.320279 0.506807 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.318612 0.528125 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.318612 0.528125 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.340934 0.501272 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.339267 0.522591 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.359921 0.517056 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.317871 0.566667 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.296626 0.555534 -0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.307914 0.550163 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.297216 0.572202 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.306582 0.572037 -0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.307172 0.588706 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.327827 0.583171 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.31728 0.549999 -0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.338525 0.561133 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.328569 0.544629 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.172546 0.643951 -0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.142305 0.674191 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.144155 0.692502 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.150298 0.696439 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.164554 0.682184 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.136163 0.670254 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.156561 0.659936 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.134313 0.651943 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.121907 0.684509 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.120057 0.666199 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.12805 0.688447 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.100996 0.663122 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0847178 0.680265 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.104191 0.675047 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.107387 0.686972 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0815225 0.66834 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.104191 0.675047 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0978007 0.651197 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0783272 0.656415 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0946054 0.639272 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0978007 0.651197 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.153374 0.715501 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.160081 0.738169 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.177224 0.721891 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.165299 0.718696 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.136231 0.731779 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.141449 0.712305 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.129524 0.70911 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.148156 0.734974 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.141449 0.712305 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.165299 0.718696 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.213855 0.655019 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.213517 0.662308 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.194382 0.649801 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.198584 0.673065 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.23299 0.667526 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.218058 0.678283 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.233329 0.660237 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.228788 0.644262 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.229127 0.636974 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.209653 0.631756 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.224924 0.696329 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.23918 0.710584 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.233654 0.687599 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.216195 0.705059 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.23045 0.719314 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.207465 0.713788 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.216195 0.705059 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.24791 0.701855 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.233654 0.687599 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.242384 0.678869 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.244096 0.624779 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.266765 0.631486 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.247291 0.636704 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.250487 0.648629 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.26357 0.619561 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.247291 0.636704 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.240901 0.612854 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.260374 0.607636 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.237705 0.600929 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.240901 0.612854 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.161477 0.602641 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.162741 0.579817 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.179523 0.58737 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.156259 0.583168 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.144695 0.595088 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.138214 0.598439 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.143431 0.617912 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.167958 0.59929 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.166695 0.622115 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.184741 0.606843 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.191718 0.5724 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.208861 0.556122 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.215568 0.578791 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.203643 0.575596 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.185011 0.549732 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.179793 0.569205 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.167868 0.56601 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.196936 0.552927 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.179793 0.569205 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.203643 0.575596 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.120168 0.591572 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.105912 0.577317 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.128897 0.582843 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.111438 0.600302 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0971825 0.586046 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.102708 0.609032 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.111438 0.600302 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.114642 0.568587 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.128897 0.582843 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.137627 0.574113 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0955788 0.852418 9.1293e-17 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.11107 0.922609 -0.0178949 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.122151 0.937225 -0.0344251 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.131874 0.915202 -0.0289382 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.11086 0.916553 -0.0418311 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.101346 0.944632 -0.0233819 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.090055 0.92396 -0.0307879 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0902645 0.930016 -0.00685171 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.12236 0.943281 -0.0104889 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.111279 0.928665 0.00604126 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.132084 0.921258 -0.00500196 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.164775 0.877966 0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.182656 0.890926 -0.0042468 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.167676 0.876622 -0.0176871 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.159019 0.897331 -0.00739901 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.179755 0.89227 0.0202367 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.156118 0.898675 0.0170845 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.161874 0.87931 0.0312799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.188412 0.871561 0.00994863 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.17053 0.8586 0.0209919 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.173431 0.857256 -0.00349164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.135698 0.867231 -0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.134634 0.873196 -0.0844174 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.11765 0.858152 -0.0746767 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.117797 0.882112 -0.0687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.152682 0.882275 -0.070222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.135845 0.89119 -0.0545162 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.153747 0.876309 -0.0462858 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.152536 0.858315 -0.076187 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.1536 0.852349 -0.0522508 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.135552 0.843271 -0.0664462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0418734 0.897062 -0.0246914 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0359958 0.920407 -0.0301783 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0511067 0.915603 -0.0112511 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0588574 0.912106 -0.0344321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0267625 0.901866 -0.0436186 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0496241 0.893565 -0.0478724 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0326401 0.878521 -0.0381316 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0190117 0.905363 -0.0204376 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0248894 0.882018 -0.0149506 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0341227 0.900559 -0.00151032 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0665023 0.841683 -0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0454909 0.840284 -0.0801706 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0463379 0.831823 -0.0569896 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0473735 0.856111 -0.0613127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0656554 0.850144 -0.0904587 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0675379 0.865971 -0.0716007 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0866667 0.851543 -0.0775657 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0646197 0.825856 -0.0861356 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0856311 0.827255 -0.0732426 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0654667 0.817395 -0.0629546 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0263827 0.826871 -0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.00436945 0.825102 0.0042468 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.025051 0.823964 0.0176871 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.018173 0.84533 0.00739901 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00570109 0.828008 -0.0202367 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0195047 0.848237 -0.0170845 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0277143 0.829777 -0.0312799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0125791 0.806642 -0.00994863 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0345923 0.808411 -0.0209919 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0332607 0.805505 0.00349164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0709499 0.907797 0.0425863 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0752104 0.930963 0.0499923 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0941344 0.915684 0.0457385 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0806562 0.924191 0.0268805 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0520258 0.923076 0.0468401 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0574717 0.916304 0.0237283 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0477654 0.89991 0.0394341 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0655041 0.914568 0.065698 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0612436 0.891402 0.058292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0844281 0.899289 0.0614442 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0554592 0.837606 0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0523913 0.842832 0.0844174 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0750766 0.842434 0.0746767 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0593957 0.86055 0.0687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0327739 0.838004 0.070222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0397783 0.855722 0.0545162 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0358417 0.832778 0.0462858 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0484547 0.819888 0.076187 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0515226 0.814662 0.0522508 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.07114 0.81949 0.0664462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.124655 0.863153 0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.141535 0.875744 0.0801706 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.146389 0.868763 0.0569896 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.129819 0.88655 0.0613127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.119801 0.870135 0.0904587 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.108085 0.880941 0.0716007 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.102922 0.857544 0.0775657 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.136371 0.852347 0.0861356 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.119492 0.839756 0.0732426 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.141225 0.845366 0.0629546 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0133465 0.69376 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.0646815 0.745859 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0684873 0.770032 -0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0507391 0.762305 -0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0481266 0.759394 -0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0824297 0.753586 -0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.062069 0.742948 -0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0786239 0.729413 -0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0850422 0.756497 -0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0812364 0.732325 -0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.067294 0.74877 -0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0347427 0.737837 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0299763 0.758864 -0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0114021 0.745277 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0263144 0.757489 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0533169 0.751424 -0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0496549 0.750049 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0580833 0.730397 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0384047 0.739212 -0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.043171 0.718185 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0198304 0.725625 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0058253 0.76531 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0179281 0.782939 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.02648 0.759776 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0058253 0.76531 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00272662 0.788473 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0148294 0.770845 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0148294 0.770845 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0179281 0.782939 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0058253 0.76531 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.02648 0.759776 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0432853 0.701782 -0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0544915 0.717566 -0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0588496 0.718734 -0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0368947 0.725632 -0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0389272 0.700615 -0.202664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0213304 0.708681 -0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.027721 0.684831 -0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0608821 0.693716 -0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0496759 0.677932 -0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0652402 0.694884 -0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0272215 0.721234 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0280589 0.725055 -0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0172649 0.70473 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00656677 0.726768 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0380155 0.741558 -0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0165234 0.743272 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0371781 0.737738 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0487136 0.71952 -0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0478762 0.715699 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0379196 0.699195 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00804971 0.649684 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0275193 0.640422 -0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0283337 0.66342 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0287044 0.644149 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00723527 0.626685 -0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00842045 0.630413 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0122343 0.635947 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00686453 0.645956 -0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.012605 0.655218 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00767898 0.668955 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0838533 0.674309 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.106805 0.675276 -0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0875713 0.673094 -0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.091423 0.694308 -0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.103087 0.676491 -0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0877049 0.695522 -0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0801352 0.675524 -0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0992356 0.655278 -0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0762835 0.65431 -0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0800016 0.653095 -0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0325183 0.62221 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0308513 0.600892 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0118635 0.616676 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0325183 0.62221 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.051506 0.606426 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.053173 0.627745 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.053173 0.627745 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0308513 0.600892 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0325183 0.62221 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0118635 0.616676 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0539145 0.666287 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0577732 0.666927 -0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.034894 0.669407 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0513875 0.68752 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0767937 0.663807 -0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.070408 0.6844 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.072935 0.663167 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0603001 0.645694 -0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0564414 0.645053 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0374209 0.648173 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0133465 0.69376 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.0440268 0.740325 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0417568 0.762259 0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0216407 0.748937 0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0345526 0.759495 0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0641429 0.753646 0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0569387 0.750882 0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0664129 0.731712 0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.051231 0.743089 0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.053501 0.721155 0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0311149 0.729767 0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0272215 0.721234 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0454452 0.736829 0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.046242 0.724354 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0297485 0.742467 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0264247 0.733709 0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.010728 0.739347 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00820099 0.718114 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0429182 0.715595 0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0246945 0.7 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.043715 0.70312 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0058253 0.76531 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0179281 0.782939 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.02648 0.759776 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0058253 0.76531 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00272662 0.788473 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0148294 0.770845 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0148294 0.770845 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0179281 0.782939 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0058253 0.76531 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.02648 0.759776 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0845947 0.712851 0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.101422 0.730141 0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0832945 0.725284 0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0782041 0.736701 0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.102723 0.717709 0.0882695 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0795043 0.724268 0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0858949 0.700418 0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.107813 0.706291 0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0909853 0.689001 0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0896851 0.701434 0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0347427 0.737837 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0269197 0.752567 0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0144587 0.751574 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.014088 0.732303 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0472037 0.73883 0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0343719 0.718566 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0550267 0.7241 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0475745 0.758102 0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0553974 0.743371 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0351134 0.757108 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0539145 0.666287 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0751594 0.655153 0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0638711 0.649783 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0745692 0.671821 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0652028 0.671657 0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0646126 0.688325 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0439578 0.682791 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0545047 0.649619 0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0332597 0.660752 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0432164 0.644249 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0631985 0.668775 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0708196 0.669983 0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0467378 0.671462 0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0618185 0.690113 0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0872804 0.667296 0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0782793 0.687426 0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0796593 0.666087 0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0721997 0.648644 0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0645786 0.647436 0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0481178 0.650123 0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0325183 0.62221 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0308513 0.600892 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0118635 0.616676 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0325183 0.62221 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.051506 0.606426 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.053173 0.627745 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.053173 0.627745 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0308513 0.600892 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0325183 0.62221 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0118635 0.616676 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00804971 0.649684 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0244627 0.646718 0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0313903 0.657124 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.016478 0.669336 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00112207 0.639278 0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00686255 0.661896 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0152909 0.642244 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0160343 0.627066 0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.000378614 0.630031 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.022962 0.637471 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.281471 0.802608 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.329459 0.858698 0.104938 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.34259 0.872345 0.0890951 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.338969 0.848329 0.0846485 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.32016 0.86421 0.0827387 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.333079 0.882715 0.109385 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.310649 0.87458 0.103028 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.319948 0.869068 0.125228 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.351888 0.866833 0.111295 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.338757 0.853186 0.127138 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.348268 0.842817 0.106848 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.337088 0.798572 0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.346884 0.808673 0.0420622 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.322361 0.807762 0.044793 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.335792 0.82298 0.0588533 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.361611 0.799483 0.0596212 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.350519 0.81379 0.0764123 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.351815 0.789382 0.079911 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.34818 0.784265 0.0455609 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.338384 0.774164 0.0658506 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.323657 0.783355 0.0482916 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.280879 0.845371 0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.291048 0.849036 0.0284303 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.304882 0.840755 0.0471312 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.287867 0.826067 0.0369125 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.267046 0.853652 0.0319289 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.263865 0.830683 0.0404111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.256877 0.849987 0.0541285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.28406 0.868341 0.0421477 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.273891 0.864676 0.0643473 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.297894 0.86006 0.0608487 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.273842 0.862735 0.153697 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.282313 0.885497 0.158144 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.29787 0.867718 0.150967 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.281455 0.876946 0.134996 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.258284 0.880514 0.160875 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.257427 0.871963 0.137727 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.249813 0.857752 0.156428 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.274699 0.871286 0.176845 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.266228 0.848523 0.172398 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.290257 0.853506 0.169668 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.225263 0.849407 0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.21889 0.873186 0.0974792 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.236437 0.866351 0.113449 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.240865 0.865588 0.0891702 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.207715 0.856242 0.0834188 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.22969 0.848644 0.0751099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.214088 0.832464 0.0853287 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.203288 0.857005 0.107698 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.20966 0.833227 0.109608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.220835 0.850171 0.123668 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.225855 0.806645 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.21762 0.818054 0.18016 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.241754 0.813612 0.177429 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.230661 0.83061 0.163369 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.20172 0.811087 0.162601 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.214761 0.823642 0.14581 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.209955 0.799677 0.142311 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.212813 0.794089 0.176661 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.221048 0.78268 0.156372 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.236948 0.789647 0.173931 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.330051 0.815936 0.165419 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.350165 0.828769 0.171776 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.347547 0.820583 0.148628 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.333232 0.838905 0.156937 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.332668 0.824121 0.188567 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.315735 0.834258 0.173728 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.312554 0.811288 0.182211 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.346984 0.805799 0.180258 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.32687 0.792966 0.173902 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.344366 0.797614 0.157111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282063 0.759846 0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.29233 0.756464 0.193792 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.305929 0.765125 0.175091 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.288514 0.779336 0.18531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.268464 0.751185 0.190293 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.264649 0.774058 0.181811 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.258198 0.754567 0.168094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.285879 0.736973 0.180075 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.275612 0.740355 0.157875 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.299478 0.745634 0.161374 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.33768 0.75581 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.362219 0.753851 0.124743 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.352319 0.76987 0.108773 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.350765 0.774086 0.133052 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.347581 0.739791 0.138803 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.336127 0.760026 0.147112 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.323042 0.74175 0.136894 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.349134 0.735575 0.114524 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.324595 0.737534 0.112614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.339233 0.751594 0.0985541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.172546 0.643951 0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.202787 0.674191 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.219248 0.690652 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.223862 0.677807 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.206403 0.695267 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.198172 0.687036 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.185327 0.691651 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.181711 0.670575 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.215632 0.669577 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.199171 0.653116 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.220246 0.656732 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.244096 0.663122 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.261725 0.675225 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.244096 0.663122 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.238562 0.683777 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.261725 0.675225 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.238562 0.683777 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.244096 0.663122 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.267259 0.65457 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.249631 0.642468 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.249631 0.642468 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.191718 0.715501 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.203821 0.733129 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.212373 0.709966 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.191718 0.715501 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.183166 0.738664 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.171063 0.721035 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.171063 0.721035 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.203821 0.733129 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.191718 0.715501 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.212373 0.709966 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.131237 0.655019 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.12881 0.668451 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.151296 0.662426 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.137627 0.678869 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.108751 0.661044 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.117567 0.671463 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.111177 0.647613 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.12242 0.644601 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.124846 0.631169 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.144906 0.638576 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.120168 0.696329 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.115992 0.720665 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.135288 0.711449 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.135288 0.711449 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.100872 0.705544 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.120168 0.696329 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.105047 0.681209 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.100872 0.705544 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.105047 0.681209 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.120168 0.696329 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.100996 0.624779 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0796777 0.626446 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.100996 0.624779 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0954616 0.645433 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0796777 0.626446 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0954616 0.645433 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.100996 0.624779 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0852121 0.605791 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.10653 0.604124 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.10653 0.604124 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.183615 0.602641 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.197046 0.600215 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.207465 0.609032 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.191021 0.622701 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.173196 0.593824 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.167171 0.61631 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.159765 0.596251 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.18964 0.580155 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.176209 0.582581 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.200059 0.588972 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.153374 0.5724 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.155041 0.551082 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.174029 0.566866 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.153374 0.5724 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.134387 0.556617 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.13272 0.577935 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.13272 0.577935 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.155041 0.551082 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.153374 0.5724 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.174029 0.566866 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.224924 0.591572 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.24926 0.587397 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.240045 0.606693 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.240045 0.606693 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.23414 0.572277 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.224924 0.591572 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.209804 0.576452 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.23414 0.572277 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.209804 0.576452 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.224924 0.591572 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.358439 0.594141 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.428945 0.613592 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.448155 0.626191 0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.43276 0.614455 0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.42519 0.634643 0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.44434 0.625328 0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.421375 0.63378 0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.42513 0.612729 0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.45191 0.60514 0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.4327 0.592541 0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.436515 0.593404 0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.399007 0.621614 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.399844 0.625435 0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.38905 0.60511 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.378352 0.627149 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.409801 0.641939 0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.388308 0.643653 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.408963 0.638118 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.420499 0.619901 0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.419661 0.61608 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.409705 0.599576 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37761 0.665691 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.389713 0.68332 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.398265 0.660156 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37761 0.665691 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.369058 0.688854 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356956 0.671225 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356956 0.671225 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.389713 0.68332 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37761 0.665691 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.398265 0.660156 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.388377 0.586119 0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.405974 0.594185 0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.410332 0.593017 0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.394768 0.609969 0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.384019 0.587286 0.202664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.372813 0.60307 0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.366422 0.57922 0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.399584 0.570335 0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.381987 0.562269 0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.403942 0.569167 0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.337042 0.638217 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.341809 0.659244 0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.360383 0.645657 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.345471 0.65787 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.318468 0.651804 0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.32213 0.65043 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.313702 0.630777 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.33338 0.639592 0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.328614 0.618565 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.351955 0.626005 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.317871 0.566667 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.314012 0.567308 0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.336891 0.569787 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.320398 0.587901 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.294991 0.564188 0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.301377 0.584781 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.29885 0.563547 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.311485 0.546074 0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.315344 0.545434 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.334364 0.548554 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.409774 0.542042 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.433888 0.53788 0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.426423 0.55574 0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.423551 0.558395 0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.417238 0.524182 0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.406901 0.544697 0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.393124 0.528344 0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.42011 0.521526 0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.395996 0.525689 0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.412646 0.539387 0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.339267 0.522591 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.340934 0.501272 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.359921 0.517056 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.339267 0.522591 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.320279 0.506807 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.318612 0.528125 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.318612 0.528125 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.340934 0.501272 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.339267 0.522591 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.359921 0.517056 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.379835 0.550064 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.399304 0.540802 0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.400119 0.563801 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.400489 0.54453 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37902 0.527065 0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.380205 0.530793 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.359551 0.536327 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37865 0.546337 0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.35918 0.555599 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.379464 0.569335 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.371785 0.0996195 0.544331 RAD 0.166667
+ txt002
+ SPHERE CENTER -0.393621 0.220501 0.729516 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.368601 0.279642 0.766439 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.354293 0.299716 0.765035 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.347717 0.279022 0.753281 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.366989 0.292196 0.745238 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.375177 0.300337 0.778193 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.387873 0.292817 0.758396 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.389485 0.280263 0.779597 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.355904 0.287162 0.786236 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.370213 0.267088 0.787639 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.349329 0.266468 0.774481 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.321889 0.238665 0.726118 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.304702 0.250544 0.71296 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.32307 0.238717 0.701455 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.327715 0.259421 0.714081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.30352 0.250492 0.737623 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.326533 0.259369 0.738744 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.320707 0.238612 0.750781 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.298875 0.229788 0.724997 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.316063 0.217908 0.738155 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.317244 0.21796 0.713492 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.372464 0.281062 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.362978 0.289441 0.671279 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.35549 0.267771 0.680442 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.378255 0.270044 0.671155 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.379952 0.302733 0.683315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.395229 0.283335 0.683192 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.389438 0.294353 0.704516 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.357187 0.30046 0.692603 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.366673 0.29208 0.713804 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.349699 0.278789 0.701767 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.440333 0.261479 0.769837 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.443285 0.282991 0.781591 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.421181 0.271991 0.781342 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.4302 0.282046 0.760673 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.462437 0.27248 0.770086 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.449353 0.271534 0.749168 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.459485 0.250967 0.758332 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.453417 0.262424 0.790755 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.450466 0.240911 0.779001 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.431313 0.251423 0.790506 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.444196 0.262898 0.695877 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.449273 0.285685 0.687835 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.436139 0.282528 0.708504 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.426189 0.27701 0.68659 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.45733 0.266055 0.675209 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.434246 0.257381 0.673964 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.452254 0.243269 0.683251 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.46728 0.271573 0.697123 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.462204 0.248787 0.705165 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.454146 0.268416 0.717791 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.465353 0.202338 0.732914 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.486123 0.204606 0.746073 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.464339 0.202946 0.757577 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.470107 0.223366 0.744951 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.487137 0.203998 0.72141 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.471122 0.222757 0.720288 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.466367 0.201729 0.708251 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.481368 0.183578 0.734036 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.460599 0.18131 0.720878 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.459584 0.181918 0.745541 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.389758 0.219082 0.803476 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.378635 0.228779 0.823273 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.365937 0.225483 0.802355 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.383364 0.24293 0.8036 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.402455 0.222377 0.824394 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.407185 0.236529 0.804721 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.413578 0.21268 0.804597 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.385029 0.20493 0.823149 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.396152 0.195233 0.803352 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.372331 0.201634 0.802231 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.414778 0.15994 0.766553 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.412573 0.147477 0.787754 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.39322 0.15977 0.77859 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.412448 0.172167 0.787878 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.434131 0.147647 0.775717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.434006 0.172338 0.775841 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.436336 0.16011 0.754517 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.414903 0.13525 0.766429 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.417108 0.147713 0.745229 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.39555 0.147543 0.757266 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.343046 0.178104 0.763155 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.319723 0.177083 0.771198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.325124 0.189464 0.750529 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.332294 0.198298 0.772443 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.337645 0.165722 0.783824 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.350216 0.186938 0.785069 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.360967 0.166743 0.775781 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.330475 0.156889 0.76191 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.353797 0.157909 0.753867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.335876 0.16927 0.741241 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.191247 0.166275 0.655442 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.130089 0.20793 0.652044 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.115471 0.221102 0.637128 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.126388 0.200597 0.628759 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.13987 0.220766 0.633356 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.119172 0.228435 0.660413 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.143571 0.228099 0.656641 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.13379 0.215264 0.675329 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.10569 0.208266 0.655816 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.120308 0.195095 0.670732 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.116607 0.187762 0.647447 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.154295 0.172673 0.591563 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.15554 0.180792 0.568278 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.17557 0.171251 0.579113 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.166926 0.19323 0.586315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.134265 0.182215 0.580727 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.145651 0.194652 0.598764 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.133019 0.174096 0.604012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.142909 0.160236 0.573526 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.141663 0.152117 0.596811 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.162939 0.150694 0.584361 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.192135 0.230419 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.18209 0.243049 0.599717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.168159 0.227721 0.613157 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.185251 0.218634 0.597829 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.206066 0.245747 0.604965 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.209227 0.221332 0.603077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.216111 0.233117 0.623653 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.188974 0.254834 0.620293 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.199019 0.242204 0.638981 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.175043 0.239506 0.633733 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.167041 0.201532 0.715923 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.151829 0.219088 0.724292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.14514 0.205084 0.705088 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.163068 0.221861 0.702483 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.173729 0.215537 0.735128 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.184969 0.218309 0.713318 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.188942 0.197981 0.726759 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.155801 0.19876 0.737733 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.171014 0.181204 0.729364 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.149113 0.184756 0.718528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.229087 0.224021 0.682285 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.22829 0.248268 0.686881 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.207937 0.234532 0.689486 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.216949 0.2391 0.666956 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.249439 0.237756 0.67968 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.238098 0.228589 0.659755 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.250236 0.213509 0.675083 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.240428 0.233189 0.702209 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.241225 0.208942 0.697613 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.220075 0.219453 0.704814 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.228199 0.159877 0.719322 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.229756 0.167942 0.742607 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.207683 0.16569 0.731771 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.223214 0.183484 0.72457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.250271 0.162129 0.730157 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.243729 0.177671 0.71212 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.248714 0.154064 0.706872 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.234741 0.144336 0.737359 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.233184 0.13627 0.714074 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.212668 0.142084 0.726523 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.129201 0.143787 0.689081 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.105335 0.14887 0.692853 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.115741 0.153943 0.671044 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.121723 0.167242 0.690969 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.118795 0.138714 0.71089 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.135183 0.157086 0.709006 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.142661 0.13363 0.707118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.112813 0.125414 0.690965 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.136679 0.120331 0.687193 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.123219 0.130487 0.669156 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.190359 0.102131 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.179968 0.0897843 0.711167 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.166467 0.105492 0.697727 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.183804 0.114103 0.713055 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.20386 0.0864233 0.705919 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.207696 0.110742 0.707807 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.214251 0.0987702 0.687231 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.186523 0.0778128 0.690591 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.196914 0.0901597 0.671903 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.173022 0.0935207 0.677151 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.153407 0.108529 0.6286 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.130858 0.0995811 0.624003 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.135326 0.123725 0.621398 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.134736 0.113639 0.643928 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.148938 0.0843858 0.631205 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.152816 0.0984435 0.65113 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.171487 0.0933338 0.635801 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.149528 0.0944715 0.608675 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.172078 0.10342 0.613272 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.153997 0.118615 0.60607 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.31427 0.31427 0.544331 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.277961 0.367156 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.269898 0.374298 0.485076 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.270045 0.350338 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.291334 0.362218 0.487134 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.277815 0.391115 0.501329 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.299251 0.379036 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.285878 0.383973 0.523547 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.256525 0.379235 0.505236 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.264588 0.372093 0.527454 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.256671 0.355276 0.511201 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.252306 0.297666 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.235688 0.305995 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.259438 0.312359 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.245915 0.321516 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.228556 0.291303 0.509559 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.238783 0.306824 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.245173 0.282974 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.242079 0.282145 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.258696 0.273816 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.265828 0.288509 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.31427 0.31427 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.32435 0.32435 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.33812 0.32066 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.32066 0.33812 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.3005 0.317959 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.29681 0.331729 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.29042 0.307879 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.317959 0.3005 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.307879 0.29042 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.331729 0.29681 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.339925 0.383759 0.544331 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.334762 0.407156 0.538366 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.31686 0.392275 0.546597 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.326552 0.388696 0.524171 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.357827 0.39864 0.536101 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.349618 0.380181 0.521905 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.362991 0.375243 0.542066 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.348135 0.402218 0.558526 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.353299 0.378821 0.564491 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.330233 0.387337 0.566757 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.376234 0.330873 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.393346 0.348239 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.383366 0.345565 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.369843 0.354723 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.386213 0.333547 0.484868 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.362711 0.340031 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.369102 0.316181 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.399736 0.324389 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.382624 0.307023 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.389757 0.321715 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.376234 0.330873 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.386461 0.346394 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.362711 0.340031 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.369843 0.354723 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.399983 0.337237 0.579103 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.383366 0.345565 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.389757 0.321715 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.392851 0.322544 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.382624 0.307023 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.369102 0.316181 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.277961 0.367156 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.261966 0.385852 0.57931 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.259422 0.36581 0.565115 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.278159 0.38141 0.561208 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.280504 0.387198 0.595564 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.296698 0.382755 0.577461 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.2965 0.368501 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.261768 0.371598 0.599471 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.277764 0.352901 0.601529 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.259225 0.351556 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.31427 0.31427 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.304189 0.32435 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.29042 0.32066 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.307879 0.33812 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.328039 0.317959 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.331729 0.331729 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.33812 0.307879 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.31058 0.3005 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.32066 0.29042 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.29681 0.29681 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.252306 0.297666 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.228803 0.30415 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.238783 0.306824 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.245915 0.321516 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.242326 0.294992 0.603794 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.259438 0.312359 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.265828 0.288509 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.235194 0.2803 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.258696 0.273816 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.245173 0.282974 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.574159 0.153845 0.618405 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.612768 0.202534 0.658726 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.612732 0.225282 0.668328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.591695 0.212428 0.666956 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.60221 0.22113 0.64638 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.633805 0.215388 0.660098 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.623283 0.211236 0.63815 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.63384 0.192641 0.650495 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.62329 0.206686 0.680674 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.623325 0.183939 0.671072 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.602253 0.193832 0.679302 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.543919 0.184086 0.678886 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.527458 0.200547 0.687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.522843 0.187702 0.666541 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.540303 0.205161 0.666541 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.548533 0.196931 0.699462 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.561378 0.201546 0.678886 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.564994 0.18047 0.691232 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.531074 0.179472 0.699462 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.547535 0.163011 0.691232 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.526459 0.166627 0.678886 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.554987 0.225396 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.542885 0.243024 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.534333 0.219861 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.554987 0.225396 0.593714 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.563539 0.248559 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.575642 0.23093 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.575642 0.23093 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.542885 0.243024 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.554987 0.225396 0.643096 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.534333 0.219861 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.643008 0.172294 0.598245 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.660425 0.189742 0.599616 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.645434 0.185725 0.618821 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.636618 0.196144 0.598245 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.657999 0.17631 0.57904 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.634191 0.182712 0.577669 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.640582 0.158862 0.577669 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.666816 0.165892 0.599616 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.649399 0.148444 0.598245 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.651825 0.161875 0.618821 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.585228 0.195155 0.557924 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.574809 0.203972 0.537348 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.561378 0.201546 0.557924 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.568784 0.181486 0.545578 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.598659 0.197581 0.537348 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.592634 0.175095 0.545578 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.609078 0.188764 0.557924 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.591253 0.217641 0.549693 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.601672 0.208824 0.57027 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.577822 0.215215 0.57027 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.6044 0.123605 0.557924 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.620861 0.107144 0.549693 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.608016 0.102529 0.57027 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.625475 0.119989 0.57027 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.617245 0.128219 0.537348 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.621859 0.141064 0.557924 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.600784 0.14468 0.545578 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.599785 0.11076 0.537348 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.583324 0.127221 0.545578 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.58694 0.106145 0.557924 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.631939 0.130984 0.658726 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.643128 0.132649 0.680674 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.618482 0.133263 0.679302 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.631785 0.152367 0.671072 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.656585 0.130371 0.660098 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.645242 0.150088 0.650495 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.645397 0.128706 0.63815 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.643283 0.111266 0.668328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.632094 0.109601 0.64638 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.618637 0.11188 0.666956 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.593331 0.0822954 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.591664 0.0609772 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.572676 0.076761 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.593331 0.0822954 0.643096 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.612319 0.0665116 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.613986 0.0878298 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.613986 0.0878298 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.591664 0.0609772 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.593331 0.0822954 0.593714 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.572676 0.076761 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.56309 0.112536 0.678886 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.549659 0.11011 0.699462 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.53924 0.118927 0.678886 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555684 0.132596 0.691232 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.573509 0.103719 0.699462 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.579534 0.126205 0.691232 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.58694 0.106145 0.678886 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.557065 0.09005 0.687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.570497 0.0924762 0.666541 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.546646 0.0988668 0.666541 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.494808 0.247614 0.43322 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.494287 0.313607 0.399581 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.484182 0.326876 0.381374 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.470513 0.310432 0.39372 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.488171 0.302705 0.378288 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.507957 0.330051 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.511946 0.305881 0.384149 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.518062 0.316783 0.405442 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.490299 0.337778 0.402668 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.500404 0.324509 0.420874 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.476629 0.321334 0.415013 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.452978 0.302539 0.460062 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.436971 0.320401 0.454201 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.436675 0.29902 0.441856 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.455413 0.3148 0.438769 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.453274 0.32392 0.472408 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.471717 0.318318 0.456976 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.469281 0.306057 0.478269 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.434535 0.30814 0.475494 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.450543 0.290278 0.481355 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.434239 0.286759 0.463149 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.434629 0.269833 0.396183 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.426389 0.279233 0.37489 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.445377 0.263449 0.37489 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.448298 0.286276 0.383837 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.415641 0.285616 0.396183 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.43755 0.29266 0.40513 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.42388 0.276216 0.417476 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.41272 0.262789 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.420959 0.253389 0.408529 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.431707 0.247006 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.536117 0.258683 0.372739 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.549787 0.275127 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.549787 0.275127 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.529727 0.282533 0.372739 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.536117 0.258683 0.348047 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.516058 0.266089 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.522448 0.242239 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.556177 0.251277 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.542508 0.234833 0.372739 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.556177 0.251277 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.476459 0.214908 0.369341 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.457868 0.209819 0.353908 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.458164 0.2312 0.366254 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.453963 0.210053 0.378288 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.476163 0.193527 0.356995 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.472258 0.193761 0.381374 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.494753 0.198616 0.372427 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.480363 0.214674 0.344961 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.498954 0.219763 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.480659 0.236055 0.357307 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.536638 0.19269 0.406378 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.549603 0.17251 0.412239 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.528912 0.177908 0.424584 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.549105 0.191778 0.427671 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.557329 0.187292 0.394032 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.556831 0.20656 0.409464 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.544363 0.207471 0.388171 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.537136 0.173421 0.390945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.524171 0.193601 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.516445 0.178819 0.403291 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.554467 0.291389 0.436618 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.562288 0.314604 0.439705 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.542501 0.306499 0.45205 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.541186 0.310183 0.427671 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.574255 0.299494 0.424272 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.553152 0.295073 0.412239 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.566433 0.276279 0.421186 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.575569 0.29581 0.448652 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.567748 0.272595 0.445566 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555781 0.287705 0.460998 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.554987 0.225396 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.567359 0.227186 0.49155 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.54267 0.227528 0.49155 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555283 0.246777 0.482603 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.579676 0.225054 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.567601 0.244644 0.46131 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.567305 0.223263 0.448964 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.567063 0.205805 0.479204 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.554691 0.204014 0.457911 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.542374 0.206147 0.479204 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.513157 0.28032 0.497099 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.507811 0.298839 0.512531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.489718 0.287442 0.500186 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.505577 0.302049 0.488152 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.531251 0.291716 0.509445 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.529016 0.294927 0.485065 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.536597 0.273198 0.494013 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.515392 0.27711 0.521479 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.520738 0.258591 0.506047 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.497299 0.265714 0.509133 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.552323 0.0329639 0.43322 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.625877 0.0248832 0.436618 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.646362 0.0316054 0.448652 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.625173 0.0287309 0.460998 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.627981 0.0478 0.445566 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.647066 0.0277577 0.424272 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.628685 0.0439523 0.421186 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.62658 0.0210355 0.412239 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.644258 0.00868865 0.439705 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.623773 0.00196644 0.427671 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.623069 0.00581415 0.45205 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.584567 0.0138144 0.497099 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.584898 0.0177119 0.521479 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.56353 0.0185345 0.509133 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.580268 0.0364224 0.506047 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.605935 0.0129918 0.509445 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.601305 0.0317022 0.494013 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.605605 0.00909422 0.485065 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.589197 -0.00489609 0.512531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.588867 -0.00879364 0.488152 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.567829 -0.00407348 0.500186 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.593331 0.0822954 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.593994 0.105299 0.479204 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.572783 0.0926585 0.479204 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.582384 0.100664 0.457911 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.614541 0.0949359 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.602932 0.090301 0.448964 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.613879 0.0719323 0.46131 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.604941 0.0869303 0.49155 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.604278 0.0639267 0.482603 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.58373 0.0742898 0.49155 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.593633 0.0440327 0.372739 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.607302 0.0604766 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.607302 0.0604766 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.587242 0.0678827 0.372739 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.593633 0.0440327 0.348047 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.573573 0.0514389 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.579964 0.0275889 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.613693 0.0366265 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.600023 0.0201827 0.372739 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.613693 0.0366265 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.561087 0.101445 0.406378 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.551884 0.118381 0.390945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.536664 0.103361 0.403291 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.550745 0.0944221 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.576307 0.116465 0.394032 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.575168 0.0925065 0.388171 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.58551 0.0995293 0.409464 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.562225 0.125404 0.412239 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.571428 0.108468 0.427671 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.547006 0.110383 0.424584 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.520079 0.0521134 0.369341 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.523344 0.0542684 0.344961 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.534291 0.0358996 0.357307 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.541988 0.0591566 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.509132 0.0704822 0.356995 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.527777 0.0753703 0.372427 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.505868 0.0683272 0.381374 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.501435 0.0472252 0.353908 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.49817 0.0450702 0.378288 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.512382 0.0288565 0.366254 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.584869 -0.0244483 0.399581 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.5935 -0.0473753 0.402668 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.57344 -0.0399691 0.415013 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.595617 -0.0308315 0.420874 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.604929 -0.0318545 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.607046 -0.0153107 0.405442 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.596298 -0.00892756 0.384149 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.582752 -0.0409921 0.381374 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.574121 -0.0180651 0.378288 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.562692 -0.0335859 0.39372 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.511316 -0.0163676 0.396183 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.48882 -0.0212225 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.497372 0.00194055 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.491256 -0.00896145 0.408529 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.502764 -0.0395307 0.396183 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.505199 -0.0272696 0.417476 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.525259 -0.0346758 0.40513 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.50888 -0.0286287 0.37489 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.531375 -0.0237738 0.383837 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.517432 -0.00546563 0.37489 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.54356 -0.0355172 0.460062 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.530389 -0.0495897 0.475494 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.519442 -0.031221 0.463149 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.53532 -0.0261165 0.481355 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.554507 -0.0538859 0.472408 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.559438 -0.0304127 0.478269 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.567678 -0.0398133 0.456976 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.538628 -0.0589904 0.454201 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.551799 -0.0449178 0.438769 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.527681 -0.0406217 0.441856 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.451136 0.0058509 0.729516 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.447081 0.0051487 0.803476 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.435909 0.01504 0.823149 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.423265 0.0115452 0.802231 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.440694 0.0289993 0.803352 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.459725 0.00864346 0.824394 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.46451 0.0226028 0.804597 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.470897 -0.0012478 0.804721 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.442297 -0.00881065 0.823273 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.453468 -0.0187019 0.8036 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.429652 -0.0123054 0.802355 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.386138 0.0172804 0.763155 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.364644 0.0293677 0.76191 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.375512 0.0213457 0.741241 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.385352 0.0401449 0.753867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.37527 0.0253024 0.783824 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.395978 0.0360796 0.775781 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.396764 0.0132151 0.785069 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.36543 0.0065032 0.771198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.386924 -0.00558411 0.772443 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.376298 -0.00151881 0.750529 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.439178 0.0688765 0.766553 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.426942 0.0903221 0.766429 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.416328 0.0699989 0.757266 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.435083 0.0806307 0.745229 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.449792 0.0891998 0.775717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.457933 0.0795084 0.754517 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.462029 0.0677542 0.775841 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.431037 0.078568 0.787754 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.443274 0.0571224 0.787878 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.420423 0.0582447 0.77859 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.512079 -0.00628079 0.769837 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.523883 -0.000557006 0.790755 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.49924 -0.00208214 0.790506 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.51057 0.0165974 0.779001 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.536722 -0.00475566 0.770086 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.523409 0.0123987 0.758332 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.524918 -0.0104794 0.749168 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.525392 -0.0234352 0.781591 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.513588 -0.029159 0.760673 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.500749 -0.0249603 0.781342 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.504176 0.0574471 0.732914 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.508666 0.0817008 0.734036 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.488971 0.0722467 0.745541 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.489545 0.0732807 0.720878 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.523872 0.0669012 0.72141 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.504751 0.058481 0.708251 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.519382 0.0426474 0.720288 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.523298 0.0658672 0.746073 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.518808 0.0416134 0.744951 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.503602 0.0564131 0.757577 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.516134 -0.00557859 0.695877 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.540463 -0.00154892 0.697123 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.52751 -0.00538221 0.717791 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.524673 0.0156462 0.705165 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.529087 -0.00174531 0.675209 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.513298 0.0154498 0.683251 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.504759 -0.00577498 0.673964 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.531924 -0.0227737 0.687835 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.507596 -0.0268034 0.68659 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.518971 -0.026607 0.708504 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.459039 -0.0578769 0.766439 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.451803 -0.0707378 0.786236 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.435761 -0.0561039 0.774481 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.454158 -0.0461991 0.787639 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.475081 -0.0725109 0.778193 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.477435 -0.0479721 0.779597 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.482316 -0.05965 0.758396 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.456685 -0.0824157 0.765035 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.46392 -0.0695548 0.745238 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.440643 -0.0677817 0.753281 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.463094 -0.0571747 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.459563 -0.081612 0.692603 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.442243 -0.0665888 0.701767 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.463589 -0.0696122 0.713804 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.480415 -0.0721979 0.683315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.48444 -0.0601982 0.704516 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.483946 -0.0477607 0.683192 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.459069 -0.0691745 0.671279 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.4626 -0.0447373 0.671155 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.441749 -0.0541513 0.680442 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.398096 -0.0457452 0.726118 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.373728 -0.0495643 0.724997 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.383722 -0.030137 0.713492 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.382672 -0.0306825 0.738155 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.388102 -0.0651725 0.737623 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.397047 -0.0462908 0.750781 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.41247 -0.0613535 0.738744 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.389151 -0.064627 0.71296 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.41352 -0.060808 0.714081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.399146 -0.0451997 0.701455 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.4293 -0.115031 0.544331 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.424299 -0.178985 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.412497 -0.190929 0.599471 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.400273 -0.174844 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.417001 -0.16674 0.601529 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.436523 -0.195071 0.595564 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.441027 -0.170881 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.448325 -0.183127 0.577461 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.419795 -0.203175 0.57931 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.431597 -0.191231 0.561208 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.407571 -0.18709 0.565115 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.367336 -0.131634 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.343834 -0.12515 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.353814 -0.122476 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.360946 -0.107784 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.357357 -0.134308 0.603794 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.374468 -0.116942 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.380859 -0.140792 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.350225 -0.149 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.373727 -0.155484 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.360204 -0.146326 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.4293 -0.115031 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.41922 -0.10495 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.40545 -0.10864 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.42291 -0.0911807 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.44307 -0.111341 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.44676 -0.0975713 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.45315 -0.121421 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.425611 -0.128801 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.435691 -0.138881 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.411841 -0.13249 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.486264 -0.162382 0.544331 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.502603 -0.174264 0.558526 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.479659 -0.170327 0.566757 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.495376 -0.15142 0.564491 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.509207 -0.166319 0.536101 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.501981 -0.143475 0.542066 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.492868 -0.154437 0.521905 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.49349 -0.185226 0.538366 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.477151 -0.173345 0.524171 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.470546 -0.18129 0.546597 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.491265 -0.0984274 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.501491 -0.082906 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.477742 -0.0892696 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.484874 -0.0745774 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.515014 -0.0920638 0.579103 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.498397 -0.0837352 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.504787 -0.107585 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.507882 -0.106756 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.497655 -0.122277 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.484132 -0.11312 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.491265 -0.0984274 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.508376 -0.0810612 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.498397 -0.0837352 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.484874 -0.0745774 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.501244 -0.0957534 0.484868 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.477742 -0.0892696 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.484132 -0.11312 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.514767 -0.104911 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.497655 -0.122277 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.504787 -0.107585 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.424299 -0.178985 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.411775 -0.200165 0.505236 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.399922 -0.179342 0.511201 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.415187 -0.189948 0.527454 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.436152 -0.199808 0.501329 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.439564 -0.189591 0.523547 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.448677 -0.178629 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.420888 -0.189202 0.485076 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.433412 -0.168023 0.487134 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.409035 -0.168379 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.4293 -0.115031 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.439381 -0.10495 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.45315 -0.10864 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.435691 -0.0911807 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.415531 -0.111341 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.411841 -0.0975713 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.40545 -0.121421 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.43299 -0.128801 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.42291 -0.138881 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.44676 -0.13249 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.367336 -0.131634 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.350719 -0.123305 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.374468 -0.116942 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.360946 -0.107784 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.343587 -0.137998 0.509559 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.353814 -0.122476 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.360204 -0.146326 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.357109 -0.147155 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.373727 -0.155484 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.380859 -0.140792 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.248762 -0.0483751 0.655442 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.183785 -0.0599222 0.689081 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.160406 -0.0522053 0.690965 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.171954 -0.0513956 0.669156 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.178533 -0.0358698 0.687193 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.172236 -0.0607319 0.71089 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.190363 -0.0443964 0.707118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.195615 -0.0684488 0.709006 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.165658 -0.0762577 0.692853 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.189036 -0.0839747 0.690969 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.177206 -0.075448 0.671044 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.187119 -0.0172857 0.6286 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.176731 -0.00705049 0.608675 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.192673 -0.025725 0.60607 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.200733 -0.00352517 0.613272 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.171177 0.00138875 0.631205 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.195179 0.00491406 0.635801 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.181564 -0.00884647 0.65113 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.163117 -0.020811 0.624003 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.173504 -0.0310463 0.643928 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.179058 -0.0394855 0.621398 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.215921 0.00673113 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.20044 0.0258737 0.690591 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.196602 0.00551963 0.677151 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.215612 0.0203763 0.671903 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.21976 0.0270852 0.705919 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.234932 0.0215878 0.687231 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.235241 0.00794264 0.707807 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.200749 0.0122285 0.711167 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.21623 -0.00691403 0.713055 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.196911 -0.00812553 0.697727 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.245428 -0.0910116 0.715923 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.234308 -0.0942304 0.737733 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.221514 -0.0854464 0.718528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.238704 -0.0714204 0.729364 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.258223 -0.0997955 0.735128 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.262619 -0.0769856 0.726759 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.269343 -0.0965768 0.713318 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.241032 -0.113822 0.724292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.252152 -0.110603 0.702483 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.228237 -0.105038 0.705088 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.277564 -0.0243582 0.719322 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.275459 -0.0076281 0.737359 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.255218 -0.0167139 0.726523 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.270078 -0.00142185 0.714074 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.297806 -0.0152725 0.730157 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.292425 -0.00906621 0.706872 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.299911 -0.0320026 0.71212 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.282946 -0.0305645 0.742607 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.285051 -0.0472946 0.72457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.262704 -0.0396503 0.731771 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.310405 -0.0794645 0.682285 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.324811 -0.0817333 0.702209 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.300317 -0.0800146 0.704814 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.313378 -0.0603366 0.697613 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.334899 -0.0811832 0.67968 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.323466 -0.0597864 0.675083 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.320493 -0.0789143 0.659755 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.321838 -0.100861 0.686881 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.307433 -0.0985923 0.666956 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.297345 -0.0991425 0.689486 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.216626 -0.115028 0.652044 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.195663 -0.127519 0.655816 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.194866 -0.104303 0.647447 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.201738 -0.108803 0.670732 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.217423 -0.138245 0.660413 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.223497 -0.119529 0.675329 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.238386 -0.125754 0.656641 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.210551 -0.133744 0.637128 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.231514 -0.121254 0.633356 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.209754 -0.110528 0.628759 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.281603 -0.103481 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.291073 -0.126206 0.620293 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.271345 -0.119897 0.633733 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.293457 -0.110246 0.638981 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.301332 -0.10979 0.604965 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.303716 -0.0938302 0.623653 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.291862 -0.0870656 0.603077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.279219 -0.119442 0.599717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.269749 -0.0967168 0.597829 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.25949 -0.113132 0.613157 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.21996 -0.0723919 0.591563 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.20388 -0.0673141 0.573526 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.216456 -0.0490355 0.584361 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.198742 -0.0609052 0.596811 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.207384 -0.0906706 0.580727 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.202246 -0.0842617 0.604012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.223463 -0.0957484 0.598764 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.225098 -0.0788008 0.568278 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.241177 -0.0838786 0.586315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.237674 -0.0605222 0.579113 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.471405 0.471405 1.11022e-16 RAD 0.166667
+ txt002
+ SPHERE CENTER -0.508983 0.690426 8.51251e-17 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.484794 0.755941 -0.0246914 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.47411 0.767658 -0.0436186 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.467528 0.744501 -0.0381316 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.489758 0.749038 -0.0478724 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.491377 0.779098 -0.0301783 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.507025 0.760478 -0.0344321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.502061 0.767382 -0.0112511 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.469146 0.774562 -0.0204376 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.47983 0.762845 -0.00151032 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.462564 0.751405 -0.0149506 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.436283 0.7029 -0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.418941 0.714226 -0.0202367 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.43889 0.704751 -0.0312799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.44101 0.724842 -0.0170845 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.416335 0.712374 0.0042468 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.438403 0.722991 0.00739901 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.433677 0.701048 0.0176871 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.414215 0.692283 -0.00994863 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.431557 0.680957 0.00349164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.434163 0.682808 -0.0209919 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.478434 0.695668 -0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.481931 0.703418 -0.0904587 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.500827 0.694124 -0.0775657 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.491475 0.716184 -0.0716007 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.459538 0.704962 -0.0801706 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.469082 0.717727 -0.0613127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.456041 0.697211 -0.0569896 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.46889 0.682902 -0.0861356 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.465393 0.675152 -0.0629546 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.487786 0.673608 -0.0732426 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.557494 0.743468 -0.0178949 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.560084 0.767402 -0.0233819 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.543179 0.760285 -0.00685171 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.53997 0.755145 -0.0307879 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.574398 0.750585 -0.0344251 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.554284 0.738328 -0.0418311 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.571808 0.726651 -0.0289382 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.577608 0.755725 -0.0104889 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.575017 0.731791 -0.00500196 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.560703 0.748608 0.00604126 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.551134 0.683194 -0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.573364 0.687731 -0.070222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.571303 0.682033 -0.0462858 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.56324 0.703871 -0.0545162 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.553195 0.688893 -0.0844174 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.543071 0.705033 -0.0687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.530964 0.684356 -0.0746767 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.561258 0.667055 -0.076187 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.539027 0.662518 -0.0664462 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.559196 0.661356 -0.0522508 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.581682 0.677953 0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.601808 0.682851 0.0202367 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.579842 0.680568 0.0312799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.58454 0.700216 0.0170845 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.603648 0.680237 -0.0042468 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.58638 0.697602 -0.00739901 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.583522 0.675339 -0.0176871 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.59895 0.660588 0.00994863 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.578824 0.65569 -0.00349164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.576984 0.658304 0.0209919 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.515343 0.7507 0.0425863 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.506594 0.773394 0.0468401 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.491321 0.755462 0.0394341 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.507924 0.764807 0.0237283 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.530616 0.768632 0.0499923 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.531946 0.760045 0.0268805 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.539365 0.745938 0.0457385 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.514012 0.759287 0.065698 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.522762 0.736593 0.0614442 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.49874 0.741355 0.058292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.539531 0.685185 0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.538818 0.693658 0.0904587 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.517905 0.691194 0.0775657 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.534075 0.708875 0.0716007 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.560445 0.687649 0.0801706 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555702 0.702866 0.0613127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.561158 0.679176 0.0569896 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.544274 0.669969 0.0861356 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.544988 0.661495 0.0629546 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.523361 0.667505 0.0732426 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.466832 0.697658 0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.447385 0.709346 0.070222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.447429 0.703286 0.0462858 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.46231 0.721188 0.0545162 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.466788 0.703718 0.0844174 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.481713 0.71556 0.0687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.486235 0.692031 0.0746767 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.451907 0.685816 0.076187 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.471354 0.674129 0.0664462 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.451951 0.679757 0.0522508 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.335322 0.607487 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.283164 0.659645 0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.269894 0.672915 0.0882695 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.275822 0.649528 0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.293281 0.666987 0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.277236 0.683032 0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.300624 0.677104 0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.290507 0.669762 0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.259777 0.665573 0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.273047 0.652302 0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.265705 0.642185 0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.286452 0.603979 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.279361 0.614273 0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.303327 0.613293 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.288206 0.628413 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.262487 0.604959 0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.271332 0.619099 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.269578 0.594664 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.277607 0.589839 0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.284698 0.579544 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.301572 0.588858 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.33883 0.656357 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.328536 0.663448 0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.314396 0.654603 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.329516 0.639482 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.35297 0.665202 0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.353951 0.641237 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.363265 0.658111 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.33785 0.680322 0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.348145 0.673232 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.32371 0.671477 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.332034 0.663153 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.321274 0.684748 0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.308341 0.666888 0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.326131 0.678752 0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.344967 0.681014 0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.349824 0.675018 0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.355727 0.659419 0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.327177 0.669149 0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.337937 0.647554 0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.314244 0.651289 0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.3877 0.659866 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.391875 0.684201 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.37258 0.674986 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.37258 0.674986 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.406996 0.669081 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.3877 0.659866 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.40282 0.644745 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.406996 0.669081 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.40282 0.644745 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.3877 0.659866 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.384191 0.610996 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.389739 0.622198 0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.366159 0.617804 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.378964 0.63493 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.407771 0.61539 0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.396997 0.628121 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.402224 0.604188 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.394966 0.598265 0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.389418 0.587062 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.371386 0.593871 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.279656 0.610775 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.258061 0.621535 0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.264057 0.616678 0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.275921 0.634468 0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.27366 0.615632 0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.29152 0.628565 0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.295255 0.604872 0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.261795 0.597842 0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.28339 0.587082 0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.267791 0.592985 0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.331813 0.558618 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.320611 0.55307 0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.30788 0.563845 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.325005 0.57665 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.344544 0.547843 0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.348938 0.571423 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.355747 0.553391 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.327419 0.535038 0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.338621 0.540585 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.314688 0.545813 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.282943 0.555109 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.258608 0.550934 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.267823 0.570229 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.267823 0.570229 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.273728 0.535813 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.282943 0.555109 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.298064 0.539989 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.273728 0.535813 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.298064 0.539989 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.282943 0.555109 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.335322 0.607487 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.313405 0.629404 -0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.316595 0.626214 -0.202664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.318408 0.606941 -0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.335868 0.624401 -0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.311592 0.648676 -0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.330864 0.646863 -0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.308402 0.651867 -0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.294133 0.631217 -0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.290942 0.634407 -0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.295946 0.611945 -0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.331813 0.558618 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.319608 0.539107 -0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.307378 0.556863 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.322499 0.541743 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.344043 0.540862 -0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.346933 0.543497 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.356248 0.560372 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.328923 0.555982 -0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.341128 0.575492 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.316693 0.573738 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.384191 0.610996 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.403702 0.623201 -0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.401066 0.62031 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.385946 0.635431 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.386827 0.613886 -0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.369071 0.626116 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.367317 0.601681 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.401947 0.598766 -0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.382437 0.586561 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.399312 0.595876 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.316914 0.678274 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.305407 0.69384 -0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.296616 0.671002 -0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.317721 0.674446 -0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.325704 0.701111 -0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.338018 0.681717 -0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.337211 0.685545 -0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.3046 0.697667 -0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.316107 0.682101 -0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.295809 0.67483 -0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.3877 0.659866 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.391875 0.684201 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.37258 0.674986 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.37258 0.674986 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.406996 0.669081 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.3877 0.659866 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.40282 0.644745 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.406996 0.669081 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.40282 0.644745 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.3877 0.659866 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.33883 0.656357 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.329538 0.677411 -0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.314897 0.661584 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.332022 0.674389 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.353472 0.672184 -0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.355956 0.669162 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.362764 0.65113 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.336346 0.659378 -0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.345639 0.638325 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.321705 0.643552 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.264535 0.625895 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.248969 0.637402 -0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.268363 0.625088 -0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.271807 0.646193 -0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.245142 0.638209 -0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.267979 0.647 -0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.260708 0.626702 -0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.241698 0.617105 -0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.257264 0.605598 -0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.261092 0.604791 -0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.286452 0.603979 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.265398 0.613271 -0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.26842 0.610787 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.281225 0.627912 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.283431 0.606463 -0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.299257 0.621104 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.304484 0.59717 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.270625 0.589337 -0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.291679 0.580045 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.273647 0.586853 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.282943 0.555109 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.258608 0.550934 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.267823 0.570229 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.267823 0.570229 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.273728 0.535813 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.282943 0.555109 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.298064 0.539989 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.273728 0.535813 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.298064 0.539989 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.282943 0.555109 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.645066 0.554344 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.681385 0.616373 -0.129006 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.678928 0.639472 -0.137375 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.661636 0.629767 -0.122663 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.664108 0.621631 -0.145845 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.698678 0.626079 -0.143718 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.683858 0.608237 -0.152187 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.701135 0.602979 -0.135349 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.696205 0.634214 -0.120537 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.698662 0.611115 -0.112168 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.678912 0.624508 -0.105825 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.649723 0.609912 -0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.640648 0.631982 -0.0560094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.625749 0.614812 -0.0656463 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.64267 0.62585 -0.0798417 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.664623 0.627081 -0.0527151 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.666645 0.620949 -0.0765474 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.673698 0.605012 -0.0590577 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.647702 0.616044 -0.0385197 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.656777 0.593974 -0.0448623 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.632802 0.598874 -0.0481565 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.607573 0.617144 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.595495 0.63057 -0.139672 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.594239 0.605919 -0.140323 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.615286 0.617371 -0.146288 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.608828 0.641795 -0.122182 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.628619 0.628595 -0.128798 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.620906 0.628369 -0.105343 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.587782 0.630343 -0.116217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.59986 0.616917 -0.0993785 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.586526 0.605692 -0.116868 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.676727 0.560805 -0.177765 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.689897 0.57563 -0.192477 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.693998 0.575587 -0.168128 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.673115 0.585222 -0.177114 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.672626 0.560848 -0.202114 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.655844 0.57044 -0.186751 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.659456 0.546023 -0.187402 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.693509 0.551213 -0.193128 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.680339 0.536388 -0.178416 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.69761 0.55117 -0.16878 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.602915 0.561576 -0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.602201 0.570049 -0.194773 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.623084 0.560414 -0.185788 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.615021 0.582252 -0.177557 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.582032 0.571211 -0.180578 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.594852 0.583414 -0.163362 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.582745 0.562738 -0.157397 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.590095 0.549372 -0.188808 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.590808 0.540899 -0.165627 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.610978 0.539737 -0.179823 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.640408 0.498776 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.627785 0.478525 -0.166213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.615951 0.497935 -0.156576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.630799 0.484234 -0.142381 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.652241 0.479365 -0.169507 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.655255 0.485075 -0.145675 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.664864 0.499616 -0.163165 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.637394 0.493066 -0.183703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.650016 0.513317 -0.17736 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.62556 0.512476 -0.174066 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.718878 0.553573 -0.117284 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.73992 0.563328 -0.108814 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.720935 0.559693 -0.0934517 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.719679 0.577348 -0.110668 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.737863 0.557208 -0.132647 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.717623 0.571228 -0.1345 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.716821 0.547453 -0.141116 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.739118 0.539553 -0.115431 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.718076 0.529798 -0.1239 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.720133 0.535918 -0.100068 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.682558 0.491544 -0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.688647 0.474542 -0.0825505 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.666351 0.485132 -0.0818993 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.686417 0.498226 -0.0759343 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.704854 0.480953 -0.10004 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.702624 0.504637 -0.093424 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.698765 0.497955 -0.116879 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.684788 0.46786 -0.106005 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.678699 0.484862 -0.122844 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.662492 0.47845 -0.105354 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.687216 0.547112 -0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.690713 0.554862 -0.0274488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.667813 0.552739 -0.0364345 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.682694 0.570641 -0.0446649 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.710116 0.549235 -0.0416443 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.702097 0.565014 -0.0588603 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.706619 0.541484 -0.0648253 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.695235 0.531333 -0.0334138 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.691738 0.523582 -0.0565949 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.672335 0.52921 -0.0423994 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.471405 0.471405 -0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.501645 0.501645 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.499795 0.519956 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.493653 0.523893 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.479397 0.509638 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.507788 0.497708 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.48739 0.48739 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.509638 0.479397 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.522043 0.511963 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.523893 0.493653 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.515901 0.515901 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.542955 0.490576 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.559233 0.507719 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.539759 0.502501 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.536564 0.514426 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.562428 0.495794 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.539759 0.502501 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.54615 0.478651 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.565623 0.483869 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.549345 0.466726 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.54615 0.478651 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.490576 0.542955 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.483869 0.565623 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.466726 0.549345 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.478651 0.54615 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.507719 0.559233 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.502501 0.539759 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.514426 0.536564 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.495794 0.562428 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.502501 0.539759 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.478651 0.54615 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.430095 0.482473 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.430434 0.489762 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.449569 0.477255 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.445366 0.500519 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.41096 0.49498 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.425893 0.505737 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.410622 0.487691 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.415162 0.471716 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.414824 0.464428 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.434297 0.45921 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.419026 0.523783 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.404771 0.538038 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.410297 0.515053 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.427756 0.532513 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.4135 0.546768 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.436486 0.541242 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.427756 0.532513 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.396041 0.529309 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.410297 0.515053 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.401567 0.506323 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.399854 0.452233 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.377186 0.45894 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.396659 0.464158 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.393464 0.476083 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.380381 0.447015 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.396659 0.464158 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.40305 0.440308 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.383576 0.43509 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.406245 0.428383 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.40305 0.440308 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.482473 0.430095 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.48121 0.407271 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.464428 0.414824 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.487691 0.410622 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.499256 0.422542 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.505737 0.425893 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.500519 0.445366 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.475992 0.426744 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.477255 0.449569 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.45921 0.434297 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.452233 0.399854 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.43509 0.383576 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.428383 0.406245 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.440308 0.40305 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.45894 0.377186 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.464158 0.396659 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.476083 0.393464 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.447015 0.380381 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.464158 0.396659 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.440308 0.40305 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.523783 0.419026 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.538038 0.404771 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.515053 0.410297 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.532513 0.427756 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.546768 0.4135 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.541242 0.436486 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.532513 0.427756 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.529309 0.396041 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.515053 0.410297 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.506323 0.401567 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.607487 0.335322 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.659645 0.283164 -0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.672915 0.269894 -0.0882695 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.649528 0.275822 -0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.666987 0.293281 -0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.683032 0.277236 -0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.677104 0.300624 -0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.669762 0.290507 -0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.665573 0.259777 -0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.652302 0.273047 -0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.642185 0.265705 -0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.603979 0.286452 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.592776 0.280905 -0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.580045 0.291679 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.59717 0.304484 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.61671 0.275678 -0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.621104 0.299257 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.627912 0.281225 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.599585 0.262872 -0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.610787 0.26842 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.586853 0.273647 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.656357 0.33883 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.661904 0.350033 -0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.638325 0.345639 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.65113 0.362764 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.679937 0.343224 -0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.669162 0.355956 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.674389 0.332022 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.667131 0.326099 -0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.661584 0.314897 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.643552 0.321705 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.663153 0.332034 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.685865 0.340177 -0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.679339 0.33606 -0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.669651 0.355123 -0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.669679 0.336151 -0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.653465 0.351097 -0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.646968 0.328008 -0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.679367 0.317089 -0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.656656 0.308945 -0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.672841 0.312971 -0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.659866 0.3877 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.664041 0.412036 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.644745 0.40282 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.644745 0.40282 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.679161 0.396915 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.659866 0.3877 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.674986 0.37258 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.679161 0.396915 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.674986 0.37258 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.659866 0.3877 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.610996 0.384191 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.600701 0.391282 -0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.586561 0.382437 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.601681 0.367317 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.625136 0.393037 -0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.626116 0.369071 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.635431 0.385946 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.610016 0.408157 -0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.62031 0.401066 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.595876 0.399312 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.610775 0.279656 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.602632 0.256944 -0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.587686 0.273158 -0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.606749 0.26347 -0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.62572 0.263442 -0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.629838 0.269968 -0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.633864 0.286153 -0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.606658 0.27313 -0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.614801 0.295841 -0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.591712 0.289344 -0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.558618 0.331813 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.551527 0.342108 -0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.575492 0.341128 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.560372 0.356248 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.534652 0.332793 -0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.543497 0.346933 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.541743 0.322499 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.549772 0.317673 -0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.556863 0.307378 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.573738 0.316693 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555109 0.282943 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.530773 0.278768 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.539989 0.298064 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.539989 0.298064 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.545894 0.263648 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555109 0.282943 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.570229 0.267823 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.545894 0.263648 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.570229 0.267823 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555109 0.282943 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.645066 0.554344 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.668521 0.610229 0.153697 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.663938 0.633406 0.160875 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.64522 0.617928 0.156428 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.65892 0.626429 0.137727 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.687239 0.625707 0.158144 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.682221 0.61873 0.134996 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.691822 0.602531 0.150967 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.673539 0.617206 0.176845 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.678123 0.59403 0.169668 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.654822 0.601728 0.172398 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.598918 0.585648 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.580238 0.601562 0.162601 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.581665 0.587563 0.142311 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.59781 0.605914 0.14581 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.597491 0.599646 0.18016 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.615063 0.603999 0.163369 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.616171 0.583732 0.177429 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.581346 0.581295 0.176661 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.600026 0.565381 0.173931 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.582773 0.567297 0.156372 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.619787 0.622977 0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.608008 0.63767 0.0834188 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.601637 0.613891 0.0853287 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.623239 0.620102 0.0751099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.626157 0.646756 0.0974792 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.641389 0.629188 0.0891702 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.637936 0.632063 0.113449 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.604555 0.640545 0.107698 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.616334 0.625852 0.123668 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.598184 0.616766 0.109608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.714669 0.578925 0.104938 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.729812 0.597914 0.109385 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.711617 0.592661 0.125228 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.70632 0.602084 0.103028 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.732864 0.584178 0.0890951 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.709372 0.588348 0.0827387 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.71772 0.565189 0.0846485 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.738161 0.574755 0.111295 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.723017 0.555767 0.106848 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.719965 0.569503 0.127138 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.665934 0.591673 0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.658095 0.605761 0.0319289 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.647455 0.607672 0.0541285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.643855 0.58746 0.0404111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.676573 0.589763 0.0284303 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.662334 0.571461 0.0369125 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.684413 0.575674 0.0471312 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.680174 0.609975 0.0421477 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.688013 0.595887 0.0608487 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.669535 0.611885 0.0643473 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.691213 0.52304 0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.712906 0.511567 0.0596212 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.699372 0.507717 0.079911 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.710453 0.529503 0.0764123 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.704747 0.526889 0.0420622 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.702295 0.544826 0.0588533 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.683054 0.538362 0.044793 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.693665 0.505104 0.0455609 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.671972 0.516576 0.0482916 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.680131 0.501254 0.0658506 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.6938 0.541596 0.165419 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.70016 0.547376 0.188567 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.676324 0.546319 0.182211 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.690564 0.564621 0.173728 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.717636 0.542652 0.171776 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.70804 0.559898 0.156937 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.711276 0.536873 0.148628 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.703396 0.524351 0.180258 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.697037 0.518571 0.157111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.679561 0.523294 0.173902 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.670344 0.48571 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.67091 0.466887 0.138803 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.650637 0.480853 0.136894 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.671107 0.490138 0.147112 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.690617 0.471745 0.124743 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.690815 0.494995 0.133052 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.690052 0.490567 0.108773 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.670147 0.46246 0.114524 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.669581 0.481283 0.0985541 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.649874 0.476425 0.112614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.624197 0.517014 0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.60809 0.516313 0.190293 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.60089 0.524375 0.168094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.616221 0.538029 0.181811 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.631397 0.508952 0.193792 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.639529 0.530668 0.18531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.647504 0.509653 0.175091 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.616065 0.495298 0.180075 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.632172 0.495999 0.161374 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.608865 0.50336 0.157875 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.607487 0.335322 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.629404 0.313405 0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.626214 0.316595 0.202664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.606941 0.318408 0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.624401 0.335868 0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.648676 0.311592 0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.646863 0.330864 0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.651867 0.308402 0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.631217 0.294133 0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.634407 0.290942 0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.611945 0.295946 0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.558618 0.331813 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.537564 0.341105 0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.540585 0.338621 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.553391 0.355747 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555596 0.334297 0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.571423 0.348938 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.57665 0.325005 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.542791 0.317172 0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.563845 0.30788 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.545813 0.314688 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.610996 0.384191 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.601704 0.405245 0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.587062 0.389418 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.604188 0.402224 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.625637 0.400018 0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.628121 0.396997 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.63493 0.378964 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.608512 0.387213 0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.617804 0.366159 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.593871 0.371386 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.678274 0.316914 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.697473 0.31938 0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.674538 0.318074 0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.681812 0.338182 0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.701209 0.31822 0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.685547 0.337022 0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.682009 0.315754 0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.693935 0.298112 0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.674736 0.295646 0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.671 0.296805 0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.659866 0.3877 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.664041 0.412036 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.644745 0.40282 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.644745 0.40282 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.679161 0.396915 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.659866 0.3877 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.674986 0.37258 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.679161 0.396915 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.674986 0.37258 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.659866 0.3877 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.656357 0.33883 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.675867 0.351035 0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.673232 0.348145 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.658111 0.363265 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.658993 0.341721 0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.641237 0.353951 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.639482 0.329516 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.674113 0.3266 0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.654603 0.314396 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.671477 0.32371 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.625895 0.264535 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.623429 0.245336 0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.604627 0.260997 0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.624736 0.268271 0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.644697 0.248874 0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.646004 0.271809 0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.647163 0.268073 0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.624589 0.2416 0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.627055 0.2608 0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.605787 0.257262 0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.603979 0.286452 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.591774 0.266942 0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.579544 0.284698 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.594664 0.269578 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.616209 0.268696 0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.619099 0.271332 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.628413 0.288206 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.601088 0.283817 0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.613293 0.303327 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.588858 0.301572 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555109 0.282943 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.530773 0.278768 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.539989 0.298064 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.539989 0.298064 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.545894 0.263648 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555109 0.282943 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.570229 0.267823 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.545894 0.263648 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.570229 0.267823 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555109 0.282943 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.471405 0.471405 0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.441164 0.501645 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.424703 0.518106 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.420089 0.505261 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.437548 0.522721 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.445778 0.51449 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.458623 0.519105 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.462239 0.498029 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.428319 0.497031 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.44478 0.48057 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.423704 0.484186 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.399854 0.490576 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.382226 0.502679 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.399854 0.490576 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.405389 0.511231 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.382226 0.502679 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.405389 0.511231 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.399854 0.490576 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.376691 0.482024 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.39432 0.469922 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.39432 0.469922 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.452233 0.542955 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.44013 0.560583 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.431578 0.53742 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.452233 0.542955 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.460785 0.566118 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.472887 0.548489 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.472887 0.548489 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.44013 0.560583 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.452233 0.542955 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.431578 0.53742 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.512714 0.482473 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.51514 0.495905 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.492654 0.48988 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.506323 0.506323 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.5352 0.488498 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.526383 0.498917 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.532774 0.475067 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.521531 0.472055 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.519105 0.458623 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.499045 0.46603 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.523783 0.523783 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.527958 0.548119 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.508662 0.538903 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.508662 0.538903 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.543078 0.532998 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.523783 0.523783 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.538903 0.508662 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.543078 0.532998 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.538903 0.508662 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.523783 0.523783 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.542955 0.452233 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.564273 0.4539 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.542955 0.452233 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.548489 0.472887 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.564273 0.4539 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.548489 0.472887 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.542955 0.452233 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.558738 0.433245 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.53742 0.431578 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.53742 0.431578 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.460336 0.430095 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.446904 0.427669 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.436486 0.436486 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.45293 0.450155 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.470754 0.421278 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.47678 0.443764 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.484186 0.423704 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.454311 0.407609 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.467742 0.410035 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.443892 0.416426 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.490576 0.399854 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.488909 0.378536 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.469922 0.39432 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.490576 0.399854 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.509564 0.384071 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.511231 0.405389 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.511231 0.405389 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.488909 0.378536 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.490576 0.399854 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.469922 0.39432 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.419026 0.419026 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.39469 0.414851 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.403906 0.434147 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.403906 0.434147 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.409811 0.399731 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.419026 0.419026 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.434147 0.403906 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.409811 0.399731 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.434147 0.403906 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.419026 0.419026 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.643951 -0.172546 1.11022e-16 RAD 0.166667
+ txt002
+ SPHERE CENTER -0.835815 -0.157543 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.871646 -0.122136 0.165419 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.871334 -0.102403 0.180258 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.850164 -0.113406 0.173902 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.862937 -0.100577 0.157111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.892817 -0.111133 0.171776 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.884419 -0.109307 0.148628 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.893129 -0.130866 0.156937 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.880044 -0.123961 0.188567 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.880356 -0.143694 0.173728 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.858873 -0.134964 0.182211 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.799077 -0.135649 0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.781177 -0.120908 0.180075 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.778973 -0.13149 0.157875 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.795477 -0.113462 0.161374 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.801282 -0.125067 0.193792 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.815582 -0.11762 0.175091 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.819182 -0.139808 0.18531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.784778 -0.143095 0.190293 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.802678 -0.157836 0.181811 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.782573 -0.153678 0.168094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.82339 -0.0854653 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.811594 -0.0654286 0.114524 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.80102 -0.0876595 0.112614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.820516 -0.0820122 0.0985541 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.833964 -0.0632344 0.124743 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.842886 -0.079818 0.108773 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.845761 -0.083271 0.133052 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.814468 -0.0688817 0.138803 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.826265 -0.0889183 0.147112 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.803895 -0.0911125 0.136894 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.908384 -0.14403 0.104938 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.926643 -0.128672 0.111295 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.90826 -0.133221 0.127138 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.904034 -0.1198 0.106848 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.926768 -0.139481 0.0890951 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.904159 -0.130608 0.0846485 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.908508 -0.154838 0.0827387 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.930993 -0.152902 0.109385 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.912733 -0.16826 0.103028 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.912609 -0.157451 0.125228 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.860128 -0.107359 0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.853284 -0.0905999 0.0455609 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.839638 -0.0940331 0.0658506 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.840233 -0.111382 0.0482916 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.873773 -0.103926 0.0420622 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.860723 -0.124708 0.044793 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.880618 -0.120685 0.0588533 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.873178 -0.086577 0.0596212 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.880022 -0.103336 0.0764123 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.859532 -0.0900102 0.079911 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.872552 -0.179437 0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.894035 -0.188167 0.0421477 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.885777 -0.195141 0.0643473 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.89378 -0.172046 0.0608487 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.880811 -0.172463 0.0284303 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.880556 -0.156342 0.0471312 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.859328 -0.163733 0.0369125 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.872807 -0.195558 0.0319289 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.851325 -0.186828 0.0404111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.864549 -0.202532 0.0541285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.884071 -0.194213 0.153697 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.891905 -0.197746 0.176845 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.867957 -0.193701 0.172398 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.884286 -0.175383 0.169668 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.908019 -0.198259 0.158144 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.900401 -0.175896 0.150967 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.900186 -0.194726 0.134996 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.89169 -0.216576 0.160875 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.883856 -0.213043 0.137727 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.867741 -0.212531 0.156428 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.84824 -0.229621 0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.843832 -0.25245 0.107698 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.826426 -0.235043 0.109608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.846687 -0.233837 0.123668 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.865646 -0.247028 0.0974792 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.868501 -0.228415 0.113449 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.870053 -0.224198 0.0891702 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.845385 -0.248234 0.0834188 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.849792 -0.225404 0.0751099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.827978 -0.230827 0.0853287 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.811502 -0.207727 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.794108 -0.212743 0.176661 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.788345 -0.199907 0.156372 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.802328 -0.189621 0.173931 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.817265 -0.220563 0.18016 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.825486 -0.197441 0.177429 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.83466 -0.215547 0.163369 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.803282 -0.230849 0.162601 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.820676 -0.225832 0.14581 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.797518 -0.218012 0.142311 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.643951 -0.172546 0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.61371 -0.142305 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.597249 -0.125845 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.592635 -0.138689 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.610094 -0.12123 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.618324 -0.12946 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.631169 -0.124846 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.634785 -0.145921 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.600865 -0.14692 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.617326 -0.163381 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.596251 -0.159765 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.5724 -0.153374 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.554772 -0.141271 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.5724 -0.153374 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.577935 -0.13272 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.554772 -0.141271 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.577935 -0.13272 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.5724 -0.153374 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.549237 -0.161926 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.566866 -0.174029 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.566866 -0.174029 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.624779 -0.100996 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.612676 -0.0833673 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.604124 -0.10653 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.624779 -0.100996 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.633331 -0.0778329 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.645433 -0.0954616 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.645433 -0.0954616 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.612676 -0.0833673 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.624779 -0.100996 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.604124 -0.10653 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.68526 -0.161477 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.687686 -0.148046 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.6652 -0.154071 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.678869 -0.137627 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.707746 -0.155452 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.698929 -0.145033 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.70532 -0.168883 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.694077 -0.171896 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.691651 -0.185327 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.671591 -0.177921 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.696329 -0.120168 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.700504 -0.095832 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.681209 -0.105047 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.681209 -0.105047 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.715624 -0.110952 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.696329 -0.120168 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.711449 -0.135288 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.715624 -0.110952 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.711449 -0.135288 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.696329 -0.120168 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.715501 -0.191718 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.736819 -0.190051 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.715501 -0.191718 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.721035 -0.171063 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.736819 -0.190051 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.721035 -0.171063 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.715501 -0.191718 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.731284 -0.210706 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.709966 -0.212373 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.709966 -0.212373 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.632882 -0.213855 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.61945 -0.216282 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.609032 -0.207465 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.625476 -0.193796 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.6433 -0.222672 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.649326 -0.200186 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.656732 -0.220246 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.626857 -0.236341 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.640288 -0.233915 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.616438 -0.227525 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.663122 -0.244096 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.661455 -0.265414 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.642468 -0.249631 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.663122 -0.244096 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.68211 -0.25988 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.683777 -0.238562 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.683777 -0.238562 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.661455 -0.265414 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.663122 -0.244096 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.642468 -0.249631 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.591572 -0.224924 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.567237 -0.2291 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.576452 -0.209804 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.576452 -0.209804 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.582357 -0.24422 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.591572 -0.224924 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.606693 -0.240045 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.582357 -0.24422 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.606693 -0.240045 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.591572 -0.224924 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.69376 0.0133465 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.674309 0.0838533 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.66171 0.103063 0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.653258 0.0800983 0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.673446 0.0876683 0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.682761 0.106818 0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.694497 0.0914233 0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.69536 0.0876083 0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.662574 0.0992478 0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.675172 0.0800382 0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.654121 0.0762832 0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.62221 0.0325183 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.604582 0.0446211 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.62221 0.0325183 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.627745 0.053173 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.604582 0.0446211 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.627745 0.053173 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.62221 0.0325183 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.599047 0.0239663 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.616676 0.0118635 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.616676 0.0118635 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.666287 0.0539145 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.662466 0.0547519 0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.660752 0.0332597 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.682791 0.0439578 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.668 0.0754066 0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.688325 0.0646126 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.671821 0.0745692 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.645962 0.0647085 0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.649783 0.0638711 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.644249 0.0432164 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.745859 0.0646815 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.750021 0.0887955 0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.729506 0.078459 0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.732161 0.0813312 0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.766375 0.075018 0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.748514 0.0675537 0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.762212 0.050904 0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.763719 0.0721458 0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.759557 0.0480318 0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.743204 0.0618093 0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.737837 0.0347427 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.747099 0.0542122 0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.743371 0.0553974 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.7241 0.0550267 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.741565 0.0335575 0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.718566 0.0343719 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.732303 0.014088 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.760836 0.0339282 0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.751574 0.0144587 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.757108 0.0351134 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.76531 -0.0058253 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.786629 -0.00415829 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.76531 -0.0058253 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.770845 0.0148294 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.786629 -0.00415829 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.770845 0.0148294 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.76531 -0.0058253 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.781094 -0.024813 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.759776 -0.02648 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.759776 -0.02648 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.701782 0.0432853 0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.693716 0.0608821 0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.677932 0.0496759 0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.694884 0.0652402 0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.717566 0.0544915 0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.718734 0.0588496 0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.725632 0.0368947 0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.700615 0.0389272 0.202664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.708681 0.0213304 0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.684831 0.027721 0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.721234 -0.0272215 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.720593 -0.0310802 0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.7 -0.0246945 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.718114 -0.00820099 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.741827 -0.0336072 0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.739347 -0.010728 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.742467 -0.0297485 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.723713 -0.0501007 0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.724354 -0.046242 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.70312 -0.043715 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.649684 -0.00804971 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.628657 -0.00328338 0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.630031 0.000378614 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.642244 0.0152909 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.648309 -0.0117117 0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.661896 0.00686255 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.669336 -0.016478 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.636097 -0.026624 0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.657124 -0.0313903 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.637471 -0.022962 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.835815 -0.157543 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.899353 -0.119969 -0.117284 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.909872 -0.0977075 -0.115431 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.891613 -0.104052 -0.100068 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.886771 -0.0997803 -0.1239 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.917612 -0.113625 -0.132647 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.894512 -0.115698 -0.141116 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.907093 -0.135886 -0.1345 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.922453 -0.117896 -0.108814 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.911935 -0.140158 -0.110668 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.904194 -0.124241 -0.0934517 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.868703 -0.130205 -0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.867758 -0.11253 -0.0334138 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.846864 -0.122142 -0.0423994 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.860854 -0.107566 -0.0565949 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.889596 -0.120593 -0.0416443 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.882692 -0.115629 -0.0648253 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.890541 -0.138267 -0.0588603 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.875606 -0.135168 -0.0274488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.876551 -0.152843 -0.0446649 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.854713 -0.14478 -0.0364345 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.836885 -0.0844101 -0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.826973 -0.0627848 -0.106005 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.81296 -0.083104 -0.105354 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.830202 -0.0805529 -0.122844 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.850898 -0.0640908 -0.10004 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.854126 -0.0818589 -0.116879 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.860809 -0.0857161 -0.093424 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.833656 -0.0666419 -0.0825505 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.843568 -0.0882673 -0.0759343 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.819643 -0.0869612 -0.0818993 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.866465 -0.147308 -0.177765 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.876203 -0.130609 -0.193128 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.879733 -0.128522 -0.16878 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.857385 -0.124356 -0.178416 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.862935 -0.149395 -0.202114 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.844117 -0.143141 -0.187402 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.853198 -0.166093 -0.186751 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.885283 -0.153561 -0.192477 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.875546 -0.170259 -0.177114 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.888813 -0.151474 -0.168128 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.803997 -0.111748 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.798532 -0.108311 -0.183703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.797989 -0.131037 -0.174066 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.819589 -0.119537 -0.17736 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.80454 -0.0890219 -0.169507 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.825597 -0.100248 -0.163165 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.810005 -0.0924597 -0.145675 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.78294 -0.100522 -0.166213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.788405 -0.10396 -0.142381 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.782397 -0.123249 -0.156576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.802927 -0.184881 -0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.785723 -0.180723 -0.188808 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.798991 -0.161937 -0.179823 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.782104 -0.173028 -0.165627 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.78966 -0.203667 -0.180578 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.786041 -0.195972 -0.157397 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.806864 -0.207825 -0.163362 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.806546 -0.192576 -0.194773 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.82375 -0.196734 -0.177557 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.819813 -0.17379 -0.185788 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.898283 -0.193102 -0.129006 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.920038 -0.201143 -0.120537 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.900209 -0.201384 -0.105825 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.910616 -0.17991 -0.112168 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.918112 -0.192861 -0.143718 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.90869 -0.171628 -0.135349 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.896357 -0.18482 -0.152187 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.907705 -0.214335 -0.137375 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.88595 -0.206294 -0.145845 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.887876 -0.214576 -0.122663 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.834745 -0.230676 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.824206 -0.252002 -0.116217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.810793 -0.231282 -0.116868 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.827952 -0.234336 -0.0993785 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.848158 -0.251396 -0.122182 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.851905 -0.23373 -0.105343 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.858698 -0.23007 -0.128798 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.830999 -0.248342 -0.139672 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.841538 -0.227016 -0.146288 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.817586 -0.227621 -0.140323 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.867633 -0.203337 -0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.868948 -0.209658 -0.0385197 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.84746 -0.202239 -0.0481565 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.865773 -0.186008 -0.0448623 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.889121 -0.210757 -0.0527151 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.885946 -0.187106 -0.0590577 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.887806 -0.204436 -0.0765474 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.870808 -0.226988 -0.0560094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.869493 -0.220667 -0.0798417 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.84932 -0.219569 -0.0656463 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.69376 0.0133465 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.668775 0.0631985 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.661946 0.0667914 -0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.65711 0.0452771 -0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.680354 0.0511945 -0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.673611 0.0847128 -0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.692019 0.069116 -0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.680439 0.08112 -0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.650366 0.0787954 -0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.657195 0.0752026 -0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.64553 0.0572811 -0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.62221 0.0325183 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.604582 0.0446211 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.62221 0.0325183 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.627745 0.053173 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.604582 0.0446211 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.627745 0.053173 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.62221 0.0325183 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.599047 0.0239663 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.616676 0.0118635 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.616676 0.0118635 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.649684 -0.00804971 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.634953 -0.000226782 -0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.655218 0.012605 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.635947 0.0122343 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.629419 -0.0208815 -0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.630413 -0.00842045 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.644149 -0.0287044 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.64869 -0.0205108 -0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.66342 -0.0283337 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.668955 -0.00767898 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.740325 0.0440268 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.746894 0.0650768 -0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.739183 0.0653796 -0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.723153 0.0607735 -0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.748035 0.0437239 -0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.724295 0.0394207 -0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.741466 0.0226739 -0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.764065 0.04833 -0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.757496 0.02728 -0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.756355 0.0486329 -0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.721234 -0.0272215 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.732368 -0.0484665 -0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.715699 -0.0478762 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.737738 -0.0371781 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.737902 -0.0278118 -0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.743272 -0.0165234 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.726768 -0.00656677 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.715864 -0.0385099 -0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.70473 -0.0172649 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.699195 -0.0379196 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.76531 -0.0058253 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.786629 -0.00415829 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.76531 -0.0058253 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.770845 0.0148294 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.786629 -0.00415829 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.770845 0.0148294 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.76531 -0.0058253 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.781094 -0.024813 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.759776 -0.02648 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.759776 -0.02648 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.712851 0.0845947 -0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.706291 0.107813 -0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.689001 0.0909853 -0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.701434 0.0896851 -0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.730141 0.101422 -0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.725284 0.0832945 -0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.736701 0.0782041 -0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.717709 0.102723 -0.0882695 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.724268 0.0795043 -0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.700418 0.0858949 -0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.737837 0.0347427 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.740802 0.0511556 -0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.718185 0.043171 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.730397 0.0580833 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.760455 0.0427273 -0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.750049 0.0496549 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.757489 0.0263144 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.748242 0.027815 -0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.745277 0.0114021 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.725625 0.0198304 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.666287 0.0539145 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.650692 0.0721382 -0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.645053 0.0564414 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.663167 0.072935 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.671925 0.0696112 -0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.6844 0.070408 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.68752 0.0513875 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.653812 0.0531177 -0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.669407 0.034894 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.648173 0.0374209 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.643951 -0.172546 -0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.674191 -0.142305 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.672341 -0.123995 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.666199 -0.120057 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.651943 -0.134313 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.680334 -0.146243 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.659936 -0.156561 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.682184 -0.164554 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.69459 -0.131987 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.696439 -0.150298 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.688447 -0.12805 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.715501 -0.153374 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.731779 -0.136231 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.712305 -0.141449 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.70911 -0.129524 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.734974 -0.148156 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.712305 -0.141449 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.718696 -0.165299 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.738169 -0.160081 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.721891 -0.177224 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.718696 -0.165299 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.663122 -0.100996 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.656415 -0.0783272 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.639272 -0.0946054 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.651197 -0.0978007 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.680265 -0.0847178 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.675047 -0.104191 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.686972 -0.107387 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.66834 -0.0815225 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.675047 -0.104191 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.651197 -0.0978007 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.602641 -0.161477 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.60298 -0.154189 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.622115 -0.166695 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.617912 -0.143431 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.583506 -0.148971 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.598439 -0.138214 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.583168 -0.156259 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.587708 -0.172234 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.58737 -0.179523 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.606843 -0.184741 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.591572 -0.120168 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.577317 -0.105912 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.582843 -0.128897 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.600302 -0.111438 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.586046 -0.0971825 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.609032 -0.102708 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.600302 -0.111438 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.568587 -0.114642 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.582843 -0.128897 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.574113 -0.137627 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.5724 -0.191718 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.549732 -0.185011 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.569205 -0.179793 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.56601 -0.167868 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.552927 -0.196936 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.569205 -0.179793 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.575596 -0.203643 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.556122 -0.208861 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.578791 -0.215568 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.575596 -0.203643 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.655019 -0.213855 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.653756 -0.23668 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.636974 -0.229127 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.660237 -0.233329 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.671802 -0.221409 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.678283 -0.218058 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.673065 -0.198584 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.648538 -0.217207 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.649801 -0.194382 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.631756 -0.209653 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.624779 -0.244096 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.607636 -0.260374 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.600929 -0.237705 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.612854 -0.240901 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.631486 -0.266765 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.636704 -0.247291 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.648629 -0.250487 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.619561 -0.26357 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.636704 -0.247291 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.612854 -0.240901 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.696329 -0.224924 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.710584 -0.23918 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.687599 -0.233654 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.705059 -0.216195 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.719314 -0.23045 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.713788 -0.207465 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.705059 -0.216195 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.701855 -0.24791 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.687599 -0.233654 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.678869 -0.242384 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.786005 -0.343435 8.51251e-17 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.82165 -0.392454 0.0425863 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.824791 -0.400556 0.065698 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.802599 -0.392663 0.058292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.821021 -0.376528 0.0614442 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.843843 -0.400347 0.0499923 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.840073 -0.376319 0.0457385 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.840701 -0.392245 0.0268805 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.82542 -0.416482 0.0468401 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.822279 -0.40838 0.0237283 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.803228 -0.408589 0.0394341 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.753118 -0.370774 0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.734271 -0.367981 0.076187 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.731279 -0.362711 0.0522508 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.745269 -0.348136 0.0664462 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.756109 -0.376044 0.0844174 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.767107 -0.356199 0.0746767 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.774956 -0.378837 0.0687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.74212 -0.390619 0.070222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.760966 -0.393412 0.0545162 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.739128 -0.385349 0.0462858 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.80984 -0.323622 0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.80634 -0.308073 0.0861356 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.786996 -0.316395 0.0732426 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.802721 -0.300378 0.0629546 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.829184 -0.315299 0.0801706 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.825565 -0.307605 0.0569896 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.832685 -0.330849 0.0613127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.813459 -0.331317 0.0904587 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.81696 -0.346866 0.0716007 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.794116 -0.339639 0.0775657 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.854538 -0.365116 -0.0178949 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.878086 -0.365674 -0.0104889 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.859887 -0.367962 0.00604126 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.863875 -0.346241 -0.00500196 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.872736 -0.362827 -0.0344251 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.858526 -0.343394 -0.0289382 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.849188 -0.362269 -0.0418311 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.868748 -0.384548 -0.0233819 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.8452 -0.38399 -0.0307879 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.85055 -0.386837 -0.00685171 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.842728 -0.296284 0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.848999 -0.272611 0.00994863 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.828835 -0.281616 0.0209919 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.829121 -0.278432 -0.00349164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.862893 -0.287278 -0.0042468 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.843015 -0.293099 -0.0176871 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.856621 -0.310951 -0.00739901 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.862606 -0.290462 0.0202367 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.856335 -0.314135 0.0170845 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.842441 -0.299468 0.0312799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.818893 -0.316097 -0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.819591 -0.297057 -0.076187 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.814956 -0.293153 -0.0522508 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.79807 -0.304244 -0.0664462 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.823527 -0.320001 -0.0844174 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.802007 -0.327188 -0.0746767 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.822829 -0.339041 -0.0687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.840413 -0.30891 -0.070222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.839716 -0.32795 -0.0545162 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.835779 -0.305006 -0.0462858 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.797815 -0.412267 -0.0246914 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.793573 -0.436217 -0.0204376 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.776294 -0.419454 -0.0149506 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.796968 -0.420728 -0.00151032 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.815094 -0.42903 -0.0301783 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.818489 -0.413542 -0.0112511 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.819335 -0.405081 -0.0344321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.79442 -0.427756 -0.0436186 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.798662 -0.403807 -0.0478724 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.777141 -0.410993 -0.0381316 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.76217 -0.363249 -0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.747522 -0.356966 -0.0861356 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.759239 -0.339469 -0.0732426 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.740618 -0.352002 -0.0629546 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.750453 -0.380746 -0.0801706 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.743549 -0.375782 -0.0569896 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.765101 -0.387029 -0.0613127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.769074 -0.368213 -0.0904587 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.783722 -0.374496 -0.0716007 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.780791 -0.350716 -0.0775657 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.729282 -0.390587 -0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.704862 -0.392427 -0.00994863 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.717401 -0.374248 -0.0209919 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.714218 -0.373948 0.00349164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.716744 -0.408767 0.0042468 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.726099 -0.390287 0.0176871 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.741164 -0.406927 0.00739901 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.719927 -0.409067 -0.0202367 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.744347 -0.407227 -0.0170845 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.732465 -0.390887 -0.0312799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.594141 -0.358439 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.542042 -0.409774 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.517869 -0.413579 -0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.528508 -0.393219 -0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.525596 -0.395831 -0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.531404 -0.430134 -0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.539131 -0.412386 -0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555577 -0.426328 -0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.534315 -0.427522 -0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.558488 -0.423716 -0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.544953 -0.407161 -0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.522591 -0.339267 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.504962 -0.327164 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.522591 -0.339267 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.528125 -0.318612 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.504962 -0.327164 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.528125 -0.318612 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.522591 -0.339267 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.499428 -0.347819 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.517056 -0.359921 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.517056 -0.359921 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.550064 -0.379835 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.529037 -0.375068 -0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.530412 -0.371406 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.542624 -0.356494 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.548689 -0.383497 -0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.562276 -0.364922 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.569716 -0.388263 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.536477 -0.398409 -0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.557504 -0.403175 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.537852 -0.394747 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.613592 -0.428945 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.612625 -0.451897 -0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.593593 -0.436515 -0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.614807 -0.432663 -0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.632624 -0.444328 -0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.634806 -0.425094 -0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.633591 -0.421376 -0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.61141 -0.448179 -0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.612377 -0.425227 -0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.592379 -0.432797 -0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.621614 -0.399007 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.620974 -0.402865 -0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.600381 -0.39648 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.618494 -0.379986 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.642207 -0.405392 -0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.639728 -0.382513 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.642848 -0.401533 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.624094 -0.421886 -0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.624734 -0.418027 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.603501 -0.4155 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.665691 -0.37761 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.687009 -0.375943 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.665691 -0.37761 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.671225 -0.356956 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.687009 -0.375943 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.671225 -0.356956 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.665691 -0.37761 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.681475 -0.396598 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.660156 -0.398265 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.660156 -0.398265 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.586119 -0.388377 -0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.570335 -0.399584 -0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.562269 -0.381987 -0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.569167 -0.403942 -0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.594185 -0.405974 -0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.593017 -0.410332 -0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.609969 -0.394768 -0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.587286 -0.384019 -0.202664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.60307 -0.372813 -0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.57922 -0.366422 -0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.638217 -0.337042 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.64748 -0.317573 -0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.643752 -0.316388 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.624481 -0.316758 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.641945 -0.338228 -0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.618946 -0.337413 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.632683 -0.357697 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.661216 -0.337857 -0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.651954 -0.357326 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.657489 -0.336672 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.566667 -0.317871 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.562847 -0.317033 -0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.561133 -0.338525 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.583171 -0.327827 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.568381 -0.296378 -0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.588706 -0.307172 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.572202 -0.297216 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.546343 -0.307077 -0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.550163 -0.307914 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.544629 -0.328569 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.594141 -0.358439 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.547576 -0.389119 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.525642 -0.386849 0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.528407 -0.379645 0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.538964 -0.366733 0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.544812 -0.396323 0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.558134 -0.376207 0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.566746 -0.398593 0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.534255 -0.409235 0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.556189 -0.411505 0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.537019 -0.402031 0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.522591 -0.339267 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.504962 -0.327164 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.522591 -0.339267 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.528125 -0.318612 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.504962 -0.327164 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.528125 -0.318612 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.522591 -0.339267 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.499428 -0.347819 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.517056 -0.359921 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.517056 -0.359921 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.566667 -0.317871 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.551072 -0.299647 0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.545434 -0.315344 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.563547 -0.29885 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.572306 -0.302174 0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.584781 -0.301377 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.587901 -0.320398 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.554192 -0.318667 0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.569787 -0.336891 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.548554 -0.334364 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.619127 -0.408291 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.617918 -0.415912 0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.597788 -0.406911 0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.616439 -0.39183 0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.639257 -0.417292 0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.637778 -0.39321 0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.640465 -0.409671 0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.620605 -0.432372 0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.621814 -0.424751 0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.600475 -0.423371 0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.638217 -0.337042 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.641183 -0.320629 0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.618565 -0.328614 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.630777 -0.313702 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.660835 -0.329058 0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.65043 -0.32213 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.65787 -0.345471 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.648623 -0.34397 0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.645657 -0.360383 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.626005 -0.351955 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.665691 -0.37761 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.687009 -0.375943 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.665691 -0.37761 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.671225 -0.356956 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.687009 -0.375943 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.671225 -0.356956 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.665691 -0.37761 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.681475 -0.396598 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.660156 -0.398265 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.660156 -0.398265 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.57505 -0.429687 0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.55776 -0.446515 0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.5512 -0.423296 0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.562617 -0.428387 0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.58161 -0.452905 0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.586467 -0.434777 0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.5989 -0.436077 0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.570193 -0.447815 0.0882695 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.587483 -0.430987 0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.563633 -0.424596 0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.621614 -0.399007 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.632748 -0.420252 0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.61608 -0.419661 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.638118 -0.408963 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.638282 -0.399597 0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.643653 -0.388308 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.627149 -0.378352 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.616244 -0.410295 0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.60511 -0.38905 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.599576 -0.409705 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.550064 -0.379835 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.535334 -0.372012 0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.555599 -0.35918 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.536327 -0.359551 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.529799 -0.392667 0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.530793 -0.380205 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.54453 -0.400489 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.549071 -0.392296 0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.563801 -0.400119 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.569335 -0.379464 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0996195 -0.371785 0.544331 RAD 0.166667
+ txt002
+ SPHERE CENTER 0.220501 -0.393621 0.729516 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.279642 -0.368601 0.766439 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.299716 -0.354293 0.765035 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.292196 -0.366989 0.745238 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.279022 -0.347717 0.753281 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.287162 -0.355904 0.786236 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.266468 -0.349329 0.774481 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.267088 -0.370213 0.787639 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.300337 -0.375177 0.778193 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.280263 -0.389485 0.779597 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.292817 -0.387873 0.758396 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.281062 -0.372464 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.289441 -0.362978 0.671279 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.270044 -0.378255 0.671155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.267771 -0.35549 0.680442 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.30046 -0.357187 0.692603 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.278789 -0.349699 0.701767 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.29208 -0.366673 0.713804 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.302733 -0.379952 0.683315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.294353 -0.389438 0.704516 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.283335 -0.395229 0.683192 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.238665 -0.321889 0.726118 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.250544 -0.304702 0.71296 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.259421 -0.327715 0.714081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.238717 -0.32307 0.701455 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.229788 -0.298875 0.724997 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.21796 -0.317244 0.713492 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.217908 -0.316063 0.738155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.250492 -0.30352 0.737623 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.238612 -0.320707 0.750781 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.259369 -0.326533 0.738744 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.219082 -0.389758 0.803476 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.228779 -0.378635 0.823273 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.24293 -0.383364 0.8036 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.225483 -0.365937 0.802355 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.20493 -0.385029 0.823149 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.201634 -0.372331 0.802231 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.195233 -0.396152 0.803352 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.222377 -0.402455 0.824394 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.21268 -0.413578 0.804597 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.236529 -0.407185 0.804721 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.178104 -0.343046 0.763155 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.177083 -0.319723 0.771198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.198298 -0.332294 0.772443 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.189464 -0.325124 0.750529 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.156889 -0.330475 0.76191 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.16927 -0.335876 0.741241 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.157909 -0.353797 0.753867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.165722 -0.337645 0.783824 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.166743 -0.360967 0.775781 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.186938 -0.350216 0.785069 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.15994 -0.414778 0.766553 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.147477 -0.412573 0.787754 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.172167 -0.412448 0.787878 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.15977 -0.39322 0.77859 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.13525 -0.414903 0.766429 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.147543 -0.39555 0.757266 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.147713 -0.417108 0.745229 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.147647 -0.434131 0.775717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.16011 -0.436336 0.754517 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.172338 -0.434006 0.775841 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.261479 -0.440333 0.769837 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.282991 -0.443285 0.781591 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282046 -0.4302 0.760673 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.271991 -0.421181 0.781342 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.262424 -0.453417 0.790755 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.251423 -0.431313 0.790506 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.240911 -0.450466 0.779001 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.27248 -0.462437 0.770086 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.250967 -0.459485 0.758332 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.271534 -0.449353 0.749168 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.202338 -0.465353 0.732914 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.204606 -0.486123 0.746073 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.223366 -0.470107 0.744951 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.202946 -0.464339 0.757577 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.183578 -0.481368 0.734036 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.181918 -0.459584 0.745541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.18131 -0.460599 0.720878 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.203998 -0.487137 0.72141 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.201729 -0.466367 0.708251 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.222757 -0.471122 0.720288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.262898 -0.444196 0.695877 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.285685 -0.449273 0.687835 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.27701 -0.426189 0.68659 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282528 -0.436139 0.708504 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.271573 -0.46728 0.697123 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.268416 -0.454146 0.717791 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.248787 -0.462204 0.705165 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.266055 -0.45733 0.675209 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.243269 -0.452254 0.683251 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.257381 -0.434246 0.673964 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.31427 -0.31427 0.544331 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.367156 -0.277961 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.374298 -0.269898 0.485076 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.362218 -0.291334 0.487134 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.350338 -0.270045 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.379235 -0.256525 0.505236 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.355276 -0.256671 0.511201 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.372093 -0.264588 0.527454 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.391115 -0.277815 0.501329 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.383973 -0.285878 0.523547 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.379036 -0.299251 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.31427 -0.31427 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.304189 -0.304189 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.29042 -0.307879 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.307879 -0.29042 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.328039 -0.31058 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.331729 -0.29681 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.33812 -0.32066 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.31058 -0.328039 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.32066 -0.33812 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.29681 -0.331729 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.297666 -0.252306 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.305995 -0.235688 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.321516 -0.245915 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.312359 -0.259438 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282145 -0.242079 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.288509 -0.265828 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.273816 -0.258696 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.291303 -0.228556 0.509559 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282974 -0.245173 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.306824 -0.238783 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.367156 -0.277961 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.385852 -0.261966 0.57931 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.38141 -0.278159 0.561208 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.36581 -0.259422 0.565115 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.371598 -0.261768 0.599471 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.351556 -0.259225 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.352901 -0.277764 0.601529 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.387198 -0.280504 0.595564 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.368501 -0.2965 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.382755 -0.296698 0.577461 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.297666 -0.252306 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.30415 -0.228803 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.321516 -0.245915 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.306824 -0.238783 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.2803 -0.235194 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282974 -0.245173 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.273816 -0.258696 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.294992 -0.242326 0.603794 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.288509 -0.265828 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.312359 -0.259438 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.31427 -0.31427 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.32435 -0.304189 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.33812 -0.307879 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.32066 -0.29042 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.3005 -0.31058 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.29681 -0.29681 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.29042 -0.32066 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.317959 -0.328039 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.307879 -0.33812 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.331729 -0.331729 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.383759 -0.339925 0.544331 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.407156 -0.334762 0.538366 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.388696 -0.326552 0.524171 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.392275 -0.31686 0.546597 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.402218 -0.348135 0.558526 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.387337 -0.330233 0.566757 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.378821 -0.353299 0.564491 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.39864 -0.357827 0.536101 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.375243 -0.362991 0.542066 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.380181 -0.349618 0.521905 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.330873 -0.376234 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.346394 -0.386461 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.354723 -0.369843 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.340031 -0.362711 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.322544 -0.392851 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.316181 -0.369102 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.307023 -0.382624 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.337237 -0.399983 0.579103 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.321715 -0.389757 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.345565 -0.383366 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.330873 -0.376234 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.348239 -0.393346 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.354723 -0.369843 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.345565 -0.383366 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.324389 -0.399736 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.321715 -0.389757 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.307023 -0.382624 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.333547 -0.386213 0.484868 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.316181 -0.369102 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.340031 -0.362711 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.166275 -0.191247 0.655442 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.20793 -0.130089 0.652044 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.221102 -0.115471 0.637128 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.220766 -0.13987 0.633356 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.200597 -0.126388 0.628759 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.208266 -0.10569 0.655816 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.187762 -0.116607 0.647447 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.195095 -0.120308 0.670732 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.228435 -0.119172 0.660413 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.215264 -0.13379 0.675329 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.228099 -0.143571 0.656641 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.230419 -0.192135 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.243049 -0.18209 0.599717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.218634 -0.185251 0.597829 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.227721 -0.168159 0.613157 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.254834 -0.188974 0.620293 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.239506 -0.175043 0.633733 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.242204 -0.199019 0.638981 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.245747 -0.206066 0.604965 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.233117 -0.216111 0.623653 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.221332 -0.209227 0.603077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.172673 -0.154295 0.591563 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.180792 -0.15554 0.568278 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.19323 -0.166926 0.586315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.171251 -0.17557 0.579113 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.160236 -0.142909 0.573526 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.150694 -0.162939 0.584361 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.152117 -0.141663 0.596811 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.182215 -0.134265 0.580727 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.174096 -0.133019 0.604012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.194652 -0.145651 0.598764 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.143787 -0.129201 0.689081 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.14887 -0.105335 0.692853 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.167242 -0.121723 0.690969 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.153943 -0.115741 0.671044 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.125414 -0.112813 0.690965 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.130487 -0.123219 0.669156 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.120331 -0.136679 0.687193 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.138714 -0.118795 0.71089 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.13363 -0.142661 0.707118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.157086 -0.135183 0.709006 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.108529 -0.153407 0.6286 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0995811 -0.130858 0.624003 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.113639 -0.134736 0.643928 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.123725 -0.135326 0.621398 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0944715 -0.149528 0.608675 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.118615 -0.153997 0.60607 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.10342 -0.172078 0.613272 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0843858 -0.148938 0.631205 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0933338 -0.171487 0.635801 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0984435 -0.152816 0.65113 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.102131 -0.190359 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0897843 -0.179968 0.711167 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.114103 -0.183804 0.713055 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.105492 -0.166467 0.697727 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0778128 -0.186523 0.690591 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0935207 -0.173022 0.677151 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0901597 -0.196914 0.671903 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0864233 -0.20386 0.705919 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0987702 -0.214251 0.687231 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.110742 -0.207696 0.707807 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.201532 -0.167041 0.715923 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.219088 -0.151829 0.724292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.221861 -0.163068 0.702483 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.205084 -0.14514 0.705088 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.19876 -0.155801 0.737733 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.184756 -0.149113 0.718528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.181204 -0.171014 0.729364 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.215537 -0.173729 0.735128 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.197981 -0.188942 0.726759 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.218309 -0.184969 0.713318 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.159877 -0.228199 0.719322 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.167942 -0.229756 0.742607 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.183484 -0.223214 0.72457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.16569 -0.207683 0.731771 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.144336 -0.234741 0.737359 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.142084 -0.212668 0.726523 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.13627 -0.233184 0.714074 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.162129 -0.250271 0.730157 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.154064 -0.248714 0.706872 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.177671 -0.243729 0.71212 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.224021 -0.229087 0.682285 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.248268 -0.22829 0.686881 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.2391 -0.216949 0.666956 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.234532 -0.207937 0.689486 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.233189 -0.240428 0.702209 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.219453 -0.220075 0.704814 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.208942 -0.241225 0.697613 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.237756 -0.249439 0.67968 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.213509 -0.250236 0.675083 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.228589 -0.238098 0.659755 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0058509 -0.451136 0.729516 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.0051487 -0.447081 0.803476 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.01504 -0.435909 0.823149 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0289993 -0.440694 0.803352 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0115452 -0.423265 0.802231 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00881065 -0.442297 0.823273 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0123054 -0.429652 0.802355 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0187019 -0.453468 0.8036 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00864346 -0.459725 0.824394 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0012478 -0.470897 0.804721 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0226028 -0.46451 0.804597 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0688765 -0.439178 0.766553 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0903221 -0.426942 0.766429 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0806307 -0.435083 0.745229 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0699989 -0.416328 0.757266 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.078568 -0.431037 0.787754 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0582447 -0.420423 0.77859 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0571224 -0.443274 0.787878 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0891998 -0.449792 0.775717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0677542 -0.462029 0.775841 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0795084 -0.457933 0.754517 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0172804 -0.386138 0.763155 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0293677 -0.364644 0.76191 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0401449 -0.385352 0.753867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0213457 -0.375512 0.741241 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0065032 -0.36543 0.771198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00151881 -0.376298 0.750529 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00558411 -0.386924 0.772443 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0253024 -0.37527 0.783824 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0132151 -0.396764 0.785069 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0360796 -0.395978 0.775781 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0578769 -0.459039 0.766439 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0707378 -0.451803 0.786236 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0461991 -0.454158 0.787639 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0561039 -0.435761 0.774481 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0824157 -0.456685 0.765035 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0677817 -0.440643 0.753281 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0695548 -0.46392 0.745238 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0725109 -0.475081 0.778193 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.05965 -0.482316 0.758396 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0479721 -0.477435 0.779597 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0457452 -0.398096 0.726118 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0495643 -0.373728 0.724997 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0306825 -0.382672 0.738155 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.030137 -0.383722 0.713492 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.064627 -0.389151 0.71296 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0451997 -0.399146 0.701455 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.060808 -0.41352 0.714081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0651725 -0.388102 0.737623 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0613535 -0.41247 0.738744 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0462908 -0.397047 0.750781 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0571747 -0.463094 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.081612 -0.459563 0.692603 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0696122 -0.463589 0.713804 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0665888 -0.442243 0.701767 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0691745 -0.459069 0.671279 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0541513 -0.441749 0.680442 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0447373 -0.4626 0.671155 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0721979 -0.480415 0.683315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0477607 -0.483946 0.683192 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0601982 -0.48444 0.704516 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00628079 -0.512079 0.769837 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.000557006 -0.523883 0.790755 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0165974 -0.51057 0.779001 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00208214 -0.49924 0.790506 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0234352 -0.525392 0.781591 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0249603 -0.500749 0.781342 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.029159 -0.513588 0.760673 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00475566 -0.536722 0.770086 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0104794 -0.524918 0.749168 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0123987 -0.523409 0.758332 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00557859 -0.516134 0.695877 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.00154892 -0.540463 0.697123 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0156462 -0.524673 0.705165 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00538221 -0.52751 0.717791 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0227737 -0.531924 0.687835 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.026607 -0.518971 0.708504 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0268034 -0.507596 0.68659 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00174531 -0.529087 0.675209 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00577498 -0.504759 0.673964 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0154498 -0.513298 0.683251 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0574471 -0.504176 0.732914 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0817008 -0.508666 0.734036 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0732807 -0.489545 0.720878 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0722467 -0.488971 0.745541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0658672 -0.523298 0.746073 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0564131 -0.503602 0.757577 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0416134 -0.518808 0.744951 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0669012 -0.523872 0.72141 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0426474 -0.519382 0.720288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.058481 -0.504751 0.708251 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0483751 -0.248762 0.655442 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.0599222 -0.183785 0.689081 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0522053 -0.160406 0.690965 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0358698 -0.178533 0.687193 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0513956 -0.171954 0.669156 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0762577 -0.165658 0.692853 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.075448 -0.177206 0.671044 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0839747 -0.189036 0.690969 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0607319 -0.172236 0.71089 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0684488 -0.195615 0.709006 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0443964 -0.190363 0.707118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00673113 -0.215921 0.692479 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0258737 -0.20044 0.690591 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0203763 -0.215612 0.671903 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00551963 -0.196602 0.677151 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0122285 -0.200749 0.711167 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00812553 -0.196911 0.697727 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00691403 -0.21623 0.713055 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0270852 -0.21976 0.705919 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00794264 -0.235241 0.707807 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0215878 -0.234932 0.687231 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0172857 -0.187119 0.6286 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.00705049 -0.176731 0.608675 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00352517 -0.200733 0.613272 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.025725 -0.192673 0.60607 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.020811 -0.163117 0.624003 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0394855 -0.179058 0.621398 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0310463 -0.173504 0.643928 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00138875 -0.171177 0.631205 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00884647 -0.181564 0.65113 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00491406 -0.195179 0.635801 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.115028 -0.216626 0.652044 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.127519 -0.195663 0.655816 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.108803 -0.201738 0.670732 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.104303 -0.194866 0.647447 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.133744 -0.210551 0.637128 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.110528 -0.209754 0.628759 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.121254 -0.231514 0.633356 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.138245 -0.217423 0.660413 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.125754 -0.238386 0.656641 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.119529 -0.223497 0.675329 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0723919 -0.21996 0.591563 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0673141 -0.20388 0.573526 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0609052 -0.198742 0.596811 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0490355 -0.216456 0.584361 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0788008 -0.225098 0.568278 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0605222 -0.237674 0.579113 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0838786 -0.241177 0.586315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0906706 -0.207384 0.580727 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0957484 -0.223463 0.598764 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0842617 -0.202246 0.604012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.103481 -0.281603 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.126206 -0.291073 0.620293 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.110246 -0.293457 0.638981 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.119897 -0.271345 0.633733 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.119442 -0.279219 0.599717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.113132 -0.25949 0.613157 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0967168 -0.269749 0.597829 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.10979 -0.301332 0.604965 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0870656 -0.291862 0.603077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0938302 -0.303716 0.623653 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0910116 -0.245428 0.715923 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0942304 -0.234308 0.737733 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0714204 -0.238704 0.729364 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0854464 -0.221514 0.718528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.113822 -0.241032 0.724292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.105038 -0.228237 0.705088 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.110603 -0.252152 0.702483 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0997955 -0.258223 0.735128 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0965768 -0.269343 0.713318 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0769856 -0.262619 0.726759 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0794645 -0.310405 0.682285 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0817333 -0.324811 0.702209 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0603366 -0.313378 0.697613 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0800146 -0.300317 0.704814 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.100861 -0.321838 0.686881 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0991425 -0.297345 0.689486 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0985923 -0.307433 0.666956 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0811832 -0.334899 0.67968 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0789143 -0.320493 0.659755 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0597864 -0.323466 0.675083 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0243582 -0.277564 0.719322 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0076281 -0.275459 0.737359 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00142185 -0.270078 0.714074 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0167139 -0.255218 0.726523 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0305645 -0.282946 0.742607 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0396503 -0.262704 0.731771 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0472946 -0.285051 0.72457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0152725 -0.297806 0.730157 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0320026 -0.299911 0.71212 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00906621 -0.292425 0.706872 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.115031 -0.4293 0.544331 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.178985 -0.424299 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.190929 -0.412497 0.599471 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.16674 -0.417001 0.601529 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.174844 -0.400273 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.203175 -0.419795 0.57931 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.18709 -0.407571 0.565115 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.191231 -0.431597 0.561208 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.195071 -0.436523 0.595564 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.183127 -0.448325 0.577461 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.170881 -0.441027 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.115031 -0.4293 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.10495 -0.41922 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0911807 -0.42291 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.10864 -0.40545 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.128801 -0.425611 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.13249 -0.411841 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.138881 -0.435691 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.111341 -0.44307 0.638566 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.121421 -0.45315 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0975713 -0.44676 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.131634 -0.367336 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.12515 -0.343834 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.107784 -0.360946 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.122476 -0.353814 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.149 -0.350225 0.585275 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.146326 -0.360204 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.155484 -0.373727 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.134308 -0.357357 0.603794 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.140792 -0.380859 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.116942 -0.374468 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.178985 -0.424299 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.200165 -0.411775 0.505236 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.189948 -0.415187 0.527454 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.179342 -0.399922 0.511201 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.189202 -0.420888 0.485076 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.168379 -0.409035 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.168023 -0.433412 0.487134 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.199808 -0.436152 0.501329 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.178629 -0.448677 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.189591 -0.439564 0.523547 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.131634 -0.367336 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.123305 -0.350719 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.107784 -0.360946 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.116942 -0.374468 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.147155 -0.357109 0.491041 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.140792 -0.380859 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.155484 -0.373727 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.137998 -0.343587 0.509559 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.146326 -0.360204 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.122476 -0.353814 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.115031 -0.4293 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.125111 -0.41922 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.138881 -0.42291 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.121421 -0.40545 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.101261 -0.425611 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0975713 -0.411841 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0911807 -0.435691 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.11872 -0.44307 0.450097 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.10864 -0.45315 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.13249 -0.44676 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.162382 -0.486264 0.544331 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.174264 -0.502603 0.558526 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.15142 -0.495376 0.564491 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.170327 -0.479659 0.566757 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.185226 -0.49349 0.538366 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.18129 -0.470546 0.546597 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.173345 -0.477151 0.524171 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.166319 -0.509207 0.536101 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.154437 -0.492868 0.521905 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.143475 -0.501981 0.542066 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0984274 -0.491265 0.507294 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0810612 -0.508376 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0745774 -0.484874 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0837352 -0.498397 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.104911 -0.514767 0.503387 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.107585 -0.504787 0.525813 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.122277 -0.497655 0.507294 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0957534 -0.501244 0.484868 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.11312 -0.484132 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0892696 -0.477742 0.488775 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0984274 -0.491265 0.581368 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.082906 -0.501491 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0745774 -0.484874 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0892696 -0.477742 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.106756 -0.507882 0.597621 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.11312 -0.484132 0.599887 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.122277 -0.497655 0.581368 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0920638 -0.515014 0.579103 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.107585 -0.504787 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0837352 -0.498397 0.56285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.153845 -0.574159 0.618405 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.202534 -0.612768 0.658726 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.225282 -0.612732 0.668328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.22113 -0.60221 0.64638 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.212428 -0.591695 0.666956 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.206686 -0.62329 0.680674 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.193832 -0.602253 0.679302 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.183939 -0.623325 0.671072 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.215388 -0.633805 0.660098 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.192641 -0.63384 0.650495 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.211236 -0.623283 0.63815 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.225396 -0.554987 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.243024 -0.542885 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.225396 -0.554987 0.593714 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.219861 -0.534333 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.243024 -0.542885 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.219861 -0.534333 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.225396 -0.554987 0.643096 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.248559 -0.563539 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.23093 -0.575642 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.23093 -0.575642 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.184086 -0.543919 0.678886 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.200547 -0.527458 0.687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.205161 -0.540303 0.666541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.187702 -0.522843 0.666541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.179472 -0.531074 0.699462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.166627 -0.526459 0.678886 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.163011 -0.547535 0.691232 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.196931 -0.548533 0.699462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.18047 -0.564994 0.691232 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.201546 -0.561378 0.678886 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.130984 -0.631939 0.658726 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.132649 -0.643128 0.680674 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.152367 -0.631785 0.671072 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.133263 -0.618482 0.679302 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.111266 -0.643283 0.668328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.11188 -0.618637 0.666956 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.109601 -0.632094 0.64638 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.130371 -0.656585 0.660098 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.128706 -0.645397 0.63815 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.150088 -0.645242 0.650495 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.112536 -0.56309 0.678886 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.11011 -0.549659 0.699462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.132596 -0.555684 0.691232 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.118927 -0.53924 0.678886 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.09005 -0.557065 0.687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0988668 -0.546646 0.666541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0924762 -0.570497 0.666541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.103719 -0.573509 0.699462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.106145 -0.58694 0.678886 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.126205 -0.579534 0.691232 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0822954 -0.593331 0.618405 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0609772 -0.591664 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0822954 -0.593331 0.643096 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.076761 -0.572676 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0609772 -0.591664 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.076761 -0.572676 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0822954 -0.593331 0.593714 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0665116 -0.612319 0.618405 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0878298 -0.613986 0.606059 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0878298 -0.613986 0.630751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.172294 -0.643008 0.598245 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.189742 -0.660425 0.599616 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.196144 -0.636618 0.598245 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.185725 -0.645434 0.618821 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.165892 -0.666816 0.599616 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.161875 -0.651825 0.618821 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.148444 -0.649399 0.598245 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.17631 -0.657999 0.57904 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.158862 -0.640582 0.577669 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.182712 -0.634191 0.577669 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.123605 -0.6044 0.557924 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.107144 -0.620861 0.549693 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.119989 -0.625475 0.57027 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.102529 -0.608016 0.57027 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.11076 -0.599785 0.537348 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.106145 -0.58694 0.557924 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.127221 -0.583324 0.545578 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.128219 -0.617245 0.537348 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.14468 -0.600784 0.545578 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.141064 -0.621859 0.557924 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.195155 -0.585228 0.557924 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.203972 -0.574809 0.537348 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.181486 -0.568784 0.545578 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.201546 -0.561378 0.557924 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.217641 -0.591253 0.549693 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.215215 -0.577822 0.57027 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.208824 -0.601672 0.57027 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.197581 -0.598659 0.537348 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.188764 -0.609078 0.557924 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.175095 -0.592634 0.545578 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0329639 -0.552323 0.43322 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.0248832 -0.625877 0.436618 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0316054 -0.646362 0.448652 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0478 -0.627981 0.445566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0287309 -0.625173 0.460998 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00868865 -0.644258 0.439705 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00581415 -0.623069 0.45205 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00196644 -0.623773 0.427671 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0277577 -0.647066 0.424272 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0210355 -0.62658 0.412239 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0439523 -0.628685 0.421186 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0822954 -0.593331 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.105299 -0.593994 0.479204 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.100664 -0.582384 0.457911 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0926585 -0.572783 0.479204 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0869303 -0.604941 0.49155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0742898 -0.58373 0.49155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0639267 -0.604278 0.482603 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0949359 -0.614541 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0719323 -0.613879 0.46131 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.090301 -0.602932 0.448964 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0138144 -0.584567 0.497099 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0177119 -0.584898 0.521479 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0364224 -0.580268 0.506047 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0185345 -0.56353 0.509133 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00489609 -0.589197 0.512531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00407348 -0.567829 0.500186 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00879364 -0.588867 0.488152 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0129918 -0.605935 0.509445 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00909422 -0.605605 0.485065 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0317022 -0.601305 0.494013 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0244483 -0.584869 0.399581 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0473753 -0.5935 0.402668 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0308315 -0.595617 0.420874 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0399691 -0.57344 0.415013 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0409921 -0.582752 0.381374 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0335859 -0.562692 0.39372 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0180651 -0.574121 0.378288 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0318545 -0.604929 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00892756 -0.596298 0.384149 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0153107 -0.607046 0.405442 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0355172 -0.54356 0.460062 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0495897 -0.530389 0.475494 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0261165 -0.53532 0.481355 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.031221 -0.519442 0.463149 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0589904 -0.538628 0.454201 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0406217 -0.527681 0.441856 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0449178 -0.551799 0.438769 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0538859 -0.554507 0.472408 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0398133 -0.567678 0.456976 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0304127 -0.559438 0.478269 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0163676 -0.511316 0.396183 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0212225 -0.48882 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00896145 -0.491256 0.408529 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00194055 -0.497372 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0286287 -0.50888 0.37489 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00546563 -0.517432 0.37489 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0237738 -0.531375 0.383837 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0395307 -0.502764 0.396183 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0346758 -0.525259 0.40513 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0272696 -0.505199 0.417476 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0440327 -0.593633 0.372739 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0604766 -0.607302 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0678827 -0.587242 0.372739 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0604766 -0.607302 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0366265 -0.613693 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0366265 -0.613693 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0201827 -0.600023 0.372739 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0440327 -0.593633 0.348047 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0275889 -0.579964 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0514389 -0.573573 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0521134 -0.520079 0.369341 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0542684 -0.523344 0.344961 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0591566 -0.541988 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0358996 -0.534291 0.357307 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0472252 -0.501435 0.353908 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0288565 -0.512382 0.366254 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0450702 -0.49817 0.378288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0704822 -0.509132 0.356995 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0683272 -0.505868 0.381374 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0753703 -0.527777 0.372427 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.101445 -0.561087 0.406378 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.118381 -0.551884 0.390945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0944221 -0.550745 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.103361 -0.536664 0.403291 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.125404 -0.562225 0.412239 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.110383 -0.547006 0.424584 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.108468 -0.571428 0.427671 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.116465 -0.576307 0.394032 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0995293 -0.58551 0.409464 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0925065 -0.575168 0.388171 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.247614 -0.494808 0.43322 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.313607 -0.494287 0.399581 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.326876 -0.484182 0.381374 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.302705 -0.488171 0.378288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.310432 -0.470513 0.39372 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.337778 -0.490299 0.402668 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.321334 -0.476629 0.415013 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.324509 -0.500404 0.420874 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.330051 -0.507957 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.316783 -0.518062 0.405442 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.305881 -0.511946 0.384149 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.269833 -0.434629 0.396183 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.279233 -0.426389 0.37489 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.286276 -0.448298 0.383837 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.263449 -0.445377 0.37489 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.262789 -0.41272 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.247006 -0.431707 0.387235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.253389 -0.420959 0.408529 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.285616 -0.415641 0.396183 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.276216 -0.42388 0.417476 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.29266 -0.43755 0.40513 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.302539 -0.452978 0.460062 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.320401 -0.436971 0.454201 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.3148 -0.455413 0.438769 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.29902 -0.436675 0.441856 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.30814 -0.434535 0.475494 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.286759 -0.434239 0.463149 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.290278 -0.450543 0.481355 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.32392 -0.453274 0.472408 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.306057 -0.469281 0.478269 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.318318 -0.471717 0.456976 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.291389 -0.554467 0.436618 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.314604 -0.562288 0.439705 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.310183 -0.541186 0.427671 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.306499 -0.542501 0.45205 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.29581 -0.575569 0.448652 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.287705 -0.555781 0.460998 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.272595 -0.567748 0.445566 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.299494 -0.574255 0.424272 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.276279 -0.566433 0.421186 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.295073 -0.553152 0.412239 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.28032 -0.513157 0.497099 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.298839 -0.507811 0.512531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.302049 -0.505577 0.488152 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.287442 -0.489718 0.500186 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.27711 -0.515392 0.521479 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.265714 -0.497299 0.509133 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.258591 -0.520738 0.506047 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.291716 -0.531251 0.509445 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.273198 -0.536597 0.494013 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.294927 -0.529016 0.485065 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.225396 -0.554987 0.470257 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.227186 -0.567359 0.49155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.246777 -0.555283 0.482603 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.227528 -0.54267 0.49155 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.205805 -0.567063 0.479204 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.206147 -0.542374 0.479204 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.204014 -0.554691 0.457911 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.225054 -0.579676 0.470257 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.223263 -0.567305 0.448964 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.244644 -0.567601 0.46131 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.258683 -0.536117 0.372739 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.275127 -0.549787 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282533 -0.529727 0.372739 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.275127 -0.549787 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.251277 -0.556177 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.251277 -0.556177 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.234833 -0.542508 0.372739 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.258683 -0.536117 0.348047 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.242239 -0.522448 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.266089 -0.516058 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.19269 -0.536638 0.406378 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.17251 -0.549603 0.412239 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.191778 -0.549105 0.427671 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.177908 -0.528912 0.424584 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.173421 -0.537136 0.390945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.178819 -0.516445 0.403291 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.193601 -0.524171 0.385084 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.187292 -0.557329 0.394032 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.207471 -0.544363 0.388171 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.20656 -0.556831 0.409464 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.214908 -0.476459 0.369341 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.209819 -0.457868 0.353908 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.210053 -0.453963 0.378288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.2312 -0.458164 0.366254 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.214674 -0.480363 0.344961 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.236055 -0.480659 0.357307 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.219763 -0.498954 0.360393 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.193527 -0.476163 0.356995 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.198616 -0.494753 0.372427 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.193761 -0.472258 0.381374 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.172546 -0.643951 1.11022e-16 RAD 0.166667
+ txt002
+ SPHERE CENTER -0.157543 -0.835815 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.122136 -0.871646 0.165419 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.102403 -0.871334 0.180258 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.100577 -0.862937 0.157111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.113406 -0.850164 0.173902 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.123961 -0.880044 0.188567 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.134964 -0.858873 0.182211 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.143694 -0.880356 0.173728 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.111133 -0.892817 0.171776 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.130866 -0.893129 0.156937 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.109307 -0.884419 0.148628 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0854653 -0.82339 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0654286 -0.811594 0.114524 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0820122 -0.820516 0.0985541 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0876595 -0.80102 0.112614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0688817 -0.814468 0.138803 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0911125 -0.803895 0.136894 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0889183 -0.826265 0.147112 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0632344 -0.833964 0.124743 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.083271 -0.845761 0.133052 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.079818 -0.842886 0.108773 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.135649 -0.799077 0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.120908 -0.781177 0.180075 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.113462 -0.795477 0.161374 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.13149 -0.778973 0.157875 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.143095 -0.784778 0.190293 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.153678 -0.782573 0.168094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.157836 -0.802678 0.181811 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.125067 -0.801282 0.193792 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.139808 -0.819182 0.18531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.11762 -0.815582 0.175091 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.194213 -0.884071 0.153697 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.197746 -0.891905 0.176845 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.175383 -0.884286 0.169668 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.193701 -0.867957 0.172398 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.216576 -0.89169 0.160875 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.212531 -0.867741 0.156428 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.213043 -0.883856 0.137727 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.198259 -0.908019 0.158144 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.194726 -0.900186 0.134996 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.175896 -0.900401 0.150967 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.207727 -0.811502 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.212743 -0.794108 0.176661 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.189621 -0.802328 0.173931 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.199907 -0.788345 0.156372 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.230849 -0.803282 0.162601 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.218012 -0.797518 0.142311 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.225832 -0.820676 0.14581 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.220563 -0.817265 0.18016 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.215547 -0.83466 0.163369 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.197441 -0.825486 0.177429 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.229621 -0.84824 0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.25245 -0.843832 0.107698 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.233837 -0.846687 0.123668 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.235043 -0.826426 0.109608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.248234 -0.845385 0.0834188 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.230827 -0.827978 0.0853287 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.225404 -0.849792 0.0751099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.247028 -0.865646 0.0974792 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.224198 -0.870053 0.0891702 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.228415 -0.868501 0.113449 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.14403 -0.908384 0.104938 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.128672 -0.926643 0.111295 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.1198 -0.904034 0.106848 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.133221 -0.90826 0.127138 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.152902 -0.930993 0.109385 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.157451 -0.912609 0.125228 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.16826 -0.912733 0.103028 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.139481 -0.926768 0.0890951 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.154838 -0.908508 0.0827387 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.130608 -0.904159 0.0846485 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.179437 -0.872552 0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.188167 -0.894035 0.0421477 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.172046 -0.89378 0.0608487 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.195141 -0.885777 0.0643473 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.195558 -0.872807 0.0319289 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.202532 -0.864549 0.0541285 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.186828 -0.851325 0.0404111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.172463 -0.880811 0.0284303 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.163733 -0.859328 0.0369125 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.156342 -0.880556 0.0471312 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.107359 -0.860128 0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0905999 -0.853284 0.0455609 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.111382 -0.840233 0.0482916 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0940331 -0.839638 0.0658506 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.086577 -0.873178 0.0596212 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0900102 -0.859532 0.079911 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.103336 -0.880022 0.0764123 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.103926 -0.873773 0.0420622 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.120685 -0.880618 0.0588533 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.124708 -0.860723 0.044793 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0133465 -0.69376 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.0838533 -0.674309 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.103063 -0.66171 0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0876683 -0.673446 0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0800983 -0.653258 0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0992478 -0.662574 0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0762832 -0.654121 0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0800382 -0.675172 0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.106818 -0.682761 0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0876083 -0.69536 0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0914233 -0.694497 0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0539145 -0.666287 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0547519 -0.662466 0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0439578 -0.682791 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0332597 -0.660752 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0647085 -0.645962 0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0432164 -0.644249 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0638711 -0.649783 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0754066 -0.668 0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0745692 -0.671821 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0646126 -0.688325 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0325183 -0.62221 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0446211 -0.604582 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.053173 -0.627745 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0325183 -0.62221 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0239663 -0.599047 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0118635 -0.616676 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0118635 -0.616676 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0446211 -0.604582 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0325183 -0.62221 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.053173 -0.627745 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0432853 -0.701782 0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0608821 -0.693716 0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0652402 -0.694884 0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0496759 -0.677932 0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0389272 -0.700615 0.202664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.027721 -0.684831 0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0213304 -0.708681 0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0544915 -0.717566 0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0368947 -0.725632 0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0588496 -0.718734 0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00804971 -0.649684 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.00328338 -0.628657 0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0152909 -0.642244 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.000378614 -0.630031 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.026624 -0.636097 0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.022962 -0.637471 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0313903 -0.657124 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0117117 -0.648309 0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.016478 -0.669336 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.00686255 -0.661896 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0272215 -0.721234 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0310802 -0.720593 0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00820099 -0.718114 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0246945 -0.7 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0501007 -0.723713 0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.043715 -0.70312 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.046242 -0.724354 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0336072 -0.741827 0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0297485 -0.742467 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.010728 -0.739347 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0646815 -0.745859 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0887955 -0.750021 0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0813312 -0.732161 0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.078459 -0.729506 0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0721458 -0.763719 0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0618093 -0.743204 0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0480318 -0.759557 0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.075018 -0.766375 0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.050904 -0.762212 0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0675537 -0.748514 0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0058253 -0.76531 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.00415829 -0.786629 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0148294 -0.770845 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0058253 -0.76531 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.024813 -0.781094 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.02648 -0.759776 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.02648 -0.759776 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00415829 -0.786629 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0058253 -0.76531 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0148294 -0.770845 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0347427 -0.737837 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0542122 -0.747099 0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0550267 -0.7241 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0553974 -0.743371 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0339282 -0.760836 0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0351134 -0.757108 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0144587 -0.751574 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0335575 -0.741565 0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.014088 -0.732303 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0343719 -0.718566 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.172546 -0.643951 0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.142305 -0.61371 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.125845 -0.597249 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.12123 -0.610094 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.138689 -0.592635 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.14692 -0.600865 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.159765 -0.596251 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.163381 -0.617326 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.12946 -0.618324 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.145921 -0.634785 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.124846 -0.631169 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.100996 -0.624779 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0833673 -0.612676 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.100996 -0.624779 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.10653 -0.604124 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0833673 -0.612676 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.10653 -0.604124 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.100996 -0.624779 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0778329 -0.633331 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0954616 -0.645433 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0954616 -0.645433 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.153374 -0.5724 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.141271 -0.554772 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.13272 -0.577935 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.153374 -0.5724 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.161926 -0.549237 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.174029 -0.566866 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.174029 -0.566866 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.141271 -0.554772 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.153374 -0.5724 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.13272 -0.577935 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.213855 -0.632882 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.216282 -0.61945 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.193796 -0.625476 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.207465 -0.609032 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.236341 -0.626857 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.227525 -0.616438 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.233915 -0.640288 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.222672 -0.6433 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.220246 -0.656732 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.200186 -0.649326 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.224924 -0.591572 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.2291 -0.567237 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.209804 -0.576452 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.209804 -0.576452 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.24422 -0.582357 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.224924 -0.591572 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.240045 -0.606693 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.24422 -0.582357 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.240045 -0.606693 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.224924 -0.591572 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.244096 -0.663122 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.265414 -0.661455 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.244096 -0.663122 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.249631 -0.642468 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.265414 -0.661455 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.249631 -0.642468 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.244096 -0.663122 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.25988 -0.68211 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.238562 -0.683777 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.238562 -0.683777 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.161477 -0.68526 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.148046 -0.687686 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.137627 -0.678869 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.154071 -0.6652 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.171896 -0.694077 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.177921 -0.671591 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.185327 -0.691651 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.155452 -0.707746 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.168883 -0.70532 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.145033 -0.698929 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.191718 -0.715501 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.190051 -0.736819 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.171063 -0.721035 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.191718 -0.715501 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.210706 -0.731284 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.212373 -0.709966 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.212373 -0.709966 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.190051 -0.736819 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.191718 -0.715501 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.171063 -0.721035 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.120168 -0.696329 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.095832 -0.700504 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.105047 -0.681209 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.105047 -0.681209 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.110952 -0.715624 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.120168 -0.696329 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.135288 -0.711449 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.110952 -0.715624 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.135288 -0.711449 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.120168 -0.696329 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.343435 -0.786005 8.51251e-17 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.392454 -0.82165 0.0425863 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.400556 -0.824791 0.065698 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.376528 -0.821021 0.0614442 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.392663 -0.802599 0.058292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.416482 -0.82542 0.0468401 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.408589 -0.803228 0.0394341 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.40838 -0.822279 0.0237283 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.400347 -0.843843 0.0499923 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.392245 -0.840701 0.0268805 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.376319 -0.840073 0.0457385 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.323622 -0.80984 0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.308073 -0.80634 0.0861356 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.300378 -0.802721 0.0629546 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.316395 -0.786996 0.0732426 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.331317 -0.813459 0.0904587 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.339639 -0.794116 0.0775657 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.346866 -0.81696 0.0716007 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.315299 -0.829184 0.0801706 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.330849 -0.832685 0.0613127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.307605 -0.825565 0.0569896 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.370774 -0.753118 0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.367981 -0.734271 0.076187 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.348136 -0.745269 0.0664462 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.362711 -0.731279 0.0522508 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.390619 -0.74212 0.070222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.385349 -0.739128 0.0462858 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.393412 -0.760966 0.0545162 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.376044 -0.756109 0.0844174 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.378837 -0.774956 0.0687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.356199 -0.767107 0.0746767 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.412267 -0.797815 -0.0246914 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.436217 -0.793573 -0.0204376 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.420728 -0.796968 -0.00151032 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.419454 -0.776294 -0.0149506 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.427756 -0.79442 -0.0436186 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.410993 -0.777141 -0.0381316 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.403807 -0.798662 -0.0478724 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.42903 -0.815094 -0.0301783 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.405081 -0.819335 -0.0344321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.413542 -0.818489 -0.0112511 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.390587 -0.729282 -0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.392427 -0.704862 -0.00994863 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.373948 -0.714218 0.00349164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.374248 -0.717401 -0.0209919 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.409067 -0.719927 -0.0202367 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.390887 -0.732465 -0.0312799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.407227 -0.744347 -0.0170845 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.408767 -0.716744 0.0042468 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.406927 -0.741164 0.00739901 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.390287 -0.726099 0.0176871 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.363249 -0.76217 -0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.356966 -0.747522 -0.0861356 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.352002 -0.740618 -0.0629546 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.339469 -0.759239 -0.0732426 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.368213 -0.769074 -0.0904587 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.350716 -0.780791 -0.0775657 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.374496 -0.783722 -0.0716007 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.380746 -0.750453 -0.0801706 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.387029 -0.765101 -0.0613127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.375782 -0.743549 -0.0569896 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.365116 -0.854538 -0.0178949 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.365674 -0.878086 -0.0104889 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.346241 -0.863875 -0.00500196 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.367962 -0.859887 0.00604126 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.384548 -0.868748 -0.0233819 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.386837 -0.85055 -0.00685171 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.38399 -0.8452 -0.0307879 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.362827 -0.872736 -0.0344251 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.362269 -0.849188 -0.0418311 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.343394 -0.858526 -0.0289382 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.316097 -0.818893 -0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.297057 -0.819591 -0.076187 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.304244 -0.79807 -0.0664462 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.293153 -0.814956 -0.0522508 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.30891 -0.840413 -0.070222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.305006 -0.835779 -0.0462858 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.32795 -0.839716 -0.0545162 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.320001 -0.823527 -0.0844174 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.339041 -0.822829 -0.0687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.327188 -0.802007 -0.0746767 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.296284 -0.842728 0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.272611 -0.848999 0.00994863 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.278432 -0.829121 -0.00349164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.281616 -0.828835 0.0209919 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.290462 -0.862606 0.0202367 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.299468 -0.842441 0.0312799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.314135 -0.856335 0.0170845 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.287278 -0.862893 -0.0042468 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.310951 -0.856621 -0.00739901 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.293099 -0.843015 -0.0176871 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.358439 -0.594141 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.389119 -0.547576 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.386849 -0.525642 0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.366733 -0.538964 0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.379645 -0.528407 0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.409235 -0.534255 0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.402031 -0.537019 0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.411505 -0.556189 0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.396323 -0.544812 0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.398593 -0.566746 0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.376207 -0.558134 0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.317871 -0.566667 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.299647 -0.551072 0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.29885 -0.563547 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.315344 -0.545434 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.318667 -0.554192 0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.334364 -0.548554 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.336891 -0.569787 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.302174 -0.572306 0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.320398 -0.587901 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.301377 -0.584781 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.339267 -0.522591 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.327164 -0.504962 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.318612 -0.528125 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.339267 -0.522591 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.347819 -0.499428 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.359921 -0.517056 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.359921 -0.517056 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.327164 -0.504962 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.339267 -0.522591 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.318612 -0.528125 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.429687 -0.57505 0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.446515 -0.55776 0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.428387 -0.562617 0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.423296 -0.5512 0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.447815 -0.570193 0.0882695 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.424596 -0.563633 0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.430987 -0.587483 0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.452905 -0.58161 0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.436077 -0.5989 0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.434777 -0.586467 0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.379835 -0.550064 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.372012 -0.535334 0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.359551 -0.536327 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.35918 -0.555599 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.392296 -0.549071 0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.379464 -0.569335 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.400119 -0.563801 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.392667 -0.529799 0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.400489 -0.54453 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.380205 -0.530793 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.399007 -0.621614 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.420252 -0.632748 0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.408963 -0.638118 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.419661 -0.61608 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.410295 -0.616244 0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.409705 -0.599576 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.38905 -0.60511 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.399597 -0.638282 0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.378352 -0.627149 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.388308 -0.643653 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.408291 -0.619127 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.415912 -0.617918 0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.39183 -0.616439 0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.406911 -0.597788 0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.432372 -0.620605 0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.423371 -0.600475 0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.424751 -0.621814 0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.417292 -0.639257 0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.409671 -0.640465 0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.39321 -0.637778 0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.37761 -0.665691 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.375943 -0.687009 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.356956 -0.671225 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.37761 -0.665691 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.396598 -0.681475 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.398265 -0.660156 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.398265 -0.660156 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.375943 -0.687009 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.37761 -0.665691 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.356956 -0.671225 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.337042 -0.638217 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.320629 -0.641183 0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.313702 -0.630777 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.328614 -0.618565 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.34397 -0.648623 0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.351955 -0.626005 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.360383 -0.645657 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.329058 -0.660835 0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.345471 -0.65787 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.32213 -0.65043 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.358439 -0.594141 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.409774 -0.542042 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.413579 -0.517869 -0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.395831 -0.525596 -0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.393219 -0.528508 -0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.427522 -0.534315 -0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.407161 -0.544953 -0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.423716 -0.558488 -0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.430134 -0.531404 -0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.426328 -0.555577 -0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.412386 -0.539131 -0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.379835 -0.550064 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.375068 -0.529037 -0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.356494 -0.542624 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.371406 -0.530412 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.398409 -0.536477 -0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.394747 -0.537852 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.403175 -0.557504 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.383497 -0.548689 -0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.388263 -0.569716 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.364922 -0.562276 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.339267 -0.522591 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.327164 -0.504962 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.318612 -0.528125 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.339267 -0.522591 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.347819 -0.499428 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.359921 -0.517056 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.359921 -0.517056 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.327164 -0.504962 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.339267 -0.522591 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.318612 -0.528125 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.388377 -0.586119 -0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.399584 -0.570335 -0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.403942 -0.569167 -0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.381987 -0.562269 -0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.384019 -0.587286 -0.202664 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.366422 -0.57922 -0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.372813 -0.60307 -0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.405974 -0.594185 -0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.394768 -0.609969 -0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.410332 -0.593017 -0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.317871 -0.566667 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.317033 -0.562847 -0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.327827 -0.583171 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.338525 -0.561133 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.307077 -0.546343 -0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.328569 -0.544629 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.307914 -0.550163 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.296378 -0.568381 -0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.297216 -0.572202 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.307172 -0.588706 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.337042 -0.638217 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.317573 -0.64748 -0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.316758 -0.624481 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.316388 -0.643752 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.337857 -0.661216 -0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.336672 -0.657489 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.357326 -0.651954 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.338228 -0.641945 -0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.357697 -0.632683 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.337413 -0.618946 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.428945 -0.613592 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.451897 -0.612625 -0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.432663 -0.614807 -0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.436515 -0.593593 -0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.448179 -0.61141 -0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.432797 -0.592379 -0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.425227 -0.612377 -0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.444328 -0.632624 -0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.421376 -0.633591 -0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.425094 -0.634806 -0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.37761 -0.665691 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.375943 -0.687009 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.356956 -0.671225 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.37761 -0.665691 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.396598 -0.681475 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.398265 -0.660156 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.398265 -0.660156 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.375943 -0.687009 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.37761 -0.665691 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.356956 -0.671225 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.399007 -0.621614 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.402865 -0.620974 -0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.379986 -0.618494 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.39648 -0.600381 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.421886 -0.624094 -0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.4155 -0.603501 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.418027 -0.624734 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.405392 -0.642207 -0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.401533 -0.642848 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.382513 -0.639728 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.157543 -0.835815 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.119969 -0.899353 -0.117284 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0977075 -0.909872 -0.115431 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0997803 -0.886771 -0.1239 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.104052 -0.891613 -0.100068 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.117896 -0.922453 -0.108814 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.124241 -0.904194 -0.0934517 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.140158 -0.911935 -0.110668 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.113625 -0.917612 -0.132647 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.135886 -0.907093 -0.1345 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.115698 -0.894512 -0.141116 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0844101 -0.836885 -0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0627848 -0.826973 -0.106005 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0805529 -0.830202 -0.122844 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.083104 -0.81296 -0.105354 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0666419 -0.833656 -0.0825505 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0869612 -0.819643 -0.0818993 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0882673 -0.843568 -0.0759343 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0640908 -0.850898 -0.10004 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0857161 -0.860809 -0.093424 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0818589 -0.854126 -0.116879 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.130205 -0.868703 -0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.11253 -0.867758 -0.0334138 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.107566 -0.860854 -0.0565949 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.122142 -0.846864 -0.0423994 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.135168 -0.875606 -0.0274488 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.14478 -0.854713 -0.0364345 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.152843 -0.876551 -0.0446649 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.120593 -0.889596 -0.0416443 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.138267 -0.890541 -0.0588603 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.115629 -0.882692 -0.0648253 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.193102 -0.898283 -0.129006 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.201143 -0.920038 -0.120537 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.17991 -0.910616 -0.112168 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.201384 -0.900209 -0.105825 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.214335 -0.907705 -0.137375 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.214576 -0.887876 -0.122663 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.206294 -0.88595 -0.145845 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.192861 -0.918112 -0.143718 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.18482 -0.896357 -0.152187 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.171628 -0.90869 -0.135349 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.203337 -0.867633 -0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.209658 -0.868948 -0.0385197 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.186008 -0.865773 -0.0448623 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.202239 -0.84746 -0.0481565 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.226988 -0.870808 -0.0560094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.219569 -0.84932 -0.0656463 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.220667 -0.869493 -0.0798417 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.210757 -0.889121 -0.0527151 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.204436 -0.887806 -0.0765474 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.187106 -0.885946 -0.0590577 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.230676 -0.834745 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.252002 -0.824206 -0.116217 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.234336 -0.827952 -0.0993785 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.231282 -0.810793 -0.116868 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.248342 -0.830999 -0.139672 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.227621 -0.817586 -0.140323 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.227016 -0.841538 -0.146288 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.251396 -0.848158 -0.122182 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.23007 -0.858698 -0.128798 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.23373 -0.851905 -0.105343 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.147308 -0.866465 -0.177765 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.130609 -0.876203 -0.193128 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.124356 -0.857385 -0.178416 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.128522 -0.879733 -0.16878 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.153561 -0.885283 -0.192477 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.151474 -0.888813 -0.168128 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.170259 -0.875546 -0.177114 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.149395 -0.862935 -0.202114 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.166093 -0.853198 -0.186751 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.143141 -0.844117 -0.187402 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.184881 -0.802927 -0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.180723 -0.785723 -0.188808 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.173028 -0.782104 -0.165627 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.161937 -0.798991 -0.179823 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.192576 -0.806546 -0.194773 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.17379 -0.819813 -0.185788 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.196734 -0.82375 -0.177557 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.203667 -0.78966 -0.180578 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.207825 -0.806864 -0.163362 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.195972 -0.786041 -0.157397 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.111748 -0.803997 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.108311 -0.798532 -0.183703 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.119537 -0.819589 -0.17736 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.131037 -0.797989 -0.174066 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.100522 -0.78294 -0.166213 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.123249 -0.782397 -0.156576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.10396 -0.788405 -0.142381 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0890219 -0.80454 -0.169507 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0924597 -0.810005 -0.145675 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.100248 -0.825597 -0.163165 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.172546 -0.643951 -0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER -0.202787 -0.61371 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.200937 -0.595399 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.194794 -0.591462 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.180539 -0.605717 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.208929 -0.617647 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.188531 -0.627965 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.210779 -0.635958 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.223185 -0.603392 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.225035 -0.621702 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.217042 -0.599454 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.244096 -0.624779 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.260374 -0.607636 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.240901 -0.612854 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.237705 -0.600929 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.26357 -0.619561 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.240901 -0.612854 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.247291 -0.636704 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.266765 -0.631486 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.250487 -0.648629 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.247291 -0.636704 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.191718 -0.5724 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.185011 -0.549732 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.167868 -0.56601 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.179793 -0.569205 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.208861 -0.556122 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.203643 -0.575596 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.215568 -0.578791 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.196936 -0.552927 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.203643 -0.575596 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.179793 -0.569205 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.131237 -0.632882 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.131575 -0.625593 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.15071 -0.6381 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.146508 -0.614836 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.112102 -0.620375 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.127034 -0.609618 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.111763 -0.627664 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.116304 -0.643639 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.115965 -0.650927 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.135439 -0.656145 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.120168 -0.591572 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.105912 -0.577317 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.111438 -0.600302 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.128897 -0.582843 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.114642 -0.568587 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.137627 -0.574113 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.128897 -0.582843 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0971825 -0.586046 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.111438 -0.600302 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.102708 -0.609032 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.100996 -0.663122 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0783272 -0.656415 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0978007 -0.651197 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0946054 -0.639272 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0815225 -0.66834 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0978007 -0.651197 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.104191 -0.675047 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0847178 -0.680265 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.107387 -0.686972 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.104191 -0.675047 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.183615 -0.68526 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.182351 -0.708085 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.165569 -0.700531 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.188833 -0.704733 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.200397 -0.692813 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.206879 -0.689462 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.201661 -0.669989 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.177134 -0.688611 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.178397 -0.665787 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.160351 -0.681058 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.153374 -0.715501 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.136231 -0.731779 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.129524 -0.70911 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.141449 -0.712305 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.160081 -0.738169 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.165299 -0.718696 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.177224 -0.721891 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.148156 -0.734974 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.165299 -0.718696 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.141449 -0.712305 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.224924 -0.696329 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.23918 -0.710584 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.216195 -0.705059 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.233654 -0.687599 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.24791 -0.701855 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.242384 -0.678869 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.233654 -0.687599 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.23045 -0.719314 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.216195 -0.705059 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.207465 -0.713788 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0133465 -0.69376 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.0631985 -0.668775 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0667914 -0.661946 -0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0511945 -0.680354 -0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0452771 -0.65711 -0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0787954 -0.650366 -0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0572811 -0.64553 -0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0752026 -0.657195 -0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0847128 -0.673611 -0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.08112 -0.680439 -0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.069116 -0.692019 -0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00804971 -0.649684 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.000226782 -0.634953 -0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0122343 -0.635947 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.012605 -0.655218 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0205108 -0.64869 -0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00767898 -0.668955 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0283337 -0.66342 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0208815 -0.629419 -0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0287044 -0.644149 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00842045 -0.630413 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0325183 -0.62221 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0446211 -0.604582 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.053173 -0.627745 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0325183 -0.62221 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0239663 -0.599047 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0118635 -0.616676 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0118635 -0.616676 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0446211 -0.604582 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0325183 -0.62221 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.053173 -0.627745 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0845947 -0.712851 -0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.107813 -0.706291 -0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0896851 -0.701434 -0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0909853 -0.689001 -0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.102723 -0.717709 -0.0882695 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0858949 -0.700418 -0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0795043 -0.724268 -0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.101422 -0.730141 -0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0782041 -0.736701 -0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0832945 -0.725284 -0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0539145 -0.666287 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0721382 -0.650692 -0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.072935 -0.663167 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0564414 -0.645053 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0531177 -0.653812 -0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0374209 -0.648173 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.034894 -0.669407 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0696112 -0.671925 -0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0513875 -0.68752 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.070408 -0.6844 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0347427 -0.737837 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0511556 -0.740802 -0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0580833 -0.730397 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.043171 -0.718185 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.027815 -0.748242 -0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0198304 -0.725625 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0114021 -0.745277 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0427273 -0.760455 -0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0263144 -0.757489 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0496549 -0.750049 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0440268 -0.740325 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.0650768 -0.746894 -0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0607735 -0.723153 -0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0653796 -0.739183 -0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.04833 -0.764065 -0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0486329 -0.756355 -0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.02728 -0.757496 -0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0437239 -0.748035 -0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0226739 -0.741466 -0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0394207 -0.724295 -0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0058253 -0.76531 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.00415829 -0.786629 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0148294 -0.770845 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0058253 -0.76531 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.024813 -0.781094 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.02648 -0.759776 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.02648 -0.759776 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00415829 -0.786629 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0058253 -0.76531 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.0148294 -0.770845 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0272215 -0.721234 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER -0.0484665 -0.732368 -0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0371781 -0.737738 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0478762 -0.715699 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0385099 -0.715864 -0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0379196 -0.699195 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0172649 -0.70473 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0278118 -0.737902 -0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.00656677 -0.726768 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER -0.0165234 -0.743272 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.471405 -0.471405 1.11022e-16 RAD 0.166667
+ txt002
+ SPHERE CENTER 0.690426 -0.508983 1.83812e-16 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.755941 -0.484794 -0.0246914 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.767658 -0.47411 -0.0436186 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.749038 -0.489758 -0.0478724 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.744501 -0.467528 -0.0381316 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.774562 -0.469146 -0.0204376 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.751405 -0.462564 -0.0149506 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.762845 -0.47983 -0.00151032 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.779098 -0.491377 -0.0301783 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.767382 -0.502061 -0.0112511 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.760478 -0.507025 -0.0344321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.695668 -0.478434 -0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.703418 -0.481931 -0.0904587 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.716184 -0.491475 -0.0716007 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.694124 -0.500827 -0.0775657 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.682902 -0.46889 -0.0861356 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.673608 -0.487786 -0.0732426 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.675152 -0.465393 -0.0629546 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.704962 -0.459538 -0.0801706 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.697211 -0.456041 -0.0569896 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.717727 -0.469082 -0.0613127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.7029 -0.436283 -0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.714226 -0.418941 -0.0202367 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.724842 -0.44101 -0.0170845 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.704751 -0.43889 -0.0312799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.692283 -0.414215 -0.00994863 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.682808 -0.434163 -0.0209919 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.680957 -0.431557 0.00349164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.712374 -0.416335 0.0042468 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.701048 -0.433677 0.0176871 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.722991 -0.438403 0.00739901 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.7507 -0.515343 0.0425863 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.773394 -0.506594 0.0468401 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.764807 -0.507924 0.0237283 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.755462 -0.491321 0.0394341 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.759287 -0.514012 0.065698 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.741355 -0.49874 0.058292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.736593 -0.522762 0.0614442 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.768632 -0.530616 0.0499923 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.745938 -0.539365 0.0457385 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.760045 -0.531946 0.0268805 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.697658 -0.466832 0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.709346 -0.447385 0.070222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.721188 -0.46231 0.0545162 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.703286 -0.447429 0.0462858 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.685816 -0.451907 0.076187 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.679757 -0.451951 0.0522508 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.674129 -0.471354 0.0664462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.703718 -0.466788 0.0844174 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.692031 -0.486235 0.0746767 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.71556 -0.481713 0.0687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.685185 -0.539531 0.0672777 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.693658 -0.538818 0.0904587 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.708875 -0.534075 0.0716007 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.691194 -0.517905 0.0775657 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.669969 -0.544274 0.0861356 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.667505 -0.523361 0.0732426 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.661495 -0.544988 0.0629546 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.687649 -0.560445 0.0801706 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.679176 -0.561158 0.0569896 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.702866 -0.555702 0.0613127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.743468 -0.557494 -0.0178949 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.767402 -0.560084 -0.0233819 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.755145 -0.53997 -0.0307879 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.760285 -0.543179 -0.00685171 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.755725 -0.577608 -0.0104889 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.748608 -0.560703 0.00604126 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.731791 -0.575017 -0.00500196 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.750585 -0.574398 -0.0344251 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.726651 -0.571808 -0.0289382 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.738328 -0.554284 -0.0418311 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.677953 -0.581682 0.00679642 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.682851 -0.601808 0.0202367 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.700216 -0.58454 0.0170845 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.680568 -0.579842 0.0312799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.660588 -0.59895 0.00994863 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.658304 -0.576984 0.0209919 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.65569 -0.578824 -0.00349164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.680237 -0.603648 -0.0042468 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.675339 -0.583522 -0.0176871 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.697602 -0.58638 -0.00739901 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.683194 -0.551134 -0.0604812 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.687731 -0.573364 -0.070222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.703871 -0.56324 -0.0545162 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.682033 -0.571303 -0.0462858 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.667055 -0.561258 -0.076187 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.661356 -0.559196 -0.0522508 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.662518 -0.539027 -0.0664462 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.688893 -0.553195 -0.0844174 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.684356 -0.530964 -0.0746767 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.705033 -0.543071 -0.0687117 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.607487 -0.335322 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.629404 -0.313405 -0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.626214 -0.316595 -0.202664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.624401 -0.335868 -0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.606941 -0.318408 -0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.631217 -0.294133 -0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.611945 -0.295946 -0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.634407 -0.290942 -0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.648676 -0.311592 -0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.651867 -0.308402 -0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.646863 -0.330864 -0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.610996 -0.384191 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.623201 -0.403702 -0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.635431 -0.385946 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.62031 -0.401066 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.598766 -0.401947 -0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.595876 -0.399312 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.586561 -0.382437 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.613886 -0.386827 -0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.601681 -0.367317 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.626116 -0.369071 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.558618 -0.331813 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.539107 -0.319608 -0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.541743 -0.322499 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.556863 -0.307378 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.555982 -0.328923 -0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.573738 -0.316693 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.575492 -0.341128 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.540862 -0.344043 -0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.560372 -0.356248 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.543497 -0.346933 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.625895 -0.264535 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.637402 -0.248969 -0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.646193 -0.271807 -0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.625088 -0.268363 -0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.617105 -0.241698 -0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.604791 -0.261092 -0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.605598 -0.257264 -0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.638209 -0.245142 -0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.626702 -0.260708 -0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.647 -0.267979 -0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.555109 -0.282943 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.550934 -0.258608 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.570229 -0.267823 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.570229 -0.267823 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.535813 -0.273728 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.555109 -0.282943 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.539989 -0.298064 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.535813 -0.273728 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.539989 -0.298064 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.555109 -0.282943 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.603979 -0.286452 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.613271 -0.265398 -0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.627912 -0.281225 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.610787 -0.26842 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.589337 -0.270625 -0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.586853 -0.273647 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.580045 -0.291679 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.606463 -0.283431 -0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.59717 -0.304484 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.621104 -0.299257 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.678274 -0.316914 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.69384 -0.305407 -0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.674446 -0.317721 -0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.671002 -0.296616 -0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.697667 -0.3046 -0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.67483 -0.295809 -0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.682101 -0.316107 -0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.701111 -0.325704 -0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.685545 -0.337211 -0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.681717 -0.338018 -0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.656357 -0.33883 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.677411 -0.329538 -0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.674389 -0.332022 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.661584 -0.314897 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.659378 -0.336346 -0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.643552 -0.321705 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.638325 -0.345639 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.672184 -0.353472 -0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.65113 -0.362764 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.669162 -0.355956 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.659866 -0.3877 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.684201 -0.391875 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.674986 -0.37258 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.674986 -0.37258 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.669081 -0.406996 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.659866 -0.3877 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.644745 -0.40282 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.669081 -0.406996 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.644745 -0.40282 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.659866 -0.3877 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.607487 -0.335322 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.659645 -0.283164 0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.672915 -0.269894 0.0882695 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.666987 -0.293281 0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.649528 -0.275822 0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.665573 -0.259777 0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.642185 -0.265705 0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.652302 -0.273047 0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.683032 -0.277236 0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.669762 -0.290507 0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.677104 -0.300624 0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.656357 -0.33883 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.663448 -0.328536 0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.639482 -0.329516 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.654603 -0.314396 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.680322 -0.33785 0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.671477 -0.32371 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.673232 -0.348145 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.665202 -0.35297 0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.658111 -0.363265 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.641237 -0.353951 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.603979 -0.286452 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.614273 -0.279361 0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.628413 -0.288206 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.613293 -0.303327 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.589839 -0.277607 0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.588858 -0.301572 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.579544 -0.284698 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.604959 -0.262487 0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.594664 -0.269578 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.619099 -0.271332 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.610775 -0.279656 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.621535 -0.258061 0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.634468 -0.275921 0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.616678 -0.264057 0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.597842 -0.261795 0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.592985 -0.267791 0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.587082 -0.28339 0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.615632 -0.27366 0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.604872 -0.295255 0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.628565 -0.29152 0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.555109 -0.282943 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.550934 -0.258608 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.570229 -0.267823 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.570229 -0.267823 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.535813 -0.273728 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.555109 -0.282943 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.539989 -0.298064 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.535813 -0.273728 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.539989 -0.298064 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.555109 -0.282943 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.558618 -0.331813 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.55307 -0.320611 0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.57665 -0.325005 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.563845 -0.30788 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.535038 -0.327419 0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.545813 -0.314688 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.540585 -0.338621 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.547843 -0.344544 0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.553391 -0.355747 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.571423 -0.348938 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.663153 -0.332034 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.684748 -0.321274 0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.678752 -0.326131 0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.666888 -0.308341 0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.669149 -0.327177 0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.651289 -0.314244 0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.647554 -0.337937 0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.681014 -0.344967 0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.659419 -0.355727 0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.675018 -0.349824 0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.610996 -0.384191 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.622198 -0.389739 0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.63493 -0.378964 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.617804 -0.366159 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.598265 -0.394966 0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.593871 -0.371386 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.587062 -0.389418 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.61539 -0.407771 0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.604188 -0.402224 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.628121 -0.396997 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.659866 -0.3877 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.684201 -0.391875 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.674986 -0.37258 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.674986 -0.37258 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.669081 -0.406996 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.659866 -0.3877 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.644745 -0.40282 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.669081 -0.406996 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.644745 -0.40282 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.659866 -0.3877 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.554344 -0.645066 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.610229 -0.668521 0.153697 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.633406 -0.663938 0.160875 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.626429 -0.65892 0.137727 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.617928 -0.64522 0.156428 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.617206 -0.673539 0.176845 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.601728 -0.654822 0.172398 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.59403 -0.678123 0.169668 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.625707 -0.687239 0.158144 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.602531 -0.691822 0.150967 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.61873 -0.682221 0.134996 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.622977 -0.619787 0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.63767 -0.608008 0.0834188 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.620102 -0.623239 0.0751099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.613891 -0.601637 0.0853287 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.640545 -0.604555 0.107698 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.616766 -0.598184 0.109608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.625852 -0.616334 0.123668 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.646756 -0.626157 0.0974792 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.632063 -0.637936 0.113449 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.629188 -0.641389 0.0891702 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.585648 -0.598918 0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.601562 -0.580238 0.162601 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.605914 -0.59781 0.14581 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.587563 -0.581665 0.142311 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.581295 -0.581346 0.176661 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.567297 -0.582773 0.156372 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.565381 -0.600026 0.173931 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.599646 -0.597491 0.18016 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.583732 -0.616171 0.177429 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.603999 -0.615063 0.163369 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.541596 -0.6938 0.165419 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.547376 -0.70016 0.188567 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.564621 -0.690564 0.173728 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.546319 -0.676324 0.182211 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.524351 -0.703396 0.180258 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.523294 -0.679561 0.173902 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.518571 -0.697037 0.157111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.542652 -0.717636 0.171776 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.536873 -0.711276 0.148628 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.559898 -0.70804 0.156937 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.517014 -0.624197 0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.516313 -0.60809 0.190293 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.538029 -0.616221 0.181811 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.524375 -0.60089 0.168094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.495298 -0.616065 0.180075 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.50336 -0.608865 0.157875 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.495999 -0.632172 0.161374 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.508952 -0.631397 0.193792 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.509653 -0.647504 0.175091 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.530668 -0.639529 0.18531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.48571 -0.670344 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.466887 -0.67091 0.138803 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.490138 -0.671107 0.147112 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.480853 -0.650637 0.136894 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.46246 -0.670147 0.114524 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.476425 -0.649874 0.112614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.481283 -0.669581 0.0985541 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.471745 -0.690617 0.124743 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.490567 -0.690052 0.108773 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.494995 -0.690815 0.133052 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.578925 -0.714669 0.104938 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.597914 -0.729812 0.109385 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.602084 -0.70632 0.103028 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.592661 -0.711617 0.125228 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.574755 -0.738161 0.111295 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.569503 -0.719965 0.127138 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.555767 -0.723017 0.106848 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.584178 -0.732864 0.0890951 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.565189 -0.71772 0.0846485 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.588348 -0.709372 0.0827387 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.52304 -0.691213 0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.511567 -0.712906 0.0596212 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.529503 -0.710453 0.0764123 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.507717 -0.699372 0.079911 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.505104 -0.693665 0.0455609 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.501254 -0.680131 0.0658506 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.516576 -0.671972 0.0482916 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.526889 -0.704747 0.0420622 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.538362 -0.683054 0.044793 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.544826 -0.702295 0.0588533 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.591673 -0.665934 0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.605761 -0.658095 0.0319289 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.58746 -0.643855 0.0404111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.607672 -0.647455 0.0541285 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.609975 -0.680174 0.0421477 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.611885 -0.669535 0.0643473 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.595887 -0.688013 0.0608487 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.589763 -0.676573 0.0284303 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.575674 -0.684413 0.0471312 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.571461 -0.662334 0.0369125 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.471405 -0.471405 0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.501645 -0.441164 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.518106 -0.424703 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.522721 -0.437548 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.505261 -0.420089 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.497031 -0.428319 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.484186 -0.423704 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.48057 -0.44478 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.51449 -0.445778 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.498029 -0.462239 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.519105 -0.458623 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.542955 -0.452233 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.560583 -0.44013 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.542955 -0.452233 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.53742 -0.431578 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.560583 -0.44013 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.53742 -0.431578 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.542955 -0.452233 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.566118 -0.460785 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.548489 -0.472887 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.548489 -0.472887 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.490576 -0.399854 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.502679 -0.382226 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.511231 -0.405389 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.490576 -0.399854 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.482024 -0.376691 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.469922 -0.39432 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.469922 -0.39432 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.502679 -0.382226 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.490576 -0.399854 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.511231 -0.405389 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.430095 -0.460336 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.427669 -0.446904 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.450155 -0.45293 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.436486 -0.436486 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.407609 -0.454311 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.416426 -0.443892 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.410035 -0.467742 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.421278 -0.470754 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.423704 -0.484186 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.443764 -0.47678 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.419026 -0.419026 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.414851 -0.39469 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.434147 -0.403906 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.434147 -0.403906 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.399731 -0.409811 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.419026 -0.419026 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.403906 -0.434147 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.399731 -0.409811 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.403906 -0.434147 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.419026 -0.419026 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.399854 -0.490576 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.378536 -0.488909 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.399854 -0.490576 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.39432 -0.469922 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.378536 -0.488909 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.39432 -0.469922 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.399854 -0.490576 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.384071 -0.509564 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.405389 -0.511231 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.405389 -0.511231 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.482473 -0.512714 0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.495905 -0.51514 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.506323 -0.506323 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.48988 -0.492654 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.472055 -0.521531 0.30328 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.46603 -0.499045 0.295049 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.458623 -0.519105 0.282703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.488498 -0.5352 0.290934 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.475067 -0.532774 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.498917 -0.526383 0.270358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.452233 -0.542955 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.4539 -0.564273 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.472887 -0.548489 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.452233 -0.542955 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.433245 -0.558738 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.431578 -0.53742 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.431578 -0.53742 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.4539 -0.564273 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.452233 -0.542955 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.472887 -0.548489 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.523783 -0.523783 0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.548119 -0.527958 0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.538903 -0.508662 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.538903 -0.508662 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.532998 -0.543078 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.523783 -0.523783 0.246914 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.508662 -0.538903 0.234568 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.532998 -0.543078 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.508662 -0.538903 0.209877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.523783 -0.523783 0.197531 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.335322 -0.607487 0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.313405 -0.629404 0.178389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.316595 -0.626214 0.202664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.335868 -0.624401 0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.318408 -0.606941 0.187336 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.294133 -0.631217 0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.295946 -0.611945 0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.290942 -0.634407 0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.311592 -0.648676 0.193717 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.308402 -0.651867 0.169441 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.330864 -0.646863 0.178389 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.384191 -0.610996 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.405245 -0.601704 0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.402224 -0.604188 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.389418 -0.587062 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.387213 -0.608512 0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.371386 -0.593871 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.366159 -0.617804 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.400018 -0.625637 0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.378964 -0.63493 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.396997 -0.628121 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.331813 -0.558618 0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.341105 -0.537564 0.175614 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.355747 -0.553391 0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.338621 -0.540585 0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.317172 -0.542791 0.178701 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.314688 -0.545813 0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.30788 -0.563845 0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.334297 -0.555596 0.191046 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.325005 -0.57665 0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.348938 -0.571423 0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.264535 -0.625895 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.245336 -0.623429 0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.268271 -0.624736 0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.260997 -0.604627 0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.2416 -0.624589 0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.257262 -0.605787 0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.2608 -0.627055 0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.248874 -0.644697 0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.268073 -0.647163 0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.271809 -0.646004 0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282943 -0.555109 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.278768 -0.530773 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.298064 -0.539989 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.298064 -0.539989 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.263648 -0.545894 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282943 -0.555109 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.267823 -0.570229 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.263648 -0.545894 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.267823 -0.570229 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282943 -0.555109 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.286452 -0.603979 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.266942 -0.591774 0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.269578 -0.594664 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.284698 -0.579544 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.283817 -0.601088 0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.301572 -0.588858 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.303327 -0.613293 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.268696 -0.616209 0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.288206 -0.628413 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.271332 -0.619099 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.316914 -0.678274 0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.31938 -0.697473 0.138161 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.338182 -0.681812 0.134867 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.318074 -0.674538 0.147213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.298112 -0.693935 0.126127 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.296805 -0.671 0.135179 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.295646 -0.674736 0.110799 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.31822 -0.701209 0.113782 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.315754 -0.682009 0.0984536 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.337022 -0.685547 0.110488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.33883 -0.656357 0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.351035 -0.675867 0.0466081 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.363265 -0.658111 0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.348145 -0.673232 0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.3266 -0.674113 0.0435217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.32371 -0.671477 0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.314396 -0.654603 0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.341721 -0.658993 0.031176 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.329516 -0.639482 0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.353951 -0.641237 0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.3877 -0.659866 0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.412036 -0.664041 0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.40282 -0.644745 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.40282 -0.644745 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.396915 -0.679161 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.3877 -0.659866 0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37258 -0.674986 0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.396915 -0.679161 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37258 -0.674986 0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.3877 -0.659866 0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.554344 -0.645066 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.616373 -0.681385 -0.129006 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.639472 -0.678928 -0.137375 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.621631 -0.664108 -0.145845 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.629767 -0.661636 -0.122663 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.634214 -0.696205 -0.120537 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.624508 -0.678912 -0.105825 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.611115 -0.698662 -0.112168 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.626079 -0.698678 -0.143718 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.602979 -0.701135 -0.135349 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.608237 -0.683858 -0.152187 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.617144 -0.607573 -0.122833 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.63057 -0.595495 -0.139672 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.617371 -0.615286 -0.146288 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.605919 -0.594239 -0.140323 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.630343 -0.587782 -0.116217 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.605692 -0.586526 -0.116868 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.616917 -0.59986 -0.0993785 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.641795 -0.608828 -0.122182 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.628369 -0.620906 -0.105343 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.628595 -0.628619 -0.128798 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.609912 -0.649723 -0.062352 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.631982 -0.640648 -0.0560094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.62585 -0.64267 -0.0798417 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.614812 -0.625749 -0.0656463 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.616044 -0.647702 -0.0385197 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.598874 -0.632802 -0.0481565 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.593974 -0.656777 -0.0448623 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.627081 -0.664623 -0.0527151 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.605012 -0.673698 -0.0590577 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.620949 -0.666645 -0.0765474 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.553573 -0.718878 -0.117284 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.563328 -0.73992 -0.108814 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.577348 -0.719679 -0.110668 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.559693 -0.720935 -0.0934517 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.539553 -0.739118 -0.115431 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.535918 -0.720133 -0.100068 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.529798 -0.718076 -0.1239 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.557208 -0.737863 -0.132647 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.547453 -0.716821 -0.141116 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.571228 -0.717623 -0.1345 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.547112 -0.687216 -0.0506299 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.554862 -0.690713 -0.0274488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.570641 -0.682694 -0.0446649 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.552739 -0.667813 -0.0364345 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.531333 -0.695235 -0.0334138 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.52921 -0.672335 -0.0423994 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.523582 -0.691738 -0.0565949 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.549235 -0.710116 -0.0416443 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.541484 -0.706619 -0.0648253 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.565014 -0.702097 -0.0588603 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.491544 -0.682558 -0.099389 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.474542 -0.688647 -0.0825505 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.498226 -0.686417 -0.0759343 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.485132 -0.666351 -0.0818993 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.46786 -0.684788 -0.106005 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.47845 -0.662492 -0.105354 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.484862 -0.678699 -0.122844 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.480953 -0.704854 -0.10004 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.497955 -0.698765 -0.116879 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.504637 -0.702624 -0.093424 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.560805 -0.676727 -0.177765 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.57563 -0.689897 -0.192477 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.585222 -0.673115 -0.177114 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.575587 -0.693998 -0.168128 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.551213 -0.693509 -0.193128 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.55117 -0.69761 -0.16878 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.536388 -0.680339 -0.178416 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.560848 -0.672626 -0.202114 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.546023 -0.659456 -0.187402 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.57044 -0.655844 -0.186751 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.498776 -0.640408 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.478525 -0.627785 -0.166213 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.484234 -0.630799 -0.142381 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.497935 -0.615951 -0.156576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.493066 -0.637394 -0.183703 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.512476 -0.62556 -0.174066 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.513317 -0.650016 -0.17736 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.479365 -0.652241 -0.169507 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.499616 -0.664864 -0.163165 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.485075 -0.655255 -0.145675 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.561576 -0.602915 -0.171592 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.570049 -0.602201 -0.194773 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.582252 -0.615021 -0.177557 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.560414 -0.623084 -0.185788 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.549372 -0.590095 -0.188808 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.539737 -0.610978 -0.179823 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.540899 -0.590808 -0.165627 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.571211 -0.582032 -0.180578 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.562738 -0.582745 -0.157397 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.583414 -0.594852 -0.163362 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.335322 -0.607487 -0.111111 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.283164 -0.659645 -0.104315 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.269894 -0.672915 -0.0882695 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.293281 -0.666987 -0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.275822 -0.649528 -0.0830215 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.259777 -0.665573 -0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.265705 -0.642185 -0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.273047 -0.652302 -0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.277236 -0.683032 -0.109563 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.290507 -0.669762 -0.125608 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.300624 -0.677104 -0.104315 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.33883 -0.656357 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.350033 -0.661904 -0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.362764 -0.65113 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.345639 -0.638325 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.326099 -0.667131 -0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.321705 -0.643552 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.314897 -0.661584 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.343224 -0.679937 -0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.332022 -0.674389 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.355956 -0.669162 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.286452 -0.603979 -0.0555556 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.280905 -0.592776 -0.0342624 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.304484 -0.59717 -0.0401235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.291679 -0.580045 -0.0524691 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.262872 -0.599585 -0.0496945 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.273647 -0.586853 -0.0679012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.26842 -0.610787 -0.0709877 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.275678 -0.61671 -0.0373488 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.281225 -0.627912 -0.058642 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.299257 -0.621104 -0.0432099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.279656 -0.610775 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.256944 -0.602632 -0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.26347 -0.606749 -0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.273158 -0.587686 -0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.27313 -0.606658 -0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.289344 -0.591712 -0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.295841 -0.614801 -0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.263442 -0.62572 -0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.286153 -0.633864 -0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.269968 -0.629838 -0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282943 -0.555109 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.278768 -0.530773 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.298064 -0.539989 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.298064 -0.539989 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.263648 -0.545894 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282943 -0.555109 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.267823 -0.570229 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.263648 -0.545894 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.267823 -0.570229 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.282943 -0.555109 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.331813 -0.558618 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.342108 -0.551527 -0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.356248 -0.560372 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.341128 -0.575492 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.317673 -0.549772 -0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.316693 -0.573738 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.307378 -0.556863 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.332793 -0.534652 -0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.322499 -0.541743 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.346933 -0.543497 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.332034 -0.663153 -0.15987 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.340177 -0.685865 -0.165118 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.355123 -0.669651 -0.154009 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.33606 -0.679339 -0.141664 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.317089 -0.679367 -0.170979 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.312971 -0.672841 -0.147525 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.308945 -0.656656 -0.165731 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.336151 -0.669679 -0.183325 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.328008 -0.646968 -0.178077 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.351097 -0.653465 -0.172216 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.384191 -0.610996 -0.166667 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.391282 -0.600701 -0.18796 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.367317 -0.601681 -0.182099 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.382437 -0.586561 -0.169753 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.408157 -0.610016 -0.172528 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.399312 -0.595876 -0.154321 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.401066 -0.62031 -0.151235 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.393037 -0.625136 -0.184873 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.385946 -0.635431 -0.16358 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.369071 -0.626116 -0.179012 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.3877 -0.659866 -0.111111 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.412036 -0.664041 -0.111111 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.40282 -0.644745 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.40282 -0.644745 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.396915 -0.679161 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.3877 -0.659866 -0.0864198 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37258 -0.674986 -0.0987654 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.396915 -0.679161 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.37258 -0.674986 -0.123457 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.3877 -0.659866 -0.135802 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.471405 -0.471405 -0.222222 RAD 0.0555556
+ txt002
+ SPHERE CENTER 0.441164 -0.441164 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.443014 -0.422853 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.449156 -0.418916 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.463412 -0.433171 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.435021 -0.445101 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.455419 -0.455419 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.433171 -0.463412 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.420766 -0.430846 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.418916 -0.449156 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.426908 -0.426908 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.399854 -0.452233 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.383576 -0.43509 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.40305 -0.440308 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.406245 -0.428383 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.380381 -0.447015 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.40305 -0.440308 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.396659 -0.464158 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.377186 -0.45894 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.393464 -0.476083 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.396659 -0.464158 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.452233 -0.399854 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.45894 -0.377186 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.476083 -0.393464 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.464158 -0.396659 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.43509 -0.383576 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.440308 -0.40305 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.428383 -0.406245 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.447015 -0.380381 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.440308 -0.40305 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.464158 -0.396659 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.512714 -0.460336 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.512375 -0.453047 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.493241 -0.465554 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.497443 -0.44229 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.531849 -0.447829 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.516916 -0.437072 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.532187 -0.455118 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.527647 -0.471093 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.527985 -0.478381 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.508512 -0.483599 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.523783 -0.419026 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.538038 -0.404771 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.532513 -0.427756 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.515053 -0.410297 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.529309 -0.396041 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.506323 -0.401567 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.515053 -0.410297 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.546768 -0.4135 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.532513 -0.427756 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.541242 -0.436486 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.542955 -0.490576 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.565623 -0.483869 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.54615 -0.478651 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.549345 -0.466726 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.562428 -0.495794 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.54615 -0.478651 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.539759 -0.502501 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.559233 -0.507719 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.536564 -0.514426 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.539759 -0.502501 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.460336 -0.512714 -0.282703 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.461599 -0.535539 -0.292037 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.478381 -0.527985 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.455118 -0.532187 -0.268448 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.443553 -0.520267 -0.299164 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.437072 -0.516916 -0.275576 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.44229 -0.497443 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.466817 -0.516065 -0.306292 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.465554 -0.493241 -0.296959 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.483599 -0.508512 -0.289831 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.490576 -0.542955 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.507719 -0.559233 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.514426 -0.536564 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.502501 -0.539759 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.483869 -0.565623 -0.215094 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.478651 -0.54615 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.466726 -0.549345 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.495794 -0.562428 -0.236478 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.478651 -0.54615 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.502501 -0.539759 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.419026 -0.523783 -0.222222 RAD 0.0185185
+ txt002
+ SPHERE CENTER 0.404771 -0.538038 -0.207967 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.427756 -0.532513 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.410297 -0.515053 -0.200839 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.396041 -0.529309 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.401567 -0.506323 -0.222222 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.410297 -0.515053 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.4135 -0.546768 -0.22935 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.427756 -0.532513 -0.243606 RAD 0.00617284
+ txt002
+ SPHERE CENTER 0.436486 -0.541242 -0.222222 RAD 0.00617284
+ txt002
+
+END_SCENE
diff --git a/examples/parallel_for/tacheon/dat/lattice.dat b/examples/parallel_for/tacheon/dat/lattice.dat
new file mode 100644
index 0000000..fc40ed8
--- /dev/null
+++ b/examples/parallel_for/tacheon/dat/lattice.dat
@@ -0,0 +1,18012 @@
+BEGIN_SCENE
+ OUTFILE /dev/null
+ RESOLUTION 512 512
+ VERBOSE 0
+
+CAMERA
+ ZOOM 1.0
+ ASPECTRATIO 1.0
+ ANTIALIASING 0
+ RAYDEPTH 8
+ CENTER 0.5625 1 0.9375
+ VIEWDIR 0 -0.707107 -0.707107
+ UPDIR 0.272166 0.680414 -0.680414
+
+END_CAMERA
+
+LIGHT CENTER 2 0.5 0.5 RAD 0.002 COLOR 0.5 0.5 0.5
+
+LIGHT CENTER -1 0.5 0.5 RAD 0.002 COLOR 0.5 0.5 0.5
+
+LIGHT CENTER 0.5 2 0.5 RAD 0.002 COLOR 0.5 0.5 0.5
+
+LIGHT CENTER 0.5 -1 0.5 RAD 0.002 COLOR 0.5 0.5 0.5
+
+LIGHT CENTER 0.5 0.5 2 RAD 0.002 COLOR 0.5 0.5 0.5
+
+LIGHT CENTER 0.5 0.5 -1 RAD 0.002 COLOR 0.5 0.5 0.5
+
+TEXDEF txt001 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0 0 RAD 0.03125
+ txt001
+TEXDEF txt002 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0 0 APEX 0.109531 0 0 RAD 0.0078125
+ txt002
+TEXDEF txt003 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.0154687 0 APEX 0 0.109531 0 RAD 0.0078125
+ txt003
+TEXDEF txt004 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0 0.0154687 APEX 0 0 0.109531 RAD 0.0078125
+ txt004
+TEXDEF txt005 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0 0.125 RAD 0.03125
+ txt005
+TEXDEF txt006 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0 0.125 APEX 0.109531 0 0.125 RAD 0.0078125
+ txt006
+TEXDEF txt007 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.0154687 0.125 APEX 0 0.109531 0.125 RAD 0.0078125
+ txt007
+TEXDEF txt008 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0 0.140469 APEX 0 0 0.234531 RAD 0.0078125
+ txt008
+TEXDEF txt009 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0 0.25 RAD 0.03125
+ txt009
+TEXDEF txt010 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0 0.25 APEX 0.109531 0 0.25 RAD 0.0078125
+ txt010
+TEXDEF txt011 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.0154687 0.25 APEX 0 0.109531 0.25 RAD 0.0078125
+ txt011
+TEXDEF txt012 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0 0.265469 APEX 0 0 0.359531 RAD 0.0078125
+ txt012
+TEXDEF txt013 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0 0.375 RAD 0.03125
+ txt013
+TEXDEF txt014 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0 0.375 APEX 0.109531 0 0.375 RAD 0.0078125
+ txt014
+TEXDEF txt015 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.0154687 0.375 APEX 0 0.109531 0.375 RAD 0.0078125
+ txt015
+TEXDEF txt016 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0 0.390469 APEX 0 0 0.484531 RAD 0.0078125
+ txt016
+TEXDEF txt017 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0 0.5 RAD 0.03125
+ txt017
+TEXDEF txt018 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0 0.5 APEX 0.109531 0 0.5 RAD 0.0078125
+ txt018
+TEXDEF txt019 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.0154687 0.5 APEX 0 0.109531 0.5 RAD 0.0078125
+ txt019
+TEXDEF txt020 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0 0.515469 APEX 0 0 0.609531 RAD 0.0078125
+ txt020
+TEXDEF txt021 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0 0.625 RAD 0.03125
+ txt021
+TEXDEF txt022 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0 0.625 APEX 0.109531 0 0.625 RAD 0.0078125
+ txt022
+TEXDEF txt023 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.0154687 0.625 APEX 0 0.109531 0.625 RAD 0.0078125
+ txt023
+TEXDEF txt024 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0 0.640469 APEX 0 0 0.734531 RAD 0.0078125
+ txt024
+TEXDEF txt025 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0 0.75 RAD 0.03125
+ txt025
+TEXDEF txt026 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0 0.75 APEX 0.109531 0 0.75 RAD 0.0078125
+ txt026
+TEXDEF txt027 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.0154687 0.75 APEX 0 0.109531 0.75 RAD 0.0078125
+ txt027
+TEXDEF txt028 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0 0.765469 APEX 0 0 0.859531 RAD 0.0078125
+ txt028
+TEXDEF txt029 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0 0.875 RAD 0.03125
+ txt029
+TEXDEF txt030 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0 0.875 APEX 0.109531 0 0.875 RAD 0.0078125
+ txt030
+TEXDEF txt031 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.0154687 0.875 APEX 0 0.109531 0.875 RAD 0.0078125
+ txt031
+TEXDEF txt032 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0 0.890469 APEX 0 0 0.984531 RAD 0.0078125
+ txt032
+TEXDEF txt033 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0 1 RAD 0.03125
+ txt033
+TEXDEF txt034 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0 1 APEX 0.109531 0 1 RAD 0.0078125
+ txt034
+TEXDEF txt035 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.0154687 1 APEX 0 0.109531 1 RAD 0.0078125
+ txt035
+TEXDEF txt036 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.125 0 RAD 0.03125
+ txt036
+TEXDEF txt037 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.125 0 APEX 0.109531 0.125 0 RAD 0.0078125
+ txt037
+TEXDEF txt038 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.140469 0 APEX 0 0.234531 0 RAD 0.0078125
+ txt038
+TEXDEF txt039 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.125 0.0154687 APEX 0 0.125 0.109531 RAD 0.0078125
+ txt039
+TEXDEF txt040 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.125 0.125 RAD 0.03125
+ txt040
+TEXDEF txt041 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.125 0.125 APEX 0.109531 0.125 0.125 RAD 0.0078125
+ txt041
+TEXDEF txt042 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.140469 0.125 APEX 0 0.234531 0.125 RAD 0.0078125
+ txt042
+TEXDEF txt043 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.125 0.140469 APEX 0 0.125 0.234531 RAD 0.0078125
+ txt043
+TEXDEF txt044 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.125 0.25 RAD 0.03125
+ txt044
+TEXDEF txt045 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.125 0.25 APEX 0.109531 0.125 0.25 RAD 0.0078125
+ txt045
+TEXDEF txt046 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.140469 0.25 APEX 0 0.234531 0.25 RAD 0.0078125
+ txt046
+TEXDEF txt047 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.125 0.265469 APEX 0 0.125 0.359531 RAD 0.0078125
+ txt047
+TEXDEF txt048 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.125 0.375 RAD 0.03125
+ txt048
+TEXDEF txt049 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.125 0.375 APEX 0.109531 0.125 0.375 RAD 0.0078125
+ txt049
+TEXDEF txt050 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.140469 0.375 APEX 0 0.234531 0.375 RAD 0.0078125
+ txt050
+TEXDEF txt051 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.125 0.390469 APEX 0 0.125 0.484531 RAD 0.0078125
+ txt051
+TEXDEF txt052 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.125 0.5 RAD 0.03125
+ txt052
+TEXDEF txt053 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.125 0.5 APEX 0.109531 0.125 0.5 RAD 0.0078125
+ txt053
+TEXDEF txt054 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.140469 0.5 APEX 0 0.234531 0.5 RAD 0.0078125
+ txt054
+TEXDEF txt055 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.125 0.515469 APEX 0 0.125 0.609531 RAD 0.0078125
+ txt055
+TEXDEF txt056 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.125 0.625 RAD 0.03125
+ txt056
+TEXDEF txt057 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.125 0.625 APEX 0.109531 0.125 0.625 RAD 0.0078125
+ txt057
+TEXDEF txt058 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.140469 0.625 APEX 0 0.234531 0.625 RAD 0.0078125
+ txt058
+TEXDEF txt059 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.125 0.640469 APEX 0 0.125 0.734531 RAD 0.0078125
+ txt059
+TEXDEF txt060 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.125 0.75 RAD 0.03125
+ txt060
+TEXDEF txt061 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.125 0.75 APEX 0.109531 0.125 0.75 RAD 0.0078125
+ txt061
+TEXDEF txt062 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.140469 0.75 APEX 0 0.234531 0.75 RAD 0.0078125
+ txt062
+TEXDEF txt063 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.125 0.765469 APEX 0 0.125 0.859531 RAD 0.0078125
+ txt063
+TEXDEF txt064 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.125 0.875 RAD 0.03125
+ txt064
+TEXDEF txt065 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.125 0.875 APEX 0.109531 0.125 0.875 RAD 0.0078125
+ txt065
+TEXDEF txt066 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.140469 0.875 APEX 0 0.234531 0.875 RAD 0.0078125
+ txt066
+TEXDEF txt067 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.125 0.890469 APEX 0 0.125 0.984531 RAD 0.0078125
+ txt067
+TEXDEF txt068 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.125 1 RAD 0.03125
+ txt068
+TEXDEF txt069 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.125 1 APEX 0.109531 0.125 1 RAD 0.0078125
+ txt069
+TEXDEF txt070 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.140469 1 APEX 0 0.234531 1 RAD 0.0078125
+ txt070
+TEXDEF txt071 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.25 0 RAD 0.03125
+ txt071
+TEXDEF txt072 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.25 0 APEX 0.109531 0.25 0 RAD 0.0078125
+ txt072
+TEXDEF txt073 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.265469 0 APEX 0 0.359531 0 RAD 0.0078125
+ txt073
+TEXDEF txt074 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.25 0.0154687 APEX 0 0.25 0.109531 RAD 0.0078125
+ txt074
+TEXDEF txt075 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.25 0.125 RAD 0.03125
+ txt075
+TEXDEF txt076 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.25 0.125 APEX 0.109531 0.25 0.125 RAD 0.0078125
+ txt076
+TEXDEF txt077 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.265469 0.125 APEX 0 0.359531 0.125 RAD 0.0078125
+ txt077
+TEXDEF txt078 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.25 0.140469 APEX 0 0.25 0.234531 RAD 0.0078125
+ txt078
+TEXDEF txt079 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.25 0.25 RAD 0.03125
+ txt079
+TEXDEF txt080 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.25 0.25 APEX 0.109531 0.25 0.25 RAD 0.0078125
+ txt080
+TEXDEF txt081 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.265469 0.25 APEX 0 0.359531 0.25 RAD 0.0078125
+ txt081
+TEXDEF txt082 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.25 0.265469 APEX 0 0.25 0.359531 RAD 0.0078125
+ txt082
+TEXDEF txt083 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.25 0.375 RAD 0.03125
+ txt083
+TEXDEF txt084 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.25 0.375 APEX 0.109531 0.25 0.375 RAD 0.0078125
+ txt084
+TEXDEF txt085 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.265469 0.375 APEX 0 0.359531 0.375 RAD 0.0078125
+ txt085
+TEXDEF txt086 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.25 0.390469 APEX 0 0.25 0.484531 RAD 0.0078125
+ txt086
+TEXDEF txt087 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.25 0.5 RAD 0.03125
+ txt087
+TEXDEF txt088 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.25 0.5 APEX 0.109531 0.25 0.5 RAD 0.0078125
+ txt088
+TEXDEF txt089 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.265469 0.5 APEX 0 0.359531 0.5 RAD 0.0078125
+ txt089
+TEXDEF txt090 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.25 0.515469 APEX 0 0.25 0.609531 RAD 0.0078125
+ txt090
+TEXDEF txt091 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.25 0.625 RAD 0.03125
+ txt091
+TEXDEF txt092 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.25 0.625 APEX 0.109531 0.25 0.625 RAD 0.0078125
+ txt092
+TEXDEF txt093 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.265469 0.625 APEX 0 0.359531 0.625 RAD 0.0078125
+ txt093
+TEXDEF txt094 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.25 0.640469 APEX 0 0.25 0.734531 RAD 0.0078125
+ txt094
+TEXDEF txt095 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.25 0.75 RAD 0.03125
+ txt095
+TEXDEF txt096 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.25 0.75 APEX 0.109531 0.25 0.75 RAD 0.0078125
+ txt096
+TEXDEF txt097 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.265469 0.75 APEX 0 0.359531 0.75 RAD 0.0078125
+ txt097
+TEXDEF txt098 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.25 0.765469 APEX 0 0.25 0.859531 RAD 0.0078125
+ txt098
+TEXDEF txt099 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.25 0.875 RAD 0.03125
+ txt099
+TEXDEF txt100 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.25 0.875 APEX 0.109531 0.25 0.875 RAD 0.0078125
+ txt100
+TEXDEF txt101 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.265469 0.875 APEX 0 0.359531 0.875 RAD 0.0078125
+ txt101
+TEXDEF txt102 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.25 0.890469 APEX 0 0.25 0.984531 RAD 0.0078125
+ txt102
+TEXDEF txt103 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.25 1 RAD 0.03125
+ txt103
+TEXDEF txt104 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.25 1 APEX 0.109531 0.25 1 RAD 0.0078125
+ txt104
+TEXDEF txt105 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.265469 1 APEX 0 0.359531 1 RAD 0.0078125
+ txt105
+TEXDEF txt106 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.375 0 RAD 0.03125
+ txt106
+TEXDEF txt107 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.375 0 APEX 0.109531 0.375 0 RAD 0.0078125
+ txt107
+TEXDEF txt108 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.390469 0 APEX 0 0.484531 0 RAD 0.0078125
+ txt108
+TEXDEF txt109 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.375 0.0154687 APEX 0 0.375 0.109531 RAD 0.0078125
+ txt109
+TEXDEF txt110 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.375 0.125 RAD 0.03125
+ txt110
+TEXDEF txt111 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.375 0.125 APEX 0.109531 0.375 0.125 RAD 0.0078125
+ txt111
+TEXDEF txt112 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.390469 0.125 APEX 0 0.484531 0.125 RAD 0.0078125
+ txt112
+TEXDEF txt113 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.375 0.140469 APEX 0 0.375 0.234531 RAD 0.0078125
+ txt113
+TEXDEF txt114 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.375 0.25 RAD 0.03125
+ txt114
+TEXDEF txt115 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.375 0.25 APEX 0.109531 0.375 0.25 RAD 0.0078125
+ txt115
+TEXDEF txt116 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.390469 0.25 APEX 0 0.484531 0.25 RAD 0.0078125
+ txt116
+TEXDEF txt117 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.375 0.265469 APEX 0 0.375 0.359531 RAD 0.0078125
+ txt117
+TEXDEF txt118 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.375 0.375 RAD 0.03125
+ txt118
+TEXDEF txt119 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.375 0.375 APEX 0.109531 0.375 0.375 RAD 0.0078125
+ txt119
+TEXDEF txt120 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.390469 0.375 APEX 0 0.484531 0.375 RAD 0.0078125
+ txt120
+TEXDEF txt121 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.375 0.390469 APEX 0 0.375 0.484531 RAD 0.0078125
+ txt121
+TEXDEF txt122 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.375 0.5 RAD 0.03125
+ txt122
+TEXDEF txt123 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.375 0.5 APEX 0.109531 0.375 0.5 RAD 0.0078125
+ txt123
+TEXDEF txt124 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.390469 0.5 APEX 0 0.484531 0.5 RAD 0.0078125
+ txt124
+TEXDEF txt125 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.375 0.515469 APEX 0 0.375 0.609531 RAD 0.0078125
+ txt125
+TEXDEF txt126 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.375 0.625 RAD 0.03125
+ txt126
+TEXDEF txt127 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.375 0.625 APEX 0.109531 0.375 0.625 RAD 0.0078125
+ txt127
+TEXDEF txt128 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.390469 0.625 APEX 0 0.484531 0.625 RAD 0.0078125
+ txt128
+TEXDEF txt129 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.375 0.640469 APEX 0 0.375 0.734531 RAD 0.0078125
+ txt129
+TEXDEF txt130 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.375 0.75 RAD 0.03125
+ txt130
+TEXDEF txt131 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.375 0.75 APEX 0.109531 0.375 0.75 RAD 0.0078125
+ txt131
+TEXDEF txt132 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.390469 0.75 APEX 0 0.484531 0.75 RAD 0.0078125
+ txt132
+TEXDEF txt133 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.375 0.765469 APEX 0 0.375 0.859531 RAD 0.0078125
+ txt133
+TEXDEF txt134 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.375 0.875 RAD 0.03125
+ txt134
+TEXDEF txt135 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.375 0.875 APEX 0.109531 0.375 0.875 RAD 0.0078125
+ txt135
+TEXDEF txt136 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.390469 0.875 APEX 0 0.484531 0.875 RAD 0.0078125
+ txt136
+TEXDEF txt137 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.375 0.890469 APEX 0 0.375 0.984531 RAD 0.0078125
+ txt137
+TEXDEF txt138 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.375 1 RAD 0.03125
+ txt138
+TEXDEF txt139 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.375 1 APEX 0.109531 0.375 1 RAD 0.0078125
+ txt139
+TEXDEF txt140 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.390469 1 APEX 0 0.484531 1 RAD 0.0078125
+ txt140
+TEXDEF txt141 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.5 0 RAD 0.03125
+ txt141
+TEXDEF txt142 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.5 0 APEX 0.109531 0.5 0 RAD 0.0078125
+ txt142
+TEXDEF txt143 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.515469 0 APEX 0 0.609531 0 RAD 0.0078125
+ txt143
+TEXDEF txt144 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.5 0.0154687 APEX 0 0.5 0.109531 RAD 0.0078125
+ txt144
+TEXDEF txt145 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.5 0.125 RAD 0.03125
+ txt145
+TEXDEF txt146 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.5 0.125 APEX 0.109531 0.5 0.125 RAD 0.0078125
+ txt146
+TEXDEF txt147 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.515469 0.125 APEX 0 0.609531 0.125 RAD 0.0078125
+ txt147
+TEXDEF txt148 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.5 0.140469 APEX 0 0.5 0.234531 RAD 0.0078125
+ txt148
+TEXDEF txt149 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.5 0.25 RAD 0.03125
+ txt149
+TEXDEF txt150 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.5 0.25 APEX 0.109531 0.5 0.25 RAD 0.0078125
+ txt150
+TEXDEF txt151 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.515469 0.25 APEX 0 0.609531 0.25 RAD 0.0078125
+ txt151
+TEXDEF txt152 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.5 0.265469 APEX 0 0.5 0.359531 RAD 0.0078125
+ txt152
+TEXDEF txt153 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.5 0.375 RAD 0.03125
+ txt153
+TEXDEF txt154 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.5 0.375 APEX 0.109531 0.5 0.375 RAD 0.0078125
+ txt154
+TEXDEF txt155 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.515469 0.375 APEX 0 0.609531 0.375 RAD 0.0078125
+ txt155
+TEXDEF txt156 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.5 0.390469 APEX 0 0.5 0.484531 RAD 0.0078125
+ txt156
+TEXDEF txt157 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.5 0.5 RAD 0.03125
+ txt157
+TEXDEF txt158 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.5 0.5 APEX 0.109531 0.5 0.5 RAD 0.0078125
+ txt158
+TEXDEF txt159 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.515469 0.5 APEX 0 0.609531 0.5 RAD 0.0078125
+ txt159
+TEXDEF txt160 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.5 0.515469 APEX 0 0.5 0.609531 RAD 0.0078125
+ txt160
+TEXDEF txt161 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.5 0.625 RAD 0.03125
+ txt161
+TEXDEF txt162 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.5 0.625 APEX 0.109531 0.5 0.625 RAD 0.0078125
+ txt162
+TEXDEF txt163 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.515469 0.625 APEX 0 0.609531 0.625 RAD 0.0078125
+ txt163
+TEXDEF txt164 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.5 0.640469 APEX 0 0.5 0.734531 RAD 0.0078125
+ txt164
+TEXDEF txt165 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.5 0.75 RAD 0.03125
+ txt165
+TEXDEF txt166 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.5 0.75 APEX 0.109531 0.5 0.75 RAD 0.0078125
+ txt166
+TEXDEF txt167 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.515469 0.75 APEX 0 0.609531 0.75 RAD 0.0078125
+ txt167
+TEXDEF txt168 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.5 0.765469 APEX 0 0.5 0.859531 RAD 0.0078125
+ txt168
+TEXDEF txt169 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.5 0.875 RAD 0.03125
+ txt169
+TEXDEF txt170 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.5 0.875 APEX 0.109531 0.5 0.875 RAD 0.0078125
+ txt170
+TEXDEF txt171 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.515469 0.875 APEX 0 0.609531 0.875 RAD 0.0078125
+ txt171
+TEXDEF txt172 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.5 0.890469 APEX 0 0.5 0.984531 RAD 0.0078125
+ txt172
+TEXDEF txt173 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.5 1 RAD 0.03125
+ txt173
+TEXDEF txt174 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.5 1 APEX 0.109531 0.5 1 RAD 0.0078125
+ txt174
+TEXDEF txt175 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.515469 1 APEX 0 0.609531 1 RAD 0.0078125
+ txt175
+TEXDEF txt176 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.625 0 RAD 0.03125
+ txt176
+TEXDEF txt177 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.625 0 APEX 0.109531 0.625 0 RAD 0.0078125
+ txt177
+TEXDEF txt178 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.640469 0 APEX 0 0.734531 0 RAD 0.0078125
+ txt178
+TEXDEF txt179 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.625 0.0154687 APEX 0 0.625 0.109531 RAD 0.0078125
+ txt179
+TEXDEF txt180 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.625 0.125 RAD 0.03125
+ txt180
+TEXDEF txt181 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.625 0.125 APEX 0.109531 0.625 0.125 RAD 0.0078125
+ txt181
+TEXDEF txt182 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.640469 0.125 APEX 0 0.734531 0.125 RAD 0.0078125
+ txt182
+TEXDEF txt183 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.625 0.140469 APEX 0 0.625 0.234531 RAD 0.0078125
+ txt183
+TEXDEF txt184 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.625 0.25 RAD 0.03125
+ txt184
+TEXDEF txt185 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.625 0.25 APEX 0.109531 0.625 0.25 RAD 0.0078125
+ txt185
+TEXDEF txt186 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.640469 0.25 APEX 0 0.734531 0.25 RAD 0.0078125
+ txt186
+TEXDEF txt187 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.625 0.265469 APEX 0 0.625 0.359531 RAD 0.0078125
+ txt187
+TEXDEF txt188 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.625 0.375 RAD 0.03125
+ txt188
+TEXDEF txt189 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.625 0.375 APEX 0.109531 0.625 0.375 RAD 0.0078125
+ txt189
+TEXDEF txt190 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.640469 0.375 APEX 0 0.734531 0.375 RAD 0.0078125
+ txt190
+TEXDEF txt191 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.625 0.390469 APEX 0 0.625 0.484531 RAD 0.0078125
+ txt191
+TEXDEF txt192 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.625 0.5 RAD 0.03125
+ txt192
+TEXDEF txt193 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.625 0.5 APEX 0.109531 0.625 0.5 RAD 0.0078125
+ txt193
+TEXDEF txt194 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.640469 0.5 APEX 0 0.734531 0.5 RAD 0.0078125
+ txt194
+TEXDEF txt195 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.625 0.515469 APEX 0 0.625 0.609531 RAD 0.0078125
+ txt195
+TEXDEF txt196 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.625 0.625 RAD 0.03125
+ txt196
+TEXDEF txt197 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.625 0.625 APEX 0.109531 0.625 0.625 RAD 0.0078125
+ txt197
+TEXDEF txt198 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.640469 0.625 APEX 0 0.734531 0.625 RAD 0.0078125
+ txt198
+TEXDEF txt199 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.625 0.640469 APEX 0 0.625 0.734531 RAD 0.0078125
+ txt199
+TEXDEF txt200 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.625 0.75 RAD 0.03125
+ txt200
+TEXDEF txt201 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.625 0.75 APEX 0.109531 0.625 0.75 RAD 0.0078125
+ txt201
+TEXDEF txt202 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.640469 0.75 APEX 0 0.734531 0.75 RAD 0.0078125
+ txt202
+TEXDEF txt203 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.625 0.765469 APEX 0 0.625 0.859531 RAD 0.0078125
+ txt203
+TEXDEF txt204 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.625 0.875 RAD 0.03125
+ txt204
+TEXDEF txt205 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.625 0.875 APEX 0.109531 0.625 0.875 RAD 0.0078125
+ txt205
+TEXDEF txt206 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.640469 0.875 APEX 0 0.734531 0.875 RAD 0.0078125
+ txt206
+TEXDEF txt207 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.625 0.890469 APEX 0 0.625 0.984531 RAD 0.0078125
+ txt207
+TEXDEF txt208 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.625 1 RAD 0.03125
+ txt208
+TEXDEF txt209 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.625 1 APEX 0.109531 0.625 1 RAD 0.0078125
+ txt209
+TEXDEF txt210 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.640469 1 APEX 0 0.734531 1 RAD 0.0078125
+ txt210
+TEXDEF txt211 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.75 0 RAD 0.03125
+ txt211
+TEXDEF txt212 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.75 0 APEX 0.109531 0.75 0 RAD 0.0078125
+ txt212
+TEXDEF txt213 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.765469 0 APEX 0 0.859531 0 RAD 0.0078125
+ txt213
+TEXDEF txt214 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.75 0.0154687 APEX 0 0.75 0.109531 RAD 0.0078125
+ txt214
+TEXDEF txt215 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.75 0.125 RAD 0.03125
+ txt215
+TEXDEF txt216 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.75 0.125 APEX 0.109531 0.75 0.125 RAD 0.0078125
+ txt216
+TEXDEF txt217 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.765469 0.125 APEX 0 0.859531 0.125 RAD 0.0078125
+ txt217
+TEXDEF txt218 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.75 0.140469 APEX 0 0.75 0.234531 RAD 0.0078125
+ txt218
+TEXDEF txt219 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.75 0.25 RAD 0.03125
+ txt219
+TEXDEF txt220 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.75 0.25 APEX 0.109531 0.75 0.25 RAD 0.0078125
+ txt220
+TEXDEF txt221 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.765469 0.25 APEX 0 0.859531 0.25 RAD 0.0078125
+ txt221
+TEXDEF txt222 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.75 0.265469 APEX 0 0.75 0.359531 RAD 0.0078125
+ txt222
+TEXDEF txt223 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.75 0.375 RAD 0.03125
+ txt223
+TEXDEF txt224 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.75 0.375 APEX 0.109531 0.75 0.375 RAD 0.0078125
+ txt224
+TEXDEF txt225 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.765469 0.375 APEX 0 0.859531 0.375 RAD 0.0078125
+ txt225
+TEXDEF txt226 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.75 0.390469 APEX 0 0.75 0.484531 RAD 0.0078125
+ txt226
+TEXDEF txt227 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.75 0.5 RAD 0.03125
+ txt227
+TEXDEF txt228 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.75 0.5 APEX 0.109531 0.75 0.5 RAD 0.0078125
+ txt228
+TEXDEF txt229 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.765469 0.5 APEX 0 0.859531 0.5 RAD 0.0078125
+ txt229
+TEXDEF txt230 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.75 0.515469 APEX 0 0.75 0.609531 RAD 0.0078125
+ txt230
+TEXDEF txt231 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.75 0.625 RAD 0.03125
+ txt231
+TEXDEF txt232 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.75 0.625 APEX 0.109531 0.75 0.625 RAD 0.0078125
+ txt232
+TEXDEF txt233 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.765469 0.625 APEX 0 0.859531 0.625 RAD 0.0078125
+ txt233
+TEXDEF txt234 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.75 0.640469 APEX 0 0.75 0.734531 RAD 0.0078125
+ txt234
+TEXDEF txt235 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.75 0.75 RAD 0.03125
+ txt235
+TEXDEF txt236 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.75 0.75 APEX 0.109531 0.75 0.75 RAD 0.0078125
+ txt236
+TEXDEF txt237 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.765469 0.75 APEX 0 0.859531 0.75 RAD 0.0078125
+ txt237
+TEXDEF txt238 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.75 0.765469 APEX 0 0.75 0.859531 RAD 0.0078125
+ txt238
+TEXDEF txt239 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.75 0.875 RAD 0.03125
+ txt239
+TEXDEF txt240 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.75 0.875 APEX 0.109531 0.75 0.875 RAD 0.0078125
+ txt240
+TEXDEF txt241 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.765469 0.875 APEX 0 0.859531 0.875 RAD 0.0078125
+ txt241
+TEXDEF txt242 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.75 0.890469 APEX 0 0.75 0.984531 RAD 0.0078125
+ txt242
+TEXDEF txt243 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.75 1 RAD 0.03125
+ txt243
+TEXDEF txt244 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.75 1 APEX 0.109531 0.75 1 RAD 0.0078125
+ txt244
+TEXDEF txt245 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.765469 1 APEX 0 0.859531 1 RAD 0.0078125
+ txt245
+TEXDEF txt246 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.875 0 RAD 0.03125
+ txt246
+TEXDEF txt247 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.875 0 APEX 0.109531 0.875 0 RAD 0.0078125
+ txt247
+TEXDEF txt248 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.890469 0 APEX 0 0.984531 0 RAD 0.0078125
+ txt248
+TEXDEF txt249 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.875 0.0154687 APEX 0 0.875 0.109531 RAD 0.0078125
+ txt249
+TEXDEF txt250 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.875 0.125 RAD 0.03125
+ txt250
+TEXDEF txt251 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.875 0.125 APEX 0.109531 0.875 0.125 RAD 0.0078125
+ txt251
+TEXDEF txt252 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.890469 0.125 APEX 0 0.984531 0.125 RAD 0.0078125
+ txt252
+TEXDEF txt253 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.875 0.140469 APEX 0 0.875 0.234531 RAD 0.0078125
+ txt253
+TEXDEF txt254 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.875 0.25 RAD 0.03125
+ txt254
+TEXDEF txt255 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.875 0.25 APEX 0.109531 0.875 0.25 RAD 0.0078125
+ txt255
+TEXDEF txt256 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.890469 0.25 APEX 0 0.984531 0.25 RAD 0.0078125
+ txt256
+TEXDEF txt257 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.875 0.265469 APEX 0 0.875 0.359531 RAD 0.0078125
+ txt257
+TEXDEF txt258 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.875 0.375 RAD 0.03125
+ txt258
+TEXDEF txt259 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.875 0.375 APEX 0.109531 0.875 0.375 RAD 0.0078125
+ txt259
+TEXDEF txt260 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.890469 0.375 APEX 0 0.984531 0.375 RAD 0.0078125
+ txt260
+TEXDEF txt261 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.875 0.390469 APEX 0 0.875 0.484531 RAD 0.0078125
+ txt261
+TEXDEF txt262 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.875 0.5 RAD 0.03125
+ txt262
+TEXDEF txt263 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.875 0.5 APEX 0.109531 0.875 0.5 RAD 0.0078125
+ txt263
+TEXDEF txt264 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.890469 0.5 APEX 0 0.984531 0.5 RAD 0.0078125
+ txt264
+TEXDEF txt265 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.875 0.515469 APEX 0 0.875 0.609531 RAD 0.0078125
+ txt265
+TEXDEF txt266 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.875 0.625 RAD 0.03125
+ txt266
+TEXDEF txt267 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.875 0.625 APEX 0.109531 0.875 0.625 RAD 0.0078125
+ txt267
+TEXDEF txt268 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.890469 0.625 APEX 0 0.984531 0.625 RAD 0.0078125
+ txt268
+TEXDEF txt269 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.875 0.640469 APEX 0 0.875 0.734531 RAD 0.0078125
+ txt269
+TEXDEF txt270 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.875 0.75 RAD 0.03125
+ txt270
+TEXDEF txt271 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.875 0.75 APEX 0.109531 0.875 0.75 RAD 0.0078125
+ txt271
+TEXDEF txt272 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.890469 0.75 APEX 0 0.984531 0.75 RAD 0.0078125
+ txt272
+TEXDEF txt273 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.875 0.765469 APEX 0 0.875 0.859531 RAD 0.0078125
+ txt273
+TEXDEF txt274 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.875 0.875 RAD 0.03125
+ txt274
+TEXDEF txt275 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.875 0.875 APEX 0.109531 0.875 0.875 RAD 0.0078125
+ txt275
+TEXDEF txt276 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.890469 0.875 APEX 0 0.984531 0.875 RAD 0.0078125
+ txt276
+TEXDEF txt277 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.875 0.890469 APEX 0 0.875 0.984531 RAD 0.0078125
+ txt277
+TEXDEF txt278 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 0.875 1 RAD 0.03125
+ txt278
+TEXDEF txt279 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 0.875 1 APEX 0.109531 0.875 1 RAD 0.0078125
+ txt279
+TEXDEF txt280 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 0.890469 1 APEX 0 0.984531 1 RAD 0.0078125
+ txt280
+TEXDEF txt281 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 1 0 RAD 0.03125
+ txt281
+TEXDEF txt282 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 1 0 APEX 0.109531 1 0 RAD 0.0078125
+ txt282
+TEXDEF txt283 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 1 0.0154687 APEX 0 1 0.109531 RAD 0.0078125
+ txt283
+TEXDEF txt284 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 1 0.125 RAD 0.03125
+ txt284
+TEXDEF txt285 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 1 0.125 APEX 0.109531 1 0.125 RAD 0.0078125
+ txt285
+TEXDEF txt286 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 1 0.140469 APEX 0 1 0.234531 RAD 0.0078125
+ txt286
+TEXDEF txt287 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 1 0.25 RAD 0.03125
+ txt287
+TEXDEF txt288 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 1 0.25 APEX 0.109531 1 0.25 RAD 0.0078125
+ txt288
+TEXDEF txt289 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 1 0.265469 APEX 0 1 0.359531 RAD 0.0078125
+ txt289
+TEXDEF txt290 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 1 0.375 RAD 0.03125
+ txt290
+TEXDEF txt291 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 1 0.375 APEX 0.109531 1 0.375 RAD 0.0078125
+ txt291
+TEXDEF txt292 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 1 0.390469 APEX 0 1 0.484531 RAD 0.0078125
+ txt292
+TEXDEF txt293 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 1 0.5 RAD 0.03125
+ txt293
+TEXDEF txt294 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 1 0.5 APEX 0.109531 1 0.5 RAD 0.0078125
+ txt294
+TEXDEF txt295 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 1 0.515469 APEX 0 1 0.609531 RAD 0.0078125
+ txt295
+TEXDEF txt296 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 1 0.625 RAD 0.03125
+ txt296
+TEXDEF txt297 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 1 0.625 APEX 0.109531 1 0.625 RAD 0.0078125
+ txt297
+TEXDEF txt298 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 1 0.640469 APEX 0 1 0.734531 RAD 0.0078125
+ txt298
+TEXDEF txt299 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 1 0.75 RAD 0.03125
+ txt299
+TEXDEF txt300 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 1 0.75 APEX 0.109531 1 0.75 RAD 0.0078125
+ txt300
+TEXDEF txt301 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 1 0.765469 APEX 0 1 0.859531 RAD 0.0078125
+ txt301
+TEXDEF txt302 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 1 0.875 RAD 0.03125
+ txt302
+TEXDEF txt303 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 1 0.875 APEX 0.109531 1 0.875 RAD 0.0078125
+ txt303
+TEXDEF txt304 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0 1 0.890469 APEX 0 1 0.984531 RAD 0.0078125
+ txt304
+TEXDEF txt305 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0 1 1 RAD 0.03125
+ txt305
+TEXDEF txt306 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.0154687 1 1 APEX 0.109531 1 1 RAD 0.0078125
+ txt306
+TEXDEF txt307 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0 0 RAD 0.03125
+ txt307
+TEXDEF txt308 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0 0 APEX 0.234531 0 0 RAD 0.0078125
+ txt308
+TEXDEF txt309 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.0154687 0 APEX 0.125 0.109531 0 RAD 0.0078125
+ txt309
+TEXDEF txt310 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0 0.0154687 APEX 0.125 0 0.109531 RAD 0.0078125
+ txt310
+TEXDEF txt311 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0 0.125 RAD 0.03125
+ txt311
+TEXDEF txt312 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0 0.125 APEX 0.234531 0 0.125 RAD 0.0078125
+ txt312
+TEXDEF txt313 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.0154687 0.125 APEX 0.125 0.109531 0.125 RAD 0.0078125
+ txt313
+TEXDEF txt314 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0 0.140469 APEX 0.125 0 0.234531 RAD 0.0078125
+ txt314
+TEXDEF txt315 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0 0.25 RAD 0.03125
+ txt315
+TEXDEF txt316 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0 0.25 APEX 0.234531 0 0.25 RAD 0.0078125
+ txt316
+TEXDEF txt317 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.0154687 0.25 APEX 0.125 0.109531 0.25 RAD 0.0078125
+ txt317
+TEXDEF txt318 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0 0.265469 APEX 0.125 0 0.359531 RAD 0.0078125
+ txt318
+TEXDEF txt319 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0 0.375 RAD 0.03125
+ txt319
+TEXDEF txt320 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0 0.375 APEX 0.234531 0 0.375 RAD 0.0078125
+ txt320
+TEXDEF txt321 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.0154687 0.375 APEX 0.125 0.109531 0.375 RAD 0.0078125
+ txt321
+TEXDEF txt322 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0 0.390469 APEX 0.125 0 0.484531 RAD 0.0078125
+ txt322
+TEXDEF txt323 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0 0.5 RAD 0.03125
+ txt323
+TEXDEF txt324 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0 0.5 APEX 0.234531 0 0.5 RAD 0.0078125
+ txt324
+TEXDEF txt325 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.0154687 0.5 APEX 0.125 0.109531 0.5 RAD 0.0078125
+ txt325
+TEXDEF txt326 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0 0.515469 APEX 0.125 0 0.609531 RAD 0.0078125
+ txt326
+TEXDEF txt327 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0 0.625 RAD 0.03125
+ txt327
+TEXDEF txt328 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0 0.625 APEX 0.234531 0 0.625 RAD 0.0078125
+ txt328
+TEXDEF txt329 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.0154687 0.625 APEX 0.125 0.109531 0.625 RAD 0.0078125
+ txt329
+TEXDEF txt330 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0 0.640469 APEX 0.125 0 0.734531 RAD 0.0078125
+ txt330
+TEXDEF txt331 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0 0.75 RAD 0.03125
+ txt331
+TEXDEF txt332 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0 0.75 APEX 0.234531 0 0.75 RAD 0.0078125
+ txt332
+TEXDEF txt333 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.0154687 0.75 APEX 0.125 0.109531 0.75 RAD 0.0078125
+ txt333
+TEXDEF txt334 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0 0.765469 APEX 0.125 0 0.859531 RAD 0.0078125
+ txt334
+TEXDEF txt335 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0 0.875 RAD 0.03125
+ txt335
+TEXDEF txt336 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0 0.875 APEX 0.234531 0 0.875 RAD 0.0078125
+ txt336
+TEXDEF txt337 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.0154687 0.875 APEX 0.125 0.109531 0.875 RAD 0.0078125
+ txt337
+TEXDEF txt338 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0 0.890469 APEX 0.125 0 0.984531 RAD 0.0078125
+ txt338
+TEXDEF txt339 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0 1 RAD 0.03125
+ txt339
+TEXDEF txt340 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0 1 APEX 0.234531 0 1 RAD 0.0078125
+ txt340
+TEXDEF txt341 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.0154687 1 APEX 0.125 0.109531 1 RAD 0.0078125
+ txt341
+TEXDEF txt342 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.125 0 RAD 0.03125
+ txt342
+TEXDEF txt343 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.125 0 APEX 0.234531 0.125 0 RAD 0.0078125
+ txt343
+TEXDEF txt344 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.140469 0 APEX 0.125 0.234531 0 RAD 0.0078125
+ txt344
+TEXDEF txt345 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.125 0.0154687 APEX 0.125 0.125 0.109531 RAD 0.0078125
+ txt345
+TEXDEF txt346 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.125 0.125 RAD 0.03125
+ txt346
+TEXDEF txt347 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.125 0.125 APEX 0.234531 0.125 0.125 RAD 0.0078125
+ txt347
+TEXDEF txt348 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.140469 0.125 APEX 0.125 0.234531 0.125 RAD 0.0078125
+ txt348
+TEXDEF txt349 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.125 0.140469 APEX 0.125 0.125 0.234531 RAD 0.0078125
+ txt349
+TEXDEF txt350 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.125 0.25 RAD 0.03125
+ txt350
+TEXDEF txt351 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.125 0.25 APEX 0.234531 0.125 0.25 RAD 0.0078125
+ txt351
+TEXDEF txt352 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.140469 0.25 APEX 0.125 0.234531 0.25 RAD 0.0078125
+ txt352
+TEXDEF txt353 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.125 0.265469 APEX 0.125 0.125 0.359531 RAD 0.0078125
+ txt353
+TEXDEF txt354 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.125 0.375 RAD 0.03125
+ txt354
+TEXDEF txt355 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.125 0.375 APEX 0.234531 0.125 0.375 RAD 0.0078125
+ txt355
+TEXDEF txt356 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.140469 0.375 APEX 0.125 0.234531 0.375 RAD 0.0078125
+ txt356
+TEXDEF txt357 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.125 0.390469 APEX 0.125 0.125 0.484531 RAD 0.0078125
+ txt357
+TEXDEF txt358 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.125 0.5 RAD 0.03125
+ txt358
+TEXDEF txt359 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.125 0.5 APEX 0.234531 0.125 0.5 RAD 0.0078125
+ txt359
+TEXDEF txt360 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.140469 0.5 APEX 0.125 0.234531 0.5 RAD 0.0078125
+ txt360
+TEXDEF txt361 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.125 0.515469 APEX 0.125 0.125 0.609531 RAD 0.0078125
+ txt361
+TEXDEF txt362 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.125 0.625 RAD 0.03125
+ txt362
+TEXDEF txt363 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.125 0.625 APEX 0.234531 0.125 0.625 RAD 0.0078125
+ txt363
+TEXDEF txt364 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.140469 0.625 APEX 0.125 0.234531 0.625 RAD 0.0078125
+ txt364
+TEXDEF txt365 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.125 0.640469 APEX 0.125 0.125 0.734531 RAD 0.0078125
+ txt365
+TEXDEF txt366 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.125 0.75 RAD 0.03125
+ txt366
+TEXDEF txt367 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.125 0.75 APEX 0.234531 0.125 0.75 RAD 0.0078125
+ txt367
+TEXDEF txt368 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.140469 0.75 APEX 0.125 0.234531 0.75 RAD 0.0078125
+ txt368
+TEXDEF txt369 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.125 0.765469 APEX 0.125 0.125 0.859531 RAD 0.0078125
+ txt369
+TEXDEF txt370 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.125 0.875 RAD 0.03125
+ txt370
+TEXDEF txt371 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.125 0.875 APEX 0.234531 0.125 0.875 RAD 0.0078125
+ txt371
+TEXDEF txt372 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.140469 0.875 APEX 0.125 0.234531 0.875 RAD 0.0078125
+ txt372
+TEXDEF txt373 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.125 0.890469 APEX 0.125 0.125 0.984531 RAD 0.0078125
+ txt373
+TEXDEF txt374 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.125 1 RAD 0.03125
+ txt374
+TEXDEF txt375 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.125 1 APEX 0.234531 0.125 1 RAD 0.0078125
+ txt375
+TEXDEF txt376 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.140469 1 APEX 0.125 0.234531 1 RAD 0.0078125
+ txt376
+TEXDEF txt377 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.25 0 RAD 0.03125
+ txt377
+TEXDEF txt378 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.25 0 APEX 0.234531 0.25 0 RAD 0.0078125
+ txt378
+TEXDEF txt379 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.265469 0 APEX 0.125 0.359531 0 RAD 0.0078125
+ txt379
+TEXDEF txt380 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.25 0.0154687 APEX 0.125 0.25 0.109531 RAD 0.0078125
+ txt380
+TEXDEF txt381 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.25 0.125 RAD 0.03125
+ txt381
+TEXDEF txt382 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.25 0.125 APEX 0.234531 0.25 0.125 RAD 0.0078125
+ txt382
+TEXDEF txt383 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.265469 0.125 APEX 0.125 0.359531 0.125 RAD 0.0078125
+ txt383
+TEXDEF txt384 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.25 0.140469 APEX 0.125 0.25 0.234531 RAD 0.0078125
+ txt384
+TEXDEF txt385 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.25 0.25 RAD 0.03125
+ txt385
+TEXDEF txt386 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.25 0.25 APEX 0.234531 0.25 0.25 RAD 0.0078125
+ txt386
+TEXDEF txt387 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.265469 0.25 APEX 0.125 0.359531 0.25 RAD 0.0078125
+ txt387
+TEXDEF txt388 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.25 0.265469 APEX 0.125 0.25 0.359531 RAD 0.0078125
+ txt388
+TEXDEF txt389 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.25 0.375 RAD 0.03125
+ txt389
+TEXDEF txt390 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.25 0.375 APEX 0.234531 0.25 0.375 RAD 0.0078125
+ txt390
+TEXDEF txt391 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.265469 0.375 APEX 0.125 0.359531 0.375 RAD 0.0078125
+ txt391
+TEXDEF txt392 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.25 0.390469 APEX 0.125 0.25 0.484531 RAD 0.0078125
+ txt392
+TEXDEF txt393 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.25 0.5 RAD 0.03125
+ txt393
+TEXDEF txt394 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.25 0.5 APEX 0.234531 0.25 0.5 RAD 0.0078125
+ txt394
+TEXDEF txt395 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.265469 0.5 APEX 0.125 0.359531 0.5 RAD 0.0078125
+ txt395
+TEXDEF txt396 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.25 0.515469 APEX 0.125 0.25 0.609531 RAD 0.0078125
+ txt396
+TEXDEF txt397 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.25 0.625 RAD 0.03125
+ txt397
+TEXDEF txt398 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.25 0.625 APEX 0.234531 0.25 0.625 RAD 0.0078125
+ txt398
+TEXDEF txt399 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.265469 0.625 APEX 0.125 0.359531 0.625 RAD 0.0078125
+ txt399
+TEXDEF txt400 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.25 0.640469 APEX 0.125 0.25 0.734531 RAD 0.0078125
+ txt400
+TEXDEF txt401 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.25 0.75 RAD 0.03125
+ txt401
+TEXDEF txt402 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.25 0.75 APEX 0.234531 0.25 0.75 RAD 0.0078125
+ txt402
+TEXDEF txt403 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.265469 0.75 APEX 0.125 0.359531 0.75 RAD 0.0078125
+ txt403
+TEXDEF txt404 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.25 0.765469 APEX 0.125 0.25 0.859531 RAD 0.0078125
+ txt404
+TEXDEF txt405 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.25 0.875 RAD 0.03125
+ txt405
+TEXDEF txt406 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.25 0.875 APEX 0.234531 0.25 0.875 RAD 0.0078125
+ txt406
+TEXDEF txt407 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.265469 0.875 APEX 0.125 0.359531 0.875 RAD 0.0078125
+ txt407
+TEXDEF txt408 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.25 0.890469 APEX 0.125 0.25 0.984531 RAD 0.0078125
+ txt408
+TEXDEF txt409 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.25 1 RAD 0.03125
+ txt409
+TEXDEF txt410 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.25 1 APEX 0.234531 0.25 1 RAD 0.0078125
+ txt410
+TEXDEF txt411 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.265469 1 APEX 0.125 0.359531 1 RAD 0.0078125
+ txt411
+TEXDEF txt412 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.375 0 RAD 0.03125
+ txt412
+TEXDEF txt413 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.375 0 APEX 0.234531 0.375 0 RAD 0.0078125
+ txt413
+TEXDEF txt414 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.390469 0 APEX 0.125 0.484531 0 RAD 0.0078125
+ txt414
+TEXDEF txt415 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.375 0.0154687 APEX 0.125 0.375 0.109531 RAD 0.0078125
+ txt415
+TEXDEF txt416 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.375 0.125 RAD 0.03125
+ txt416
+TEXDEF txt417 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.375 0.125 APEX 0.234531 0.375 0.125 RAD 0.0078125
+ txt417
+TEXDEF txt418 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.390469 0.125 APEX 0.125 0.484531 0.125 RAD 0.0078125
+ txt418
+TEXDEF txt419 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.375 0.140469 APEX 0.125 0.375 0.234531 RAD 0.0078125
+ txt419
+TEXDEF txt420 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.375 0.25 RAD 0.03125
+ txt420
+TEXDEF txt421 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.375 0.25 APEX 0.234531 0.375 0.25 RAD 0.0078125
+ txt421
+TEXDEF txt422 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.390469 0.25 APEX 0.125 0.484531 0.25 RAD 0.0078125
+ txt422
+TEXDEF txt423 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.375 0.265469 APEX 0.125 0.375 0.359531 RAD 0.0078125
+ txt423
+TEXDEF txt424 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.375 0.375 RAD 0.03125
+ txt424
+TEXDEF txt425 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.375 0.375 APEX 0.234531 0.375 0.375 RAD 0.0078125
+ txt425
+TEXDEF txt426 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.390469 0.375 APEX 0.125 0.484531 0.375 RAD 0.0078125
+ txt426
+TEXDEF txt427 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.375 0.390469 APEX 0.125 0.375 0.484531 RAD 0.0078125
+ txt427
+TEXDEF txt428 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.375 0.5 RAD 0.03125
+ txt428
+TEXDEF txt429 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.375 0.5 APEX 0.234531 0.375 0.5 RAD 0.0078125
+ txt429
+TEXDEF txt430 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.390469 0.5 APEX 0.125 0.484531 0.5 RAD 0.0078125
+ txt430
+TEXDEF txt431 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.375 0.515469 APEX 0.125 0.375 0.609531 RAD 0.0078125
+ txt431
+TEXDEF txt432 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.375 0.625 RAD 0.03125
+ txt432
+TEXDEF txt433 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.375 0.625 APEX 0.234531 0.375 0.625 RAD 0.0078125
+ txt433
+TEXDEF txt434 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.390469 0.625 APEX 0.125 0.484531 0.625 RAD 0.0078125
+ txt434
+TEXDEF txt435 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.375 0.640469 APEX 0.125 0.375 0.734531 RAD 0.0078125
+ txt435
+TEXDEF txt436 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.375 0.75 RAD 0.03125
+ txt436
+TEXDEF txt437 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.375 0.75 APEX 0.234531 0.375 0.75 RAD 0.0078125
+ txt437
+TEXDEF txt438 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.390469 0.75 APEX 0.125 0.484531 0.75 RAD 0.0078125
+ txt438
+TEXDEF txt439 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.375 0.765469 APEX 0.125 0.375 0.859531 RAD 0.0078125
+ txt439
+TEXDEF txt440 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.375 0.875 RAD 0.03125
+ txt440
+TEXDEF txt441 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.375 0.875 APEX 0.234531 0.375 0.875 RAD 0.0078125
+ txt441
+TEXDEF txt442 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.390469 0.875 APEX 0.125 0.484531 0.875 RAD 0.0078125
+ txt442
+TEXDEF txt443 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.375 0.890469 APEX 0.125 0.375 0.984531 RAD 0.0078125
+ txt443
+TEXDEF txt444 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.375 1 RAD 0.03125
+ txt444
+TEXDEF txt445 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.375 1 APEX 0.234531 0.375 1 RAD 0.0078125
+ txt445
+TEXDEF txt446 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.390469 1 APEX 0.125 0.484531 1 RAD 0.0078125
+ txt446
+TEXDEF txt447 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.5 0 RAD 0.03125
+ txt447
+TEXDEF txt448 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.5 0 APEX 0.234531 0.5 0 RAD 0.0078125
+ txt448
+TEXDEF txt449 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.515469 0 APEX 0.125 0.609531 0 RAD 0.0078125
+ txt449
+TEXDEF txt450 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.5 0.0154687 APEX 0.125 0.5 0.109531 RAD 0.0078125
+ txt450
+TEXDEF txt451 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.5 0.125 RAD 0.03125
+ txt451
+TEXDEF txt452 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.5 0.125 APEX 0.234531 0.5 0.125 RAD 0.0078125
+ txt452
+TEXDEF txt453 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.515469 0.125 APEX 0.125 0.609531 0.125 RAD 0.0078125
+ txt453
+TEXDEF txt454 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.5 0.140469 APEX 0.125 0.5 0.234531 RAD 0.0078125
+ txt454
+TEXDEF txt455 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.5 0.25 RAD 0.03125
+ txt455
+TEXDEF txt456 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.5 0.25 APEX 0.234531 0.5 0.25 RAD 0.0078125
+ txt456
+TEXDEF txt457 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.515469 0.25 APEX 0.125 0.609531 0.25 RAD 0.0078125
+ txt457
+TEXDEF txt458 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.5 0.265469 APEX 0.125 0.5 0.359531 RAD 0.0078125
+ txt458
+TEXDEF txt459 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.5 0.375 RAD 0.03125
+ txt459
+TEXDEF txt460 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.5 0.375 APEX 0.234531 0.5 0.375 RAD 0.0078125
+ txt460
+TEXDEF txt461 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.515469 0.375 APEX 0.125 0.609531 0.375 RAD 0.0078125
+ txt461
+TEXDEF txt462 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.5 0.390469 APEX 0.125 0.5 0.484531 RAD 0.0078125
+ txt462
+TEXDEF txt463 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.5 0.5 RAD 0.03125
+ txt463
+TEXDEF txt464 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.5 0.5 APEX 0.234531 0.5 0.5 RAD 0.0078125
+ txt464
+TEXDEF txt465 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.515469 0.5 APEX 0.125 0.609531 0.5 RAD 0.0078125
+ txt465
+TEXDEF txt466 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.5 0.515469 APEX 0.125 0.5 0.609531 RAD 0.0078125
+ txt466
+TEXDEF txt467 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.5 0.625 RAD 0.03125
+ txt467
+TEXDEF txt468 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.5 0.625 APEX 0.234531 0.5 0.625 RAD 0.0078125
+ txt468
+TEXDEF txt469 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.515469 0.625 APEX 0.125 0.609531 0.625 RAD 0.0078125
+ txt469
+TEXDEF txt470 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.5 0.640469 APEX 0.125 0.5 0.734531 RAD 0.0078125
+ txt470
+TEXDEF txt471 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.5 0.75 RAD 0.03125
+ txt471
+TEXDEF txt472 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.5 0.75 APEX 0.234531 0.5 0.75 RAD 0.0078125
+ txt472
+TEXDEF txt473 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.515469 0.75 APEX 0.125 0.609531 0.75 RAD 0.0078125
+ txt473
+TEXDEF txt474 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.5 0.765469 APEX 0.125 0.5 0.859531 RAD 0.0078125
+ txt474
+TEXDEF txt475 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.5 0.875 RAD 0.03125
+ txt475
+TEXDEF txt476 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.5 0.875 APEX 0.234531 0.5 0.875 RAD 0.0078125
+ txt476
+TEXDEF txt477 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.515469 0.875 APEX 0.125 0.609531 0.875 RAD 0.0078125
+ txt477
+TEXDEF txt478 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.5 0.890469 APEX 0.125 0.5 0.984531 RAD 0.0078125
+ txt478
+TEXDEF txt479 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.5 1 RAD 0.03125
+ txt479
+TEXDEF txt480 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.5 1 APEX 0.234531 0.5 1 RAD 0.0078125
+ txt480
+TEXDEF txt481 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.515469 1 APEX 0.125 0.609531 1 RAD 0.0078125
+ txt481
+TEXDEF txt482 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.625 0 RAD 0.03125
+ txt482
+TEXDEF txt483 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.625 0 APEX 0.234531 0.625 0 RAD 0.0078125
+ txt483
+TEXDEF txt484 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.640469 0 APEX 0.125 0.734531 0 RAD 0.0078125
+ txt484
+TEXDEF txt485 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.625 0.0154687 APEX 0.125 0.625 0.109531 RAD 0.0078125
+ txt485
+TEXDEF txt486 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.625 0.125 RAD 0.03125
+ txt486
+TEXDEF txt487 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.625 0.125 APEX 0.234531 0.625 0.125 RAD 0.0078125
+ txt487
+TEXDEF txt488 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.640469 0.125 APEX 0.125 0.734531 0.125 RAD 0.0078125
+ txt488
+TEXDEF txt489 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.625 0.140469 APEX 0.125 0.625 0.234531 RAD 0.0078125
+ txt489
+TEXDEF txt490 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.625 0.25 RAD 0.03125
+ txt490
+TEXDEF txt491 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.625 0.25 APEX 0.234531 0.625 0.25 RAD 0.0078125
+ txt491
+TEXDEF txt492 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.640469 0.25 APEX 0.125 0.734531 0.25 RAD 0.0078125
+ txt492
+TEXDEF txt493 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.625 0.265469 APEX 0.125 0.625 0.359531 RAD 0.0078125
+ txt493
+TEXDEF txt494 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.625 0.375 RAD 0.03125
+ txt494
+TEXDEF txt495 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.625 0.375 APEX 0.234531 0.625 0.375 RAD 0.0078125
+ txt495
+TEXDEF txt496 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.640469 0.375 APEX 0.125 0.734531 0.375 RAD 0.0078125
+ txt496
+TEXDEF txt497 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.625 0.390469 APEX 0.125 0.625 0.484531 RAD 0.0078125
+ txt497
+TEXDEF txt498 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.625 0.5 RAD 0.03125
+ txt498
+TEXDEF txt499 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.625 0.5 APEX 0.234531 0.625 0.5 RAD 0.0078125
+ txt499
+TEXDEF txt500 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.640469 0.5 APEX 0.125 0.734531 0.5 RAD 0.0078125
+ txt500
+TEXDEF txt501 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.625 0.515469 APEX 0.125 0.625 0.609531 RAD 0.0078125
+ txt501
+TEXDEF txt502 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.625 0.625 RAD 0.03125
+ txt502
+TEXDEF txt503 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.625 0.625 APEX 0.234531 0.625 0.625 RAD 0.0078125
+ txt503
+TEXDEF txt504 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.640469 0.625 APEX 0.125 0.734531 0.625 RAD 0.0078125
+ txt504
+TEXDEF txt505 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.625 0.640469 APEX 0.125 0.625 0.734531 RAD 0.0078125
+ txt505
+TEXDEF txt506 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.625 0.75 RAD 0.03125
+ txt506
+TEXDEF txt507 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.625 0.75 APEX 0.234531 0.625 0.75 RAD 0.0078125
+ txt507
+TEXDEF txt508 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.640469 0.75 APEX 0.125 0.734531 0.75 RAD 0.0078125
+ txt508
+TEXDEF txt509 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.625 0.765469 APEX 0.125 0.625 0.859531 RAD 0.0078125
+ txt509
+TEXDEF txt510 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.625 0.875 RAD 0.03125
+ txt510
+TEXDEF txt511 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.625 0.875 APEX 0.234531 0.625 0.875 RAD 0.0078125
+ txt511
+TEXDEF txt512 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.640469 0.875 APEX 0.125 0.734531 0.875 RAD 0.0078125
+ txt512
+TEXDEF txt513 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.625 0.890469 APEX 0.125 0.625 0.984531 RAD 0.0078125
+ txt513
+TEXDEF txt514 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.625 1 RAD 0.03125
+ txt514
+TEXDEF txt515 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.625 1 APEX 0.234531 0.625 1 RAD 0.0078125
+ txt515
+TEXDEF txt516 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.640469 1 APEX 0.125 0.734531 1 RAD 0.0078125
+ txt516
+TEXDEF txt517 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.75 0 RAD 0.03125
+ txt517
+TEXDEF txt518 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.75 0 APEX 0.234531 0.75 0 RAD 0.0078125
+ txt518
+TEXDEF txt519 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.765469 0 APEX 0.125 0.859531 0 RAD 0.0078125
+ txt519
+TEXDEF txt520 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.75 0.0154687 APEX 0.125 0.75 0.109531 RAD 0.0078125
+ txt520
+TEXDEF txt521 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.75 0.125 RAD 0.03125
+ txt521
+TEXDEF txt522 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.75 0.125 APEX 0.234531 0.75 0.125 RAD 0.0078125
+ txt522
+TEXDEF txt523 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.765469 0.125 APEX 0.125 0.859531 0.125 RAD 0.0078125
+ txt523
+TEXDEF txt524 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.75 0.140469 APEX 0.125 0.75 0.234531 RAD 0.0078125
+ txt524
+TEXDEF txt525 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.75 0.25 RAD 0.03125
+ txt525
+TEXDEF txt526 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.75 0.25 APEX 0.234531 0.75 0.25 RAD 0.0078125
+ txt526
+TEXDEF txt527 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.765469 0.25 APEX 0.125 0.859531 0.25 RAD 0.0078125
+ txt527
+TEXDEF txt528 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.75 0.265469 APEX 0.125 0.75 0.359531 RAD 0.0078125
+ txt528
+TEXDEF txt529 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.75 0.375 RAD 0.03125
+ txt529
+TEXDEF txt530 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.75 0.375 APEX 0.234531 0.75 0.375 RAD 0.0078125
+ txt530
+TEXDEF txt531 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.765469 0.375 APEX 0.125 0.859531 0.375 RAD 0.0078125
+ txt531
+TEXDEF txt532 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.75 0.390469 APEX 0.125 0.75 0.484531 RAD 0.0078125
+ txt532
+TEXDEF txt533 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.75 0.5 RAD 0.03125
+ txt533
+TEXDEF txt534 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.75 0.5 APEX 0.234531 0.75 0.5 RAD 0.0078125
+ txt534
+TEXDEF txt535 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.765469 0.5 APEX 0.125 0.859531 0.5 RAD 0.0078125
+ txt535
+TEXDEF txt536 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.75 0.515469 APEX 0.125 0.75 0.609531 RAD 0.0078125
+ txt536
+TEXDEF txt537 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.75 0.625 RAD 0.03125
+ txt537
+TEXDEF txt538 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.75 0.625 APEX 0.234531 0.75 0.625 RAD 0.0078125
+ txt538
+TEXDEF txt539 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.765469 0.625 APEX 0.125 0.859531 0.625 RAD 0.0078125
+ txt539
+TEXDEF txt540 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.75 0.640469 APEX 0.125 0.75 0.734531 RAD 0.0078125
+ txt540
+TEXDEF txt541 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.75 0.75 RAD 0.03125
+ txt541
+TEXDEF txt542 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.75 0.75 APEX 0.234531 0.75 0.75 RAD 0.0078125
+ txt542
+TEXDEF txt543 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.765469 0.75 APEX 0.125 0.859531 0.75 RAD 0.0078125
+ txt543
+TEXDEF txt544 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.75 0.765469 APEX 0.125 0.75 0.859531 RAD 0.0078125
+ txt544
+TEXDEF txt545 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.75 0.875 RAD 0.03125
+ txt545
+TEXDEF txt546 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.75 0.875 APEX 0.234531 0.75 0.875 RAD 0.0078125
+ txt546
+TEXDEF txt547 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.765469 0.875 APEX 0.125 0.859531 0.875 RAD 0.0078125
+ txt547
+TEXDEF txt548 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.75 0.890469 APEX 0.125 0.75 0.984531 RAD 0.0078125
+ txt548
+TEXDEF txt549 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.75 1 RAD 0.03125
+ txt549
+TEXDEF txt550 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.75 1 APEX 0.234531 0.75 1 RAD 0.0078125
+ txt550
+TEXDEF txt551 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.765469 1 APEX 0.125 0.859531 1 RAD 0.0078125
+ txt551
+TEXDEF txt552 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.875 0 RAD 0.03125
+ txt552
+TEXDEF txt553 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.875 0 APEX 0.234531 0.875 0 RAD 0.0078125
+ txt553
+TEXDEF txt554 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.890469 0 APEX 0.125 0.984531 0 RAD 0.0078125
+ txt554
+TEXDEF txt555 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.875 0.0154687 APEX 0.125 0.875 0.109531 RAD 0.0078125
+ txt555
+TEXDEF txt556 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.875 0.125 RAD 0.03125
+ txt556
+TEXDEF txt557 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.875 0.125 APEX 0.234531 0.875 0.125 RAD 0.0078125
+ txt557
+TEXDEF txt558 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.890469 0.125 APEX 0.125 0.984531 0.125 RAD 0.0078125
+ txt558
+TEXDEF txt559 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.875 0.140469 APEX 0.125 0.875 0.234531 RAD 0.0078125
+ txt559
+TEXDEF txt560 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.875 0.25 RAD 0.03125
+ txt560
+TEXDEF txt561 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.875 0.25 APEX 0.234531 0.875 0.25 RAD 0.0078125
+ txt561
+TEXDEF txt562 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.890469 0.25 APEX 0.125 0.984531 0.25 RAD 0.0078125
+ txt562
+TEXDEF txt563 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.875 0.265469 APEX 0.125 0.875 0.359531 RAD 0.0078125
+ txt563
+TEXDEF txt564 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.875 0.375 RAD 0.03125
+ txt564
+TEXDEF txt565 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.875 0.375 APEX 0.234531 0.875 0.375 RAD 0.0078125
+ txt565
+TEXDEF txt566 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.890469 0.375 APEX 0.125 0.984531 0.375 RAD 0.0078125
+ txt566
+TEXDEF txt567 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.875 0.390469 APEX 0.125 0.875 0.484531 RAD 0.0078125
+ txt567
+TEXDEF txt568 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.875 0.5 RAD 0.03125
+ txt568
+TEXDEF txt569 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.875 0.5 APEX 0.234531 0.875 0.5 RAD 0.0078125
+ txt569
+TEXDEF txt570 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.890469 0.5 APEX 0.125 0.984531 0.5 RAD 0.0078125
+ txt570
+TEXDEF txt571 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.875 0.515469 APEX 0.125 0.875 0.609531 RAD 0.0078125
+ txt571
+TEXDEF txt572 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.875 0.625 RAD 0.03125
+ txt572
+TEXDEF txt573 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.875 0.625 APEX 0.234531 0.875 0.625 RAD 0.0078125
+ txt573
+TEXDEF txt574 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.890469 0.625 APEX 0.125 0.984531 0.625 RAD 0.0078125
+ txt574
+TEXDEF txt575 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.875 0.640469 APEX 0.125 0.875 0.734531 RAD 0.0078125
+ txt575
+TEXDEF txt576 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.875 0.75 RAD 0.03125
+ txt576
+TEXDEF txt577 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.875 0.75 APEX 0.234531 0.875 0.75 RAD 0.0078125
+ txt577
+TEXDEF txt578 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.890469 0.75 APEX 0.125 0.984531 0.75 RAD 0.0078125
+ txt578
+TEXDEF txt579 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.875 0.765469 APEX 0.125 0.875 0.859531 RAD 0.0078125
+ txt579
+TEXDEF txt580 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.875 0.875 RAD 0.03125
+ txt580
+TEXDEF txt581 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.875 0.875 APEX 0.234531 0.875 0.875 RAD 0.0078125
+ txt581
+TEXDEF txt582 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.890469 0.875 APEX 0.125 0.984531 0.875 RAD 0.0078125
+ txt582
+TEXDEF txt583 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.875 0.890469 APEX 0.125 0.875 0.984531 RAD 0.0078125
+ txt583
+TEXDEF txt584 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 0.875 1 RAD 0.03125
+ txt584
+TEXDEF txt585 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 0.875 1 APEX 0.234531 0.875 1 RAD 0.0078125
+ txt585
+TEXDEF txt586 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 0.890469 1 APEX 0.125 0.984531 1 RAD 0.0078125
+ txt586
+TEXDEF txt587 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 1 0 RAD 0.03125
+ txt587
+TEXDEF txt588 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 1 0 APEX 0.234531 1 0 RAD 0.0078125
+ txt588
+TEXDEF txt589 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 1 0.0154687 APEX 0.125 1 0.109531 RAD 0.0078125
+ txt589
+TEXDEF txt590 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 1 0.125 RAD 0.03125
+ txt590
+TEXDEF txt591 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 1 0.125 APEX 0.234531 1 0.125 RAD 0.0078125
+ txt591
+TEXDEF txt592 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 1 0.140469 APEX 0.125 1 0.234531 RAD 0.0078125
+ txt592
+TEXDEF txt593 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 1 0.25 RAD 0.03125
+ txt593
+TEXDEF txt594 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 1 0.25 APEX 0.234531 1 0.25 RAD 0.0078125
+ txt594
+TEXDEF txt595 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 1 0.265469 APEX 0.125 1 0.359531 RAD 0.0078125
+ txt595
+TEXDEF txt596 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 1 0.375 RAD 0.03125
+ txt596
+TEXDEF txt597 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 1 0.375 APEX 0.234531 1 0.375 RAD 0.0078125
+ txt597
+TEXDEF txt598 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 1 0.390469 APEX 0.125 1 0.484531 RAD 0.0078125
+ txt598
+TEXDEF txt599 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 1 0.5 RAD 0.03125
+ txt599
+TEXDEF txt600 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 1 0.5 APEX 0.234531 1 0.5 RAD 0.0078125
+ txt600
+TEXDEF txt601 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 1 0.515469 APEX 0.125 1 0.609531 RAD 0.0078125
+ txt601
+TEXDEF txt602 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 1 0.625 RAD 0.03125
+ txt602
+TEXDEF txt603 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 1 0.625 APEX 0.234531 1 0.625 RAD 0.0078125
+ txt603
+TEXDEF txt604 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 1 0.640469 APEX 0.125 1 0.734531 RAD 0.0078125
+ txt604
+TEXDEF txt605 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 1 0.75 RAD 0.03125
+ txt605
+TEXDEF txt606 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 1 0.75 APEX 0.234531 1 0.75 RAD 0.0078125
+ txt606
+TEXDEF txt607 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 1 0.765469 APEX 0.125 1 0.859531 RAD 0.0078125
+ txt607
+TEXDEF txt608 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 1 0.875 RAD 0.03125
+ txt608
+TEXDEF txt609 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 1 0.875 APEX 0.234531 1 0.875 RAD 0.0078125
+ txt609
+TEXDEF txt610 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.125 1 0.890469 APEX 0.125 1 0.984531 RAD 0.0078125
+ txt610
+TEXDEF txt611 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.125 1 1 RAD 0.03125
+ txt611
+TEXDEF txt612 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.140469 1 1 APEX 0.234531 1 1 RAD 0.0078125
+ txt612
+TEXDEF txt613 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0 0 RAD 0.03125
+ txt613
+TEXDEF txt614 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0 0 APEX 0.359531 0 0 RAD 0.0078125
+ txt614
+TEXDEF txt615 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.0154687 0 APEX 0.25 0.109531 0 RAD 0.0078125
+ txt615
+TEXDEF txt616 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0 0.0154687 APEX 0.25 0 0.109531 RAD 0.0078125
+ txt616
+TEXDEF txt617 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0 0.125 RAD 0.03125
+ txt617
+TEXDEF txt618 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0 0.125 APEX 0.359531 0 0.125 RAD 0.0078125
+ txt618
+TEXDEF txt619 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.0154687 0.125 APEX 0.25 0.109531 0.125 RAD 0.0078125
+ txt619
+TEXDEF txt620 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0 0.140469 APEX 0.25 0 0.234531 RAD 0.0078125
+ txt620
+TEXDEF txt621 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0 0.25 RAD 0.03125
+ txt621
+TEXDEF txt622 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0 0.25 APEX 0.359531 0 0.25 RAD 0.0078125
+ txt622
+TEXDEF txt623 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.0154687 0.25 APEX 0.25 0.109531 0.25 RAD 0.0078125
+ txt623
+TEXDEF txt624 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0 0.265469 APEX 0.25 0 0.359531 RAD 0.0078125
+ txt624
+TEXDEF txt625 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0 0.375 RAD 0.03125
+ txt625
+TEXDEF txt626 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0 0.375 APEX 0.359531 0 0.375 RAD 0.0078125
+ txt626
+TEXDEF txt627 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.0154687 0.375 APEX 0.25 0.109531 0.375 RAD 0.0078125
+ txt627
+TEXDEF txt628 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0 0.390469 APEX 0.25 0 0.484531 RAD 0.0078125
+ txt628
+TEXDEF txt629 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0 0.5 RAD 0.03125
+ txt629
+TEXDEF txt630 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0 0.5 APEX 0.359531 0 0.5 RAD 0.0078125
+ txt630
+TEXDEF txt631 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.0154687 0.5 APEX 0.25 0.109531 0.5 RAD 0.0078125
+ txt631
+TEXDEF txt632 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0 0.515469 APEX 0.25 0 0.609531 RAD 0.0078125
+ txt632
+TEXDEF txt633 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0 0.625 RAD 0.03125
+ txt633
+TEXDEF txt634 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0 0.625 APEX 0.359531 0 0.625 RAD 0.0078125
+ txt634
+TEXDEF txt635 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.0154687 0.625 APEX 0.25 0.109531 0.625 RAD 0.0078125
+ txt635
+TEXDEF txt636 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0 0.640469 APEX 0.25 0 0.734531 RAD 0.0078125
+ txt636
+TEXDEF txt637 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0 0.75 RAD 0.03125
+ txt637
+TEXDEF txt638 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0 0.75 APEX 0.359531 0 0.75 RAD 0.0078125
+ txt638
+TEXDEF txt639 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.0154687 0.75 APEX 0.25 0.109531 0.75 RAD 0.0078125
+ txt639
+TEXDEF txt640 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0 0.765469 APEX 0.25 0 0.859531 RAD 0.0078125
+ txt640
+TEXDEF txt641 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0 0.875 RAD 0.03125
+ txt641
+TEXDEF txt642 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0 0.875 APEX 0.359531 0 0.875 RAD 0.0078125
+ txt642
+TEXDEF txt643 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.0154687 0.875 APEX 0.25 0.109531 0.875 RAD 0.0078125
+ txt643
+TEXDEF txt644 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0 0.890469 APEX 0.25 0 0.984531 RAD 0.0078125
+ txt644
+TEXDEF txt645 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0 1 RAD 0.03125
+ txt645
+TEXDEF txt646 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0 1 APEX 0.359531 0 1 RAD 0.0078125
+ txt646
+TEXDEF txt647 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.0154687 1 APEX 0.25 0.109531 1 RAD 0.0078125
+ txt647
+TEXDEF txt648 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.125 0 RAD 0.03125
+ txt648
+TEXDEF txt649 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.125 0 APEX 0.359531 0.125 0 RAD 0.0078125
+ txt649
+TEXDEF txt650 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.140469 0 APEX 0.25 0.234531 0 RAD 0.0078125
+ txt650
+TEXDEF txt651 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.125 0.0154687 APEX 0.25 0.125 0.109531 RAD 0.0078125
+ txt651
+TEXDEF txt652 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.125 0.125 RAD 0.03125
+ txt652
+TEXDEF txt653 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.125 0.125 APEX 0.359531 0.125 0.125 RAD 0.0078125
+ txt653
+TEXDEF txt654 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.140469 0.125 APEX 0.25 0.234531 0.125 RAD 0.0078125
+ txt654
+TEXDEF txt655 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.125 0.140469 APEX 0.25 0.125 0.234531 RAD 0.0078125
+ txt655
+TEXDEF txt656 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.125 0.25 RAD 0.03125
+ txt656
+TEXDEF txt657 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.125 0.25 APEX 0.359531 0.125 0.25 RAD 0.0078125
+ txt657
+TEXDEF txt658 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.140469 0.25 APEX 0.25 0.234531 0.25 RAD 0.0078125
+ txt658
+TEXDEF txt659 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.125 0.265469 APEX 0.25 0.125 0.359531 RAD 0.0078125
+ txt659
+TEXDEF txt660 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.125 0.375 RAD 0.03125
+ txt660
+TEXDEF txt661 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.125 0.375 APEX 0.359531 0.125 0.375 RAD 0.0078125
+ txt661
+TEXDEF txt662 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.140469 0.375 APEX 0.25 0.234531 0.375 RAD 0.0078125
+ txt662
+TEXDEF txt663 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.125 0.390469 APEX 0.25 0.125 0.484531 RAD 0.0078125
+ txt663
+TEXDEF txt664 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.125 0.5 RAD 0.03125
+ txt664
+TEXDEF txt665 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.125 0.5 APEX 0.359531 0.125 0.5 RAD 0.0078125
+ txt665
+TEXDEF txt666 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.140469 0.5 APEX 0.25 0.234531 0.5 RAD 0.0078125
+ txt666
+TEXDEF txt667 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.125 0.515469 APEX 0.25 0.125 0.609531 RAD 0.0078125
+ txt667
+TEXDEF txt668 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.125 0.625 RAD 0.03125
+ txt668
+TEXDEF txt669 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.125 0.625 APEX 0.359531 0.125 0.625 RAD 0.0078125
+ txt669
+TEXDEF txt670 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.140469 0.625 APEX 0.25 0.234531 0.625 RAD 0.0078125
+ txt670
+TEXDEF txt671 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.125 0.640469 APEX 0.25 0.125 0.734531 RAD 0.0078125
+ txt671
+TEXDEF txt672 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.125 0.75 RAD 0.03125
+ txt672
+TEXDEF txt673 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.125 0.75 APEX 0.359531 0.125 0.75 RAD 0.0078125
+ txt673
+TEXDEF txt674 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.140469 0.75 APEX 0.25 0.234531 0.75 RAD 0.0078125
+ txt674
+TEXDEF txt675 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.125 0.765469 APEX 0.25 0.125 0.859531 RAD 0.0078125
+ txt675
+TEXDEF txt676 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.125 0.875 RAD 0.03125
+ txt676
+TEXDEF txt677 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.125 0.875 APEX 0.359531 0.125 0.875 RAD 0.0078125
+ txt677
+TEXDEF txt678 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.140469 0.875 APEX 0.25 0.234531 0.875 RAD 0.0078125
+ txt678
+TEXDEF txt679 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.125 0.890469 APEX 0.25 0.125 0.984531 RAD 0.0078125
+ txt679
+TEXDEF txt680 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.125 1 RAD 0.03125
+ txt680
+TEXDEF txt681 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.125 1 APEX 0.359531 0.125 1 RAD 0.0078125
+ txt681
+TEXDEF txt682 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.140469 1 APEX 0.25 0.234531 1 RAD 0.0078125
+ txt682
+TEXDEF txt683 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.25 0 RAD 0.03125
+ txt683
+TEXDEF txt684 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.25 0 APEX 0.359531 0.25 0 RAD 0.0078125
+ txt684
+TEXDEF txt685 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.265469 0 APEX 0.25 0.359531 0 RAD 0.0078125
+ txt685
+TEXDEF txt686 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.25 0.0154687 APEX 0.25 0.25 0.109531 RAD 0.0078125
+ txt686
+TEXDEF txt687 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.25 0.125 RAD 0.03125
+ txt687
+TEXDEF txt688 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.25 0.125 APEX 0.359531 0.25 0.125 RAD 0.0078125
+ txt688
+TEXDEF txt689 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.265469 0.125 APEX 0.25 0.359531 0.125 RAD 0.0078125
+ txt689
+TEXDEF txt690 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.25 0.140469 APEX 0.25 0.25 0.234531 RAD 0.0078125
+ txt690
+TEXDEF txt691 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.25 0.25 RAD 0.03125
+ txt691
+TEXDEF txt692 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.25 0.25 APEX 0.359531 0.25 0.25 RAD 0.0078125
+ txt692
+TEXDEF txt693 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.265469 0.25 APEX 0.25 0.359531 0.25 RAD 0.0078125
+ txt693
+TEXDEF txt694 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.25 0.265469 APEX 0.25 0.25 0.359531 RAD 0.0078125
+ txt694
+TEXDEF txt695 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.25 0.375 RAD 0.03125
+ txt695
+TEXDEF txt696 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.25 0.375 APEX 0.359531 0.25 0.375 RAD 0.0078125
+ txt696
+TEXDEF txt697 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.265469 0.375 APEX 0.25 0.359531 0.375 RAD 0.0078125
+ txt697
+TEXDEF txt698 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.25 0.390469 APEX 0.25 0.25 0.484531 RAD 0.0078125
+ txt698
+TEXDEF txt699 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.25 0.5 RAD 0.03125
+ txt699
+TEXDEF txt700 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.25 0.5 APEX 0.359531 0.25 0.5 RAD 0.0078125
+ txt700
+TEXDEF txt701 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.265469 0.5 APEX 0.25 0.359531 0.5 RAD 0.0078125
+ txt701
+TEXDEF txt702 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.25 0.515469 APEX 0.25 0.25 0.609531 RAD 0.0078125
+ txt702
+TEXDEF txt703 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.25 0.625 RAD 0.03125
+ txt703
+TEXDEF txt704 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.25 0.625 APEX 0.359531 0.25 0.625 RAD 0.0078125
+ txt704
+TEXDEF txt705 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.265469 0.625 APEX 0.25 0.359531 0.625 RAD 0.0078125
+ txt705
+TEXDEF txt706 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.25 0.640469 APEX 0.25 0.25 0.734531 RAD 0.0078125
+ txt706
+TEXDEF txt707 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.25 0.75 RAD 0.03125
+ txt707
+TEXDEF txt708 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.25 0.75 APEX 0.359531 0.25 0.75 RAD 0.0078125
+ txt708
+TEXDEF txt709 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.265469 0.75 APEX 0.25 0.359531 0.75 RAD 0.0078125
+ txt709
+TEXDEF txt710 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.25 0.765469 APEX 0.25 0.25 0.859531 RAD 0.0078125
+ txt710
+TEXDEF txt711 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.25 0.875 RAD 0.03125
+ txt711
+TEXDEF txt712 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.25 0.875 APEX 0.359531 0.25 0.875 RAD 0.0078125
+ txt712
+TEXDEF txt713 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.265469 0.875 APEX 0.25 0.359531 0.875 RAD 0.0078125
+ txt713
+TEXDEF txt714 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.25 0.890469 APEX 0.25 0.25 0.984531 RAD 0.0078125
+ txt714
+TEXDEF txt715 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.25 1 RAD 0.03125
+ txt715
+TEXDEF txt716 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.25 1 APEX 0.359531 0.25 1 RAD 0.0078125
+ txt716
+TEXDEF txt717 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.265469 1 APEX 0.25 0.359531 1 RAD 0.0078125
+ txt717
+TEXDEF txt718 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.375 0 RAD 0.03125
+ txt718
+TEXDEF txt719 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.375 0 APEX 0.359531 0.375 0 RAD 0.0078125
+ txt719
+TEXDEF txt720 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.390469 0 APEX 0.25 0.484531 0 RAD 0.0078125
+ txt720
+TEXDEF txt721 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.375 0.0154687 APEX 0.25 0.375 0.109531 RAD 0.0078125
+ txt721
+TEXDEF txt722 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.375 0.125 RAD 0.03125
+ txt722
+TEXDEF txt723 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.375 0.125 APEX 0.359531 0.375 0.125 RAD 0.0078125
+ txt723
+TEXDEF txt724 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.390469 0.125 APEX 0.25 0.484531 0.125 RAD 0.0078125
+ txt724
+TEXDEF txt725 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.375 0.140469 APEX 0.25 0.375 0.234531 RAD 0.0078125
+ txt725
+TEXDEF txt726 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.375 0.25 RAD 0.03125
+ txt726
+TEXDEF txt727 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.375 0.25 APEX 0.359531 0.375 0.25 RAD 0.0078125
+ txt727
+TEXDEF txt728 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.390469 0.25 APEX 0.25 0.484531 0.25 RAD 0.0078125
+ txt728
+TEXDEF txt729 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.375 0.265469 APEX 0.25 0.375 0.359531 RAD 0.0078125
+ txt729
+TEXDEF txt730 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.375 0.375 RAD 0.03125
+ txt730
+TEXDEF txt731 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.375 0.375 APEX 0.359531 0.375 0.375 RAD 0.0078125
+ txt731
+TEXDEF txt732 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.390469 0.375 APEX 0.25 0.484531 0.375 RAD 0.0078125
+ txt732
+TEXDEF txt733 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.375 0.390469 APEX 0.25 0.375 0.484531 RAD 0.0078125
+ txt733
+TEXDEF txt734 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.375 0.5 RAD 0.03125
+ txt734
+TEXDEF txt735 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.375 0.5 APEX 0.359531 0.375 0.5 RAD 0.0078125
+ txt735
+TEXDEF txt736 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.390469 0.5 APEX 0.25 0.484531 0.5 RAD 0.0078125
+ txt736
+TEXDEF txt737 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.375 0.515469 APEX 0.25 0.375 0.609531 RAD 0.0078125
+ txt737
+TEXDEF txt738 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.375 0.625 RAD 0.03125
+ txt738
+TEXDEF txt739 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.375 0.625 APEX 0.359531 0.375 0.625 RAD 0.0078125
+ txt739
+TEXDEF txt740 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.390469 0.625 APEX 0.25 0.484531 0.625 RAD 0.0078125
+ txt740
+TEXDEF txt741 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.375 0.640469 APEX 0.25 0.375 0.734531 RAD 0.0078125
+ txt741
+TEXDEF txt742 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.375 0.75 RAD 0.03125
+ txt742
+TEXDEF txt743 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.375 0.75 APEX 0.359531 0.375 0.75 RAD 0.0078125
+ txt743
+TEXDEF txt744 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.390469 0.75 APEX 0.25 0.484531 0.75 RAD 0.0078125
+ txt744
+TEXDEF txt745 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.375 0.765469 APEX 0.25 0.375 0.859531 RAD 0.0078125
+ txt745
+TEXDEF txt746 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.375 0.875 RAD 0.03125
+ txt746
+TEXDEF txt747 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.375 0.875 APEX 0.359531 0.375 0.875 RAD 0.0078125
+ txt747
+TEXDEF txt748 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.390469 0.875 APEX 0.25 0.484531 0.875 RAD 0.0078125
+ txt748
+TEXDEF txt749 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.375 0.890469 APEX 0.25 0.375 0.984531 RAD 0.0078125
+ txt749
+TEXDEF txt750 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.375 1 RAD 0.03125
+ txt750
+TEXDEF txt751 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.375 1 APEX 0.359531 0.375 1 RAD 0.0078125
+ txt751
+TEXDEF txt752 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.390469 1 APEX 0.25 0.484531 1 RAD 0.0078125
+ txt752
+TEXDEF txt753 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.5 0 RAD 0.03125
+ txt753
+TEXDEF txt754 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.5 0 APEX 0.359531 0.5 0 RAD 0.0078125
+ txt754
+TEXDEF txt755 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.515469 0 APEX 0.25 0.609531 0 RAD 0.0078125
+ txt755
+TEXDEF txt756 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.5 0.0154687 APEX 0.25 0.5 0.109531 RAD 0.0078125
+ txt756
+TEXDEF txt757 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.5 0.125 RAD 0.03125
+ txt757
+TEXDEF txt758 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.5 0.125 APEX 0.359531 0.5 0.125 RAD 0.0078125
+ txt758
+TEXDEF txt759 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.515469 0.125 APEX 0.25 0.609531 0.125 RAD 0.0078125
+ txt759
+TEXDEF txt760 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.5 0.140469 APEX 0.25 0.5 0.234531 RAD 0.0078125
+ txt760
+TEXDEF txt761 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.5 0.25 RAD 0.03125
+ txt761
+TEXDEF txt762 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.5 0.25 APEX 0.359531 0.5 0.25 RAD 0.0078125
+ txt762
+TEXDEF txt763 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.515469 0.25 APEX 0.25 0.609531 0.25 RAD 0.0078125
+ txt763
+TEXDEF txt764 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.5 0.265469 APEX 0.25 0.5 0.359531 RAD 0.0078125
+ txt764
+TEXDEF txt765 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.5 0.375 RAD 0.03125
+ txt765
+TEXDEF txt766 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.5 0.375 APEX 0.359531 0.5 0.375 RAD 0.0078125
+ txt766
+TEXDEF txt767 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.515469 0.375 APEX 0.25 0.609531 0.375 RAD 0.0078125
+ txt767
+TEXDEF txt768 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.5 0.390469 APEX 0.25 0.5 0.484531 RAD 0.0078125
+ txt768
+TEXDEF txt769 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.5 0.5 RAD 0.03125
+ txt769
+TEXDEF txt770 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.5 0.5 APEX 0.359531 0.5 0.5 RAD 0.0078125
+ txt770
+TEXDEF txt771 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.515469 0.5 APEX 0.25 0.609531 0.5 RAD 0.0078125
+ txt771
+TEXDEF txt772 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.5 0.515469 APEX 0.25 0.5 0.609531 RAD 0.0078125
+ txt772
+TEXDEF txt773 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.5 0.625 RAD 0.03125
+ txt773
+TEXDEF txt774 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.5 0.625 APEX 0.359531 0.5 0.625 RAD 0.0078125
+ txt774
+TEXDEF txt775 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.515469 0.625 APEX 0.25 0.609531 0.625 RAD 0.0078125
+ txt775
+TEXDEF txt776 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.5 0.640469 APEX 0.25 0.5 0.734531 RAD 0.0078125
+ txt776
+TEXDEF txt777 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.5 0.75 RAD 0.03125
+ txt777
+TEXDEF txt778 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.5 0.75 APEX 0.359531 0.5 0.75 RAD 0.0078125
+ txt778
+TEXDEF txt779 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.515469 0.75 APEX 0.25 0.609531 0.75 RAD 0.0078125
+ txt779
+TEXDEF txt780 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.5 0.765469 APEX 0.25 0.5 0.859531 RAD 0.0078125
+ txt780
+TEXDEF txt781 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.5 0.875 RAD 0.03125
+ txt781
+TEXDEF txt782 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.5 0.875 APEX 0.359531 0.5 0.875 RAD 0.0078125
+ txt782
+TEXDEF txt783 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.515469 0.875 APEX 0.25 0.609531 0.875 RAD 0.0078125
+ txt783
+TEXDEF txt784 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.5 0.890469 APEX 0.25 0.5 0.984531 RAD 0.0078125
+ txt784
+TEXDEF txt785 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.5 1 RAD 0.03125
+ txt785
+TEXDEF txt786 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.5 1 APEX 0.359531 0.5 1 RAD 0.0078125
+ txt786
+TEXDEF txt787 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.515469 1 APEX 0.25 0.609531 1 RAD 0.0078125
+ txt787
+TEXDEF txt788 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.625 0 RAD 0.03125
+ txt788
+TEXDEF txt789 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.625 0 APEX 0.359531 0.625 0 RAD 0.0078125
+ txt789
+TEXDEF txt790 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.640469 0 APEX 0.25 0.734531 0 RAD 0.0078125
+ txt790
+TEXDEF txt791 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.625 0.0154687 APEX 0.25 0.625 0.109531 RAD 0.0078125
+ txt791
+TEXDEF txt792 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.625 0.125 RAD 0.03125
+ txt792
+TEXDEF txt793 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.625 0.125 APEX 0.359531 0.625 0.125 RAD 0.0078125
+ txt793
+TEXDEF txt794 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.640469 0.125 APEX 0.25 0.734531 0.125 RAD 0.0078125
+ txt794
+TEXDEF txt795 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.625 0.140469 APEX 0.25 0.625 0.234531 RAD 0.0078125
+ txt795
+TEXDEF txt796 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.625 0.25 RAD 0.03125
+ txt796
+TEXDEF txt797 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.625 0.25 APEX 0.359531 0.625 0.25 RAD 0.0078125
+ txt797
+TEXDEF txt798 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.640469 0.25 APEX 0.25 0.734531 0.25 RAD 0.0078125
+ txt798
+TEXDEF txt799 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.625 0.265469 APEX 0.25 0.625 0.359531 RAD 0.0078125
+ txt799
+TEXDEF txt800 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.625 0.375 RAD 0.03125
+ txt800
+TEXDEF txt801 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.625 0.375 APEX 0.359531 0.625 0.375 RAD 0.0078125
+ txt801
+TEXDEF txt802 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.640469 0.375 APEX 0.25 0.734531 0.375 RAD 0.0078125
+ txt802
+TEXDEF txt803 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.625 0.390469 APEX 0.25 0.625 0.484531 RAD 0.0078125
+ txt803
+TEXDEF txt804 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.625 0.5 RAD 0.03125
+ txt804
+TEXDEF txt805 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.625 0.5 APEX 0.359531 0.625 0.5 RAD 0.0078125
+ txt805
+TEXDEF txt806 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.640469 0.5 APEX 0.25 0.734531 0.5 RAD 0.0078125
+ txt806
+TEXDEF txt807 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.625 0.515469 APEX 0.25 0.625 0.609531 RAD 0.0078125
+ txt807
+TEXDEF txt808 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.625 0.625 RAD 0.03125
+ txt808
+TEXDEF txt809 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.625 0.625 APEX 0.359531 0.625 0.625 RAD 0.0078125
+ txt809
+TEXDEF txt810 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.640469 0.625 APEX 0.25 0.734531 0.625 RAD 0.0078125
+ txt810
+TEXDEF txt811 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.625 0.640469 APEX 0.25 0.625 0.734531 RAD 0.0078125
+ txt811
+TEXDEF txt812 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.625 0.75 RAD 0.03125
+ txt812
+TEXDEF txt813 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.625 0.75 APEX 0.359531 0.625 0.75 RAD 0.0078125
+ txt813
+TEXDEF txt814 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.640469 0.75 APEX 0.25 0.734531 0.75 RAD 0.0078125
+ txt814
+TEXDEF txt815 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.625 0.765469 APEX 0.25 0.625 0.859531 RAD 0.0078125
+ txt815
+TEXDEF txt816 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.625 0.875 RAD 0.03125
+ txt816
+TEXDEF txt817 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.625 0.875 APEX 0.359531 0.625 0.875 RAD 0.0078125
+ txt817
+TEXDEF txt818 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.640469 0.875 APEX 0.25 0.734531 0.875 RAD 0.0078125
+ txt818
+TEXDEF txt819 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.625 0.890469 APEX 0.25 0.625 0.984531 RAD 0.0078125
+ txt819
+TEXDEF txt820 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.625 1 RAD 0.03125
+ txt820
+TEXDEF txt821 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.625 1 APEX 0.359531 0.625 1 RAD 0.0078125
+ txt821
+TEXDEF txt822 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.640469 1 APEX 0.25 0.734531 1 RAD 0.0078125
+ txt822
+TEXDEF txt823 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.75 0 RAD 0.03125
+ txt823
+TEXDEF txt824 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.75 0 APEX 0.359531 0.75 0 RAD 0.0078125
+ txt824
+TEXDEF txt825 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.765469 0 APEX 0.25 0.859531 0 RAD 0.0078125
+ txt825
+TEXDEF txt826 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.75 0.0154687 APEX 0.25 0.75 0.109531 RAD 0.0078125
+ txt826
+TEXDEF txt827 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.75 0.125 RAD 0.03125
+ txt827
+TEXDEF txt828 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.75 0.125 APEX 0.359531 0.75 0.125 RAD 0.0078125
+ txt828
+TEXDEF txt829 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.765469 0.125 APEX 0.25 0.859531 0.125 RAD 0.0078125
+ txt829
+TEXDEF txt830 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.75 0.140469 APEX 0.25 0.75 0.234531 RAD 0.0078125
+ txt830
+TEXDEF txt831 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.75 0.25 RAD 0.03125
+ txt831
+TEXDEF txt832 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.75 0.25 APEX 0.359531 0.75 0.25 RAD 0.0078125
+ txt832
+TEXDEF txt833 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.765469 0.25 APEX 0.25 0.859531 0.25 RAD 0.0078125
+ txt833
+TEXDEF txt834 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.75 0.265469 APEX 0.25 0.75 0.359531 RAD 0.0078125
+ txt834
+TEXDEF txt835 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.75 0.375 RAD 0.03125
+ txt835
+TEXDEF txt836 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.75 0.375 APEX 0.359531 0.75 0.375 RAD 0.0078125
+ txt836
+TEXDEF txt837 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.765469 0.375 APEX 0.25 0.859531 0.375 RAD 0.0078125
+ txt837
+TEXDEF txt838 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.75 0.390469 APEX 0.25 0.75 0.484531 RAD 0.0078125
+ txt838
+TEXDEF txt839 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.75 0.5 RAD 0.03125
+ txt839
+TEXDEF txt840 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.75 0.5 APEX 0.359531 0.75 0.5 RAD 0.0078125
+ txt840
+TEXDEF txt841 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.765469 0.5 APEX 0.25 0.859531 0.5 RAD 0.0078125
+ txt841
+TEXDEF txt842 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.75 0.515469 APEX 0.25 0.75 0.609531 RAD 0.0078125
+ txt842
+TEXDEF txt843 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.75 0.625 RAD 0.03125
+ txt843
+TEXDEF txt844 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.75 0.625 APEX 0.359531 0.75 0.625 RAD 0.0078125
+ txt844
+TEXDEF txt845 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.765469 0.625 APEX 0.25 0.859531 0.625 RAD 0.0078125
+ txt845
+TEXDEF txt846 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.75 0.640469 APEX 0.25 0.75 0.734531 RAD 0.0078125
+ txt846
+TEXDEF txt847 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.75 0.75 RAD 0.03125
+ txt847
+TEXDEF txt848 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.75 0.75 APEX 0.359531 0.75 0.75 RAD 0.0078125
+ txt848
+TEXDEF txt849 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.765469 0.75 APEX 0.25 0.859531 0.75 RAD 0.0078125
+ txt849
+TEXDEF txt850 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.75 0.765469 APEX 0.25 0.75 0.859531 RAD 0.0078125
+ txt850
+TEXDEF txt851 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.75 0.875 RAD 0.03125
+ txt851
+TEXDEF txt852 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.75 0.875 APEX 0.359531 0.75 0.875 RAD 0.0078125
+ txt852
+TEXDEF txt853 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.765469 0.875 APEX 0.25 0.859531 0.875 RAD 0.0078125
+ txt853
+TEXDEF txt854 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.75 0.890469 APEX 0.25 0.75 0.984531 RAD 0.0078125
+ txt854
+TEXDEF txt855 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.75 1 RAD 0.03125
+ txt855
+TEXDEF txt856 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.75 1 APEX 0.359531 0.75 1 RAD 0.0078125
+ txt856
+TEXDEF txt857 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.765469 1 APEX 0.25 0.859531 1 RAD 0.0078125
+ txt857
+TEXDEF txt858 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.875 0 RAD 0.03125
+ txt858
+TEXDEF txt859 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.875 0 APEX 0.359531 0.875 0 RAD 0.0078125
+ txt859
+TEXDEF txt860 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.890469 0 APEX 0.25 0.984531 0 RAD 0.0078125
+ txt860
+TEXDEF txt861 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.875 0.0154687 APEX 0.25 0.875 0.109531 RAD 0.0078125
+ txt861
+TEXDEF txt862 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.875 0.125 RAD 0.03125
+ txt862
+TEXDEF txt863 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.875 0.125 APEX 0.359531 0.875 0.125 RAD 0.0078125
+ txt863
+TEXDEF txt864 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.890469 0.125 APEX 0.25 0.984531 0.125 RAD 0.0078125
+ txt864
+TEXDEF txt865 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.875 0.140469 APEX 0.25 0.875 0.234531 RAD 0.0078125
+ txt865
+TEXDEF txt866 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.875 0.25 RAD 0.03125
+ txt866
+TEXDEF txt867 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.875 0.25 APEX 0.359531 0.875 0.25 RAD 0.0078125
+ txt867
+TEXDEF txt868 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.890469 0.25 APEX 0.25 0.984531 0.25 RAD 0.0078125
+ txt868
+TEXDEF txt869 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.875 0.265469 APEX 0.25 0.875 0.359531 RAD 0.0078125
+ txt869
+TEXDEF txt870 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.875 0.375 RAD 0.03125
+ txt870
+TEXDEF txt871 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.875 0.375 APEX 0.359531 0.875 0.375 RAD 0.0078125
+ txt871
+TEXDEF txt872 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.890469 0.375 APEX 0.25 0.984531 0.375 RAD 0.0078125
+ txt872
+TEXDEF txt873 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.875 0.390469 APEX 0.25 0.875 0.484531 RAD 0.0078125
+ txt873
+TEXDEF txt874 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.875 0.5 RAD 0.03125
+ txt874
+TEXDEF txt875 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.875 0.5 APEX 0.359531 0.875 0.5 RAD 0.0078125
+ txt875
+TEXDEF txt876 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.890469 0.5 APEX 0.25 0.984531 0.5 RAD 0.0078125
+ txt876
+TEXDEF txt877 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.875 0.515469 APEX 0.25 0.875 0.609531 RAD 0.0078125
+ txt877
+TEXDEF txt878 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.875 0.625 RAD 0.03125
+ txt878
+TEXDEF txt879 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.875 0.625 APEX 0.359531 0.875 0.625 RAD 0.0078125
+ txt879
+TEXDEF txt880 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.890469 0.625 APEX 0.25 0.984531 0.625 RAD 0.0078125
+ txt880
+TEXDEF txt881 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.875 0.640469 APEX 0.25 0.875 0.734531 RAD 0.0078125
+ txt881
+TEXDEF txt882 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.875 0.75 RAD 0.03125
+ txt882
+TEXDEF txt883 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.875 0.75 APEX 0.359531 0.875 0.75 RAD 0.0078125
+ txt883
+TEXDEF txt884 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.890469 0.75 APEX 0.25 0.984531 0.75 RAD 0.0078125
+ txt884
+TEXDEF txt885 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.875 0.765469 APEX 0.25 0.875 0.859531 RAD 0.0078125
+ txt885
+TEXDEF txt886 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.875 0.875 RAD 0.03125
+ txt886
+TEXDEF txt887 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.875 0.875 APEX 0.359531 0.875 0.875 RAD 0.0078125
+ txt887
+TEXDEF txt888 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.890469 0.875 APEX 0.25 0.984531 0.875 RAD 0.0078125
+ txt888
+TEXDEF txt889 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.875 0.890469 APEX 0.25 0.875 0.984531 RAD 0.0078125
+ txt889
+TEXDEF txt890 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 0.875 1 RAD 0.03125
+ txt890
+TEXDEF txt891 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 0.875 1 APEX 0.359531 0.875 1 RAD 0.0078125
+ txt891
+TEXDEF txt892 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 0.890469 1 APEX 0.25 0.984531 1 RAD 0.0078125
+ txt892
+TEXDEF txt893 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 1 0 RAD 0.03125
+ txt893
+TEXDEF txt894 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 1 0 APEX 0.359531 1 0 RAD 0.0078125
+ txt894
+TEXDEF txt895 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 1 0.0154687 APEX 0.25 1 0.109531 RAD 0.0078125
+ txt895
+TEXDEF txt896 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 1 0.125 RAD 0.03125
+ txt896
+TEXDEF txt897 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 1 0.125 APEX 0.359531 1 0.125 RAD 0.0078125
+ txt897
+TEXDEF txt898 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 1 0.140469 APEX 0.25 1 0.234531 RAD 0.0078125
+ txt898
+TEXDEF txt899 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 1 0.25 RAD 0.03125
+ txt899
+TEXDEF txt900 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 1 0.25 APEX 0.359531 1 0.25 RAD 0.0078125
+ txt900
+TEXDEF txt901 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 1 0.265469 APEX 0.25 1 0.359531 RAD 0.0078125
+ txt901
+TEXDEF txt902 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 1 0.375 RAD 0.03125
+ txt902
+TEXDEF txt903 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 1 0.375 APEX 0.359531 1 0.375 RAD 0.0078125
+ txt903
+TEXDEF txt904 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 1 0.390469 APEX 0.25 1 0.484531 RAD 0.0078125
+ txt904
+TEXDEF txt905 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 1 0.5 RAD 0.03125
+ txt905
+TEXDEF txt906 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 1 0.5 APEX 0.359531 1 0.5 RAD 0.0078125
+ txt906
+TEXDEF txt907 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 1 0.515469 APEX 0.25 1 0.609531 RAD 0.0078125
+ txt907
+TEXDEF txt908 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 1 0.625 RAD 0.03125
+ txt908
+TEXDEF txt909 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 1 0.625 APEX 0.359531 1 0.625 RAD 0.0078125
+ txt909
+TEXDEF txt910 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 1 0.640469 APEX 0.25 1 0.734531 RAD 0.0078125
+ txt910
+TEXDEF txt911 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 1 0.75 RAD 0.03125
+ txt911
+TEXDEF txt912 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 1 0.75 APEX 0.359531 1 0.75 RAD 0.0078125
+ txt912
+TEXDEF txt913 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 1 0.765469 APEX 0.25 1 0.859531 RAD 0.0078125
+ txt913
+TEXDEF txt914 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 1 0.875 RAD 0.03125
+ txt914
+TEXDEF txt915 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 1 0.875 APEX 0.359531 1 0.875 RAD 0.0078125
+ txt915
+TEXDEF txt916 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.25 1 0.890469 APEX 0.25 1 0.984531 RAD 0.0078125
+ txt916
+TEXDEF txt917 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.25 1 1 RAD 0.03125
+ txt917
+TEXDEF txt918 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.265469 1 1 APEX 0.359531 1 1 RAD 0.0078125
+ txt918
+TEXDEF txt919 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0 0 RAD 0.03125
+ txt919
+TEXDEF txt920 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0 0 APEX 0.484531 0 0 RAD 0.0078125
+ txt920
+TEXDEF txt921 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.0154687 0 APEX 0.375 0.109531 0 RAD 0.0078125
+ txt921
+TEXDEF txt922 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0 0.0154687 APEX 0.375 0 0.109531 RAD 0.0078125
+ txt922
+TEXDEF txt923 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0 0.125 RAD 0.03125
+ txt923
+TEXDEF txt924 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0 0.125 APEX 0.484531 0 0.125 RAD 0.0078125
+ txt924
+TEXDEF txt925 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.0154687 0.125 APEX 0.375 0.109531 0.125 RAD 0.0078125
+ txt925
+TEXDEF txt926 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0 0.140469 APEX 0.375 0 0.234531 RAD 0.0078125
+ txt926
+TEXDEF txt927 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0 0.25 RAD 0.03125
+ txt927
+TEXDEF txt928 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0 0.25 APEX 0.484531 0 0.25 RAD 0.0078125
+ txt928
+TEXDEF txt929 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.0154687 0.25 APEX 0.375 0.109531 0.25 RAD 0.0078125
+ txt929
+TEXDEF txt930 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0 0.265469 APEX 0.375 0 0.359531 RAD 0.0078125
+ txt930
+TEXDEF txt931 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0 0.375 RAD 0.03125
+ txt931
+TEXDEF txt932 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0 0.375 APEX 0.484531 0 0.375 RAD 0.0078125
+ txt932
+TEXDEF txt933 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.0154687 0.375 APEX 0.375 0.109531 0.375 RAD 0.0078125
+ txt933
+TEXDEF txt934 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0 0.390469 APEX 0.375 0 0.484531 RAD 0.0078125
+ txt934
+TEXDEF txt935 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0 0.5 RAD 0.03125
+ txt935
+TEXDEF txt936 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0 0.5 APEX 0.484531 0 0.5 RAD 0.0078125
+ txt936
+TEXDEF txt937 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.0154687 0.5 APEX 0.375 0.109531 0.5 RAD 0.0078125
+ txt937
+TEXDEF txt938 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0 0.515469 APEX 0.375 0 0.609531 RAD 0.0078125
+ txt938
+TEXDEF txt939 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0 0.625 RAD 0.03125
+ txt939
+TEXDEF txt940 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0 0.625 APEX 0.484531 0 0.625 RAD 0.0078125
+ txt940
+TEXDEF txt941 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.0154687 0.625 APEX 0.375 0.109531 0.625 RAD 0.0078125
+ txt941
+TEXDEF txt942 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0 0.640469 APEX 0.375 0 0.734531 RAD 0.0078125
+ txt942
+TEXDEF txt943 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0 0.75 RAD 0.03125
+ txt943
+TEXDEF txt944 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0 0.75 APEX 0.484531 0 0.75 RAD 0.0078125
+ txt944
+TEXDEF txt945 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.0154687 0.75 APEX 0.375 0.109531 0.75 RAD 0.0078125
+ txt945
+TEXDEF txt946 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0 0.765469 APEX 0.375 0 0.859531 RAD 0.0078125
+ txt946
+TEXDEF txt947 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0 0.875 RAD 0.03125
+ txt947
+TEXDEF txt948 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0 0.875 APEX 0.484531 0 0.875 RAD 0.0078125
+ txt948
+TEXDEF txt949 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.0154687 0.875 APEX 0.375 0.109531 0.875 RAD 0.0078125
+ txt949
+TEXDEF txt950 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0 0.890469 APEX 0.375 0 0.984531 RAD 0.0078125
+ txt950
+TEXDEF txt951 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0 1 RAD 0.03125
+ txt951
+TEXDEF txt952 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0 1 APEX 0.484531 0 1 RAD 0.0078125
+ txt952
+TEXDEF txt953 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.0154687 1 APEX 0.375 0.109531 1 RAD 0.0078125
+ txt953
+TEXDEF txt954 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.125 0 RAD 0.03125
+ txt954
+TEXDEF txt955 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.125 0 APEX 0.484531 0.125 0 RAD 0.0078125
+ txt955
+TEXDEF txt956 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.140469 0 APEX 0.375 0.234531 0 RAD 0.0078125
+ txt956
+TEXDEF txt957 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.125 0.0154687 APEX 0.375 0.125 0.109531 RAD 0.0078125
+ txt957
+TEXDEF txt958 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.125 0.125 RAD 0.03125
+ txt958
+TEXDEF txt959 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.125 0.125 APEX 0.484531 0.125 0.125 RAD 0.0078125
+ txt959
+TEXDEF txt960 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.140469 0.125 APEX 0.375 0.234531 0.125 RAD 0.0078125
+ txt960
+TEXDEF txt961 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.125 0.140469 APEX 0.375 0.125 0.234531 RAD 0.0078125
+ txt961
+TEXDEF txt962 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.125 0.25 RAD 0.03125
+ txt962
+TEXDEF txt963 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.125 0.25 APEX 0.484531 0.125 0.25 RAD 0.0078125
+ txt963
+TEXDEF txt964 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.140469 0.25 APEX 0.375 0.234531 0.25 RAD 0.0078125
+ txt964
+TEXDEF txt965 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.125 0.265469 APEX 0.375 0.125 0.359531 RAD 0.0078125
+ txt965
+TEXDEF txt966 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.125 0.375 RAD 0.03125
+ txt966
+TEXDEF txt967 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.125 0.375 APEX 0.484531 0.125 0.375 RAD 0.0078125
+ txt967
+TEXDEF txt968 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.140469 0.375 APEX 0.375 0.234531 0.375 RAD 0.0078125
+ txt968
+TEXDEF txt969 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.125 0.390469 APEX 0.375 0.125 0.484531 RAD 0.0078125
+ txt969
+TEXDEF txt970 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.125 0.5 RAD 0.03125
+ txt970
+TEXDEF txt971 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.125 0.5 APEX 0.484531 0.125 0.5 RAD 0.0078125
+ txt971
+TEXDEF txt972 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.140469 0.5 APEX 0.375 0.234531 0.5 RAD 0.0078125
+ txt972
+TEXDEF txt973 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.125 0.515469 APEX 0.375 0.125 0.609531 RAD 0.0078125
+ txt973
+TEXDEF txt974 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.125 0.625 RAD 0.03125
+ txt974
+TEXDEF txt975 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.125 0.625 APEX 0.484531 0.125 0.625 RAD 0.0078125
+ txt975
+TEXDEF txt976 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.140469 0.625 APEX 0.375 0.234531 0.625 RAD 0.0078125
+ txt976
+TEXDEF txt977 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.125 0.640469 APEX 0.375 0.125 0.734531 RAD 0.0078125
+ txt977
+TEXDEF txt978 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.125 0.75 RAD 0.03125
+ txt978
+TEXDEF txt979 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.125 0.75 APEX 0.484531 0.125 0.75 RAD 0.0078125
+ txt979
+TEXDEF txt980 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.140469 0.75 APEX 0.375 0.234531 0.75 RAD 0.0078125
+ txt980
+TEXDEF txt981 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.125 0.765469 APEX 0.375 0.125 0.859531 RAD 0.0078125
+ txt981
+TEXDEF txt982 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.125 0.875 RAD 0.03125
+ txt982
+TEXDEF txt983 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.125 0.875 APEX 0.484531 0.125 0.875 RAD 0.0078125
+ txt983
+TEXDEF txt984 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.140469 0.875 APEX 0.375 0.234531 0.875 RAD 0.0078125
+ txt984
+TEXDEF txt985 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.125 0.890469 APEX 0.375 0.125 0.984531 RAD 0.0078125
+ txt985
+TEXDEF txt986 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.125 1 RAD 0.03125
+ txt986
+TEXDEF txt987 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.125 1 APEX 0.484531 0.125 1 RAD 0.0078125
+ txt987
+TEXDEF txt988 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.140469 1 APEX 0.375 0.234531 1 RAD 0.0078125
+ txt988
+TEXDEF txt989 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.25 0 RAD 0.03125
+ txt989
+TEXDEF txt990 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.25 0 APEX 0.484531 0.25 0 RAD 0.0078125
+ txt990
+TEXDEF txt991 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.265469 0 APEX 0.375 0.359531 0 RAD 0.0078125
+ txt991
+TEXDEF txt992 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.25 0.0154687 APEX 0.375 0.25 0.109531 RAD 0.0078125
+ txt992
+TEXDEF txt993 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.25 0.125 RAD 0.03125
+ txt993
+TEXDEF txt994 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.25 0.125 APEX 0.484531 0.25 0.125 RAD 0.0078125
+ txt994
+TEXDEF txt995 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.265469 0.125 APEX 0.375 0.359531 0.125 RAD 0.0078125
+ txt995
+TEXDEF txt996 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.25 0.140469 APEX 0.375 0.25 0.234531 RAD 0.0078125
+ txt996
+TEXDEF txt997 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.25 0.25 RAD 0.03125
+ txt997
+TEXDEF txt998 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.25 0.25 APEX 0.484531 0.25 0.25 RAD 0.0078125
+ txt998
+TEXDEF txt999 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.265469 0.25 APEX 0.375 0.359531 0.25 RAD 0.0078125
+ txt999
+TEXDEF txt100 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.25 0.265469 APEX 0.375 0.25 0.359531 RAD 0.0078125
+ txt100
+TEXDEF txt100 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.25 0.375 RAD 0.03125
+ txt100
+TEXDEF txt100 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.25 0.375 APEX 0.484531 0.25 0.375 RAD 0.0078125
+ txt100
+TEXDEF txt100 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.265469 0.375 APEX 0.375 0.359531 0.375 RAD 0.0078125
+ txt100
+TEXDEF txt100 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.25 0.390469 APEX 0.375 0.25 0.484531 RAD 0.0078125
+ txt100
+TEXDEF txt100 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.25 0.5 RAD 0.03125
+ txt100
+TEXDEF txt100 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.25 0.5 APEX 0.484531 0.25 0.5 RAD 0.0078125
+ txt100
+TEXDEF txt100 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.265469 0.5 APEX 0.375 0.359531 0.5 RAD 0.0078125
+ txt100
+TEXDEF txt100 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.25 0.515469 APEX 0.375 0.25 0.609531 RAD 0.0078125
+ txt100
+TEXDEF txt100 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.25 0.625 RAD 0.03125
+ txt100
+TEXDEF txt101 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.25 0.625 APEX 0.484531 0.25 0.625 RAD 0.0078125
+ txt101
+TEXDEF txt101 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.265469 0.625 APEX 0.375 0.359531 0.625 RAD 0.0078125
+ txt101
+TEXDEF txt101 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.25 0.640469 APEX 0.375 0.25 0.734531 RAD 0.0078125
+ txt101
+TEXDEF txt101 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.25 0.75 RAD 0.03125
+ txt101
+TEXDEF txt101 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.25 0.75 APEX 0.484531 0.25 0.75 RAD 0.0078125
+ txt101
+TEXDEF txt101 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.265469 0.75 APEX 0.375 0.359531 0.75 RAD 0.0078125
+ txt101
+TEXDEF txt101 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.25 0.765469 APEX 0.375 0.25 0.859531 RAD 0.0078125
+ txt101
+TEXDEF txt101 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.25 0.875 RAD 0.03125
+ txt101
+TEXDEF txt101 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.25 0.875 APEX 0.484531 0.25 0.875 RAD 0.0078125
+ txt101
+TEXDEF txt101 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.265469 0.875 APEX 0.375 0.359531 0.875 RAD 0.0078125
+ txt101
+TEXDEF txt102 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.25 0.890469 APEX 0.375 0.25 0.984531 RAD 0.0078125
+ txt102
+TEXDEF txt102 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.25 1 RAD 0.03125
+ txt102
+TEXDEF txt102 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.25 1 APEX 0.484531 0.25 1 RAD 0.0078125
+ txt102
+TEXDEF txt102 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.265469 1 APEX 0.375 0.359531 1 RAD 0.0078125
+ txt102
+TEXDEF txt102 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.375 0 RAD 0.03125
+ txt102
+TEXDEF txt102 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.375 0 APEX 0.484531 0.375 0 RAD 0.0078125
+ txt102
+TEXDEF txt102 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.390469 0 APEX 0.375 0.484531 0 RAD 0.0078125
+ txt102
+TEXDEF txt102 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.375 0.0154687 APEX 0.375 0.375 0.109531 RAD 0.0078125
+ txt102
+TEXDEF txt102 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.375 0.125 RAD 0.03125
+ txt102
+TEXDEF txt102 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.375 0.125 APEX 0.484531 0.375 0.125 RAD 0.0078125
+ txt102
+TEXDEF txt103 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.390469 0.125 APEX 0.375 0.484531 0.125 RAD 0.0078125
+ txt103
+TEXDEF txt103 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.375 0.140469 APEX 0.375 0.375 0.234531 RAD 0.0078125
+ txt103
+TEXDEF txt103 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.375 0.25 RAD 0.03125
+ txt103
+TEXDEF txt103 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.375 0.25 APEX 0.484531 0.375 0.25 RAD 0.0078125
+ txt103
+TEXDEF txt103 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.390469 0.25 APEX 0.375 0.484531 0.25 RAD 0.0078125
+ txt103
+TEXDEF txt103 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.375 0.265469 APEX 0.375 0.375 0.359531 RAD 0.0078125
+ txt103
+TEXDEF txt103 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.375 0.375 RAD 0.03125
+ txt103
+TEXDEF txt103 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.375 0.375 APEX 0.484531 0.375 0.375 RAD 0.0078125
+ txt103
+TEXDEF txt103 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.390469 0.375 APEX 0.375 0.484531 0.375 RAD 0.0078125
+ txt103
+TEXDEF txt103 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.375 0.390469 APEX 0.375 0.375 0.484531 RAD 0.0078125
+ txt103
+TEXDEF txt104 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.375 0.5 RAD 0.03125
+ txt104
+TEXDEF txt104 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.375 0.5 APEX 0.484531 0.375 0.5 RAD 0.0078125
+ txt104
+TEXDEF txt104 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.390469 0.5 APEX 0.375 0.484531 0.5 RAD 0.0078125
+ txt104
+TEXDEF txt104 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.375 0.515469 APEX 0.375 0.375 0.609531 RAD 0.0078125
+ txt104
+TEXDEF txt104 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.375 0.625 RAD 0.03125
+ txt104
+TEXDEF txt104 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.375 0.625 APEX 0.484531 0.375 0.625 RAD 0.0078125
+ txt104
+TEXDEF txt104 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.390469 0.625 APEX 0.375 0.484531 0.625 RAD 0.0078125
+ txt104
+TEXDEF txt104 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.375 0.640469 APEX 0.375 0.375 0.734531 RAD 0.0078125
+ txt104
+TEXDEF txt104 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.375 0.75 RAD 0.03125
+ txt104
+TEXDEF txt104 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.375 0.75 APEX 0.484531 0.375 0.75 RAD 0.0078125
+ txt104
+TEXDEF txt105 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.390469 0.75 APEX 0.375 0.484531 0.75 RAD 0.0078125
+ txt105
+TEXDEF txt105 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.375 0.765469 APEX 0.375 0.375 0.859531 RAD 0.0078125
+ txt105
+TEXDEF txt105 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.375 0.875 RAD 0.03125
+ txt105
+TEXDEF txt105 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.375 0.875 APEX 0.484531 0.375 0.875 RAD 0.0078125
+ txt105
+TEXDEF txt105 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.390469 0.875 APEX 0.375 0.484531 0.875 RAD 0.0078125
+ txt105
+TEXDEF txt105 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.375 0.890469 APEX 0.375 0.375 0.984531 RAD 0.0078125
+ txt105
+TEXDEF txt105 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.375 1 RAD 0.03125
+ txt105
+TEXDEF txt105 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.375 1 APEX 0.484531 0.375 1 RAD 0.0078125
+ txt105
+TEXDEF txt105 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.390469 1 APEX 0.375 0.484531 1 RAD 0.0078125
+ txt105
+TEXDEF txt105 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.5 0 RAD 0.03125
+ txt105
+TEXDEF txt106 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.5 0 APEX 0.484531 0.5 0 RAD 0.0078125
+ txt106
+TEXDEF txt106 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.515469 0 APEX 0.375 0.609531 0 RAD 0.0078125
+ txt106
+TEXDEF txt106 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.5 0.0154687 APEX 0.375 0.5 0.109531 RAD 0.0078125
+ txt106
+TEXDEF txt106 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.5 0.125 RAD 0.03125
+ txt106
+TEXDEF txt106 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.5 0.125 APEX 0.484531 0.5 0.125 RAD 0.0078125
+ txt106
+TEXDEF txt106 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.515469 0.125 APEX 0.375 0.609531 0.125 RAD 0.0078125
+ txt106
+TEXDEF txt106 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.5 0.140469 APEX 0.375 0.5 0.234531 RAD 0.0078125
+ txt106
+TEXDEF txt106 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.5 0.25 RAD 0.03125
+ txt106
+TEXDEF txt106 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.5 0.25 APEX 0.484531 0.5 0.25 RAD 0.0078125
+ txt106
+TEXDEF txt106 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.515469 0.25 APEX 0.375 0.609531 0.25 RAD 0.0078125
+ txt106
+TEXDEF txt107 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.5 0.265469 APEX 0.375 0.5 0.359531 RAD 0.0078125
+ txt107
+TEXDEF txt107 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.5 0.375 RAD 0.03125
+ txt107
+TEXDEF txt107 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.5 0.375 APEX 0.484531 0.5 0.375 RAD 0.0078125
+ txt107
+TEXDEF txt107 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.515469 0.375 APEX 0.375 0.609531 0.375 RAD 0.0078125
+ txt107
+TEXDEF txt107 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.5 0.390469 APEX 0.375 0.5 0.484531 RAD 0.0078125
+ txt107
+TEXDEF txt107 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.5 0.5 RAD 0.03125
+ txt107
+TEXDEF txt107 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.5 0.5 APEX 0.484531 0.5 0.5 RAD 0.0078125
+ txt107
+TEXDEF txt107 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.515469 0.5 APEX 0.375 0.609531 0.5 RAD 0.0078125
+ txt107
+TEXDEF txt107 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.5 0.515469 APEX 0.375 0.5 0.609531 RAD 0.0078125
+ txt107
+TEXDEF txt107 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.5 0.625 RAD 0.03125
+ txt107
+TEXDEF txt108 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.5 0.625 APEX 0.484531 0.5 0.625 RAD 0.0078125
+ txt108
+TEXDEF txt108 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.515469 0.625 APEX 0.375 0.609531 0.625 RAD 0.0078125
+ txt108
+TEXDEF txt108 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.5 0.640469 APEX 0.375 0.5 0.734531 RAD 0.0078125
+ txt108
+TEXDEF txt108 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.5 0.75 RAD 0.03125
+ txt108
+TEXDEF txt108 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.5 0.75 APEX 0.484531 0.5 0.75 RAD 0.0078125
+ txt108
+TEXDEF txt108 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.515469 0.75 APEX 0.375 0.609531 0.75 RAD 0.0078125
+ txt108
+TEXDEF txt108 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.5 0.765469 APEX 0.375 0.5 0.859531 RAD 0.0078125
+ txt108
+TEXDEF txt108 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.5 0.875 RAD 0.03125
+ txt108
+TEXDEF txt108 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.5 0.875 APEX 0.484531 0.5 0.875 RAD 0.0078125
+ txt108
+TEXDEF txt108 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.515469 0.875 APEX 0.375 0.609531 0.875 RAD 0.0078125
+ txt108
+TEXDEF txt109 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.5 0.890469 APEX 0.375 0.5 0.984531 RAD 0.0078125
+ txt109
+TEXDEF txt109 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.5 1 RAD 0.03125
+ txt109
+TEXDEF txt109 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.5 1 APEX 0.484531 0.5 1 RAD 0.0078125
+ txt109
+TEXDEF txt109 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.515469 1 APEX 0.375 0.609531 1 RAD 0.0078125
+ txt109
+TEXDEF txt109 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.625 0 RAD 0.03125
+ txt109
+TEXDEF txt109 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.625 0 APEX 0.484531 0.625 0 RAD 0.0078125
+ txt109
+TEXDEF txt109 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.640469 0 APEX 0.375 0.734531 0 RAD 0.0078125
+ txt109
+TEXDEF txt109 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.625 0.0154687 APEX 0.375 0.625 0.109531 RAD 0.0078125
+ txt109
+TEXDEF txt109 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.625 0.125 RAD 0.03125
+ txt109
+TEXDEF txt109 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.625 0.125 APEX 0.484531 0.625 0.125 RAD 0.0078125
+ txt109
+TEXDEF txt110 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.640469 0.125 APEX 0.375 0.734531 0.125 RAD 0.0078125
+ txt110
+TEXDEF txt110 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.625 0.140469 APEX 0.375 0.625 0.234531 RAD 0.0078125
+ txt110
+TEXDEF txt110 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.625 0.25 RAD 0.03125
+ txt110
+TEXDEF txt110 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.625 0.25 APEX 0.484531 0.625 0.25 RAD 0.0078125
+ txt110
+TEXDEF txt110 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.640469 0.25 APEX 0.375 0.734531 0.25 RAD 0.0078125
+ txt110
+TEXDEF txt110 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.625 0.265469 APEX 0.375 0.625 0.359531 RAD 0.0078125
+ txt110
+TEXDEF txt110 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.625 0.375 RAD 0.03125
+ txt110
+TEXDEF txt110 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.625 0.375 APEX 0.484531 0.625 0.375 RAD 0.0078125
+ txt110
+TEXDEF txt110 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.640469 0.375 APEX 0.375 0.734531 0.375 RAD 0.0078125
+ txt110
+TEXDEF txt110 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.625 0.390469 APEX 0.375 0.625 0.484531 RAD 0.0078125
+ txt110
+TEXDEF txt111 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.625 0.5 RAD 0.03125
+ txt111
+TEXDEF txt111 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.625 0.5 APEX 0.484531 0.625 0.5 RAD 0.0078125
+ txt111
+TEXDEF txt111 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.640469 0.5 APEX 0.375 0.734531 0.5 RAD 0.0078125
+ txt111
+TEXDEF txt111 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.625 0.515469 APEX 0.375 0.625 0.609531 RAD 0.0078125
+ txt111
+TEXDEF txt111 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.625 0.625 RAD 0.03125
+ txt111
+TEXDEF txt111 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.625 0.625 APEX 0.484531 0.625 0.625 RAD 0.0078125
+ txt111
+TEXDEF txt111 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.640469 0.625 APEX 0.375 0.734531 0.625 RAD 0.0078125
+ txt111
+TEXDEF txt111 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.625 0.640469 APEX 0.375 0.625 0.734531 RAD 0.0078125
+ txt111
+TEXDEF txt111 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.625 0.75 RAD 0.03125
+ txt111
+TEXDEF txt111 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.625 0.75 APEX 0.484531 0.625 0.75 RAD 0.0078125
+ txt111
+TEXDEF txt112 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.640469 0.75 APEX 0.375 0.734531 0.75 RAD 0.0078125
+ txt112
+TEXDEF txt112 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.625 0.765469 APEX 0.375 0.625 0.859531 RAD 0.0078125
+ txt112
+TEXDEF txt112 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.625 0.875 RAD 0.03125
+ txt112
+TEXDEF txt112 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.625 0.875 APEX 0.484531 0.625 0.875 RAD 0.0078125
+ txt112
+TEXDEF txt112 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.640469 0.875 APEX 0.375 0.734531 0.875 RAD 0.0078125
+ txt112
+TEXDEF txt112 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.625 0.890469 APEX 0.375 0.625 0.984531 RAD 0.0078125
+ txt112
+TEXDEF txt112 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.625 1 RAD 0.03125
+ txt112
+TEXDEF txt112 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.625 1 APEX 0.484531 0.625 1 RAD 0.0078125
+ txt112
+TEXDEF txt112 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.640469 1 APEX 0.375 0.734531 1 RAD 0.0078125
+ txt112
+TEXDEF txt112 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.75 0 RAD 0.03125
+ txt112
+TEXDEF txt113 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.75 0 APEX 0.484531 0.75 0 RAD 0.0078125
+ txt113
+TEXDEF txt113 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.765469 0 APEX 0.375 0.859531 0 RAD 0.0078125
+ txt113
+TEXDEF txt113 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.75 0.0154687 APEX 0.375 0.75 0.109531 RAD 0.0078125
+ txt113
+TEXDEF txt113 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.75 0.125 RAD 0.03125
+ txt113
+TEXDEF txt113 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.75 0.125 APEX 0.484531 0.75 0.125 RAD 0.0078125
+ txt113
+TEXDEF txt113 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.765469 0.125 APEX 0.375 0.859531 0.125 RAD 0.0078125
+ txt113
+TEXDEF txt113 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.75 0.140469 APEX 0.375 0.75 0.234531 RAD 0.0078125
+ txt113
+TEXDEF txt113 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.75 0.25 RAD 0.03125
+ txt113
+TEXDEF txt113 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.75 0.25 APEX 0.484531 0.75 0.25 RAD 0.0078125
+ txt113
+TEXDEF txt113 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.765469 0.25 APEX 0.375 0.859531 0.25 RAD 0.0078125
+ txt113
+TEXDEF txt114 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.75 0.265469 APEX 0.375 0.75 0.359531 RAD 0.0078125
+ txt114
+TEXDEF txt114 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.75 0.375 RAD 0.03125
+ txt114
+TEXDEF txt114 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.75 0.375 APEX 0.484531 0.75 0.375 RAD 0.0078125
+ txt114
+TEXDEF txt114 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.765469 0.375 APEX 0.375 0.859531 0.375 RAD 0.0078125
+ txt114
+TEXDEF txt114 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.75 0.390469 APEX 0.375 0.75 0.484531 RAD 0.0078125
+ txt114
+TEXDEF txt114 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.75 0.5 RAD 0.03125
+ txt114
+TEXDEF txt114 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.75 0.5 APEX 0.484531 0.75 0.5 RAD 0.0078125
+ txt114
+TEXDEF txt114 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.765469 0.5 APEX 0.375 0.859531 0.5 RAD 0.0078125
+ txt114
+TEXDEF txt114 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.75 0.515469 APEX 0.375 0.75 0.609531 RAD 0.0078125
+ txt114
+TEXDEF txt114 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.75 0.625 RAD 0.03125
+ txt114
+TEXDEF txt115 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.75 0.625 APEX 0.484531 0.75 0.625 RAD 0.0078125
+ txt115
+TEXDEF txt115 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.765469 0.625 APEX 0.375 0.859531 0.625 RAD 0.0078125
+ txt115
+TEXDEF txt115 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.75 0.640469 APEX 0.375 0.75 0.734531 RAD 0.0078125
+ txt115
+TEXDEF txt115 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.75 0.75 RAD 0.03125
+ txt115
+TEXDEF txt115 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.75 0.75 APEX 0.484531 0.75 0.75 RAD 0.0078125
+ txt115
+TEXDEF txt115 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.765469 0.75 APEX 0.375 0.859531 0.75 RAD 0.0078125
+ txt115
+TEXDEF txt115 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.75 0.765469 APEX 0.375 0.75 0.859531 RAD 0.0078125
+ txt115
+TEXDEF txt115 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.75 0.875 RAD 0.03125
+ txt115
+TEXDEF txt115 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.75 0.875 APEX 0.484531 0.75 0.875 RAD 0.0078125
+ txt115
+TEXDEF txt115 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.765469 0.875 APEX 0.375 0.859531 0.875 RAD 0.0078125
+ txt115
+TEXDEF txt116 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.75 0.890469 APEX 0.375 0.75 0.984531 RAD 0.0078125
+ txt116
+TEXDEF txt116 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.75 1 RAD 0.03125
+ txt116
+TEXDEF txt116 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.75 1 APEX 0.484531 0.75 1 RAD 0.0078125
+ txt116
+TEXDEF txt116 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.765469 1 APEX 0.375 0.859531 1 RAD 0.0078125
+ txt116
+TEXDEF txt116 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.875 0 RAD 0.03125
+ txt116
+TEXDEF txt116 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.875 0 APEX 0.484531 0.875 0 RAD 0.0078125
+ txt116
+TEXDEF txt116 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.890469 0 APEX 0.375 0.984531 0 RAD 0.0078125
+ txt116
+TEXDEF txt116 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.875 0.0154687 APEX 0.375 0.875 0.109531 RAD 0.0078125
+ txt116
+TEXDEF txt116 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.875 0.125 RAD 0.03125
+ txt116
+TEXDEF txt116 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.875 0.125 APEX 0.484531 0.875 0.125 RAD 0.0078125
+ txt116
+TEXDEF txt117 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.890469 0.125 APEX 0.375 0.984531 0.125 RAD 0.0078125
+ txt117
+TEXDEF txt117 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.875 0.140469 APEX 0.375 0.875 0.234531 RAD 0.0078125
+ txt117
+TEXDEF txt117 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.875 0.25 RAD 0.03125
+ txt117
+TEXDEF txt117 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.875 0.25 APEX 0.484531 0.875 0.25 RAD 0.0078125
+ txt117
+TEXDEF txt117 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.890469 0.25 APEX 0.375 0.984531 0.25 RAD 0.0078125
+ txt117
+TEXDEF txt117 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.875 0.265469 APEX 0.375 0.875 0.359531 RAD 0.0078125
+ txt117
+TEXDEF txt117 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.875 0.375 RAD 0.03125
+ txt117
+TEXDEF txt117 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.875 0.375 APEX 0.484531 0.875 0.375 RAD 0.0078125
+ txt117
+TEXDEF txt117 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.890469 0.375 APEX 0.375 0.984531 0.375 RAD 0.0078125
+ txt117
+TEXDEF txt117 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.875 0.390469 APEX 0.375 0.875 0.484531 RAD 0.0078125
+ txt117
+TEXDEF txt118 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.875 0.5 RAD 0.03125
+ txt118
+TEXDEF txt118 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.875 0.5 APEX 0.484531 0.875 0.5 RAD 0.0078125
+ txt118
+TEXDEF txt118 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.890469 0.5 APEX 0.375 0.984531 0.5 RAD 0.0078125
+ txt118
+TEXDEF txt118 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.875 0.515469 APEX 0.375 0.875 0.609531 RAD 0.0078125
+ txt118
+TEXDEF txt118 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.875 0.625 RAD 0.03125
+ txt118
+TEXDEF txt118 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.875 0.625 APEX 0.484531 0.875 0.625 RAD 0.0078125
+ txt118
+TEXDEF txt118 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.890469 0.625 APEX 0.375 0.984531 0.625 RAD 0.0078125
+ txt118
+TEXDEF txt118 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.875 0.640469 APEX 0.375 0.875 0.734531 RAD 0.0078125
+ txt118
+TEXDEF txt118 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.875 0.75 RAD 0.03125
+ txt118
+TEXDEF txt118 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.875 0.75 APEX 0.484531 0.875 0.75 RAD 0.0078125
+ txt118
+TEXDEF txt119 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.890469 0.75 APEX 0.375 0.984531 0.75 RAD 0.0078125
+ txt119
+TEXDEF txt119 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.875 0.765469 APEX 0.375 0.875 0.859531 RAD 0.0078125
+ txt119
+TEXDEF txt119 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.875 0.875 RAD 0.03125
+ txt119
+TEXDEF txt119 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.875 0.875 APEX 0.484531 0.875 0.875 RAD 0.0078125
+ txt119
+TEXDEF txt119 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.890469 0.875 APEX 0.375 0.984531 0.875 RAD 0.0078125
+ txt119
+TEXDEF txt119 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.875 0.890469 APEX 0.375 0.875 0.984531 RAD 0.0078125
+ txt119
+TEXDEF txt119 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 0.875 1 RAD 0.03125
+ txt119
+TEXDEF txt119 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 0.875 1 APEX 0.484531 0.875 1 RAD 0.0078125
+ txt119
+TEXDEF txt119 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 0.890469 1 APEX 0.375 0.984531 1 RAD 0.0078125
+ txt119
+TEXDEF txt119 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 1 0 RAD 0.03125
+ txt119
+TEXDEF txt120 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 1 0 APEX 0.484531 1 0 RAD 0.0078125
+ txt120
+TEXDEF txt120 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 1 0.0154687 APEX 0.375 1 0.109531 RAD 0.0078125
+ txt120
+TEXDEF txt120 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 1 0.125 RAD 0.03125
+ txt120
+TEXDEF txt120 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 1 0.125 APEX 0.484531 1 0.125 RAD 0.0078125
+ txt120
+TEXDEF txt120 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 1 0.140469 APEX 0.375 1 0.234531 RAD 0.0078125
+ txt120
+TEXDEF txt120 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 1 0.25 RAD 0.03125
+ txt120
+TEXDEF txt120 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 1 0.25 APEX 0.484531 1 0.25 RAD 0.0078125
+ txt120
+TEXDEF txt120 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 1 0.265469 APEX 0.375 1 0.359531 RAD 0.0078125
+ txt120
+TEXDEF txt120 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 1 0.375 RAD 0.03125
+ txt120
+TEXDEF txt120 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 1 0.375 APEX 0.484531 1 0.375 RAD 0.0078125
+ txt120
+TEXDEF txt121 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 1 0.390469 APEX 0.375 1 0.484531 RAD 0.0078125
+ txt121
+TEXDEF txt121 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 1 0.5 RAD 0.03125
+ txt121
+TEXDEF txt121 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 1 0.5 APEX 0.484531 1 0.5 RAD 0.0078125
+ txt121
+TEXDEF txt121 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 1 0.515469 APEX 0.375 1 0.609531 RAD 0.0078125
+ txt121
+TEXDEF txt121 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 1 0.625 RAD 0.03125
+ txt121
+TEXDEF txt121 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 1 0.625 APEX 0.484531 1 0.625 RAD 0.0078125
+ txt121
+TEXDEF txt121 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 1 0.640469 APEX 0.375 1 0.734531 RAD 0.0078125
+ txt121
+TEXDEF txt121 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 1 0.75 RAD 0.03125
+ txt121
+TEXDEF txt121 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 1 0.75 APEX 0.484531 1 0.75 RAD 0.0078125
+ txt121
+TEXDEF txt121 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 1 0.765469 APEX 0.375 1 0.859531 RAD 0.0078125
+ txt121
+TEXDEF txt122 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 1 0.875 RAD 0.03125
+ txt122
+TEXDEF txt122 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 1 0.875 APEX 0.484531 1 0.875 RAD 0.0078125
+ txt122
+TEXDEF txt122 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.375 1 0.890469 APEX 0.375 1 0.984531 RAD 0.0078125
+ txt122
+TEXDEF txt122 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.375 1 1 RAD 0.03125
+ txt122
+TEXDEF txt122 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.390469 1 1 APEX 0.484531 1 1 RAD 0.0078125
+ txt122
+TEXDEF txt122 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0 0 RAD 0.03125
+ txt122
+TEXDEF txt122 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0 0 APEX 0.609531 0 0 RAD 0.0078125
+ txt122
+TEXDEF txt122 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.0154687 0 APEX 0.5 0.109531 0 RAD 0.0078125
+ txt122
+TEXDEF txt122 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0 0.0154687 APEX 0.5 0 0.109531 RAD 0.0078125
+ txt122
+TEXDEF txt122 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0 0.125 RAD 0.03125
+ txt122
+TEXDEF txt123 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0 0.125 APEX 0.609531 0 0.125 RAD 0.0078125
+ txt123
+TEXDEF txt123 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.0154687 0.125 APEX 0.5 0.109531 0.125 RAD 0.0078125
+ txt123
+TEXDEF txt123 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0 0.140469 APEX 0.5 0 0.234531 RAD 0.0078125
+ txt123
+TEXDEF txt123 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0 0.25 RAD 0.03125
+ txt123
+TEXDEF txt123 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0 0.25 APEX 0.609531 0 0.25 RAD 0.0078125
+ txt123
+TEXDEF txt123 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.0154687 0.25 APEX 0.5 0.109531 0.25 RAD 0.0078125
+ txt123
+TEXDEF txt123 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0 0.265469 APEX 0.5 0 0.359531 RAD 0.0078125
+ txt123
+TEXDEF txt123 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0 0.375 RAD 0.03125
+ txt123
+TEXDEF txt123 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0 0.375 APEX 0.609531 0 0.375 RAD 0.0078125
+ txt123
+TEXDEF txt123 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.0154687 0.375 APEX 0.5 0.109531 0.375 RAD 0.0078125
+ txt123
+TEXDEF txt124 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0 0.390469 APEX 0.5 0 0.484531 RAD 0.0078125
+ txt124
+TEXDEF txt124 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0 0.5 RAD 0.03125
+ txt124
+TEXDEF txt124 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0 0.5 APEX 0.609531 0 0.5 RAD 0.0078125
+ txt124
+TEXDEF txt124 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.0154687 0.5 APEX 0.5 0.109531 0.5 RAD 0.0078125
+ txt124
+TEXDEF txt124 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0 0.515469 APEX 0.5 0 0.609531 RAD 0.0078125
+ txt124
+TEXDEF txt124 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0 0.625 RAD 0.03125
+ txt124
+TEXDEF txt124 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0 0.625 APEX 0.609531 0 0.625 RAD 0.0078125
+ txt124
+TEXDEF txt124 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.0154687 0.625 APEX 0.5 0.109531 0.625 RAD 0.0078125
+ txt124
+TEXDEF txt124 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0 0.640469 APEX 0.5 0 0.734531 RAD 0.0078125
+ txt124
+TEXDEF txt124 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0 0.75 RAD 0.03125
+ txt124
+TEXDEF txt125 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0 0.75 APEX 0.609531 0 0.75 RAD 0.0078125
+ txt125
+TEXDEF txt125 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.0154687 0.75 APEX 0.5 0.109531 0.75 RAD 0.0078125
+ txt125
+TEXDEF txt125 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0 0.765469 APEX 0.5 0 0.859531 RAD 0.0078125
+ txt125
+TEXDEF txt125 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0 0.875 RAD 0.03125
+ txt125
+TEXDEF txt125 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0 0.875 APEX 0.609531 0 0.875 RAD 0.0078125
+ txt125
+TEXDEF txt125 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.0154687 0.875 APEX 0.5 0.109531 0.875 RAD 0.0078125
+ txt125
+TEXDEF txt125 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0 0.890469 APEX 0.5 0 0.984531 RAD 0.0078125
+ txt125
+TEXDEF txt125 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0 1 RAD 0.03125
+ txt125
+TEXDEF txt125 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0 1 APEX 0.609531 0 1 RAD 0.0078125
+ txt125
+TEXDEF txt125 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.0154687 1 APEX 0.5 0.109531 1 RAD 0.0078125
+ txt125
+TEXDEF txt126 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.125 0 RAD 0.03125
+ txt126
+TEXDEF txt126 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.125 0 APEX 0.609531 0.125 0 RAD 0.0078125
+ txt126
+TEXDEF txt126 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.140469 0 APEX 0.5 0.234531 0 RAD 0.0078125
+ txt126
+TEXDEF txt126 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.125 0.0154687 APEX 0.5 0.125 0.109531 RAD 0.0078125
+ txt126
+TEXDEF txt126 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.125 0.125 RAD 0.03125
+ txt126
+TEXDEF txt126 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.125 0.125 APEX 0.609531 0.125 0.125 RAD 0.0078125
+ txt126
+TEXDEF txt126 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.140469 0.125 APEX 0.5 0.234531 0.125 RAD 0.0078125
+ txt126
+TEXDEF txt126 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.125 0.140469 APEX 0.5 0.125 0.234531 RAD 0.0078125
+ txt126
+TEXDEF txt126 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.125 0.25 RAD 0.03125
+ txt126
+TEXDEF txt126 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.125 0.25 APEX 0.609531 0.125 0.25 RAD 0.0078125
+ txt126
+TEXDEF txt127 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.140469 0.25 APEX 0.5 0.234531 0.25 RAD 0.0078125
+ txt127
+TEXDEF txt127 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.125 0.265469 APEX 0.5 0.125 0.359531 RAD 0.0078125
+ txt127
+TEXDEF txt127 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.125 0.375 RAD 0.03125
+ txt127
+TEXDEF txt127 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.125 0.375 APEX 0.609531 0.125 0.375 RAD 0.0078125
+ txt127
+TEXDEF txt127 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.140469 0.375 APEX 0.5 0.234531 0.375 RAD 0.0078125
+ txt127
+TEXDEF txt127 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.125 0.390469 APEX 0.5 0.125 0.484531 RAD 0.0078125
+ txt127
+TEXDEF txt127 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.125 0.5 RAD 0.03125
+ txt127
+TEXDEF txt127 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.125 0.5 APEX 0.609531 0.125 0.5 RAD 0.0078125
+ txt127
+TEXDEF txt127 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.140469 0.5 APEX 0.5 0.234531 0.5 RAD 0.0078125
+ txt127
+TEXDEF txt127 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.125 0.515469 APEX 0.5 0.125 0.609531 RAD 0.0078125
+ txt127
+TEXDEF txt128 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.125 0.625 RAD 0.03125
+ txt128
+TEXDEF txt128 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.125 0.625 APEX 0.609531 0.125 0.625 RAD 0.0078125
+ txt128
+TEXDEF txt128 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.140469 0.625 APEX 0.5 0.234531 0.625 RAD 0.0078125
+ txt128
+TEXDEF txt128 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.125 0.640469 APEX 0.5 0.125 0.734531 RAD 0.0078125
+ txt128
+TEXDEF txt128 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.125 0.75 RAD 0.03125
+ txt128
+TEXDEF txt128 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.125 0.75 APEX 0.609531 0.125 0.75 RAD 0.0078125
+ txt128
+TEXDEF txt128 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.140469 0.75 APEX 0.5 0.234531 0.75 RAD 0.0078125
+ txt128
+TEXDEF txt128 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.125 0.765469 APEX 0.5 0.125 0.859531 RAD 0.0078125
+ txt128
+TEXDEF txt128 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.125 0.875 RAD 0.03125
+ txt128
+TEXDEF txt128 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.125 0.875 APEX 0.609531 0.125 0.875 RAD 0.0078125
+ txt128
+TEXDEF txt129 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.140469 0.875 APEX 0.5 0.234531 0.875 RAD 0.0078125
+ txt129
+TEXDEF txt129 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.125 0.890469 APEX 0.5 0.125 0.984531 RAD 0.0078125
+ txt129
+TEXDEF txt129 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.125 1 RAD 0.03125
+ txt129
+TEXDEF txt129 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.125 1 APEX 0.609531 0.125 1 RAD 0.0078125
+ txt129
+TEXDEF txt129 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.140469 1 APEX 0.5 0.234531 1 RAD 0.0078125
+ txt129
+TEXDEF txt129 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.25 0 RAD 0.03125
+ txt129
+TEXDEF txt129 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.25 0 APEX 0.609531 0.25 0 RAD 0.0078125
+ txt129
+TEXDEF txt129 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.265469 0 APEX 0.5 0.359531 0 RAD 0.0078125
+ txt129
+TEXDEF txt129 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.25 0.0154687 APEX 0.5 0.25 0.109531 RAD 0.0078125
+ txt129
+TEXDEF txt129 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.25 0.125 RAD 0.03125
+ txt129
+TEXDEF txt130 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.25 0.125 APEX 0.609531 0.25 0.125 RAD 0.0078125
+ txt130
+TEXDEF txt130 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.265469 0.125 APEX 0.5 0.359531 0.125 RAD 0.0078125
+ txt130
+TEXDEF txt130 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.25 0.140469 APEX 0.5 0.25 0.234531 RAD 0.0078125
+ txt130
+TEXDEF txt130 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.25 0.25 RAD 0.03125
+ txt130
+TEXDEF txt130 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.25 0.25 APEX 0.609531 0.25 0.25 RAD 0.0078125
+ txt130
+TEXDEF txt130 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.265469 0.25 APEX 0.5 0.359531 0.25 RAD 0.0078125
+ txt130
+TEXDEF txt130 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.25 0.265469 APEX 0.5 0.25 0.359531 RAD 0.0078125
+ txt130
+TEXDEF txt130 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.25 0.375 RAD 0.03125
+ txt130
+TEXDEF txt130 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.25 0.375 APEX 0.609531 0.25 0.375 RAD 0.0078125
+ txt130
+TEXDEF txt130 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.265469 0.375 APEX 0.5 0.359531 0.375 RAD 0.0078125
+ txt130
+TEXDEF txt131 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.25 0.390469 APEX 0.5 0.25 0.484531 RAD 0.0078125
+ txt131
+TEXDEF txt131 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.25 0.5 RAD 0.03125
+ txt131
+TEXDEF txt131 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.25 0.5 APEX 0.609531 0.25 0.5 RAD 0.0078125
+ txt131
+TEXDEF txt131 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.265469 0.5 APEX 0.5 0.359531 0.5 RAD 0.0078125
+ txt131
+TEXDEF txt131 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.25 0.515469 APEX 0.5 0.25 0.609531 RAD 0.0078125
+ txt131
+TEXDEF txt131 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.25 0.625 RAD 0.03125
+ txt131
+TEXDEF txt131 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.25 0.625 APEX 0.609531 0.25 0.625 RAD 0.0078125
+ txt131
+TEXDEF txt131 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.265469 0.625 APEX 0.5 0.359531 0.625 RAD 0.0078125
+ txt131
+TEXDEF txt131 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.25 0.640469 APEX 0.5 0.25 0.734531 RAD 0.0078125
+ txt131
+TEXDEF txt131 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.25 0.75 RAD 0.03125
+ txt131
+TEXDEF txt132 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.25 0.75 APEX 0.609531 0.25 0.75 RAD 0.0078125
+ txt132
+TEXDEF txt132 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.265469 0.75 APEX 0.5 0.359531 0.75 RAD 0.0078125
+ txt132
+TEXDEF txt132 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.25 0.765469 APEX 0.5 0.25 0.859531 RAD 0.0078125
+ txt132
+TEXDEF txt132 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.25 0.875 RAD 0.03125
+ txt132
+TEXDEF txt132 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.25 0.875 APEX 0.609531 0.25 0.875 RAD 0.0078125
+ txt132
+TEXDEF txt132 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.265469 0.875 APEX 0.5 0.359531 0.875 RAD 0.0078125
+ txt132
+TEXDEF txt132 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.25 0.890469 APEX 0.5 0.25 0.984531 RAD 0.0078125
+ txt132
+TEXDEF txt132 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.25 1 RAD 0.03125
+ txt132
+TEXDEF txt132 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.25 1 APEX 0.609531 0.25 1 RAD 0.0078125
+ txt132
+TEXDEF txt132 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.265469 1 APEX 0.5 0.359531 1 RAD 0.0078125
+ txt132
+TEXDEF txt133 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.375 0 RAD 0.03125
+ txt133
+TEXDEF txt133 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.375 0 APEX 0.609531 0.375 0 RAD 0.0078125
+ txt133
+TEXDEF txt133 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.390469 0 APEX 0.5 0.484531 0 RAD 0.0078125
+ txt133
+TEXDEF txt133 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.375 0.0154687 APEX 0.5 0.375 0.109531 RAD 0.0078125
+ txt133
+TEXDEF txt133 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.375 0.125 RAD 0.03125
+ txt133
+TEXDEF txt133 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.375 0.125 APEX 0.609531 0.375 0.125 RAD 0.0078125
+ txt133
+TEXDEF txt133 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.390469 0.125 APEX 0.5 0.484531 0.125 RAD 0.0078125
+ txt133
+TEXDEF txt133 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.375 0.140469 APEX 0.5 0.375 0.234531 RAD 0.0078125
+ txt133
+TEXDEF txt133 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.375 0.25 RAD 0.03125
+ txt133
+TEXDEF txt133 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.375 0.25 APEX 0.609531 0.375 0.25 RAD 0.0078125
+ txt133
+TEXDEF txt134 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.390469 0.25 APEX 0.5 0.484531 0.25 RAD 0.0078125
+ txt134
+TEXDEF txt134 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.375 0.265469 APEX 0.5 0.375 0.359531 RAD 0.0078125
+ txt134
+TEXDEF txt134 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.375 0.375 RAD 0.03125
+ txt134
+TEXDEF txt134 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.375 0.375 APEX 0.609531 0.375 0.375 RAD 0.0078125
+ txt134
+TEXDEF txt134 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.390469 0.375 APEX 0.5 0.484531 0.375 RAD 0.0078125
+ txt134
+TEXDEF txt134 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.375 0.390469 APEX 0.5 0.375 0.484531 RAD 0.0078125
+ txt134
+TEXDEF txt134 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.375 0.5 RAD 0.03125
+ txt134
+TEXDEF txt134 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.375 0.5 APEX 0.609531 0.375 0.5 RAD 0.0078125
+ txt134
+TEXDEF txt134 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.390469 0.5 APEX 0.5 0.484531 0.5 RAD 0.0078125
+ txt134
+TEXDEF txt134 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.375 0.515469 APEX 0.5 0.375 0.609531 RAD 0.0078125
+ txt134
+TEXDEF txt135 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.375 0.625 RAD 0.03125
+ txt135
+TEXDEF txt135 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.375 0.625 APEX 0.609531 0.375 0.625 RAD 0.0078125
+ txt135
+TEXDEF txt135 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.390469 0.625 APEX 0.5 0.484531 0.625 RAD 0.0078125
+ txt135
+TEXDEF txt135 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.375 0.640469 APEX 0.5 0.375 0.734531 RAD 0.0078125
+ txt135
+TEXDEF txt135 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.375 0.75 RAD 0.03125
+ txt135
+TEXDEF txt135 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.375 0.75 APEX 0.609531 0.375 0.75 RAD 0.0078125
+ txt135
+TEXDEF txt135 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.390469 0.75 APEX 0.5 0.484531 0.75 RAD 0.0078125
+ txt135
+TEXDEF txt135 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.375 0.765469 APEX 0.5 0.375 0.859531 RAD 0.0078125
+ txt135
+TEXDEF txt135 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.375 0.875 RAD 0.03125
+ txt135
+TEXDEF txt135 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.375 0.875 APEX 0.609531 0.375 0.875 RAD 0.0078125
+ txt135
+TEXDEF txt136 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.390469 0.875 APEX 0.5 0.484531 0.875 RAD 0.0078125
+ txt136
+TEXDEF txt136 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.375 0.890469 APEX 0.5 0.375 0.984531 RAD 0.0078125
+ txt136
+TEXDEF txt136 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.375 1 RAD 0.03125
+ txt136
+TEXDEF txt136 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.375 1 APEX 0.609531 0.375 1 RAD 0.0078125
+ txt136
+TEXDEF txt136 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.390469 1 APEX 0.5 0.484531 1 RAD 0.0078125
+ txt136
+TEXDEF txt136 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.5 0 RAD 0.03125
+ txt136
+TEXDEF txt136 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.5 0 APEX 0.609531 0.5 0 RAD 0.0078125
+ txt136
+TEXDEF txt136 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.515469 0 APEX 0.5 0.609531 0 RAD 0.0078125
+ txt136
+TEXDEF txt136 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.5 0.0154687 APEX 0.5 0.5 0.109531 RAD 0.0078125
+ txt136
+TEXDEF txt136 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.5 0.125 RAD 0.03125
+ txt136
+TEXDEF txt137 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.5 0.125 APEX 0.609531 0.5 0.125 RAD 0.0078125
+ txt137
+TEXDEF txt137 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.515469 0.125 APEX 0.5 0.609531 0.125 RAD 0.0078125
+ txt137
+TEXDEF txt137 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.5 0.140469 APEX 0.5 0.5 0.234531 RAD 0.0078125
+ txt137
+TEXDEF txt137 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.5 0.25 RAD 0.03125
+ txt137
+TEXDEF txt137 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.5 0.25 APEX 0.609531 0.5 0.25 RAD 0.0078125
+ txt137
+TEXDEF txt137 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.515469 0.25 APEX 0.5 0.609531 0.25 RAD 0.0078125
+ txt137
+TEXDEF txt137 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.5 0.265469 APEX 0.5 0.5 0.359531 RAD 0.0078125
+ txt137
+TEXDEF txt137 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.5 0.375 RAD 0.03125
+ txt137
+TEXDEF txt137 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.5 0.375 APEX 0.609531 0.5 0.375 RAD 0.0078125
+ txt137
+TEXDEF txt137 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.515469 0.375 APEX 0.5 0.609531 0.375 RAD 0.0078125
+ txt137
+TEXDEF txt138 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.5 0.390469 APEX 0.5 0.5 0.484531 RAD 0.0078125
+ txt138
+TEXDEF txt138 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.5 0.5 RAD 0.03125
+ txt138
+TEXDEF txt138 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.5 0.5 APEX 0.609531 0.5 0.5 RAD 0.0078125
+ txt138
+TEXDEF txt138 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.515469 0.5 APEX 0.5 0.609531 0.5 RAD 0.0078125
+ txt138
+TEXDEF txt138 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.5 0.515469 APEX 0.5 0.5 0.609531 RAD 0.0078125
+ txt138
+TEXDEF txt138 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.5 0.625 RAD 0.03125
+ txt138
+TEXDEF txt138 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.5 0.625 APEX 0.609531 0.5 0.625 RAD 0.0078125
+ txt138
+TEXDEF txt138 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.515469 0.625 APEX 0.5 0.609531 0.625 RAD 0.0078125
+ txt138
+TEXDEF txt138 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.5 0.640469 APEX 0.5 0.5 0.734531 RAD 0.0078125
+ txt138
+TEXDEF txt138 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.5 0.75 RAD 0.03125
+ txt138
+TEXDEF txt139 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.5 0.75 APEX 0.609531 0.5 0.75 RAD 0.0078125
+ txt139
+TEXDEF txt139 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.515469 0.75 APEX 0.5 0.609531 0.75 RAD 0.0078125
+ txt139
+TEXDEF txt139 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.5 0.765469 APEX 0.5 0.5 0.859531 RAD 0.0078125
+ txt139
+TEXDEF txt139 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.5 0.875 RAD 0.03125
+ txt139
+TEXDEF txt139 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.5 0.875 APEX 0.609531 0.5 0.875 RAD 0.0078125
+ txt139
+TEXDEF txt139 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.515469 0.875 APEX 0.5 0.609531 0.875 RAD 0.0078125
+ txt139
+TEXDEF txt139 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.5 0.890469 APEX 0.5 0.5 0.984531 RAD 0.0078125
+ txt139
+TEXDEF txt139 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.5 1 RAD 0.03125
+ txt139
+TEXDEF txt139 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.5 1 APEX 0.609531 0.5 1 RAD 0.0078125
+ txt139
+TEXDEF txt139 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.515469 1 APEX 0.5 0.609531 1 RAD 0.0078125
+ txt139
+TEXDEF txt140 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.625 0 RAD 0.03125
+ txt140
+TEXDEF txt140 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.625 0 APEX 0.609531 0.625 0 RAD 0.0078125
+ txt140
+TEXDEF txt140 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.640469 0 APEX 0.5 0.734531 0 RAD 0.0078125
+ txt140
+TEXDEF txt140 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.625 0.0154687 APEX 0.5 0.625 0.109531 RAD 0.0078125
+ txt140
+TEXDEF txt140 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.625 0.125 RAD 0.03125
+ txt140
+TEXDEF txt140 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.625 0.125 APEX 0.609531 0.625 0.125 RAD 0.0078125
+ txt140
+TEXDEF txt140 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.640469 0.125 APEX 0.5 0.734531 0.125 RAD 0.0078125
+ txt140
+TEXDEF txt140 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.625 0.140469 APEX 0.5 0.625 0.234531 RAD 0.0078125
+ txt140
+TEXDEF txt140 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.625 0.25 RAD 0.03125
+ txt140
+TEXDEF txt140 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.625 0.25 APEX 0.609531 0.625 0.25 RAD 0.0078125
+ txt140
+TEXDEF txt141 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.640469 0.25 APEX 0.5 0.734531 0.25 RAD 0.0078125
+ txt141
+TEXDEF txt141 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.625 0.265469 APEX 0.5 0.625 0.359531 RAD 0.0078125
+ txt141
+TEXDEF txt141 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.625 0.375 RAD 0.03125
+ txt141
+TEXDEF txt141 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.625 0.375 APEX 0.609531 0.625 0.375 RAD 0.0078125
+ txt141
+TEXDEF txt141 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.640469 0.375 APEX 0.5 0.734531 0.375 RAD 0.0078125
+ txt141
+TEXDEF txt141 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.625 0.390469 APEX 0.5 0.625 0.484531 RAD 0.0078125
+ txt141
+TEXDEF txt141 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.625 0.5 RAD 0.03125
+ txt141
+TEXDEF txt141 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.625 0.5 APEX 0.609531 0.625 0.5 RAD 0.0078125
+ txt141
+TEXDEF txt141 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.640469 0.5 APEX 0.5 0.734531 0.5 RAD 0.0078125
+ txt141
+TEXDEF txt141 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.625 0.515469 APEX 0.5 0.625 0.609531 RAD 0.0078125
+ txt141
+TEXDEF txt142 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.625 0.625 RAD 0.03125
+ txt142
+TEXDEF txt142 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.625 0.625 APEX 0.609531 0.625 0.625 RAD 0.0078125
+ txt142
+TEXDEF txt142 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.640469 0.625 APEX 0.5 0.734531 0.625 RAD 0.0078125
+ txt142
+TEXDEF txt142 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.625 0.640469 APEX 0.5 0.625 0.734531 RAD 0.0078125
+ txt142
+TEXDEF txt142 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.625 0.75 RAD 0.03125
+ txt142
+TEXDEF txt142 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.625 0.75 APEX 0.609531 0.625 0.75 RAD 0.0078125
+ txt142
+TEXDEF txt142 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.640469 0.75 APEX 0.5 0.734531 0.75 RAD 0.0078125
+ txt142
+TEXDEF txt142 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.625 0.765469 APEX 0.5 0.625 0.859531 RAD 0.0078125
+ txt142
+TEXDEF txt142 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.625 0.875 RAD 0.03125
+ txt142
+TEXDEF txt142 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.625 0.875 APEX 0.609531 0.625 0.875 RAD 0.0078125
+ txt142
+TEXDEF txt143 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.640469 0.875 APEX 0.5 0.734531 0.875 RAD 0.0078125
+ txt143
+TEXDEF txt143 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.625 0.890469 APEX 0.5 0.625 0.984531 RAD 0.0078125
+ txt143
+TEXDEF txt143 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.625 1 RAD 0.03125
+ txt143
+TEXDEF txt143 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.625 1 APEX 0.609531 0.625 1 RAD 0.0078125
+ txt143
+TEXDEF txt143 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.640469 1 APEX 0.5 0.734531 1 RAD 0.0078125
+ txt143
+TEXDEF txt143 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.75 0 RAD 0.03125
+ txt143
+TEXDEF txt143 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.75 0 APEX 0.609531 0.75 0 RAD 0.0078125
+ txt143
+TEXDEF txt143 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.765469 0 APEX 0.5 0.859531 0 RAD 0.0078125
+ txt143
+TEXDEF txt143 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.75 0.0154687 APEX 0.5 0.75 0.109531 RAD 0.0078125
+ txt143
+TEXDEF txt143 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.75 0.125 RAD 0.03125
+ txt143
+TEXDEF txt144 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.75 0.125 APEX 0.609531 0.75 0.125 RAD 0.0078125
+ txt144
+TEXDEF txt144 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.765469 0.125 APEX 0.5 0.859531 0.125 RAD 0.0078125
+ txt144
+TEXDEF txt144 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.75 0.140469 APEX 0.5 0.75 0.234531 RAD 0.0078125
+ txt144
+TEXDEF txt144 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.75 0.25 RAD 0.03125
+ txt144
+TEXDEF txt144 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.75 0.25 APEX 0.609531 0.75 0.25 RAD 0.0078125
+ txt144
+TEXDEF txt144 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.765469 0.25 APEX 0.5 0.859531 0.25 RAD 0.0078125
+ txt144
+TEXDEF txt144 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.75 0.265469 APEX 0.5 0.75 0.359531 RAD 0.0078125
+ txt144
+TEXDEF txt144 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.75 0.375 RAD 0.03125
+ txt144
+TEXDEF txt144 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.75 0.375 APEX 0.609531 0.75 0.375 RAD 0.0078125
+ txt144
+TEXDEF txt144 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.765469 0.375 APEX 0.5 0.859531 0.375 RAD 0.0078125
+ txt144
+TEXDEF txt145 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.75 0.390469 APEX 0.5 0.75 0.484531 RAD 0.0078125
+ txt145
+TEXDEF txt145 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.75 0.5 RAD 0.03125
+ txt145
+TEXDEF txt145 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.75 0.5 APEX 0.609531 0.75 0.5 RAD 0.0078125
+ txt145
+TEXDEF txt145 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.765469 0.5 APEX 0.5 0.859531 0.5 RAD 0.0078125
+ txt145
+TEXDEF txt145 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.75 0.515469 APEX 0.5 0.75 0.609531 RAD 0.0078125
+ txt145
+TEXDEF txt145 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.75 0.625 RAD 0.03125
+ txt145
+TEXDEF txt145 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.75 0.625 APEX 0.609531 0.75 0.625 RAD 0.0078125
+ txt145
+TEXDEF txt145 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.765469 0.625 APEX 0.5 0.859531 0.625 RAD 0.0078125
+ txt145
+TEXDEF txt145 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.75 0.640469 APEX 0.5 0.75 0.734531 RAD 0.0078125
+ txt145
+TEXDEF txt145 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.75 0.75 RAD 0.03125
+ txt145
+TEXDEF txt146 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.75 0.75 APEX 0.609531 0.75 0.75 RAD 0.0078125
+ txt146
+TEXDEF txt146 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.765469 0.75 APEX 0.5 0.859531 0.75 RAD 0.0078125
+ txt146
+TEXDEF txt146 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.75 0.765469 APEX 0.5 0.75 0.859531 RAD 0.0078125
+ txt146
+TEXDEF txt146 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.75 0.875 RAD 0.03125
+ txt146
+TEXDEF txt146 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.75 0.875 APEX 0.609531 0.75 0.875 RAD 0.0078125
+ txt146
+TEXDEF txt146 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.765469 0.875 APEX 0.5 0.859531 0.875 RAD 0.0078125
+ txt146
+TEXDEF txt146 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.75 0.890469 APEX 0.5 0.75 0.984531 RAD 0.0078125
+ txt146
+TEXDEF txt146 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.75 1 RAD 0.03125
+ txt146
+TEXDEF txt146 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.75 1 APEX 0.609531 0.75 1 RAD 0.0078125
+ txt146
+TEXDEF txt146 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.765469 1 APEX 0.5 0.859531 1 RAD 0.0078125
+ txt146
+TEXDEF txt147 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.875 0 RAD 0.03125
+ txt147
+TEXDEF txt147 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.875 0 APEX 0.609531 0.875 0 RAD 0.0078125
+ txt147
+TEXDEF txt147 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.890469 0 APEX 0.5 0.984531 0 RAD 0.0078125
+ txt147
+TEXDEF txt147 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.875 0.0154687 APEX 0.5 0.875 0.109531 RAD 0.0078125
+ txt147
+TEXDEF txt147 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.875 0.125 RAD 0.03125
+ txt147
+TEXDEF txt147 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.875 0.125 APEX 0.609531 0.875 0.125 RAD 0.0078125
+ txt147
+TEXDEF txt147 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.890469 0.125 APEX 0.5 0.984531 0.125 RAD 0.0078125
+ txt147
+TEXDEF txt147 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.875 0.140469 APEX 0.5 0.875 0.234531 RAD 0.0078125
+ txt147
+TEXDEF txt147 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.875 0.25 RAD 0.03125
+ txt147
+TEXDEF txt147 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.875 0.25 APEX 0.609531 0.875 0.25 RAD 0.0078125
+ txt147
+TEXDEF txt148 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.890469 0.25 APEX 0.5 0.984531 0.25 RAD 0.0078125
+ txt148
+TEXDEF txt148 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.875 0.265469 APEX 0.5 0.875 0.359531 RAD 0.0078125
+ txt148
+TEXDEF txt148 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.875 0.375 RAD 0.03125
+ txt148
+TEXDEF txt148 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.875 0.375 APEX 0.609531 0.875 0.375 RAD 0.0078125
+ txt148
+TEXDEF txt148 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.890469 0.375 APEX 0.5 0.984531 0.375 RAD 0.0078125
+ txt148
+TEXDEF txt148 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.875 0.390469 APEX 0.5 0.875 0.484531 RAD 0.0078125
+ txt148
+TEXDEF txt148 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.875 0.5 RAD 0.03125
+ txt148
+TEXDEF txt148 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.875 0.5 APEX 0.609531 0.875 0.5 RAD 0.0078125
+ txt148
+TEXDEF txt148 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.890469 0.5 APEX 0.5 0.984531 0.5 RAD 0.0078125
+ txt148
+TEXDEF txt148 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.875 0.515469 APEX 0.5 0.875 0.609531 RAD 0.0078125
+ txt148
+TEXDEF txt149 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.875 0.625 RAD 0.03125
+ txt149
+TEXDEF txt149 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.875 0.625 APEX 0.609531 0.875 0.625 RAD 0.0078125
+ txt149
+TEXDEF txt149 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.890469 0.625 APEX 0.5 0.984531 0.625 RAD 0.0078125
+ txt149
+TEXDEF txt149 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.875 0.640469 APEX 0.5 0.875 0.734531 RAD 0.0078125
+ txt149
+TEXDEF txt149 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.875 0.75 RAD 0.03125
+ txt149
+TEXDEF txt149 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.875 0.75 APEX 0.609531 0.875 0.75 RAD 0.0078125
+ txt149
+TEXDEF txt149 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.890469 0.75 APEX 0.5 0.984531 0.75 RAD 0.0078125
+ txt149
+TEXDEF txt149 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.875 0.765469 APEX 0.5 0.875 0.859531 RAD 0.0078125
+ txt149
+TEXDEF txt149 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.875 0.875 RAD 0.03125
+ txt149
+TEXDEF txt149 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.875 0.875 APEX 0.609531 0.875 0.875 RAD 0.0078125
+ txt149
+TEXDEF txt150 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.890469 0.875 APEX 0.5 0.984531 0.875 RAD 0.0078125
+ txt150
+TEXDEF txt150 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.875 0.890469 APEX 0.5 0.875 0.984531 RAD 0.0078125
+ txt150
+TEXDEF txt150 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 0.875 1 RAD 0.03125
+ txt150
+TEXDEF txt150 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 0.875 1 APEX 0.609531 0.875 1 RAD 0.0078125
+ txt150
+TEXDEF txt150 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 0.890469 1 APEX 0.5 0.984531 1 RAD 0.0078125
+ txt150
+TEXDEF txt150 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 1 0 RAD 0.03125
+ txt150
+TEXDEF txt150 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 1 0 APEX 0.609531 1 0 RAD 0.0078125
+ txt150
+TEXDEF txt150 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 1 0.0154687 APEX 0.5 1 0.109531 RAD 0.0078125
+ txt150
+TEXDEF txt150 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 1 0.125 RAD 0.03125
+ txt150
+TEXDEF txt150 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 1 0.125 APEX 0.609531 1 0.125 RAD 0.0078125
+ txt150
+TEXDEF txt151 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 1 0.140469 APEX 0.5 1 0.234531 RAD 0.0078125
+ txt151
+TEXDEF txt151 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 1 0.25 RAD 0.03125
+ txt151
+TEXDEF txt151 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 1 0.25 APEX 0.609531 1 0.25 RAD 0.0078125
+ txt151
+TEXDEF txt151 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 1 0.265469 APEX 0.5 1 0.359531 RAD 0.0078125
+ txt151
+TEXDEF txt151 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 1 0.375 RAD 0.03125
+ txt151
+TEXDEF txt151 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 1 0.375 APEX 0.609531 1 0.375 RAD 0.0078125
+ txt151
+TEXDEF txt151 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 1 0.390469 APEX 0.5 1 0.484531 RAD 0.0078125
+ txt151
+TEXDEF txt151 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 1 0.5 RAD 0.03125
+ txt151
+TEXDEF txt151 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 1 0.5 APEX 0.609531 1 0.5 RAD 0.0078125
+ txt151
+TEXDEF txt151 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 1 0.515469 APEX 0.5 1 0.609531 RAD 0.0078125
+ txt151
+TEXDEF txt152 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 1 0.625 RAD 0.03125
+ txt152
+TEXDEF txt152 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 1 0.625 APEX 0.609531 1 0.625 RAD 0.0078125
+ txt152
+TEXDEF txt152 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 1 0.640469 APEX 0.5 1 0.734531 RAD 0.0078125
+ txt152
+TEXDEF txt152 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 1 0.75 RAD 0.03125
+ txt152
+TEXDEF txt152 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 1 0.75 APEX 0.609531 1 0.75 RAD 0.0078125
+ txt152
+TEXDEF txt152 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 1 0.765469 APEX 0.5 1 0.859531 RAD 0.0078125
+ txt152
+TEXDEF txt152 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 1 0.875 RAD 0.03125
+ txt152
+TEXDEF txt152 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 1 0.875 APEX 0.609531 1 0.875 RAD 0.0078125
+ txt152
+TEXDEF txt152 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.5 1 0.890469 APEX 0.5 1 0.984531 RAD 0.0078125
+ txt152
+TEXDEF txt152 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.5 1 1 RAD 0.03125
+ txt152
+TEXDEF txt153 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.515469 1 1 APEX 0.609531 1 1 RAD 0.0078125
+ txt153
+TEXDEF txt153 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0 0 RAD 0.03125
+ txt153
+TEXDEF txt153 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0 0 APEX 0.734531 0 0 RAD 0.0078125
+ txt153
+TEXDEF txt153 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.0154687 0 APEX 0.625 0.109531 0 RAD 0.0078125
+ txt153
+TEXDEF txt153 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0 0.0154687 APEX 0.625 0 0.109531 RAD 0.0078125
+ txt153
+TEXDEF txt153 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0 0.125 RAD 0.03125
+ txt153
+TEXDEF txt153 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0 0.125 APEX 0.734531 0 0.125 RAD 0.0078125
+ txt153
+TEXDEF txt153 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.0154687 0.125 APEX 0.625 0.109531 0.125 RAD 0.0078125
+ txt153
+TEXDEF txt153 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0 0.140469 APEX 0.625 0 0.234531 RAD 0.0078125
+ txt153
+TEXDEF txt153 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0 0.25 RAD 0.03125
+ txt153
+TEXDEF txt154 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0 0.25 APEX 0.734531 0 0.25 RAD 0.0078125
+ txt154
+TEXDEF txt154 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.0154687 0.25 APEX 0.625 0.109531 0.25 RAD 0.0078125
+ txt154
+TEXDEF txt154 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0 0.265469 APEX 0.625 0 0.359531 RAD 0.0078125
+ txt154
+TEXDEF txt154 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0 0.375 RAD 0.03125
+ txt154
+TEXDEF txt154 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0 0.375 APEX 0.734531 0 0.375 RAD 0.0078125
+ txt154
+TEXDEF txt154 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.0154687 0.375 APEX 0.625 0.109531 0.375 RAD 0.0078125
+ txt154
+TEXDEF txt154 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0 0.390469 APEX 0.625 0 0.484531 RAD 0.0078125
+ txt154
+TEXDEF txt154 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0 0.5 RAD 0.03125
+ txt154
+TEXDEF txt154 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0 0.5 APEX 0.734531 0 0.5 RAD 0.0078125
+ txt154
+TEXDEF txt154 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.0154687 0.5 APEX 0.625 0.109531 0.5 RAD 0.0078125
+ txt154
+TEXDEF txt155 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0 0.515469 APEX 0.625 0 0.609531 RAD 0.0078125
+ txt155
+TEXDEF txt155 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0 0.625 RAD 0.03125
+ txt155
+TEXDEF txt155 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0 0.625 APEX 0.734531 0 0.625 RAD 0.0078125
+ txt155
+TEXDEF txt155 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.0154687 0.625 APEX 0.625 0.109531 0.625 RAD 0.0078125
+ txt155
+TEXDEF txt155 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0 0.640469 APEX 0.625 0 0.734531 RAD 0.0078125
+ txt155
+TEXDEF txt155 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0 0.75 RAD 0.03125
+ txt155
+TEXDEF txt155 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0 0.75 APEX 0.734531 0 0.75 RAD 0.0078125
+ txt155
+TEXDEF txt155 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.0154687 0.75 APEX 0.625 0.109531 0.75 RAD 0.0078125
+ txt155
+TEXDEF txt155 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0 0.765469 APEX 0.625 0 0.859531 RAD 0.0078125
+ txt155
+TEXDEF txt155 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0 0.875 RAD 0.03125
+ txt155
+TEXDEF txt156 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0 0.875 APEX 0.734531 0 0.875 RAD 0.0078125
+ txt156
+TEXDEF txt156 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.0154687 0.875 APEX 0.625 0.109531 0.875 RAD 0.0078125
+ txt156
+TEXDEF txt156 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0 0.890469 APEX 0.625 0 0.984531 RAD 0.0078125
+ txt156
+TEXDEF txt156 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0 1 RAD 0.03125
+ txt156
+TEXDEF txt156 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0 1 APEX 0.734531 0 1 RAD 0.0078125
+ txt156
+TEXDEF txt156 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.0154687 1 APEX 0.625 0.109531 1 RAD 0.0078125
+ txt156
+TEXDEF txt156 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.125 0 RAD 0.03125
+ txt156
+TEXDEF txt156 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.125 0 APEX 0.734531 0.125 0 RAD 0.0078125
+ txt156
+TEXDEF txt156 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.140469 0 APEX 0.625 0.234531 0 RAD 0.0078125
+ txt156
+TEXDEF txt156 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.125 0.0154687 APEX 0.625 0.125 0.109531 RAD 0.0078125
+ txt156
+TEXDEF txt157 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.125 0.125 RAD 0.03125
+ txt157
+TEXDEF txt157 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.125 0.125 APEX 0.734531 0.125 0.125 RAD 0.0078125
+ txt157
+TEXDEF txt157 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.140469 0.125 APEX 0.625 0.234531 0.125 RAD 0.0078125
+ txt157
+TEXDEF txt157 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.125 0.140469 APEX 0.625 0.125 0.234531 RAD 0.0078125
+ txt157
+TEXDEF txt157 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.125 0.25 RAD 0.03125
+ txt157
+TEXDEF txt157 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.125 0.25 APEX 0.734531 0.125 0.25 RAD 0.0078125
+ txt157
+TEXDEF txt157 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.140469 0.25 APEX 0.625 0.234531 0.25 RAD 0.0078125
+ txt157
+TEXDEF txt157 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.125 0.265469 APEX 0.625 0.125 0.359531 RAD 0.0078125
+ txt157
+TEXDEF txt157 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.125 0.375 RAD 0.03125
+ txt157
+TEXDEF txt157 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.125 0.375 APEX 0.734531 0.125 0.375 RAD 0.0078125
+ txt157
+TEXDEF txt158 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.140469 0.375 APEX 0.625 0.234531 0.375 RAD 0.0078125
+ txt158
+TEXDEF txt158 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.125 0.390469 APEX 0.625 0.125 0.484531 RAD 0.0078125
+ txt158
+TEXDEF txt158 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.125 0.5 RAD 0.03125
+ txt158
+TEXDEF txt158 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.125 0.5 APEX 0.734531 0.125 0.5 RAD 0.0078125
+ txt158
+TEXDEF txt158 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.140469 0.5 APEX 0.625 0.234531 0.5 RAD 0.0078125
+ txt158
+TEXDEF txt158 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.125 0.515469 APEX 0.625 0.125 0.609531 RAD 0.0078125
+ txt158
+TEXDEF txt158 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.125 0.625 RAD 0.03125
+ txt158
+TEXDEF txt158 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.125 0.625 APEX 0.734531 0.125 0.625 RAD 0.0078125
+ txt158
+TEXDEF txt158 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.140469 0.625 APEX 0.625 0.234531 0.625 RAD 0.0078125
+ txt158
+TEXDEF txt158 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.125 0.640469 APEX 0.625 0.125 0.734531 RAD 0.0078125
+ txt158
+TEXDEF txt159 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.125 0.75 RAD 0.03125
+ txt159
+TEXDEF txt159 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.125 0.75 APEX 0.734531 0.125 0.75 RAD 0.0078125
+ txt159
+TEXDEF txt159 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.140469 0.75 APEX 0.625 0.234531 0.75 RAD 0.0078125
+ txt159
+TEXDEF txt159 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.125 0.765469 APEX 0.625 0.125 0.859531 RAD 0.0078125
+ txt159
+TEXDEF txt159 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.125 0.875 RAD 0.03125
+ txt159
+TEXDEF txt159 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.125 0.875 APEX 0.734531 0.125 0.875 RAD 0.0078125
+ txt159
+TEXDEF txt159 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.140469 0.875 APEX 0.625 0.234531 0.875 RAD 0.0078125
+ txt159
+TEXDEF txt159 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.125 0.890469 APEX 0.625 0.125 0.984531 RAD 0.0078125
+ txt159
+TEXDEF txt159 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.125 1 RAD 0.03125
+ txt159
+TEXDEF txt159 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.125 1 APEX 0.734531 0.125 1 RAD 0.0078125
+ txt159
+TEXDEF txt160 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.140469 1 APEX 0.625 0.234531 1 RAD 0.0078125
+ txt160
+TEXDEF txt160 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.25 0 RAD 0.03125
+ txt160
+TEXDEF txt160 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.25 0 APEX 0.734531 0.25 0 RAD 0.0078125
+ txt160
+TEXDEF txt160 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.265469 0 APEX 0.625 0.359531 0 RAD 0.0078125
+ txt160
+TEXDEF txt160 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.25 0.0154687 APEX 0.625 0.25 0.109531 RAD 0.0078125
+ txt160
+TEXDEF txt160 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.25 0.125 RAD 0.03125
+ txt160
+TEXDEF txt160 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.25 0.125 APEX 0.734531 0.25 0.125 RAD 0.0078125
+ txt160
+TEXDEF txt160 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.265469 0.125 APEX 0.625 0.359531 0.125 RAD 0.0078125
+ txt160
+TEXDEF txt160 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.25 0.140469 APEX 0.625 0.25 0.234531 RAD 0.0078125
+ txt160
+TEXDEF txt160 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.25 0.25 RAD 0.03125
+ txt160
+TEXDEF txt161 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.25 0.25 APEX 0.734531 0.25 0.25 RAD 0.0078125
+ txt161
+TEXDEF txt161 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.265469 0.25 APEX 0.625 0.359531 0.25 RAD 0.0078125
+ txt161
+TEXDEF txt161 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.25 0.265469 APEX 0.625 0.25 0.359531 RAD 0.0078125
+ txt161
+TEXDEF txt161 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.25 0.375 RAD 0.03125
+ txt161
+TEXDEF txt161 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.25 0.375 APEX 0.734531 0.25 0.375 RAD 0.0078125
+ txt161
+TEXDEF txt161 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.265469 0.375 APEX 0.625 0.359531 0.375 RAD 0.0078125
+ txt161
+TEXDEF txt161 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.25 0.390469 APEX 0.625 0.25 0.484531 RAD 0.0078125
+ txt161
+TEXDEF txt161 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.25 0.5 RAD 0.03125
+ txt161
+TEXDEF txt161 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.25 0.5 APEX 0.734531 0.25 0.5 RAD 0.0078125
+ txt161
+TEXDEF txt161 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.265469 0.5 APEX 0.625 0.359531 0.5 RAD 0.0078125
+ txt161
+TEXDEF txt162 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.25 0.515469 APEX 0.625 0.25 0.609531 RAD 0.0078125
+ txt162
+TEXDEF txt162 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.25 0.625 RAD 0.03125
+ txt162
+TEXDEF txt162 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.25 0.625 APEX 0.734531 0.25 0.625 RAD 0.0078125
+ txt162
+TEXDEF txt162 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.265469 0.625 APEX 0.625 0.359531 0.625 RAD 0.0078125
+ txt162
+TEXDEF txt162 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.25 0.640469 APEX 0.625 0.25 0.734531 RAD 0.0078125
+ txt162
+TEXDEF txt162 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.25 0.75 RAD 0.03125
+ txt162
+TEXDEF txt162 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.25 0.75 APEX 0.734531 0.25 0.75 RAD 0.0078125
+ txt162
+TEXDEF txt162 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.265469 0.75 APEX 0.625 0.359531 0.75 RAD 0.0078125
+ txt162
+TEXDEF txt162 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.25 0.765469 APEX 0.625 0.25 0.859531 RAD 0.0078125
+ txt162
+TEXDEF txt162 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.25 0.875 RAD 0.03125
+ txt162
+TEXDEF txt163 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.25 0.875 APEX 0.734531 0.25 0.875 RAD 0.0078125
+ txt163
+TEXDEF txt163 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.265469 0.875 APEX 0.625 0.359531 0.875 RAD 0.0078125
+ txt163
+TEXDEF txt163 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.25 0.890469 APEX 0.625 0.25 0.984531 RAD 0.0078125
+ txt163
+TEXDEF txt163 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.25 1 RAD 0.03125
+ txt163
+TEXDEF txt163 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.25 1 APEX 0.734531 0.25 1 RAD 0.0078125
+ txt163
+TEXDEF txt163 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.265469 1 APEX 0.625 0.359531 1 RAD 0.0078125
+ txt163
+TEXDEF txt163 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.375 0 RAD 0.03125
+ txt163
+TEXDEF txt163 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.375 0 APEX 0.734531 0.375 0 RAD 0.0078125
+ txt163
+TEXDEF txt163 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.390469 0 APEX 0.625 0.484531 0 RAD 0.0078125
+ txt163
+TEXDEF txt163 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.375 0.0154687 APEX 0.625 0.375 0.109531 RAD 0.0078125
+ txt163
+TEXDEF txt164 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.375 0.125 RAD 0.03125
+ txt164
+TEXDEF txt164 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.375 0.125 APEX 0.734531 0.375 0.125 RAD 0.0078125
+ txt164
+TEXDEF txt164 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.390469 0.125 APEX 0.625 0.484531 0.125 RAD 0.0078125
+ txt164
+TEXDEF txt164 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.375 0.140469 APEX 0.625 0.375 0.234531 RAD 0.0078125
+ txt164
+TEXDEF txt164 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.375 0.25 RAD 0.03125
+ txt164
+TEXDEF txt164 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.375 0.25 APEX 0.734531 0.375 0.25 RAD 0.0078125
+ txt164
+TEXDEF txt164 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.390469 0.25 APEX 0.625 0.484531 0.25 RAD 0.0078125
+ txt164
+TEXDEF txt164 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.375 0.265469 APEX 0.625 0.375 0.359531 RAD 0.0078125
+ txt164
+TEXDEF txt164 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.375 0.375 RAD 0.03125
+ txt164
+TEXDEF txt164 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.375 0.375 APEX 0.734531 0.375 0.375 RAD 0.0078125
+ txt164
+TEXDEF txt165 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.390469 0.375 APEX 0.625 0.484531 0.375 RAD 0.0078125
+ txt165
+TEXDEF txt165 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.375 0.390469 APEX 0.625 0.375 0.484531 RAD 0.0078125
+ txt165
+TEXDEF txt165 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.375 0.5 RAD 0.03125
+ txt165
+TEXDEF txt165 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.375 0.5 APEX 0.734531 0.375 0.5 RAD 0.0078125
+ txt165
+TEXDEF txt165 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.390469 0.5 APEX 0.625 0.484531 0.5 RAD 0.0078125
+ txt165
+TEXDEF txt165 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.375 0.515469 APEX 0.625 0.375 0.609531 RAD 0.0078125
+ txt165
+TEXDEF txt165 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.375 0.625 RAD 0.03125
+ txt165
+TEXDEF txt165 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.375 0.625 APEX 0.734531 0.375 0.625 RAD 0.0078125
+ txt165
+TEXDEF txt165 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.390469 0.625 APEX 0.625 0.484531 0.625 RAD 0.0078125
+ txt165
+TEXDEF txt165 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.375 0.640469 APEX 0.625 0.375 0.734531 RAD 0.0078125
+ txt165
+TEXDEF txt166 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.375 0.75 RAD 0.03125
+ txt166
+TEXDEF txt166 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.375 0.75 APEX 0.734531 0.375 0.75 RAD 0.0078125
+ txt166
+TEXDEF txt166 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.390469 0.75 APEX 0.625 0.484531 0.75 RAD 0.0078125
+ txt166
+TEXDEF txt166 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.375 0.765469 APEX 0.625 0.375 0.859531 RAD 0.0078125
+ txt166
+TEXDEF txt166 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.375 0.875 RAD 0.03125
+ txt166
+TEXDEF txt166 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.375 0.875 APEX 0.734531 0.375 0.875 RAD 0.0078125
+ txt166
+TEXDEF txt166 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.390469 0.875 APEX 0.625 0.484531 0.875 RAD 0.0078125
+ txt166
+TEXDEF txt166 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.375 0.890469 APEX 0.625 0.375 0.984531 RAD 0.0078125
+ txt166
+TEXDEF txt166 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.375 1 RAD 0.03125
+ txt166
+TEXDEF txt166 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.375 1 APEX 0.734531 0.375 1 RAD 0.0078125
+ txt166
+TEXDEF txt167 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.390469 1 APEX 0.625 0.484531 1 RAD 0.0078125
+ txt167
+TEXDEF txt167 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.5 0 RAD 0.03125
+ txt167
+TEXDEF txt167 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.5 0 APEX 0.734531 0.5 0 RAD 0.0078125
+ txt167
+TEXDEF txt167 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.515469 0 APEX 0.625 0.609531 0 RAD 0.0078125
+ txt167
+TEXDEF txt167 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.5 0.0154687 APEX 0.625 0.5 0.109531 RAD 0.0078125
+ txt167
+TEXDEF txt167 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.5 0.125 RAD 0.03125
+ txt167
+TEXDEF txt167 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.5 0.125 APEX 0.734531 0.5 0.125 RAD 0.0078125
+ txt167
+TEXDEF txt167 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.515469 0.125 APEX 0.625 0.609531 0.125 RAD 0.0078125
+ txt167
+TEXDEF txt167 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.5 0.140469 APEX 0.625 0.5 0.234531 RAD 0.0078125
+ txt167
+TEXDEF txt167 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.5 0.25 RAD 0.03125
+ txt167
+TEXDEF txt168 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.5 0.25 APEX 0.734531 0.5 0.25 RAD 0.0078125
+ txt168
+TEXDEF txt168 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.515469 0.25 APEX 0.625 0.609531 0.25 RAD 0.0078125
+ txt168
+TEXDEF txt168 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.5 0.265469 APEX 0.625 0.5 0.359531 RAD 0.0078125
+ txt168
+TEXDEF txt168 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.5 0.375 RAD 0.03125
+ txt168
+TEXDEF txt168 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.5 0.375 APEX 0.734531 0.5 0.375 RAD 0.0078125
+ txt168
+TEXDEF txt168 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.515469 0.375 APEX 0.625 0.609531 0.375 RAD 0.0078125
+ txt168
+TEXDEF txt168 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.5 0.390469 APEX 0.625 0.5 0.484531 RAD 0.0078125
+ txt168
+TEXDEF txt168 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.5 0.5 RAD 0.03125
+ txt168
+TEXDEF txt168 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.5 0.5 APEX 0.734531 0.5 0.5 RAD 0.0078125
+ txt168
+TEXDEF txt168 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.515469 0.5 APEX 0.625 0.609531 0.5 RAD 0.0078125
+ txt168
+TEXDEF txt169 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.5 0.515469 APEX 0.625 0.5 0.609531 RAD 0.0078125
+ txt169
+TEXDEF txt169 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.5 0.625 RAD 0.03125
+ txt169
+TEXDEF txt169 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.5 0.625 APEX 0.734531 0.5 0.625 RAD 0.0078125
+ txt169
+TEXDEF txt169 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.515469 0.625 APEX 0.625 0.609531 0.625 RAD 0.0078125
+ txt169
+TEXDEF txt169 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.5 0.640469 APEX 0.625 0.5 0.734531 RAD 0.0078125
+ txt169
+TEXDEF txt169 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.5 0.75 RAD 0.03125
+ txt169
+TEXDEF txt169 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.5 0.75 APEX 0.734531 0.5 0.75 RAD 0.0078125
+ txt169
+TEXDEF txt169 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.515469 0.75 APEX 0.625 0.609531 0.75 RAD 0.0078125
+ txt169
+TEXDEF txt169 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.5 0.765469 APEX 0.625 0.5 0.859531 RAD 0.0078125
+ txt169
+TEXDEF txt169 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.5 0.875 RAD 0.03125
+ txt169
+TEXDEF txt170 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.5 0.875 APEX 0.734531 0.5 0.875 RAD 0.0078125
+ txt170
+TEXDEF txt170 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.515469 0.875 APEX 0.625 0.609531 0.875 RAD 0.0078125
+ txt170
+TEXDEF txt170 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.5 0.890469 APEX 0.625 0.5 0.984531 RAD 0.0078125
+ txt170
+TEXDEF txt170 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.5 1 RAD 0.03125
+ txt170
+TEXDEF txt170 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.5 1 APEX 0.734531 0.5 1 RAD 0.0078125
+ txt170
+TEXDEF txt170 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.515469 1 APEX 0.625 0.609531 1 RAD 0.0078125
+ txt170
+TEXDEF txt170 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.625 0 RAD 0.03125
+ txt170
+TEXDEF txt170 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.625 0 APEX 0.734531 0.625 0 RAD 0.0078125
+ txt170
+TEXDEF txt170 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.640469 0 APEX 0.625 0.734531 0 RAD 0.0078125
+ txt170
+TEXDEF txt170 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.625 0.0154687 APEX 0.625 0.625 0.109531 RAD 0.0078125
+ txt170
+TEXDEF txt171 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.625 0.125 RAD 0.03125
+ txt171
+TEXDEF txt171 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.625 0.125 APEX 0.734531 0.625 0.125 RAD 0.0078125
+ txt171
+TEXDEF txt171 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.640469 0.125 APEX 0.625 0.734531 0.125 RAD 0.0078125
+ txt171
+TEXDEF txt171 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.625 0.140469 APEX 0.625 0.625 0.234531 RAD 0.0078125
+ txt171
+TEXDEF txt171 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.625 0.25 RAD 0.03125
+ txt171
+TEXDEF txt171 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.625 0.25 APEX 0.734531 0.625 0.25 RAD 0.0078125
+ txt171
+TEXDEF txt171 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.640469 0.25 APEX 0.625 0.734531 0.25 RAD 0.0078125
+ txt171
+TEXDEF txt171 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.625 0.265469 APEX 0.625 0.625 0.359531 RAD 0.0078125
+ txt171
+TEXDEF txt171 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.625 0.375 RAD 0.03125
+ txt171
+TEXDEF txt171 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.625 0.375 APEX 0.734531 0.625 0.375 RAD 0.0078125
+ txt171
+TEXDEF txt172 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.640469 0.375 APEX 0.625 0.734531 0.375 RAD 0.0078125
+ txt172
+TEXDEF txt172 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.625 0.390469 APEX 0.625 0.625 0.484531 RAD 0.0078125
+ txt172
+TEXDEF txt172 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.625 0.5 RAD 0.03125
+ txt172
+TEXDEF txt172 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.625 0.5 APEX 0.734531 0.625 0.5 RAD 0.0078125
+ txt172
+TEXDEF txt172 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.640469 0.5 APEX 0.625 0.734531 0.5 RAD 0.0078125
+ txt172
+TEXDEF txt172 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.625 0.515469 APEX 0.625 0.625 0.609531 RAD 0.0078125
+ txt172
+TEXDEF txt172 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.625 0.625 RAD 0.03125
+ txt172
+TEXDEF txt172 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.625 0.625 APEX 0.734531 0.625 0.625 RAD 0.0078125
+ txt172
+TEXDEF txt172 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.640469 0.625 APEX 0.625 0.734531 0.625 RAD 0.0078125
+ txt172
+TEXDEF txt172 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.625 0.640469 APEX 0.625 0.625 0.734531 RAD 0.0078125
+ txt172
+TEXDEF txt173 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.625 0.75 RAD 0.03125
+ txt173
+TEXDEF txt173 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.625 0.75 APEX 0.734531 0.625 0.75 RAD 0.0078125
+ txt173
+TEXDEF txt173 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.640469 0.75 APEX 0.625 0.734531 0.75 RAD 0.0078125
+ txt173
+TEXDEF txt173 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.625 0.765469 APEX 0.625 0.625 0.859531 RAD 0.0078125
+ txt173
+TEXDEF txt173 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.625 0.875 RAD 0.03125
+ txt173
+TEXDEF txt173 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.625 0.875 APEX 0.734531 0.625 0.875 RAD 0.0078125
+ txt173
+TEXDEF txt173 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.640469 0.875 APEX 0.625 0.734531 0.875 RAD 0.0078125
+ txt173
+TEXDEF txt173 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.625 0.890469 APEX 0.625 0.625 0.984531 RAD 0.0078125
+ txt173
+TEXDEF txt173 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.625 1 RAD 0.03125
+ txt173
+TEXDEF txt173 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.625 1 APEX 0.734531 0.625 1 RAD 0.0078125
+ txt173
+TEXDEF txt174 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.640469 1 APEX 0.625 0.734531 1 RAD 0.0078125
+ txt174
+TEXDEF txt174 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.75 0 RAD 0.03125
+ txt174
+TEXDEF txt174 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.75 0 APEX 0.734531 0.75 0 RAD 0.0078125
+ txt174
+TEXDEF txt174 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.765469 0 APEX 0.625 0.859531 0 RAD 0.0078125
+ txt174
+TEXDEF txt174 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.75 0.0154687 APEX 0.625 0.75 0.109531 RAD 0.0078125
+ txt174
+TEXDEF txt174 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.75 0.125 RAD 0.03125
+ txt174
+TEXDEF txt174 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.75 0.125 APEX 0.734531 0.75 0.125 RAD 0.0078125
+ txt174
+TEXDEF txt174 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.765469 0.125 APEX 0.625 0.859531 0.125 RAD 0.0078125
+ txt174
+TEXDEF txt174 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.75 0.140469 APEX 0.625 0.75 0.234531 RAD 0.0078125
+ txt174
+TEXDEF txt174 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.75 0.25 RAD 0.03125
+ txt174
+TEXDEF txt175 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.75 0.25 APEX 0.734531 0.75 0.25 RAD 0.0078125
+ txt175
+TEXDEF txt175 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.765469 0.25 APEX 0.625 0.859531 0.25 RAD 0.0078125
+ txt175
+TEXDEF txt175 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.75 0.265469 APEX 0.625 0.75 0.359531 RAD 0.0078125
+ txt175
+TEXDEF txt175 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.75 0.375 RAD 0.03125
+ txt175
+TEXDEF txt175 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.75 0.375 APEX 0.734531 0.75 0.375 RAD 0.0078125
+ txt175
+TEXDEF txt175 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.765469 0.375 APEX 0.625 0.859531 0.375 RAD 0.0078125
+ txt175
+TEXDEF txt175 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.75 0.390469 APEX 0.625 0.75 0.484531 RAD 0.0078125
+ txt175
+TEXDEF txt175 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.75 0.5 RAD 0.03125
+ txt175
+TEXDEF txt175 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.75 0.5 APEX 0.734531 0.75 0.5 RAD 0.0078125
+ txt175
+TEXDEF txt175 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.765469 0.5 APEX 0.625 0.859531 0.5 RAD 0.0078125
+ txt175
+TEXDEF txt176 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.75 0.515469 APEX 0.625 0.75 0.609531 RAD 0.0078125
+ txt176
+TEXDEF txt176 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.75 0.625 RAD 0.03125
+ txt176
+TEXDEF txt176 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.75 0.625 APEX 0.734531 0.75 0.625 RAD 0.0078125
+ txt176
+TEXDEF txt176 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.765469 0.625 APEX 0.625 0.859531 0.625 RAD 0.0078125
+ txt176
+TEXDEF txt176 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.75 0.640469 APEX 0.625 0.75 0.734531 RAD 0.0078125
+ txt176
+TEXDEF txt176 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.75 0.75 RAD 0.03125
+ txt176
+TEXDEF txt176 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.75 0.75 APEX 0.734531 0.75 0.75 RAD 0.0078125
+ txt176
+TEXDEF txt176 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.765469 0.75 APEX 0.625 0.859531 0.75 RAD 0.0078125
+ txt176
+TEXDEF txt176 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.75 0.765469 APEX 0.625 0.75 0.859531 RAD 0.0078125
+ txt176
+TEXDEF txt176 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.75 0.875 RAD 0.03125
+ txt176
+TEXDEF txt177 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.75 0.875 APEX 0.734531 0.75 0.875 RAD 0.0078125
+ txt177
+TEXDEF txt177 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.765469 0.875 APEX 0.625 0.859531 0.875 RAD 0.0078125
+ txt177
+TEXDEF txt177 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.75 0.890469 APEX 0.625 0.75 0.984531 RAD 0.0078125
+ txt177
+TEXDEF txt177 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.75 1 RAD 0.03125
+ txt177
+TEXDEF txt177 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.75 1 APEX 0.734531 0.75 1 RAD 0.0078125
+ txt177
+TEXDEF txt177 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.765469 1 APEX 0.625 0.859531 1 RAD 0.0078125
+ txt177
+TEXDEF txt177 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.875 0 RAD 0.03125
+ txt177
+TEXDEF txt177 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.875 0 APEX 0.734531 0.875 0 RAD 0.0078125
+ txt177
+TEXDEF txt177 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.890469 0 APEX 0.625 0.984531 0 RAD 0.0078125
+ txt177
+TEXDEF txt177 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.875 0.0154687 APEX 0.625 0.875 0.109531 RAD 0.0078125
+ txt177
+TEXDEF txt178 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.875 0.125 RAD 0.03125
+ txt178
+TEXDEF txt178 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.875 0.125 APEX 0.734531 0.875 0.125 RAD 0.0078125
+ txt178
+TEXDEF txt178 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.890469 0.125 APEX 0.625 0.984531 0.125 RAD 0.0078125
+ txt178
+TEXDEF txt178 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.875 0.140469 APEX 0.625 0.875 0.234531 RAD 0.0078125
+ txt178
+TEXDEF txt178 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.875 0.25 RAD 0.03125
+ txt178
+TEXDEF txt178 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.875 0.25 APEX 0.734531 0.875 0.25 RAD 0.0078125
+ txt178
+TEXDEF txt178 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.890469 0.25 APEX 0.625 0.984531 0.25 RAD 0.0078125
+ txt178
+TEXDEF txt178 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.875 0.265469 APEX 0.625 0.875 0.359531 RAD 0.0078125
+ txt178
+TEXDEF txt178 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.875 0.375 RAD 0.03125
+ txt178
+TEXDEF txt178 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.875 0.375 APEX 0.734531 0.875 0.375 RAD 0.0078125
+ txt178
+TEXDEF txt179 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.890469 0.375 APEX 0.625 0.984531 0.375 RAD 0.0078125
+ txt179
+TEXDEF txt179 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.875 0.390469 APEX 0.625 0.875 0.484531 RAD 0.0078125
+ txt179
+TEXDEF txt179 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.875 0.5 RAD 0.03125
+ txt179
+TEXDEF txt179 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.875 0.5 APEX 0.734531 0.875 0.5 RAD 0.0078125
+ txt179
+TEXDEF txt179 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.890469 0.5 APEX 0.625 0.984531 0.5 RAD 0.0078125
+ txt179
+TEXDEF txt179 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.875 0.515469 APEX 0.625 0.875 0.609531 RAD 0.0078125
+ txt179
+TEXDEF txt179 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.875 0.625 RAD 0.03125
+ txt179
+TEXDEF txt179 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.875 0.625 APEX 0.734531 0.875 0.625 RAD 0.0078125
+ txt179
+TEXDEF txt179 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.890469 0.625 APEX 0.625 0.984531 0.625 RAD 0.0078125
+ txt179
+TEXDEF txt179 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.875 0.640469 APEX 0.625 0.875 0.734531 RAD 0.0078125
+ txt179
+TEXDEF txt180 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.875 0.75 RAD 0.03125
+ txt180
+TEXDEF txt180 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.875 0.75 APEX 0.734531 0.875 0.75 RAD 0.0078125
+ txt180
+TEXDEF txt180 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.890469 0.75 APEX 0.625 0.984531 0.75 RAD 0.0078125
+ txt180
+TEXDEF txt180 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.875 0.765469 APEX 0.625 0.875 0.859531 RAD 0.0078125
+ txt180
+TEXDEF txt180 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.875 0.875 RAD 0.03125
+ txt180
+TEXDEF txt180 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.875 0.875 APEX 0.734531 0.875 0.875 RAD 0.0078125
+ txt180
+TEXDEF txt180 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.890469 0.875 APEX 0.625 0.984531 0.875 RAD 0.0078125
+ txt180
+TEXDEF txt180 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.875 0.890469 APEX 0.625 0.875 0.984531 RAD 0.0078125
+ txt180
+TEXDEF txt180 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 0.875 1 RAD 0.03125
+ txt180
+TEXDEF txt180 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 0.875 1 APEX 0.734531 0.875 1 RAD 0.0078125
+ txt180
+TEXDEF txt181 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 0.890469 1 APEX 0.625 0.984531 1 RAD 0.0078125
+ txt181
+TEXDEF txt181 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 1 0 RAD 0.03125
+ txt181
+TEXDEF txt181 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 1 0 APEX 0.734531 1 0 RAD 0.0078125
+ txt181
+TEXDEF txt181 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 1 0.0154687 APEX 0.625 1 0.109531 RAD 0.0078125
+ txt181
+TEXDEF txt181 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 1 0.125 RAD 0.03125
+ txt181
+TEXDEF txt181 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 1 0.125 APEX 0.734531 1 0.125 RAD 0.0078125
+ txt181
+TEXDEF txt181 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 1 0.140469 APEX 0.625 1 0.234531 RAD 0.0078125
+ txt181
+TEXDEF txt181 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 1 0.25 RAD 0.03125
+ txt181
+TEXDEF txt181 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 1 0.25 APEX 0.734531 1 0.25 RAD 0.0078125
+ txt181
+TEXDEF txt181 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 1 0.265469 APEX 0.625 1 0.359531 RAD 0.0078125
+ txt181
+TEXDEF txt182 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 1 0.375 RAD 0.03125
+ txt182
+TEXDEF txt182 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 1 0.375 APEX 0.734531 1 0.375 RAD 0.0078125
+ txt182
+TEXDEF txt182 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 1 0.390469 APEX 0.625 1 0.484531 RAD 0.0078125
+ txt182
+TEXDEF txt182 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 1 0.5 RAD 0.03125
+ txt182
+TEXDEF txt182 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 1 0.5 APEX 0.734531 1 0.5 RAD 0.0078125
+ txt182
+TEXDEF txt182 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 1 0.515469 APEX 0.625 1 0.609531 RAD 0.0078125
+ txt182
+TEXDEF txt182 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 1 0.625 RAD 0.03125
+ txt182
+TEXDEF txt182 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 1 0.625 APEX 0.734531 1 0.625 RAD 0.0078125
+ txt182
+TEXDEF txt182 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 1 0.640469 APEX 0.625 1 0.734531 RAD 0.0078125
+ txt182
+TEXDEF txt182 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 1 0.75 RAD 0.03125
+ txt182
+TEXDEF txt183 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 1 0.75 APEX 0.734531 1 0.75 RAD 0.0078125
+ txt183
+TEXDEF txt183 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 1 0.765469 APEX 0.625 1 0.859531 RAD 0.0078125
+ txt183
+TEXDEF txt183 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 1 0.875 RAD 0.03125
+ txt183
+TEXDEF txt183 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 1 0.875 APEX 0.734531 1 0.875 RAD 0.0078125
+ txt183
+TEXDEF txt183 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.625 1 0.890469 APEX 0.625 1 0.984531 RAD 0.0078125
+ txt183
+TEXDEF txt183 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.625 1 1 RAD 0.03125
+ txt183
+TEXDEF txt183 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.640469 1 1 APEX 0.734531 1 1 RAD 0.0078125
+ txt183
+TEXDEF txt183 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0 0 RAD 0.03125
+ txt183
+TEXDEF txt183 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0 0 APEX 0.859531 0 0 RAD 0.0078125
+ txt183
+TEXDEF txt183 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.0154687 0 APEX 0.75 0.109531 0 RAD 0.0078125
+ txt183
+TEXDEF txt184 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0 0.0154687 APEX 0.75 0 0.109531 RAD 0.0078125
+ txt184
+TEXDEF txt184 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0 0.125 RAD 0.03125
+ txt184
+TEXDEF txt184 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0 0.125 APEX 0.859531 0 0.125 RAD 0.0078125
+ txt184
+TEXDEF txt184 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.0154687 0.125 APEX 0.75 0.109531 0.125 RAD 0.0078125
+ txt184
+TEXDEF txt184 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0 0.140469 APEX 0.75 0 0.234531 RAD 0.0078125
+ txt184
+TEXDEF txt184 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0 0.25 RAD 0.03125
+ txt184
+TEXDEF txt184 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0 0.25 APEX 0.859531 0 0.25 RAD 0.0078125
+ txt184
+TEXDEF txt184 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.0154687 0.25 APEX 0.75 0.109531 0.25 RAD 0.0078125
+ txt184
+TEXDEF txt184 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0 0.265469 APEX 0.75 0 0.359531 RAD 0.0078125
+ txt184
+TEXDEF txt184 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0 0.375 RAD 0.03125
+ txt184
+TEXDEF txt185 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0 0.375 APEX 0.859531 0 0.375 RAD 0.0078125
+ txt185
+TEXDEF txt185 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.0154687 0.375 APEX 0.75 0.109531 0.375 RAD 0.0078125
+ txt185
+TEXDEF txt185 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0 0.390469 APEX 0.75 0 0.484531 RAD 0.0078125
+ txt185
+TEXDEF txt185 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0 0.5 RAD 0.03125
+ txt185
+TEXDEF txt185 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0 0.5 APEX 0.859531 0 0.5 RAD 0.0078125
+ txt185
+TEXDEF txt185 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.0154687 0.5 APEX 0.75 0.109531 0.5 RAD 0.0078125
+ txt185
+TEXDEF txt185 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0 0.515469 APEX 0.75 0 0.609531 RAD 0.0078125
+ txt185
+TEXDEF txt185 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0 0.625 RAD 0.03125
+ txt185
+TEXDEF txt185 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0 0.625 APEX 0.859531 0 0.625 RAD 0.0078125
+ txt185
+TEXDEF txt185 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.0154687 0.625 APEX 0.75 0.109531 0.625 RAD 0.0078125
+ txt185
+TEXDEF txt186 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0 0.640469 APEX 0.75 0 0.734531 RAD 0.0078125
+ txt186
+TEXDEF txt186 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0 0.75 RAD 0.03125
+ txt186
+TEXDEF txt186 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0 0.75 APEX 0.859531 0 0.75 RAD 0.0078125
+ txt186
+TEXDEF txt186 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.0154687 0.75 APEX 0.75 0.109531 0.75 RAD 0.0078125
+ txt186
+TEXDEF txt186 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0 0.765469 APEX 0.75 0 0.859531 RAD 0.0078125
+ txt186
+TEXDEF txt186 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0 0.875 RAD 0.03125
+ txt186
+TEXDEF txt186 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0 0.875 APEX 0.859531 0 0.875 RAD 0.0078125
+ txt186
+TEXDEF txt186 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.0154687 0.875 APEX 0.75 0.109531 0.875 RAD 0.0078125
+ txt186
+TEXDEF txt186 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0 0.890469 APEX 0.75 0 0.984531 RAD 0.0078125
+ txt186
+TEXDEF txt186 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0 1 RAD 0.03125
+ txt186
+TEXDEF txt187 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0 1 APEX 0.859531 0 1 RAD 0.0078125
+ txt187
+TEXDEF txt187 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.0154687 1 APEX 0.75 0.109531 1 RAD 0.0078125
+ txt187
+TEXDEF txt187 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.125 0 RAD 0.03125
+ txt187
+TEXDEF txt187 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.125 0 APEX 0.859531 0.125 0 RAD 0.0078125
+ txt187
+TEXDEF txt187 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.140469 0 APEX 0.75 0.234531 0 RAD 0.0078125
+ txt187
+TEXDEF txt187 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.125 0.0154687 APEX 0.75 0.125 0.109531 RAD 0.0078125
+ txt187
+TEXDEF txt187 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.125 0.125 RAD 0.03125
+ txt187
+TEXDEF txt187 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.125 0.125 APEX 0.859531 0.125 0.125 RAD 0.0078125
+ txt187
+TEXDEF txt187 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.140469 0.125 APEX 0.75 0.234531 0.125 RAD 0.0078125
+ txt187
+TEXDEF txt187 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.125 0.140469 APEX 0.75 0.125 0.234531 RAD 0.0078125
+ txt187
+TEXDEF txt188 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.125 0.25 RAD 0.03125
+ txt188
+TEXDEF txt188 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.125 0.25 APEX 0.859531 0.125 0.25 RAD 0.0078125
+ txt188
+TEXDEF txt188 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.140469 0.25 APEX 0.75 0.234531 0.25 RAD 0.0078125
+ txt188
+TEXDEF txt188 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.125 0.265469 APEX 0.75 0.125 0.359531 RAD 0.0078125
+ txt188
+TEXDEF txt188 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.125 0.375 RAD 0.03125
+ txt188
+TEXDEF txt188 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.125 0.375 APEX 0.859531 0.125 0.375 RAD 0.0078125
+ txt188
+TEXDEF txt188 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.140469 0.375 APEX 0.75 0.234531 0.375 RAD 0.0078125
+ txt188
+TEXDEF txt188 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.125 0.390469 APEX 0.75 0.125 0.484531 RAD 0.0078125
+ txt188
+TEXDEF txt188 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.125 0.5 RAD 0.03125
+ txt188
+TEXDEF txt188 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.125 0.5 APEX 0.859531 0.125 0.5 RAD 0.0078125
+ txt188
+TEXDEF txt189 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.140469 0.5 APEX 0.75 0.234531 0.5 RAD 0.0078125
+ txt189
+TEXDEF txt189 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.125 0.515469 APEX 0.75 0.125 0.609531 RAD 0.0078125
+ txt189
+TEXDEF txt189 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.125 0.625 RAD 0.03125
+ txt189
+TEXDEF txt189 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.125 0.625 APEX 0.859531 0.125 0.625 RAD 0.0078125
+ txt189
+TEXDEF txt189 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.140469 0.625 APEX 0.75 0.234531 0.625 RAD 0.0078125
+ txt189
+TEXDEF txt189 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.125 0.640469 APEX 0.75 0.125 0.734531 RAD 0.0078125
+ txt189
+TEXDEF txt189 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.125 0.75 RAD 0.03125
+ txt189
+TEXDEF txt189 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.125 0.75 APEX 0.859531 0.125 0.75 RAD 0.0078125
+ txt189
+TEXDEF txt189 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.140469 0.75 APEX 0.75 0.234531 0.75 RAD 0.0078125
+ txt189
+TEXDEF txt189 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.125 0.765469 APEX 0.75 0.125 0.859531 RAD 0.0078125
+ txt189
+TEXDEF txt190 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.125 0.875 RAD 0.03125
+ txt190
+TEXDEF txt190 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.125 0.875 APEX 0.859531 0.125 0.875 RAD 0.0078125
+ txt190
+TEXDEF txt190 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.140469 0.875 APEX 0.75 0.234531 0.875 RAD 0.0078125
+ txt190
+TEXDEF txt190 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.125 0.890469 APEX 0.75 0.125 0.984531 RAD 0.0078125
+ txt190
+TEXDEF txt190 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.125 1 RAD 0.03125
+ txt190
+TEXDEF txt190 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.125 1 APEX 0.859531 0.125 1 RAD 0.0078125
+ txt190
+TEXDEF txt190 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.140469 1 APEX 0.75 0.234531 1 RAD 0.0078125
+ txt190
+TEXDEF txt190 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.25 0 RAD 0.03125
+ txt190
+TEXDEF txt190 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.25 0 APEX 0.859531 0.25 0 RAD 0.0078125
+ txt190
+TEXDEF txt190 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.265469 0 APEX 0.75 0.359531 0 RAD 0.0078125
+ txt190
+TEXDEF txt191 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.25 0.0154687 APEX 0.75 0.25 0.109531 RAD 0.0078125
+ txt191
+TEXDEF txt191 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.25 0.125 RAD 0.03125
+ txt191
+TEXDEF txt191 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.25 0.125 APEX 0.859531 0.25 0.125 RAD 0.0078125
+ txt191
+TEXDEF txt191 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.265469 0.125 APEX 0.75 0.359531 0.125 RAD 0.0078125
+ txt191
+TEXDEF txt191 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.25 0.140469 APEX 0.75 0.25 0.234531 RAD 0.0078125
+ txt191
+TEXDEF txt191 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.25 0.25 RAD 0.03125
+ txt191
+TEXDEF txt191 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.25 0.25 APEX 0.859531 0.25 0.25 RAD 0.0078125
+ txt191
+TEXDEF txt191 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.265469 0.25 APEX 0.75 0.359531 0.25 RAD 0.0078125
+ txt191
+TEXDEF txt191 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.25 0.265469 APEX 0.75 0.25 0.359531 RAD 0.0078125
+ txt191
+TEXDEF txt191 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.25 0.375 RAD 0.03125
+ txt191
+TEXDEF txt192 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.25 0.375 APEX 0.859531 0.25 0.375 RAD 0.0078125
+ txt192
+TEXDEF txt192 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.265469 0.375 APEX 0.75 0.359531 0.375 RAD 0.0078125
+ txt192
+TEXDEF txt192 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.25 0.390469 APEX 0.75 0.25 0.484531 RAD 0.0078125
+ txt192
+TEXDEF txt192 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.25 0.5 RAD 0.03125
+ txt192
+TEXDEF txt192 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.25 0.5 APEX 0.859531 0.25 0.5 RAD 0.0078125
+ txt192
+TEXDEF txt192 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.265469 0.5 APEX 0.75 0.359531 0.5 RAD 0.0078125
+ txt192
+TEXDEF txt192 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.25 0.515469 APEX 0.75 0.25 0.609531 RAD 0.0078125
+ txt192
+TEXDEF txt192 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.25 0.625 RAD 0.03125
+ txt192
+TEXDEF txt192 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.25 0.625 APEX 0.859531 0.25 0.625 RAD 0.0078125
+ txt192
+TEXDEF txt192 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.265469 0.625 APEX 0.75 0.359531 0.625 RAD 0.0078125
+ txt192
+TEXDEF txt193 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.25 0.640469 APEX 0.75 0.25 0.734531 RAD 0.0078125
+ txt193
+TEXDEF txt193 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.25 0.75 RAD 0.03125
+ txt193
+TEXDEF txt193 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.25 0.75 APEX 0.859531 0.25 0.75 RAD 0.0078125
+ txt193
+TEXDEF txt193 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.265469 0.75 APEX 0.75 0.359531 0.75 RAD 0.0078125
+ txt193
+TEXDEF txt193 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.25 0.765469 APEX 0.75 0.25 0.859531 RAD 0.0078125
+ txt193
+TEXDEF txt193 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.25 0.875 RAD 0.03125
+ txt193
+TEXDEF txt193 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.25 0.875 APEX 0.859531 0.25 0.875 RAD 0.0078125
+ txt193
+TEXDEF txt193 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.265469 0.875 APEX 0.75 0.359531 0.875 RAD 0.0078125
+ txt193
+TEXDEF txt193 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.25 0.890469 APEX 0.75 0.25 0.984531 RAD 0.0078125
+ txt193
+TEXDEF txt193 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.25 1 RAD 0.03125
+ txt193
+TEXDEF txt194 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.25 1 APEX 0.859531 0.25 1 RAD 0.0078125
+ txt194
+TEXDEF txt194 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.265469 1 APEX 0.75 0.359531 1 RAD 0.0078125
+ txt194
+TEXDEF txt194 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.375 0 RAD 0.03125
+ txt194
+TEXDEF txt194 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.375 0 APEX 0.859531 0.375 0 RAD 0.0078125
+ txt194
+TEXDEF txt194 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.390469 0 APEX 0.75 0.484531 0 RAD 0.0078125
+ txt194
+TEXDEF txt194 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.375 0.0154687 APEX 0.75 0.375 0.109531 RAD 0.0078125
+ txt194
+TEXDEF txt194 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.375 0.125 RAD 0.03125
+ txt194
+TEXDEF txt194 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.375 0.125 APEX 0.859531 0.375 0.125 RAD 0.0078125
+ txt194
+TEXDEF txt194 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.390469 0.125 APEX 0.75 0.484531 0.125 RAD 0.0078125
+ txt194
+TEXDEF txt194 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.375 0.140469 APEX 0.75 0.375 0.234531 RAD 0.0078125
+ txt194
+TEXDEF txt195 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.375 0.25 RAD 0.03125
+ txt195
+TEXDEF txt195 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.375 0.25 APEX 0.859531 0.375 0.25 RAD 0.0078125
+ txt195
+TEXDEF txt195 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.390469 0.25 APEX 0.75 0.484531 0.25 RAD 0.0078125
+ txt195
+TEXDEF txt195 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.375 0.265469 APEX 0.75 0.375 0.359531 RAD 0.0078125
+ txt195
+TEXDEF txt195 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.375 0.375 RAD 0.03125
+ txt195
+TEXDEF txt195 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.375 0.375 APEX 0.859531 0.375 0.375 RAD 0.0078125
+ txt195
+TEXDEF txt195 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.390469 0.375 APEX 0.75 0.484531 0.375 RAD 0.0078125
+ txt195
+TEXDEF txt195 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.375 0.390469 APEX 0.75 0.375 0.484531 RAD 0.0078125
+ txt195
+TEXDEF txt195 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.375 0.5 RAD 0.03125
+ txt195
+TEXDEF txt195 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.375 0.5 APEX 0.859531 0.375 0.5 RAD 0.0078125
+ txt195
+TEXDEF txt196 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.390469 0.5 APEX 0.75 0.484531 0.5 RAD 0.0078125
+ txt196
+TEXDEF txt196 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.375 0.515469 APEX 0.75 0.375 0.609531 RAD 0.0078125
+ txt196
+TEXDEF txt196 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.375 0.625 RAD 0.03125
+ txt196
+TEXDEF txt196 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.375 0.625 APEX 0.859531 0.375 0.625 RAD 0.0078125
+ txt196
+TEXDEF txt196 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.390469 0.625 APEX 0.75 0.484531 0.625 RAD 0.0078125
+ txt196
+TEXDEF txt196 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.375 0.640469 APEX 0.75 0.375 0.734531 RAD 0.0078125
+ txt196
+TEXDEF txt196 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.375 0.75 RAD 0.03125
+ txt196
+TEXDEF txt196 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.375 0.75 APEX 0.859531 0.375 0.75 RAD 0.0078125
+ txt196
+TEXDEF txt196 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.390469 0.75 APEX 0.75 0.484531 0.75 RAD 0.0078125
+ txt196
+TEXDEF txt196 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.375 0.765469 APEX 0.75 0.375 0.859531 RAD 0.0078125
+ txt196
+TEXDEF txt197 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.375 0.875 RAD 0.03125
+ txt197
+TEXDEF txt197 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.375 0.875 APEX 0.859531 0.375 0.875 RAD 0.0078125
+ txt197
+TEXDEF txt197 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.390469 0.875 APEX 0.75 0.484531 0.875 RAD 0.0078125
+ txt197
+TEXDEF txt197 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.375 0.890469 APEX 0.75 0.375 0.984531 RAD 0.0078125
+ txt197
+TEXDEF txt197 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.375 1 RAD 0.03125
+ txt197
+TEXDEF txt197 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.375 1 APEX 0.859531 0.375 1 RAD 0.0078125
+ txt197
+TEXDEF txt197 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.390469 1 APEX 0.75 0.484531 1 RAD 0.0078125
+ txt197
+TEXDEF txt197 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.5 0 RAD 0.03125
+ txt197
+TEXDEF txt197 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.5 0 APEX 0.859531 0.5 0 RAD 0.0078125
+ txt197
+TEXDEF txt197 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.515469 0 APEX 0.75 0.609531 0 RAD 0.0078125
+ txt197
+TEXDEF txt198 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.5 0.0154687 APEX 0.75 0.5 0.109531 RAD 0.0078125
+ txt198
+TEXDEF txt198 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.5 0.125 RAD 0.03125
+ txt198
+TEXDEF txt198 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.5 0.125 APEX 0.859531 0.5 0.125 RAD 0.0078125
+ txt198
+TEXDEF txt198 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.515469 0.125 APEX 0.75 0.609531 0.125 RAD 0.0078125
+ txt198
+TEXDEF txt198 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.5 0.140469 APEX 0.75 0.5 0.234531 RAD 0.0078125
+ txt198
+TEXDEF txt198 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.5 0.25 RAD 0.03125
+ txt198
+TEXDEF txt198 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.5 0.25 APEX 0.859531 0.5 0.25 RAD 0.0078125
+ txt198
+TEXDEF txt198 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.515469 0.25 APEX 0.75 0.609531 0.25 RAD 0.0078125
+ txt198
+TEXDEF txt198 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.5 0.265469 APEX 0.75 0.5 0.359531 RAD 0.0078125
+ txt198
+TEXDEF txt198 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.5 0.375 RAD 0.03125
+ txt198
+TEXDEF txt199 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.5 0.375 APEX 0.859531 0.5 0.375 RAD 0.0078125
+ txt199
+TEXDEF txt199 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.515469 0.375 APEX 0.75 0.609531 0.375 RAD 0.0078125
+ txt199
+TEXDEF txt199 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.5 0.390469 APEX 0.75 0.5 0.484531 RAD 0.0078125
+ txt199
+TEXDEF txt199 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.5 0.5 RAD 0.03125
+ txt199
+TEXDEF txt199 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.5 0.5 APEX 0.859531 0.5 0.5 RAD 0.0078125
+ txt199
+TEXDEF txt199 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.515469 0.5 APEX 0.75 0.609531 0.5 RAD 0.0078125
+ txt199
+TEXDEF txt199 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.5 0.515469 APEX 0.75 0.5 0.609531 RAD 0.0078125
+ txt199
+TEXDEF txt199 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.5 0.625 RAD 0.03125
+ txt199
+TEXDEF txt199 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.5 0.625 APEX 0.859531 0.5 0.625 RAD 0.0078125
+ txt199
+TEXDEF txt199 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.515469 0.625 APEX 0.75 0.609531 0.625 RAD 0.0078125
+ txt199
+TEXDEF txt200 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.5 0.640469 APEX 0.75 0.5 0.734531 RAD 0.0078125
+ txt200
+TEXDEF txt200 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.5 0.75 RAD 0.03125
+ txt200
+TEXDEF txt200 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.5 0.75 APEX 0.859531 0.5 0.75 RAD 0.0078125
+ txt200
+TEXDEF txt200 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.515469 0.75 APEX 0.75 0.609531 0.75 RAD 0.0078125
+ txt200
+TEXDEF txt200 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.5 0.765469 APEX 0.75 0.5 0.859531 RAD 0.0078125
+ txt200
+TEXDEF txt200 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.5 0.875 RAD 0.03125
+ txt200
+TEXDEF txt200 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.5 0.875 APEX 0.859531 0.5 0.875 RAD 0.0078125
+ txt200
+TEXDEF txt200 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.515469 0.875 APEX 0.75 0.609531 0.875 RAD 0.0078125
+ txt200
+TEXDEF txt200 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.5 0.890469 APEX 0.75 0.5 0.984531 RAD 0.0078125
+ txt200
+TEXDEF txt200 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.5 1 RAD 0.03125
+ txt200
+TEXDEF txt201 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.5 1 APEX 0.859531 0.5 1 RAD 0.0078125
+ txt201
+TEXDEF txt201 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.515469 1 APEX 0.75 0.609531 1 RAD 0.0078125
+ txt201
+TEXDEF txt201 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.625 0 RAD 0.03125
+ txt201
+TEXDEF txt201 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.625 0 APEX 0.859531 0.625 0 RAD 0.0078125
+ txt201
+TEXDEF txt201 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.640469 0 APEX 0.75 0.734531 0 RAD 0.0078125
+ txt201
+TEXDEF txt201 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.625 0.0154687 APEX 0.75 0.625 0.109531 RAD 0.0078125
+ txt201
+TEXDEF txt201 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.625 0.125 RAD 0.03125
+ txt201
+TEXDEF txt201 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.625 0.125 APEX 0.859531 0.625 0.125 RAD 0.0078125
+ txt201
+TEXDEF txt201 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.640469 0.125 APEX 0.75 0.734531 0.125 RAD 0.0078125
+ txt201
+TEXDEF txt201 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.625 0.140469 APEX 0.75 0.625 0.234531 RAD 0.0078125
+ txt201
+TEXDEF txt202 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.625 0.25 RAD 0.03125
+ txt202
+TEXDEF txt202 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.625 0.25 APEX 0.859531 0.625 0.25 RAD 0.0078125
+ txt202
+TEXDEF txt202 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.640469 0.25 APEX 0.75 0.734531 0.25 RAD 0.0078125
+ txt202
+TEXDEF txt202 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.625 0.265469 APEX 0.75 0.625 0.359531 RAD 0.0078125
+ txt202
+TEXDEF txt202 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.625 0.375 RAD 0.03125
+ txt202
+TEXDEF txt202 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.625 0.375 APEX 0.859531 0.625 0.375 RAD 0.0078125
+ txt202
+TEXDEF txt202 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.640469 0.375 APEX 0.75 0.734531 0.375 RAD 0.0078125
+ txt202
+TEXDEF txt202 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.625 0.390469 APEX 0.75 0.625 0.484531 RAD 0.0078125
+ txt202
+TEXDEF txt202 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.625 0.5 RAD 0.03125
+ txt202
+TEXDEF txt202 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.625 0.5 APEX 0.859531 0.625 0.5 RAD 0.0078125
+ txt202
+TEXDEF txt203 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.640469 0.5 APEX 0.75 0.734531 0.5 RAD 0.0078125
+ txt203
+TEXDEF txt203 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.625 0.515469 APEX 0.75 0.625 0.609531 RAD 0.0078125
+ txt203
+TEXDEF txt203 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.625 0.625 RAD 0.03125
+ txt203
+TEXDEF txt203 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.625 0.625 APEX 0.859531 0.625 0.625 RAD 0.0078125
+ txt203
+TEXDEF txt203 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.640469 0.625 APEX 0.75 0.734531 0.625 RAD 0.0078125
+ txt203
+TEXDEF txt203 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.625 0.640469 APEX 0.75 0.625 0.734531 RAD 0.0078125
+ txt203
+TEXDEF txt203 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.625 0.75 RAD 0.03125
+ txt203
+TEXDEF txt203 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.625 0.75 APEX 0.859531 0.625 0.75 RAD 0.0078125
+ txt203
+TEXDEF txt203 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.640469 0.75 APEX 0.75 0.734531 0.75 RAD 0.0078125
+ txt203
+TEXDEF txt203 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.625 0.765469 APEX 0.75 0.625 0.859531 RAD 0.0078125
+ txt203
+TEXDEF txt204 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.625 0.875 RAD 0.03125
+ txt204
+TEXDEF txt204 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.625 0.875 APEX 0.859531 0.625 0.875 RAD 0.0078125
+ txt204
+TEXDEF txt204 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.640469 0.875 APEX 0.75 0.734531 0.875 RAD 0.0078125
+ txt204
+TEXDEF txt204 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.625 0.890469 APEX 0.75 0.625 0.984531 RAD 0.0078125
+ txt204
+TEXDEF txt204 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.625 1 RAD 0.03125
+ txt204
+TEXDEF txt204 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.625 1 APEX 0.859531 0.625 1 RAD 0.0078125
+ txt204
+TEXDEF txt204 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.640469 1 APEX 0.75 0.734531 1 RAD 0.0078125
+ txt204
+TEXDEF txt204 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.75 0 RAD 0.03125
+ txt204
+TEXDEF txt204 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.75 0 APEX 0.859531 0.75 0 RAD 0.0078125
+ txt204
+TEXDEF txt204 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.765469 0 APEX 0.75 0.859531 0 RAD 0.0078125
+ txt204
+TEXDEF txt205 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.75 0.0154687 APEX 0.75 0.75 0.109531 RAD 0.0078125
+ txt205
+TEXDEF txt205 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.75 0.125 RAD 0.03125
+ txt205
+TEXDEF txt205 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.75 0.125 APEX 0.859531 0.75 0.125 RAD 0.0078125
+ txt205
+TEXDEF txt205 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.765469 0.125 APEX 0.75 0.859531 0.125 RAD 0.0078125
+ txt205
+TEXDEF txt205 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.75 0.140469 APEX 0.75 0.75 0.234531 RAD 0.0078125
+ txt205
+TEXDEF txt205 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.75 0.25 RAD 0.03125
+ txt205
+TEXDEF txt205 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.75 0.25 APEX 0.859531 0.75 0.25 RAD 0.0078125
+ txt205
+TEXDEF txt205 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.765469 0.25 APEX 0.75 0.859531 0.25 RAD 0.0078125
+ txt205
+TEXDEF txt205 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.75 0.265469 APEX 0.75 0.75 0.359531 RAD 0.0078125
+ txt205
+TEXDEF txt205 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.75 0.375 RAD 0.03125
+ txt205
+TEXDEF txt206 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.75 0.375 APEX 0.859531 0.75 0.375 RAD 0.0078125
+ txt206
+TEXDEF txt206 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.765469 0.375 APEX 0.75 0.859531 0.375 RAD 0.0078125
+ txt206
+TEXDEF txt206 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.75 0.390469 APEX 0.75 0.75 0.484531 RAD 0.0078125
+ txt206
+TEXDEF txt206 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.75 0.5 RAD 0.03125
+ txt206
+TEXDEF txt206 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.75 0.5 APEX 0.859531 0.75 0.5 RAD 0.0078125
+ txt206
+TEXDEF txt206 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.765469 0.5 APEX 0.75 0.859531 0.5 RAD 0.0078125
+ txt206
+TEXDEF txt206 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.75 0.515469 APEX 0.75 0.75 0.609531 RAD 0.0078125
+ txt206
+TEXDEF txt206 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.75 0.625 RAD 0.03125
+ txt206
+TEXDEF txt206 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.75 0.625 APEX 0.859531 0.75 0.625 RAD 0.0078125
+ txt206
+TEXDEF txt206 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.765469 0.625 APEX 0.75 0.859531 0.625 RAD 0.0078125
+ txt206
+TEXDEF txt207 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.75 0.640469 APEX 0.75 0.75 0.734531 RAD 0.0078125
+ txt207
+TEXDEF txt207 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.75 0.75 RAD 0.03125
+ txt207
+TEXDEF txt207 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.75 0.75 APEX 0.859531 0.75 0.75 RAD 0.0078125
+ txt207
+TEXDEF txt207 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.765469 0.75 APEX 0.75 0.859531 0.75 RAD 0.0078125
+ txt207
+TEXDEF txt207 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.75 0.765469 APEX 0.75 0.75 0.859531 RAD 0.0078125
+ txt207
+TEXDEF txt207 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.75 0.875 RAD 0.03125
+ txt207
+TEXDEF txt207 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.75 0.875 APEX 0.859531 0.75 0.875 RAD 0.0078125
+ txt207
+TEXDEF txt207 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.765469 0.875 APEX 0.75 0.859531 0.875 RAD 0.0078125
+ txt207
+TEXDEF txt207 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.75 0.890469 APEX 0.75 0.75 0.984531 RAD 0.0078125
+ txt207
+TEXDEF txt207 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.75 1 RAD 0.03125
+ txt207
+TEXDEF txt208 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.75 1 APEX 0.859531 0.75 1 RAD 0.0078125
+ txt208
+TEXDEF txt208 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.765469 1 APEX 0.75 0.859531 1 RAD 0.0078125
+ txt208
+TEXDEF txt208 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.875 0 RAD 0.03125
+ txt208
+TEXDEF txt208 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.875 0 APEX 0.859531 0.875 0 RAD 0.0078125
+ txt208
+TEXDEF txt208 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.890469 0 APEX 0.75 0.984531 0 RAD 0.0078125
+ txt208
+TEXDEF txt208 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.875 0.0154687 APEX 0.75 0.875 0.109531 RAD 0.0078125
+ txt208
+TEXDEF txt208 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.875 0.125 RAD 0.03125
+ txt208
+TEXDEF txt208 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.875 0.125 APEX 0.859531 0.875 0.125 RAD 0.0078125
+ txt208
+TEXDEF txt208 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.890469 0.125 APEX 0.75 0.984531 0.125 RAD 0.0078125
+ txt208
+TEXDEF txt208 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.875 0.140469 APEX 0.75 0.875 0.234531 RAD 0.0078125
+ txt208
+TEXDEF txt209 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.875 0.25 RAD 0.03125
+ txt209
+TEXDEF txt209 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.875 0.25 APEX 0.859531 0.875 0.25 RAD 0.0078125
+ txt209
+TEXDEF txt209 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.890469 0.25 APEX 0.75 0.984531 0.25 RAD 0.0078125
+ txt209
+TEXDEF txt209 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.875 0.265469 APEX 0.75 0.875 0.359531 RAD 0.0078125
+ txt209
+TEXDEF txt209 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.875 0.375 RAD 0.03125
+ txt209
+TEXDEF txt209 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.875 0.375 APEX 0.859531 0.875 0.375 RAD 0.0078125
+ txt209
+TEXDEF txt209 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.890469 0.375 APEX 0.75 0.984531 0.375 RAD 0.0078125
+ txt209
+TEXDEF txt209 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.875 0.390469 APEX 0.75 0.875 0.484531 RAD 0.0078125
+ txt209
+TEXDEF txt209 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.875 0.5 RAD 0.03125
+ txt209
+TEXDEF txt209 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.875 0.5 APEX 0.859531 0.875 0.5 RAD 0.0078125
+ txt209
+TEXDEF txt210 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.890469 0.5 APEX 0.75 0.984531 0.5 RAD 0.0078125
+ txt210
+TEXDEF txt210 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.875 0.515469 APEX 0.75 0.875 0.609531 RAD 0.0078125
+ txt210
+TEXDEF txt210 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.875 0.625 RAD 0.03125
+ txt210
+TEXDEF txt210 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.875 0.625 APEX 0.859531 0.875 0.625 RAD 0.0078125
+ txt210
+TEXDEF txt210 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.890469 0.625 APEX 0.75 0.984531 0.625 RAD 0.0078125
+ txt210
+TEXDEF txt210 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.875 0.640469 APEX 0.75 0.875 0.734531 RAD 0.0078125
+ txt210
+TEXDEF txt210 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.875 0.75 RAD 0.03125
+ txt210
+TEXDEF txt210 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.875 0.75 APEX 0.859531 0.875 0.75 RAD 0.0078125
+ txt210
+TEXDEF txt210 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.890469 0.75 APEX 0.75 0.984531 0.75 RAD 0.0078125
+ txt210
+TEXDEF txt210 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.875 0.765469 APEX 0.75 0.875 0.859531 RAD 0.0078125
+ txt210
+TEXDEF txt211 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.875 0.875 RAD 0.03125
+ txt211
+TEXDEF txt211 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.875 0.875 APEX 0.859531 0.875 0.875 RAD 0.0078125
+ txt211
+TEXDEF txt211 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.890469 0.875 APEX 0.75 0.984531 0.875 RAD 0.0078125
+ txt211
+TEXDEF txt211 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.875 0.890469 APEX 0.75 0.875 0.984531 RAD 0.0078125
+ txt211
+TEXDEF txt211 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 0.875 1 RAD 0.03125
+ txt211
+TEXDEF txt211 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 0.875 1 APEX 0.859531 0.875 1 RAD 0.0078125
+ txt211
+TEXDEF txt211 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 0.890469 1 APEX 0.75 0.984531 1 RAD 0.0078125
+ txt211
+TEXDEF txt211 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 1 0 RAD 0.03125
+ txt211
+TEXDEF txt211 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 1 0 APEX 0.859531 1 0 RAD 0.0078125
+ txt211
+TEXDEF txt211 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 1 0.0154687 APEX 0.75 1 0.109531 RAD 0.0078125
+ txt211
+TEXDEF txt212 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 1 0.125 RAD 0.03125
+ txt212
+TEXDEF txt212 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 1 0.125 APEX 0.859531 1 0.125 RAD 0.0078125
+ txt212
+TEXDEF txt212 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 1 0.140469 APEX 0.75 1 0.234531 RAD 0.0078125
+ txt212
+TEXDEF txt212 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 1 0.25 RAD 0.03125
+ txt212
+TEXDEF txt212 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 1 0.25 APEX 0.859531 1 0.25 RAD 0.0078125
+ txt212
+TEXDEF txt212 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 1 0.265469 APEX 0.75 1 0.359531 RAD 0.0078125
+ txt212
+TEXDEF txt212 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 1 0.375 RAD 0.03125
+ txt212
+TEXDEF txt212 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 1 0.375 APEX 0.859531 1 0.375 RAD 0.0078125
+ txt212
+TEXDEF txt212 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 1 0.390469 APEX 0.75 1 0.484531 RAD 0.0078125
+ txt212
+TEXDEF txt212 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 1 0.5 RAD 0.03125
+ txt212
+TEXDEF txt213 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 1 0.5 APEX 0.859531 1 0.5 RAD 0.0078125
+ txt213
+TEXDEF txt213 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 1 0.515469 APEX 0.75 1 0.609531 RAD 0.0078125
+ txt213
+TEXDEF txt213 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 1 0.625 RAD 0.03125
+ txt213
+TEXDEF txt213 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 1 0.625 APEX 0.859531 1 0.625 RAD 0.0078125
+ txt213
+TEXDEF txt213 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 1 0.640469 APEX 0.75 1 0.734531 RAD 0.0078125
+ txt213
+TEXDEF txt213 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 1 0.75 RAD 0.03125
+ txt213
+TEXDEF txt213 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 1 0.75 APEX 0.859531 1 0.75 RAD 0.0078125
+ txt213
+TEXDEF txt213 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 1 0.765469 APEX 0.75 1 0.859531 RAD 0.0078125
+ txt213
+TEXDEF txt213 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 1 0.875 RAD 0.03125
+ txt213
+TEXDEF txt213 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 1 0.875 APEX 0.859531 1 0.875 RAD 0.0078125
+ txt213
+TEXDEF txt214 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.75 1 0.890469 APEX 0.75 1 0.984531 RAD 0.0078125
+ txt214
+TEXDEF txt214 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.75 1 1 RAD 0.03125
+ txt214
+TEXDEF txt214 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.765469 1 1 APEX 0.859531 1 1 RAD 0.0078125
+ txt214
+TEXDEF txt214 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0 0 RAD 0.03125
+ txt214
+TEXDEF txt214 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0 0 APEX 0.984531 0 0 RAD 0.0078125
+ txt214
+TEXDEF txt214 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.0154687 0 APEX 0.875 0.109531 0 RAD 0.0078125
+ txt214
+TEXDEF txt214 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0 0.0154687 APEX 0.875 0 0.109531 RAD 0.0078125
+ txt214
+TEXDEF txt214 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0 0.125 RAD 0.03125
+ txt214
+TEXDEF txt214 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0 0.125 APEX 0.984531 0 0.125 RAD 0.0078125
+ txt214
+TEXDEF txt214 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.0154687 0.125 APEX 0.875 0.109531 0.125 RAD 0.0078125
+ txt214
+TEXDEF txt215 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0 0.140469 APEX 0.875 0 0.234531 RAD 0.0078125
+ txt215
+TEXDEF txt215 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0 0.25 RAD 0.03125
+ txt215
+TEXDEF txt215 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0 0.25 APEX 0.984531 0 0.25 RAD 0.0078125
+ txt215
+TEXDEF txt215 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.0154687 0.25 APEX 0.875 0.109531 0.25 RAD 0.0078125
+ txt215
+TEXDEF txt215 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0 0.265469 APEX 0.875 0 0.359531 RAD 0.0078125
+ txt215
+TEXDEF txt215 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0 0.375 RAD 0.03125
+ txt215
+TEXDEF txt215 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0 0.375 APEX 0.984531 0 0.375 RAD 0.0078125
+ txt215
+TEXDEF txt215 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.0154687 0.375 APEX 0.875 0.109531 0.375 RAD 0.0078125
+ txt215
+TEXDEF txt215 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0 0.390469 APEX 0.875 0 0.484531 RAD 0.0078125
+ txt215
+TEXDEF txt215 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0 0.5 RAD 0.03125
+ txt215
+TEXDEF txt216 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0 0.5 APEX 0.984531 0 0.5 RAD 0.0078125
+ txt216
+TEXDEF txt216 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.0154687 0.5 APEX 0.875 0.109531 0.5 RAD 0.0078125
+ txt216
+TEXDEF txt216 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0 0.515469 APEX 0.875 0 0.609531 RAD 0.0078125
+ txt216
+TEXDEF txt216 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0 0.625 RAD 0.03125
+ txt216
+TEXDEF txt216 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0 0.625 APEX 0.984531 0 0.625 RAD 0.0078125
+ txt216
+TEXDEF txt216 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.0154687 0.625 APEX 0.875 0.109531 0.625 RAD 0.0078125
+ txt216
+TEXDEF txt216 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0 0.640469 APEX 0.875 0 0.734531 RAD 0.0078125
+ txt216
+TEXDEF txt216 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0 0.75 RAD 0.03125
+ txt216
+TEXDEF txt216 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0 0.75 APEX 0.984531 0 0.75 RAD 0.0078125
+ txt216
+TEXDEF txt216 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.0154687 0.75 APEX 0.875 0.109531 0.75 RAD 0.0078125
+ txt216
+TEXDEF txt217 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0 0.765469 APEX 0.875 0 0.859531 RAD 0.0078125
+ txt217
+TEXDEF txt217 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0 0.875 RAD 0.03125
+ txt217
+TEXDEF txt217 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0 0.875 APEX 0.984531 0 0.875 RAD 0.0078125
+ txt217
+TEXDEF txt217 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.0154687 0.875 APEX 0.875 0.109531 0.875 RAD 0.0078125
+ txt217
+TEXDEF txt217 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0 0.890469 APEX 0.875 0 0.984531 RAD 0.0078125
+ txt217
+TEXDEF txt217 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0 1 RAD 0.03125
+ txt217
+TEXDEF txt217 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0 1 APEX 0.984531 0 1 RAD 0.0078125
+ txt217
+TEXDEF txt217 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.0154687 1 APEX 0.875 0.109531 1 RAD 0.0078125
+ txt217
+TEXDEF txt217 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.125 0 RAD 0.03125
+ txt217
+TEXDEF txt217 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.125 0 APEX 0.984531 0.125 0 RAD 0.0078125
+ txt217
+TEXDEF txt218 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.140469 0 APEX 0.875 0.234531 0 RAD 0.0078125
+ txt218
+TEXDEF txt218 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.125 0.0154687 APEX 0.875 0.125 0.109531 RAD 0.0078125
+ txt218
+TEXDEF txt218 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.125 0.125 RAD 0.03125
+ txt218
+TEXDEF txt218 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.125 0.125 APEX 0.984531 0.125 0.125 RAD 0.0078125
+ txt218
+TEXDEF txt218 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.140469 0.125 APEX 0.875 0.234531 0.125 RAD 0.0078125
+ txt218
+TEXDEF txt218 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.125 0.140469 APEX 0.875 0.125 0.234531 RAD 0.0078125
+ txt218
+TEXDEF txt218 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.125 0.25 RAD 0.03125
+ txt218
+TEXDEF txt218 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.125 0.25 APEX 0.984531 0.125 0.25 RAD 0.0078125
+ txt218
+TEXDEF txt218 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.140469 0.25 APEX 0.875 0.234531 0.25 RAD 0.0078125
+ txt218
+TEXDEF txt218 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.125 0.265469 APEX 0.875 0.125 0.359531 RAD 0.0078125
+ txt218
+TEXDEF txt219 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.125 0.375 RAD 0.03125
+ txt219
+TEXDEF txt219 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.125 0.375 APEX 0.984531 0.125 0.375 RAD 0.0078125
+ txt219
+TEXDEF txt219 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.140469 0.375 APEX 0.875 0.234531 0.375 RAD 0.0078125
+ txt219
+TEXDEF txt219 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.125 0.390469 APEX 0.875 0.125 0.484531 RAD 0.0078125
+ txt219
+TEXDEF txt219 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.125 0.5 RAD 0.03125
+ txt219
+TEXDEF txt219 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.125 0.5 APEX 0.984531 0.125 0.5 RAD 0.0078125
+ txt219
+TEXDEF txt219 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.140469 0.5 APEX 0.875 0.234531 0.5 RAD 0.0078125
+ txt219
+TEXDEF txt219 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.125 0.515469 APEX 0.875 0.125 0.609531 RAD 0.0078125
+ txt219
+TEXDEF txt219 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.125 0.625 RAD 0.03125
+ txt219
+TEXDEF txt219 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.125 0.625 APEX 0.984531 0.125 0.625 RAD 0.0078125
+ txt219
+TEXDEF txt220 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.140469 0.625 APEX 0.875 0.234531 0.625 RAD 0.0078125
+ txt220
+TEXDEF txt220 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.125 0.640469 APEX 0.875 0.125 0.734531 RAD 0.0078125
+ txt220
+TEXDEF txt220 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.125 0.75 RAD 0.03125
+ txt220
+TEXDEF txt220 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.125 0.75 APEX 0.984531 0.125 0.75 RAD 0.0078125
+ txt220
+TEXDEF txt220 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.140469 0.75 APEX 0.875 0.234531 0.75 RAD 0.0078125
+ txt220
+TEXDEF txt220 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.125 0.765469 APEX 0.875 0.125 0.859531 RAD 0.0078125
+ txt220
+TEXDEF txt220 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.125 0.875 RAD 0.03125
+ txt220
+TEXDEF txt220 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.125 0.875 APEX 0.984531 0.125 0.875 RAD 0.0078125
+ txt220
+TEXDEF txt220 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.140469 0.875 APEX 0.875 0.234531 0.875 RAD 0.0078125
+ txt220
+TEXDEF txt220 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.125 0.890469 APEX 0.875 0.125 0.984531 RAD 0.0078125
+ txt220
+TEXDEF txt221 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.125 1 RAD 0.03125
+ txt221
+TEXDEF txt221 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.125 1 APEX 0.984531 0.125 1 RAD 0.0078125
+ txt221
+TEXDEF txt221 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.140469 1 APEX 0.875 0.234531 1 RAD 0.0078125
+ txt221
+TEXDEF txt221 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.25 0 RAD 0.03125
+ txt221
+TEXDEF txt221 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.25 0 APEX 0.984531 0.25 0 RAD 0.0078125
+ txt221
+TEXDEF txt221 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.265469 0 APEX 0.875 0.359531 0 RAD 0.0078125
+ txt221
+TEXDEF txt221 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.25 0.0154687 APEX 0.875 0.25 0.109531 RAD 0.0078125
+ txt221
+TEXDEF txt221 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.25 0.125 RAD 0.03125
+ txt221
+TEXDEF txt221 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.25 0.125 APEX 0.984531 0.25 0.125 RAD 0.0078125
+ txt221
+TEXDEF txt221 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.265469 0.125 APEX 0.875 0.359531 0.125 RAD 0.0078125
+ txt221
+TEXDEF txt222 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.25 0.140469 APEX 0.875 0.25 0.234531 RAD 0.0078125
+ txt222
+TEXDEF txt222 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.25 0.25 RAD 0.03125
+ txt222
+TEXDEF txt222 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.25 0.25 APEX 0.984531 0.25 0.25 RAD 0.0078125
+ txt222
+TEXDEF txt222 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.265469 0.25 APEX 0.875 0.359531 0.25 RAD 0.0078125
+ txt222
+TEXDEF txt222 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.25 0.265469 APEX 0.875 0.25 0.359531 RAD 0.0078125
+ txt222
+TEXDEF txt222 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.25 0.375 RAD 0.03125
+ txt222
+TEXDEF txt222 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.25 0.375 APEX 0.984531 0.25 0.375 RAD 0.0078125
+ txt222
+TEXDEF txt222 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.265469 0.375 APEX 0.875 0.359531 0.375 RAD 0.0078125
+ txt222
+TEXDEF txt222 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.25 0.390469 APEX 0.875 0.25 0.484531 RAD 0.0078125
+ txt222
+TEXDEF txt222 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.25 0.5 RAD 0.03125
+ txt222
+TEXDEF txt223 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.25 0.5 APEX 0.984531 0.25 0.5 RAD 0.0078125
+ txt223
+TEXDEF txt223 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.265469 0.5 APEX 0.875 0.359531 0.5 RAD 0.0078125
+ txt223
+TEXDEF txt223 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.25 0.515469 APEX 0.875 0.25 0.609531 RAD 0.0078125
+ txt223
+TEXDEF txt223 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.25 0.625 RAD 0.03125
+ txt223
+TEXDEF txt223 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.25 0.625 APEX 0.984531 0.25 0.625 RAD 0.0078125
+ txt223
+TEXDEF txt223 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.265469 0.625 APEX 0.875 0.359531 0.625 RAD 0.0078125
+ txt223
+TEXDEF txt223 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.25 0.640469 APEX 0.875 0.25 0.734531 RAD 0.0078125
+ txt223
+TEXDEF txt223 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.25 0.75 RAD 0.03125
+ txt223
+TEXDEF txt223 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.25 0.75 APEX 0.984531 0.25 0.75 RAD 0.0078125
+ txt223
+TEXDEF txt223 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.265469 0.75 APEX 0.875 0.359531 0.75 RAD 0.0078125
+ txt223
+TEXDEF txt224 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.25 0.765469 APEX 0.875 0.25 0.859531 RAD 0.0078125
+ txt224
+TEXDEF txt224 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.25 0.875 RAD 0.03125
+ txt224
+TEXDEF txt224 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.25 0.875 APEX 0.984531 0.25 0.875 RAD 0.0078125
+ txt224
+TEXDEF txt224 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.265469 0.875 APEX 0.875 0.359531 0.875 RAD 0.0078125
+ txt224
+TEXDEF txt224 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.25 0.890469 APEX 0.875 0.25 0.984531 RAD 0.0078125
+ txt224
+TEXDEF txt224 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.25 1 RAD 0.03125
+ txt224
+TEXDEF txt224 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.25 1 APEX 0.984531 0.25 1 RAD 0.0078125
+ txt224
+TEXDEF txt224 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.265469 1 APEX 0.875 0.359531 1 RAD 0.0078125
+ txt224
+TEXDEF txt224 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.375 0 RAD 0.03125
+ txt224
+TEXDEF txt224 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.375 0 APEX 0.984531 0.375 0 RAD 0.0078125
+ txt224
+TEXDEF txt225 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.390469 0 APEX 0.875 0.484531 0 RAD 0.0078125
+ txt225
+TEXDEF txt225 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.375 0.0154687 APEX 0.875 0.375 0.109531 RAD 0.0078125
+ txt225
+TEXDEF txt225 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.375 0.125 RAD 0.03125
+ txt225
+TEXDEF txt225 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.375 0.125 APEX 0.984531 0.375 0.125 RAD 0.0078125
+ txt225
+TEXDEF txt225 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.390469 0.125 APEX 0.875 0.484531 0.125 RAD 0.0078125
+ txt225
+TEXDEF txt225 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.375 0.140469 APEX 0.875 0.375 0.234531 RAD 0.0078125
+ txt225
+TEXDEF txt225 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.375 0.25 RAD 0.03125
+ txt225
+TEXDEF txt225 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.375 0.25 APEX 0.984531 0.375 0.25 RAD 0.0078125
+ txt225
+TEXDEF txt225 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.390469 0.25 APEX 0.875 0.484531 0.25 RAD 0.0078125
+ txt225
+TEXDEF txt225 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.375 0.265469 APEX 0.875 0.375 0.359531 RAD 0.0078125
+ txt225
+TEXDEF txt226 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.375 0.375 RAD 0.03125
+ txt226
+TEXDEF txt226 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.375 0.375 APEX 0.984531 0.375 0.375 RAD 0.0078125
+ txt226
+TEXDEF txt226 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.390469 0.375 APEX 0.875 0.484531 0.375 RAD 0.0078125
+ txt226
+TEXDEF txt226 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.375 0.390469 APEX 0.875 0.375 0.484531 RAD 0.0078125
+ txt226
+TEXDEF txt226 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.375 0.5 RAD 0.03125
+ txt226
+TEXDEF txt226 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.375 0.5 APEX 0.984531 0.375 0.5 RAD 0.0078125
+ txt226
+TEXDEF txt226 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.390469 0.5 APEX 0.875 0.484531 0.5 RAD 0.0078125
+ txt226
+TEXDEF txt226 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.375 0.515469 APEX 0.875 0.375 0.609531 RAD 0.0078125
+ txt226
+TEXDEF txt226 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.375 0.625 RAD 0.03125
+ txt226
+TEXDEF txt226 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.375 0.625 APEX 0.984531 0.375 0.625 RAD 0.0078125
+ txt226
+TEXDEF txt227 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.390469 0.625 APEX 0.875 0.484531 0.625 RAD 0.0078125
+ txt227
+TEXDEF txt227 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.375 0.640469 APEX 0.875 0.375 0.734531 RAD 0.0078125
+ txt227
+TEXDEF txt227 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.375 0.75 RAD 0.03125
+ txt227
+TEXDEF txt227 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.375 0.75 APEX 0.984531 0.375 0.75 RAD 0.0078125
+ txt227
+TEXDEF txt227 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.390469 0.75 APEX 0.875 0.484531 0.75 RAD 0.0078125
+ txt227
+TEXDEF txt227 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.375 0.765469 APEX 0.875 0.375 0.859531 RAD 0.0078125
+ txt227
+TEXDEF txt227 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.375 0.875 RAD 0.03125
+ txt227
+TEXDEF txt227 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.375 0.875 APEX 0.984531 0.375 0.875 RAD 0.0078125
+ txt227
+TEXDEF txt227 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.390469 0.875 APEX 0.875 0.484531 0.875 RAD 0.0078125
+ txt227
+TEXDEF txt227 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.375 0.890469 APEX 0.875 0.375 0.984531 RAD 0.0078125
+ txt227
+TEXDEF txt228 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.375 1 RAD 0.03125
+ txt228
+TEXDEF txt228 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.375 1 APEX 0.984531 0.375 1 RAD 0.0078125
+ txt228
+TEXDEF txt228 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.390469 1 APEX 0.875 0.484531 1 RAD 0.0078125
+ txt228
+TEXDEF txt228 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.5 0 RAD 0.03125
+ txt228
+TEXDEF txt228 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.5 0 APEX 0.984531 0.5 0 RAD 0.0078125
+ txt228
+TEXDEF txt228 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.515469 0 APEX 0.875 0.609531 0 RAD 0.0078125
+ txt228
+TEXDEF txt228 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.5 0.0154687 APEX 0.875 0.5 0.109531 RAD 0.0078125
+ txt228
+TEXDEF txt228 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.5 0.125 RAD 0.03125
+ txt228
+TEXDEF txt228 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.5 0.125 APEX 0.984531 0.5 0.125 RAD 0.0078125
+ txt228
+TEXDEF txt228 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.515469 0.125 APEX 0.875 0.609531 0.125 RAD 0.0078125
+ txt228
+TEXDEF txt229 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.5 0.140469 APEX 0.875 0.5 0.234531 RAD 0.0078125
+ txt229
+TEXDEF txt229 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.5 0.25 RAD 0.03125
+ txt229
+TEXDEF txt229 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.5 0.25 APEX 0.984531 0.5 0.25 RAD 0.0078125
+ txt229
+TEXDEF txt229 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.515469 0.25 APEX 0.875 0.609531 0.25 RAD 0.0078125
+ txt229
+TEXDEF txt229 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.5 0.265469 APEX 0.875 0.5 0.359531 RAD 0.0078125
+ txt229
+TEXDEF txt229 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.5 0.375 RAD 0.03125
+ txt229
+TEXDEF txt229 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.5 0.375 APEX 0.984531 0.5 0.375 RAD 0.0078125
+ txt229
+TEXDEF txt229 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.515469 0.375 APEX 0.875 0.609531 0.375 RAD 0.0078125
+ txt229
+TEXDEF txt229 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.5 0.390469 APEX 0.875 0.5 0.484531 RAD 0.0078125
+ txt229
+TEXDEF txt229 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.5 0.5 RAD 0.03125
+ txt229
+TEXDEF txt230 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.5 0.5 APEX 0.984531 0.5 0.5 RAD 0.0078125
+ txt230
+TEXDEF txt230 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.515469 0.5 APEX 0.875 0.609531 0.5 RAD 0.0078125
+ txt230
+TEXDEF txt230 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.5 0.515469 APEX 0.875 0.5 0.609531 RAD 0.0078125
+ txt230
+TEXDEF txt230 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.5 0.625 RAD 0.03125
+ txt230
+TEXDEF txt230 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.5 0.625 APEX 0.984531 0.5 0.625 RAD 0.0078125
+ txt230
+TEXDEF txt230 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.515469 0.625 APEX 0.875 0.609531 0.625 RAD 0.0078125
+ txt230
+TEXDEF txt230 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.5 0.640469 APEX 0.875 0.5 0.734531 RAD 0.0078125
+ txt230
+TEXDEF txt230 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.5 0.75 RAD 0.03125
+ txt230
+TEXDEF txt230 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.5 0.75 APEX 0.984531 0.5 0.75 RAD 0.0078125
+ txt230
+TEXDEF txt230 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.515469 0.75 APEX 0.875 0.609531 0.75 RAD 0.0078125
+ txt230
+TEXDEF txt231 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.5 0.765469 APEX 0.875 0.5 0.859531 RAD 0.0078125
+ txt231
+TEXDEF txt231 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.5 0.875 RAD 0.03125
+ txt231
+TEXDEF txt231 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.5 0.875 APEX 0.984531 0.5 0.875 RAD 0.0078125
+ txt231
+TEXDEF txt231 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.515469 0.875 APEX 0.875 0.609531 0.875 RAD 0.0078125
+ txt231
+TEXDEF txt231 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.5 0.890469 APEX 0.875 0.5 0.984531 RAD 0.0078125
+ txt231
+TEXDEF txt231 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.5 1 RAD 0.03125
+ txt231
+TEXDEF txt231 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.5 1 APEX 0.984531 0.5 1 RAD 0.0078125
+ txt231
+TEXDEF txt231 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.515469 1 APEX 0.875 0.609531 1 RAD 0.0078125
+ txt231
+TEXDEF txt231 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.625 0 RAD 0.03125
+ txt231
+TEXDEF txt231 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.625 0 APEX 0.984531 0.625 0 RAD 0.0078125
+ txt231
+TEXDEF txt232 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.640469 0 APEX 0.875 0.734531 0 RAD 0.0078125
+ txt232
+TEXDEF txt232 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.625 0.0154687 APEX 0.875 0.625 0.109531 RAD 0.0078125
+ txt232
+TEXDEF txt232 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.625 0.125 RAD 0.03125
+ txt232
+TEXDEF txt232 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.625 0.125 APEX 0.984531 0.625 0.125 RAD 0.0078125
+ txt232
+TEXDEF txt232 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.640469 0.125 APEX 0.875 0.734531 0.125 RAD 0.0078125
+ txt232
+TEXDEF txt232 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.625 0.140469 APEX 0.875 0.625 0.234531 RAD 0.0078125
+ txt232
+TEXDEF txt232 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.625 0.25 RAD 0.03125
+ txt232
+TEXDEF txt232 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.625 0.25 APEX 0.984531 0.625 0.25 RAD 0.0078125
+ txt232
+TEXDEF txt232 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.640469 0.25 APEX 0.875 0.734531 0.25 RAD 0.0078125
+ txt232
+TEXDEF txt232 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.625 0.265469 APEX 0.875 0.625 0.359531 RAD 0.0078125
+ txt232
+TEXDEF txt233 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.625 0.375 RAD 0.03125
+ txt233
+TEXDEF txt233 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.625 0.375 APEX 0.984531 0.625 0.375 RAD 0.0078125
+ txt233
+TEXDEF txt233 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.640469 0.375 APEX 0.875 0.734531 0.375 RAD 0.0078125
+ txt233
+TEXDEF txt233 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.625 0.390469 APEX 0.875 0.625 0.484531 RAD 0.0078125
+ txt233
+TEXDEF txt233 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.625 0.5 RAD 0.03125
+ txt233
+TEXDEF txt233 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.625 0.5 APEX 0.984531 0.625 0.5 RAD 0.0078125
+ txt233
+TEXDEF txt233 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.640469 0.5 APEX 0.875 0.734531 0.5 RAD 0.0078125
+ txt233
+TEXDEF txt233 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.625 0.515469 APEX 0.875 0.625 0.609531 RAD 0.0078125
+ txt233
+TEXDEF txt233 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.625 0.625 RAD 0.03125
+ txt233
+TEXDEF txt233 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.625 0.625 APEX 0.984531 0.625 0.625 RAD 0.0078125
+ txt233
+TEXDEF txt234 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.640469 0.625 APEX 0.875 0.734531 0.625 RAD 0.0078125
+ txt234
+TEXDEF txt234 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.625 0.640469 APEX 0.875 0.625 0.734531 RAD 0.0078125
+ txt234
+TEXDEF txt234 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.625 0.75 RAD 0.03125
+ txt234
+TEXDEF txt234 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.625 0.75 APEX 0.984531 0.625 0.75 RAD 0.0078125
+ txt234
+TEXDEF txt234 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.640469 0.75 APEX 0.875 0.734531 0.75 RAD 0.0078125
+ txt234
+TEXDEF txt234 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.625 0.765469 APEX 0.875 0.625 0.859531 RAD 0.0078125
+ txt234
+TEXDEF txt234 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.625 0.875 RAD 0.03125
+ txt234
+TEXDEF txt234 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.625 0.875 APEX 0.984531 0.625 0.875 RAD 0.0078125
+ txt234
+TEXDEF txt234 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.640469 0.875 APEX 0.875 0.734531 0.875 RAD 0.0078125
+ txt234
+TEXDEF txt234 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.625 0.890469 APEX 0.875 0.625 0.984531 RAD 0.0078125
+ txt234
+TEXDEF txt235 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.625 1 RAD 0.03125
+ txt235
+TEXDEF txt235 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.625 1 APEX 0.984531 0.625 1 RAD 0.0078125
+ txt235
+TEXDEF txt235 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.640469 1 APEX 0.875 0.734531 1 RAD 0.0078125
+ txt235
+TEXDEF txt235 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.75 0 RAD 0.03125
+ txt235
+TEXDEF txt235 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.75 0 APEX 0.984531 0.75 0 RAD 0.0078125
+ txt235
+TEXDEF txt235 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.765469 0 APEX 0.875 0.859531 0 RAD 0.0078125
+ txt235
+TEXDEF txt235 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.75 0.0154687 APEX 0.875 0.75 0.109531 RAD 0.0078125
+ txt235
+TEXDEF txt235 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.75 0.125 RAD 0.03125
+ txt235
+TEXDEF txt235 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.75 0.125 APEX 0.984531 0.75 0.125 RAD 0.0078125
+ txt235
+TEXDEF txt235 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.765469 0.125 APEX 0.875 0.859531 0.125 RAD 0.0078125
+ txt235
+TEXDEF txt236 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.75 0.140469 APEX 0.875 0.75 0.234531 RAD 0.0078125
+ txt236
+TEXDEF txt236 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.75 0.25 RAD 0.03125
+ txt236
+TEXDEF txt236 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.75 0.25 APEX 0.984531 0.75 0.25 RAD 0.0078125
+ txt236
+TEXDEF txt236 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.765469 0.25 APEX 0.875 0.859531 0.25 RAD 0.0078125
+ txt236
+TEXDEF txt236 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.75 0.265469 APEX 0.875 0.75 0.359531 RAD 0.0078125
+ txt236
+TEXDEF txt236 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.75 0.375 RAD 0.03125
+ txt236
+TEXDEF txt236 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.75 0.375 APEX 0.984531 0.75 0.375 RAD 0.0078125
+ txt236
+TEXDEF txt236 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.765469 0.375 APEX 0.875 0.859531 0.375 RAD 0.0078125
+ txt236
+TEXDEF txt236 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.75 0.390469 APEX 0.875 0.75 0.484531 RAD 0.0078125
+ txt236
+TEXDEF txt236 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.75 0.5 RAD 0.03125
+ txt236
+TEXDEF txt237 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.75 0.5 APEX 0.984531 0.75 0.5 RAD 0.0078125
+ txt237
+TEXDEF txt237 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.765469 0.5 APEX 0.875 0.859531 0.5 RAD 0.0078125
+ txt237
+TEXDEF txt237 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.75 0.515469 APEX 0.875 0.75 0.609531 RAD 0.0078125
+ txt237
+TEXDEF txt237 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.75 0.625 RAD 0.03125
+ txt237
+TEXDEF txt237 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.75 0.625 APEX 0.984531 0.75 0.625 RAD 0.0078125
+ txt237
+TEXDEF txt237 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.765469 0.625 APEX 0.875 0.859531 0.625 RAD 0.0078125
+ txt237
+TEXDEF txt237 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.75 0.640469 APEX 0.875 0.75 0.734531 RAD 0.0078125
+ txt237
+TEXDEF txt237 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.75 0.75 RAD 0.03125
+ txt237
+TEXDEF txt237 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.75 0.75 APEX 0.984531 0.75 0.75 RAD 0.0078125
+ txt237
+TEXDEF txt237 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.765469 0.75 APEX 0.875 0.859531 0.75 RAD 0.0078125
+ txt237
+TEXDEF txt238 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.75 0.765469 APEX 0.875 0.75 0.859531 RAD 0.0078125
+ txt238
+TEXDEF txt238 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.75 0.875 RAD 0.03125
+ txt238
+TEXDEF txt238 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.75 0.875 APEX 0.984531 0.75 0.875 RAD 0.0078125
+ txt238
+TEXDEF txt238 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.765469 0.875 APEX 0.875 0.859531 0.875 RAD 0.0078125
+ txt238
+TEXDEF txt238 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.75 0.890469 APEX 0.875 0.75 0.984531 RAD 0.0078125
+ txt238
+TEXDEF txt238 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.75 1 RAD 0.03125
+ txt238
+TEXDEF txt238 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.75 1 APEX 0.984531 0.75 1 RAD 0.0078125
+ txt238
+TEXDEF txt238 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.765469 1 APEX 0.875 0.859531 1 RAD 0.0078125
+ txt238
+TEXDEF txt238 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.875 0 RAD 0.03125
+ txt238
+TEXDEF txt238 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.875 0 APEX 0.984531 0.875 0 RAD 0.0078125
+ txt238
+TEXDEF txt239 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.890469 0 APEX 0.875 0.984531 0 RAD 0.0078125
+ txt239
+TEXDEF txt239 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.875 0.0154687 APEX 0.875 0.875 0.109531 RAD 0.0078125
+ txt239
+TEXDEF txt239 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.875 0.125 RAD 0.03125
+ txt239
+TEXDEF txt239 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.875 0.125 APEX 0.984531 0.875 0.125 RAD 0.0078125
+ txt239
+TEXDEF txt239 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.890469 0.125 APEX 0.875 0.984531 0.125 RAD 0.0078125
+ txt239
+TEXDEF txt239 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.875 0.140469 APEX 0.875 0.875 0.234531 RAD 0.0078125
+ txt239
+TEXDEF txt239 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.875 0.25 RAD 0.03125
+ txt239
+TEXDEF txt239 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.875 0.25 APEX 0.984531 0.875 0.25 RAD 0.0078125
+ txt239
+TEXDEF txt239 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.890469 0.25 APEX 0.875 0.984531 0.25 RAD 0.0078125
+ txt239
+TEXDEF txt239 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.875 0.265469 APEX 0.875 0.875 0.359531 RAD 0.0078125
+ txt239
+TEXDEF txt240 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.875 0.375 RAD 0.03125
+ txt240
+TEXDEF txt240 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.875 0.375 APEX 0.984531 0.875 0.375 RAD 0.0078125
+ txt240
+TEXDEF txt240 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.890469 0.375 APEX 0.875 0.984531 0.375 RAD 0.0078125
+ txt240
+TEXDEF txt240 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.875 0.390469 APEX 0.875 0.875 0.484531 RAD 0.0078125
+ txt240
+TEXDEF txt240 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.875 0.5 RAD 0.03125
+ txt240
+TEXDEF txt240 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.875 0.5 APEX 0.984531 0.875 0.5 RAD 0.0078125
+ txt240
+TEXDEF txt240 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.890469 0.5 APEX 0.875 0.984531 0.5 RAD 0.0078125
+ txt240
+TEXDEF txt240 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.875 0.515469 APEX 0.875 0.875 0.609531 RAD 0.0078125
+ txt240
+TEXDEF txt240 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.875 0.625 RAD 0.03125
+ txt240
+TEXDEF txt240 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.875 0.625 APEX 0.984531 0.875 0.625 RAD 0.0078125
+ txt240
+TEXDEF txt241 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.890469 0.625 APEX 0.875 0.984531 0.625 RAD 0.0078125
+ txt241
+TEXDEF txt241 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.875 0.640469 APEX 0.875 0.875 0.734531 RAD 0.0078125
+ txt241
+TEXDEF txt241 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.875 0.75 RAD 0.03125
+ txt241
+TEXDEF txt241 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.875 0.75 APEX 0.984531 0.875 0.75 RAD 0.0078125
+ txt241
+TEXDEF txt241 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.890469 0.75 APEX 0.875 0.984531 0.75 RAD 0.0078125
+ txt241
+TEXDEF txt241 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.875 0.765469 APEX 0.875 0.875 0.859531 RAD 0.0078125
+ txt241
+TEXDEF txt241 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.875 0.875 RAD 0.03125
+ txt241
+TEXDEF txt241 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.875 0.875 APEX 0.984531 0.875 0.875 RAD 0.0078125
+ txt241
+TEXDEF txt241 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.890469 0.875 APEX 0.875 0.984531 0.875 RAD 0.0078125
+ txt241
+TEXDEF txt241 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.875 0.890469 APEX 0.875 0.875 0.984531 RAD 0.0078125
+ txt241
+TEXDEF txt242 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 0.875 1 RAD 0.03125
+ txt242
+TEXDEF txt242 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 0.875 1 APEX 0.984531 0.875 1 RAD 0.0078125
+ txt242
+TEXDEF txt242 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 0.890469 1 APEX 0.875 0.984531 1 RAD 0.0078125
+ txt242
+TEXDEF txt242 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 1 0 RAD 0.03125
+ txt242
+TEXDEF txt242 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 1 0 APEX 0.984531 1 0 RAD 0.0078125
+ txt242
+TEXDEF txt242 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 1 0.0154687 APEX 0.875 1 0.109531 RAD 0.0078125
+ txt242
+TEXDEF txt242 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 1 0.125 RAD 0.03125
+ txt242
+TEXDEF txt242 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 1 0.125 APEX 0.984531 1 0.125 RAD 0.0078125
+ txt242
+TEXDEF txt242 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 1 0.140469 APEX 0.875 1 0.234531 RAD 0.0078125
+ txt242
+TEXDEF txt242 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 1 0.25 RAD 0.03125
+ txt242
+TEXDEF txt243 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 1 0.25 APEX 0.984531 1 0.25 RAD 0.0078125
+ txt243
+TEXDEF txt243 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 1 0.265469 APEX 0.875 1 0.359531 RAD 0.0078125
+ txt243
+TEXDEF txt243 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 1 0.375 RAD 0.03125
+ txt243
+TEXDEF txt243 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 1 0.375 APEX 0.984531 1 0.375 RAD 0.0078125
+ txt243
+TEXDEF txt243 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 1 0.390469 APEX 0.875 1 0.484531 RAD 0.0078125
+ txt243
+TEXDEF txt243 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 1 0.5 RAD 0.03125
+ txt243
+TEXDEF txt243 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 1 0.5 APEX 0.984531 1 0.5 RAD 0.0078125
+ txt243
+TEXDEF txt243 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 1 0.515469 APEX 0.875 1 0.609531 RAD 0.0078125
+ txt243
+TEXDEF txt243 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 1 0.625 RAD 0.03125
+ txt243
+TEXDEF txt243 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 1 0.625 APEX 0.984531 1 0.625 RAD 0.0078125
+ txt243
+TEXDEF txt244 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 1 0.640469 APEX 0.875 1 0.734531 RAD 0.0078125
+ txt244
+TEXDEF txt244 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 1 0.75 RAD 0.03125
+ txt244
+TEXDEF txt244 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 1 0.75 APEX 0.984531 1 0.75 RAD 0.0078125
+ txt244
+TEXDEF txt244 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 1 0.765469 APEX 0.875 1 0.859531 RAD 0.0078125
+ txt244
+TEXDEF txt244 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 1 0.875 RAD 0.03125
+ txt244
+TEXDEF txt244 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 1 0.875 APEX 0.984531 1 0.875 RAD 0.0078125
+ txt244
+TEXDEF txt244 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.875 1 0.890469 APEX 0.875 1 0.984531 RAD 0.0078125
+ txt244
+TEXDEF txt244 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 0.875 1 1 RAD 0.03125
+ txt244
+TEXDEF txt244 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.9 0.1 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 0.890469 1 1 APEX 0.984531 1 1 RAD 0.0078125
+ txt244
+TEXDEF txt244 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0 0 RAD 0.03125
+ txt244
+TEXDEF txt245 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.0154687 0 APEX 1 0.109531 0 RAD 0.0078125
+ txt245
+TEXDEF txt245 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0 0.0154687 APEX 1 0 0.109531 RAD 0.0078125
+ txt245
+TEXDEF txt245 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0 0.125 RAD 0.03125
+ txt245
+TEXDEF txt245 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.0154687 0.125 APEX 1 0.109531 0.125 RAD 0.0078125
+ txt245
+TEXDEF txt245 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0 0.140469 APEX 1 0 0.234531 RAD 0.0078125
+ txt245
+TEXDEF txt245 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0 0.25 RAD 0.03125
+ txt245
+TEXDEF txt245 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.0154687 0.25 APEX 1 0.109531 0.25 RAD 0.0078125
+ txt245
+TEXDEF txt245 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0 0.265469 APEX 1 0 0.359531 RAD 0.0078125
+ txt245
+TEXDEF txt245 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0 0.375 RAD 0.03125
+ txt245
+TEXDEF txt245 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.0154687 0.375 APEX 1 0.109531 0.375 RAD 0.0078125
+ txt245
+TEXDEF txt246 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0 0.390469 APEX 1 0 0.484531 RAD 0.0078125
+ txt246
+TEXDEF txt246 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0 0.5 RAD 0.03125
+ txt246
+TEXDEF txt246 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.0154687 0.5 APEX 1 0.109531 0.5 RAD 0.0078125
+ txt246
+TEXDEF txt246 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0 0.515469 APEX 1 0 0.609531 RAD 0.0078125
+ txt246
+TEXDEF txt246 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0 0.625 RAD 0.03125
+ txt246
+TEXDEF txt246 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.0154687 0.625 APEX 1 0.109531 0.625 RAD 0.0078125
+ txt246
+TEXDEF txt246 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0 0.640469 APEX 1 0 0.734531 RAD 0.0078125
+ txt246
+TEXDEF txt246 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0 0.75 RAD 0.03125
+ txt246
+TEXDEF txt246 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.0154687 0.75 APEX 1 0.109531 0.75 RAD 0.0078125
+ txt246
+TEXDEF txt246 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0 0.765469 APEX 1 0 0.859531 RAD 0.0078125
+ txt246
+TEXDEF txt247 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0 0.875 RAD 0.03125
+ txt247
+TEXDEF txt247 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.0154687 0.875 APEX 1 0.109531 0.875 RAD 0.0078125
+ txt247
+TEXDEF txt247 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0 0.890469 APEX 1 0 0.984531 RAD 0.0078125
+ txt247
+TEXDEF txt247 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0 1 RAD 0.03125
+ txt247
+TEXDEF txt247 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.0154687 1 APEX 1 0.109531 1 RAD 0.0078125
+ txt247
+TEXDEF txt247 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.125 0 RAD 0.03125
+ txt247
+TEXDEF txt247 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.140469 0 APEX 1 0.234531 0 RAD 0.0078125
+ txt247
+TEXDEF txt247 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.125 0.0154687 APEX 1 0.125 0.109531 RAD 0.0078125
+ txt247
+TEXDEF txt247 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.125 0.125 RAD 0.03125
+ txt247
+TEXDEF txt247 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.140469 0.125 APEX 1 0.234531 0.125 RAD 0.0078125
+ txt247
+TEXDEF txt248 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.125 0.140469 APEX 1 0.125 0.234531 RAD 0.0078125
+ txt248
+TEXDEF txt248 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.125 0.25 RAD 0.03125
+ txt248
+TEXDEF txt248 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.140469 0.25 APEX 1 0.234531 0.25 RAD 0.0078125
+ txt248
+TEXDEF txt248 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.125 0.265469 APEX 1 0.125 0.359531 RAD 0.0078125
+ txt248
+TEXDEF txt248 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.125 0.375 RAD 0.03125
+ txt248
+TEXDEF txt248 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.140469 0.375 APEX 1 0.234531 0.375 RAD 0.0078125
+ txt248
+TEXDEF txt248 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.125 0.390469 APEX 1 0.125 0.484531 RAD 0.0078125
+ txt248
+TEXDEF txt248 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.125 0.5 RAD 0.03125
+ txt248
+TEXDEF txt248 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.140469 0.5 APEX 1 0.234531 0.5 RAD 0.0078125
+ txt248
+TEXDEF txt248 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.125 0.515469 APEX 1 0.125 0.609531 RAD 0.0078125
+ txt248
+TEXDEF txt249 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.125 0.625 RAD 0.03125
+ txt249
+TEXDEF txt249 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.140469 0.625 APEX 1 0.234531 0.625 RAD 0.0078125
+ txt249
+TEXDEF txt249 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.125 0.640469 APEX 1 0.125 0.734531 RAD 0.0078125
+ txt249
+TEXDEF txt249 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.125 0.75 RAD 0.03125
+ txt249
+TEXDEF txt249 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.140469 0.75 APEX 1 0.234531 0.75 RAD 0.0078125
+ txt249
+TEXDEF txt249 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.125 0.765469 APEX 1 0.125 0.859531 RAD 0.0078125
+ txt249
+TEXDEF txt249 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.125 0.875 RAD 0.03125
+ txt249
+TEXDEF txt249 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.140469 0.875 APEX 1 0.234531 0.875 RAD 0.0078125
+ txt249
+TEXDEF txt249 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.125 0.890469 APEX 1 0.125 0.984531 RAD 0.0078125
+ txt249
+TEXDEF txt249 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.125 1 RAD 0.03125
+ txt249
+TEXDEF txt250 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.140469 1 APEX 1 0.234531 1 RAD 0.0078125
+ txt250
+TEXDEF txt250 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.25 0 RAD 0.03125
+ txt250
+TEXDEF txt250 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.265469 0 APEX 1 0.359531 0 RAD 0.0078125
+ txt250
+TEXDEF txt250 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.25 0.0154687 APEX 1 0.25 0.109531 RAD 0.0078125
+ txt250
+TEXDEF txt250 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.25 0.125 RAD 0.03125
+ txt250
+TEXDEF txt250 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.265469 0.125 APEX 1 0.359531 0.125 RAD 0.0078125
+ txt250
+TEXDEF txt250 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.25 0.140469 APEX 1 0.25 0.234531 RAD 0.0078125
+ txt250
+TEXDEF txt250 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.25 0.25 RAD 0.03125
+ txt250
+TEXDEF txt250 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.265469 0.25 APEX 1 0.359531 0.25 RAD 0.0078125
+ txt250
+TEXDEF txt250 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.25 0.265469 APEX 1 0.25 0.359531 RAD 0.0078125
+ txt250
+TEXDEF txt251 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.25 0.375 RAD 0.03125
+ txt251
+TEXDEF txt251 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.265469 0.375 APEX 1 0.359531 0.375 RAD 0.0078125
+ txt251
+TEXDEF txt251 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.25 0.390469 APEX 1 0.25 0.484531 RAD 0.0078125
+ txt251
+TEXDEF txt251 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.25 0.5 RAD 0.03125
+ txt251
+TEXDEF txt251 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.265469 0.5 APEX 1 0.359531 0.5 RAD 0.0078125
+ txt251
+TEXDEF txt251 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.25 0.515469 APEX 1 0.25 0.609531 RAD 0.0078125
+ txt251
+TEXDEF txt251 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.25 0.625 RAD 0.03125
+ txt251
+TEXDEF txt251 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.265469 0.625 APEX 1 0.359531 0.625 RAD 0.0078125
+ txt251
+TEXDEF txt251 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.25 0.640469 APEX 1 0.25 0.734531 RAD 0.0078125
+ txt251
+TEXDEF txt251 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.25 0.75 RAD 0.03125
+ txt251
+TEXDEF txt252 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.265469 0.75 APEX 1 0.359531 0.75 RAD 0.0078125
+ txt252
+TEXDEF txt252 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.25 0.765469 APEX 1 0.25 0.859531 RAD 0.0078125
+ txt252
+TEXDEF txt252 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.25 0.875 RAD 0.03125
+ txt252
+TEXDEF txt252 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.265469 0.875 APEX 1 0.359531 0.875 RAD 0.0078125
+ txt252
+TEXDEF txt252 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.25 0.890469 APEX 1 0.25 0.984531 RAD 0.0078125
+ txt252
+TEXDEF txt252 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.25 1 RAD 0.03125
+ txt252
+TEXDEF txt252 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.265469 1 APEX 1 0.359531 1 RAD 0.0078125
+ txt252
+TEXDEF txt252 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.375 0 RAD 0.03125
+ txt252
+TEXDEF txt252 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.390469 0 APEX 1 0.484531 0 RAD 0.0078125
+ txt252
+TEXDEF txt252 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.375 0.0154687 APEX 1 0.375 0.109531 RAD 0.0078125
+ txt252
+TEXDEF txt253 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.375 0.125 RAD 0.03125
+ txt253
+TEXDEF txt253 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.390469 0.125 APEX 1 0.484531 0.125 RAD 0.0078125
+ txt253
+TEXDEF txt253 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.375 0.140469 APEX 1 0.375 0.234531 RAD 0.0078125
+ txt253
+TEXDEF txt253 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.375 0.25 RAD 0.03125
+ txt253
+TEXDEF txt253 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.390469 0.25 APEX 1 0.484531 0.25 RAD 0.0078125
+ txt253
+TEXDEF txt253 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.375 0.265469 APEX 1 0.375 0.359531 RAD 0.0078125
+ txt253
+TEXDEF txt253 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.375 0.375 RAD 0.03125
+ txt253
+TEXDEF txt253 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.390469 0.375 APEX 1 0.484531 0.375 RAD 0.0078125
+ txt253
+TEXDEF txt253 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.375 0.390469 APEX 1 0.375 0.484531 RAD 0.0078125
+ txt253
+TEXDEF txt253 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.375 0.5 RAD 0.03125
+ txt253
+TEXDEF txt254 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.390469 0.5 APEX 1 0.484531 0.5 RAD 0.0078125
+ txt254
+TEXDEF txt254 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.375 0.515469 APEX 1 0.375 0.609531 RAD 0.0078125
+ txt254
+TEXDEF txt254 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.375 0.625 RAD 0.03125
+ txt254
+TEXDEF txt254 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.390469 0.625 APEX 1 0.484531 0.625 RAD 0.0078125
+ txt254
+TEXDEF txt254 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.375 0.640469 APEX 1 0.375 0.734531 RAD 0.0078125
+ txt254
+TEXDEF txt254 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.375 0.75 RAD 0.03125
+ txt254
+TEXDEF txt254 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.390469 0.75 APEX 1 0.484531 0.75 RAD 0.0078125
+ txt254
+TEXDEF txt254 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.375 0.765469 APEX 1 0.375 0.859531 RAD 0.0078125
+ txt254
+TEXDEF txt254 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.375 0.875 RAD 0.03125
+ txt254
+TEXDEF txt254 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.390469 0.875 APEX 1 0.484531 0.875 RAD 0.0078125
+ txt254
+TEXDEF txt255 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.375 0.890469 APEX 1 0.375 0.984531 RAD 0.0078125
+ txt255
+TEXDEF txt255 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.375 1 RAD 0.03125
+ txt255
+TEXDEF txt255 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.390469 1 APEX 1 0.484531 1 RAD 0.0078125
+ txt255
+TEXDEF txt255 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.5 0 RAD 0.03125
+ txt255
+TEXDEF txt255 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.515469 0 APEX 1 0.609531 0 RAD 0.0078125
+ txt255
+TEXDEF txt255 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.5 0.0154687 APEX 1 0.5 0.109531 RAD 0.0078125
+ txt255
+TEXDEF txt255 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.5 0.125 RAD 0.03125
+ txt255
+TEXDEF txt255 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.515469 0.125 APEX 1 0.609531 0.125 RAD 0.0078125
+ txt255
+TEXDEF txt255 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.5 0.140469 APEX 1 0.5 0.234531 RAD 0.0078125
+ txt255
+TEXDEF txt255 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.5 0.25 RAD 0.03125
+ txt255
+TEXDEF txt256 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.515469 0.25 APEX 1 0.609531 0.25 RAD 0.0078125
+ txt256
+TEXDEF txt256 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.5 0.265469 APEX 1 0.5 0.359531 RAD 0.0078125
+ txt256
+TEXDEF txt256 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.5 0.375 RAD 0.03125
+ txt256
+TEXDEF txt256 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.515469 0.375 APEX 1 0.609531 0.375 RAD 0.0078125
+ txt256
+TEXDEF txt256 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.5 0.390469 APEX 1 0.5 0.484531 RAD 0.0078125
+ txt256
+TEXDEF txt256 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.5 0.5 RAD 0.03125
+ txt256
+TEXDEF txt256 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.515469 0.5 APEX 1 0.609531 0.5 RAD 0.0078125
+ txt256
+TEXDEF txt256 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.5 0.515469 APEX 1 0.5 0.609531 RAD 0.0078125
+ txt256
+TEXDEF txt256 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.5 0.625 RAD 0.03125
+ txt256
+TEXDEF txt256 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.515469 0.625 APEX 1 0.609531 0.625 RAD 0.0078125
+ txt256
+TEXDEF txt257 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.5 0.640469 APEX 1 0.5 0.734531 RAD 0.0078125
+ txt257
+TEXDEF txt257 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.5 0.75 RAD 0.03125
+ txt257
+TEXDEF txt257 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.515469 0.75 APEX 1 0.609531 0.75 RAD 0.0078125
+ txt257
+TEXDEF txt257 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.5 0.765469 APEX 1 0.5 0.859531 RAD 0.0078125
+ txt257
+TEXDEF txt257 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.5 0.875 RAD 0.03125
+ txt257
+TEXDEF txt257 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.515469 0.875 APEX 1 0.609531 0.875 RAD 0.0078125
+ txt257
+TEXDEF txt257 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.5 0.890469 APEX 1 0.5 0.984531 RAD 0.0078125
+ txt257
+TEXDEF txt257 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.5 1 RAD 0.03125
+ txt257
+TEXDEF txt257 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.515469 1 APEX 1 0.609531 1 RAD 0.0078125
+ txt257
+TEXDEF txt257 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.625 0 RAD 0.03125
+ txt257
+TEXDEF txt258 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.640469 0 APEX 1 0.734531 0 RAD 0.0078125
+ txt258
+TEXDEF txt258 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.625 0.0154687 APEX 1 0.625 0.109531 RAD 0.0078125
+ txt258
+TEXDEF txt258 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.625 0.125 RAD 0.03125
+ txt258
+TEXDEF txt258 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.640469 0.125 APEX 1 0.734531 0.125 RAD 0.0078125
+ txt258
+TEXDEF txt258 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.625 0.140469 APEX 1 0.625 0.234531 RAD 0.0078125
+ txt258
+TEXDEF txt258 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.625 0.25 RAD 0.03125
+ txt258
+TEXDEF txt258 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.640469 0.25 APEX 1 0.734531 0.25 RAD 0.0078125
+ txt258
+TEXDEF txt258 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.625 0.265469 APEX 1 0.625 0.359531 RAD 0.0078125
+ txt258
+TEXDEF txt258 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.625 0.375 RAD 0.03125
+ txt258
+TEXDEF txt258 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.640469 0.375 APEX 1 0.734531 0.375 RAD 0.0078125
+ txt258
+TEXDEF txt259 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.625 0.390469 APEX 1 0.625 0.484531 RAD 0.0078125
+ txt259
+TEXDEF txt259 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.625 0.5 RAD 0.03125
+ txt259
+TEXDEF txt259 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.640469 0.5 APEX 1 0.734531 0.5 RAD 0.0078125
+ txt259
+TEXDEF txt259 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.625 0.515469 APEX 1 0.625 0.609531 RAD 0.0078125
+ txt259
+TEXDEF txt259 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.625 0.625 RAD 0.03125
+ txt259
+TEXDEF txt259 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.640469 0.625 APEX 1 0.734531 0.625 RAD 0.0078125
+ txt259
+TEXDEF txt259 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.625 0.640469 APEX 1 0.625 0.734531 RAD 0.0078125
+ txt259
+TEXDEF txt259 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.625 0.75 RAD 0.03125
+ txt259
+TEXDEF txt259 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.640469 0.75 APEX 1 0.734531 0.75 RAD 0.0078125
+ txt259
+TEXDEF txt259 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.625 0.765469 APEX 1 0.625 0.859531 RAD 0.0078125
+ txt259
+TEXDEF txt260 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.625 0.875 RAD 0.03125
+ txt260
+TEXDEF txt260 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.640469 0.875 APEX 1 0.734531 0.875 RAD 0.0078125
+ txt260
+TEXDEF txt260 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.625 0.890469 APEX 1 0.625 0.984531 RAD 0.0078125
+ txt260
+TEXDEF txt260 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.625 1 RAD 0.03125
+ txt260
+TEXDEF txt260 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.640469 1 APEX 1 0.734531 1 RAD 0.0078125
+ txt260
+TEXDEF txt260 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.75 0 RAD 0.03125
+ txt260
+TEXDEF txt260 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.765469 0 APEX 1 0.859531 0 RAD 0.0078125
+ txt260
+TEXDEF txt260 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.75 0.0154687 APEX 1 0.75 0.109531 RAD 0.0078125
+ txt260
+TEXDEF txt260 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.75 0.125 RAD 0.03125
+ txt260
+TEXDEF txt260 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.765469 0.125 APEX 1 0.859531 0.125 RAD 0.0078125
+ txt260
+TEXDEF txt261 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.75 0.140469 APEX 1 0.75 0.234531 RAD 0.0078125
+ txt261
+TEXDEF txt261 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.75 0.25 RAD 0.03125
+ txt261
+TEXDEF txt261 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.765469 0.25 APEX 1 0.859531 0.25 RAD 0.0078125
+ txt261
+TEXDEF txt261 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.75 0.265469 APEX 1 0.75 0.359531 RAD 0.0078125
+ txt261
+TEXDEF txt261 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.75 0.375 RAD 0.03125
+ txt261
+TEXDEF txt261 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.765469 0.375 APEX 1 0.859531 0.375 RAD 0.0078125
+ txt261
+TEXDEF txt261 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.75 0.390469 APEX 1 0.75 0.484531 RAD 0.0078125
+ txt261
+TEXDEF txt261 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.75 0.5 RAD 0.03125
+ txt261
+TEXDEF txt261 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.765469 0.5 APEX 1 0.859531 0.5 RAD 0.0078125
+ txt261
+TEXDEF txt261 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.75 0.515469 APEX 1 0.75 0.609531 RAD 0.0078125
+ txt261
+TEXDEF txt262 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.75 0.625 RAD 0.03125
+ txt262
+TEXDEF txt262 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.765469 0.625 APEX 1 0.859531 0.625 RAD 0.0078125
+ txt262
+TEXDEF txt262 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.75 0.640469 APEX 1 0.75 0.734531 RAD 0.0078125
+ txt262
+TEXDEF txt262 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.75 0.75 RAD 0.03125
+ txt262
+TEXDEF txt262 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.765469 0.75 APEX 1 0.859531 0.75 RAD 0.0078125
+ txt262
+TEXDEF txt262 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.75 0.765469 APEX 1 0.75 0.859531 RAD 0.0078125
+ txt262
+TEXDEF txt262 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.75 0.875 RAD 0.03125
+ txt262
+TEXDEF txt262 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.765469 0.875 APEX 1 0.859531 0.875 RAD 0.0078125
+ txt262
+TEXDEF txt262 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.75 0.890469 APEX 1 0.75 0.984531 RAD 0.0078125
+ txt262
+TEXDEF txt262 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.75 1 RAD 0.03125
+ txt262
+TEXDEF txt263 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.765469 1 APEX 1 0.859531 1 RAD 0.0078125
+ txt263
+TEXDEF txt263 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.875 0 RAD 0.03125
+ txt263
+TEXDEF txt263 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.890469 0 APEX 1 0.984531 0 RAD 0.0078125
+ txt263
+TEXDEF txt263 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.875 0.0154687 APEX 1 0.875 0.109531 RAD 0.0078125
+ txt263
+TEXDEF txt263 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.875 0.125 RAD 0.03125
+ txt263
+TEXDEF txt263 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.890469 0.125 APEX 1 0.984531 0.125 RAD 0.0078125
+ txt263
+TEXDEF txt263 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.875 0.140469 APEX 1 0.875 0.234531 RAD 0.0078125
+ txt263
+TEXDEF txt263 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.875 0.25 RAD 0.03125
+ txt263
+TEXDEF txt263 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.890469 0.25 APEX 1 0.984531 0.25 RAD 0.0078125
+ txt263
+TEXDEF txt263 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.875 0.265469 APEX 1 0.875 0.359531 RAD 0.0078125
+ txt263
+TEXDEF txt264 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.875 0.375 RAD 0.03125
+ txt264
+TEXDEF txt264 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.890469 0.375 APEX 1 0.984531 0.375 RAD 0.0078125
+ txt264
+TEXDEF txt264 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.875 0.390469 APEX 1 0.875 0.484531 RAD 0.0078125
+ txt264
+TEXDEF txt264 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.875 0.5 RAD 0.03125
+ txt264
+TEXDEF txt264 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.890469 0.5 APEX 1 0.984531 0.5 RAD 0.0078125
+ txt264
+TEXDEF txt264 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.875 0.515469 APEX 1 0.875 0.609531 RAD 0.0078125
+ txt264
+TEXDEF txt264 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.875 0.625 RAD 0.03125
+ txt264
+TEXDEF txt264 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.890469 0.625 APEX 1 0.984531 0.625 RAD 0.0078125
+ txt264
+TEXDEF txt264 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.875 0.640469 APEX 1 0.875 0.734531 RAD 0.0078125
+ txt264
+TEXDEF txt264 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.875 0.75 RAD 0.03125
+ txt264
+TEXDEF txt265 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.890469 0.75 APEX 1 0.984531 0.75 RAD 0.0078125
+ txt265
+TEXDEF txt265 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.875 0.765469 APEX 1 0.875 0.859531 RAD 0.0078125
+ txt265
+TEXDEF txt265 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.875 0.875 RAD 0.03125
+ txt265
+TEXDEF txt265 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.890469 0.875 APEX 1 0.984531 0.875 RAD 0.0078125
+ txt265
+TEXDEF txt265 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.875 0.890469 APEX 1 0.875 0.984531 RAD 0.0078125
+ txt265
+TEXDEF txt265 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 0.875 1 RAD 0.03125
+ txt265
+TEXDEF txt265 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.9 0.1
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 0.890469 1 APEX 1 0.984531 1 RAD 0.0078125
+ txt265
+TEXDEF txt265 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 1 0 RAD 0.03125
+ txt265
+TEXDEF txt265 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 1 0.0154687 APEX 1 1 0.109531 RAD 0.0078125
+ txt265
+TEXDEF txt265 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 1 0.125 RAD 0.03125
+ txt265
+TEXDEF txt266 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 1 0.140469 APEX 1 1 0.234531 RAD 0.0078125
+ txt266
+TEXDEF txt266 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 1 0.25 RAD 0.03125
+ txt266
+TEXDEF txt266 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 1 0.265469 APEX 1 1 0.359531 RAD 0.0078125
+ txt266
+TEXDEF txt266 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 1 0.375 RAD 0.03125
+ txt266
+TEXDEF txt266 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 1 0.390469 APEX 1 1 0.484531 RAD 0.0078125
+ txt266
+TEXDEF txt266 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 1 0.5 RAD 0.03125
+ txt266
+TEXDEF txt266 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 1 0.515469 APEX 1 1 0.609531 RAD 0.0078125
+ txt266
+TEXDEF txt266 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 1 0.625 RAD 0.03125
+ txt266
+TEXDEF txt266 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 1 0.640469 APEX 1 1 0.734531 RAD 0.0078125
+ txt266
+TEXDEF txt266 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 1 0.75 RAD 0.03125
+ txt266
+TEXDEF txt267 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 1 0.765469 APEX 1 1 0.859531 RAD 0.0078125
+ txt267
+TEXDEF txt267 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 1 0.875 RAD 0.03125
+ txt267
+TEXDEF txt267 AMBIENT 0.1 DIFFUSE 0.99 SPECULAR 0 OPACITY 1
+ COLOR 0.1 0.1 0.9
+ TEXFUNC 0
+
+FCYLINDER
+ BASE 1 1 0.890469 APEX 1 1 0.984531 RAD 0.0078125
+ txt267
+TEXDEF txt267 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+ COLOR 0.9 0.9 0.9
+ TEXFUNC 0
+
+ SPHERE CENTER 1 1 1 RAD 0.03125
+ txt267
+
+END_SCENE
diff --git a/examples/parallel_for/tacheon/dat/model2.dat b/examples/parallel_for/tacheon/dat/model2.dat
new file mode 100644
index 0000000..c57ce49
--- /dev/null
+++ b/examples/parallel_for/tacheon/dat/model2.dat
@@ -0,0 +1,104 @@
+BEGIN_SCENE
+ OUTFILE /dev/null
+ RESOLUTION 512 512
+ VERBOSE 0
+
+CAMERA
+ ZOOM 1.0
+ ASPECTRATIO 1.0
+ ANTIALIASING 1
+ RAYDEPTH 12
+ CENTER 0.0 0.0 -5.0
+ VIEWDIR 0.0 0.0 1.0
+ UPDIR 0.0 1.0 0.0
+END_CAMERA
+
+LIGHT
+ CENTER -5.0 0.0 -4.0
+ RAD 0.2
+ COLOR 1.0 0.1 0.0
+
+LIGHT
+ CENTER 4.0 5.0 -4.0
+ RAD 0.2
+ COLOR 0.0 0.1 1.0
+
+LIGHT
+ CENTER 4.0 1.5 3.0
+ RAD 0.2
+ COLOR 0.5 0.5 0.5
+
+TRI
+ V0 0.0 -4.0 12.0
+ V1 4.0 -4.0 8.0
+ V2 -4.0 -4.0 8.0
+ TEXTURE
+ AMBIENT 0.1 DIFFUSE 0.2 SPECULAR 0.7 OPACITY 1.0
+ COLOR 1.0 1.0 1.0
+ TEXFUNC 0
+
+SPHERE
+ CENTER 0.0 0.0 5.0
+ RAD 1.3
+ TEXTURE
+ AMBIENT 0.1 DIFFUSE 0.0 SPECULAR 0.9 OPACITY 1.0
+ COLOR 1.0 1.0 1.0
+ TEXFUNC 0
+
+SPHERE
+ CENTER 1.0 0.0 4.3
+ RAD 0.8
+ TEXTURE
+ AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0
+ COLOR 0.3 0.3 1.0
+ TEXFUNC 3
+ CENTER 1.0 0.0 4.3
+ ROTATE 0. 0.0 0.0
+ SCALE 1.0 1.0 1.0
+
+SPHERE
+ CENTER 0.0 2.0 8.0
+ RAD 1.0
+ TEXTURE
+ AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0
+ COLOR 1.0 0.0 1.0
+ TEXFUNC 4
+ CENTER 0.0 1.0 8.0
+ ROTATE 0. 0.0 0.0
+ SCALE 1.0 1.0 1.0
+
+SPHERE
+ CENTER -1.0 -0.5 5.0
+ RAD 1.0
+ TEXTURE
+ AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0
+ COLOR 1.0 1.0 0.5
+ TEXFUNC 6
+ CENTER -1.0 -0.5 5.0
+ ROTATE 0. 0.0 0.0
+ SCALE 1.0 1.0 1.0
+
+PLANE
+ CENTER 0.0 -5.0 0.0
+ NORMAL 0.0 1.0 0.0
+ TEXTURE
+ AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0
+ COLOR 1.0 1.0 1.0
+ TEXFUNC 1
+ CENTER 0.0 -5.0 0.0
+ ROTATE 0. 0.0 0.0
+ SCALE 1.0 1.0 1.0
+
+PLANE
+ CENTER 0.0 0.0 15.0
+ NORMAL 0.0 0.0 -1.0
+ TEXTURE
+ AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0
+ COLOR 1.0 1.0 1.0
+ TEXFUNC 3
+ CENTER 0.0 0.0 15.0
+ ROTATE 0. 0.0 0.0
+ SCALE 1.0 1.0 1.0
+
+END_SCENE
+
diff --git a/examples/parallel_for/tacheon/dat/teapot.dat b/examples/parallel_for/tacheon/dat/teapot.dat
new file mode 100644
index 0000000..105afcd
--- /dev/null
+++ b/examples/parallel_for/tacheon/dat/teapot.dat
@@ -0,0 +1,9279 @@
+BEGIN_SCENE
+ OUTFILE /dev/null
+ RESOLUTION 512 512
+ VERBOSE 0
+
+CAMERA
+ ZOOM 1.20711
+ASPECTRATIO 1.0
+ ANTIALIASING 0
+ RAYDEPTH 5
+ CENTER 4.86 7.2 5.4
+ VIEWDIR -0.475149 -0.703924 -0.527943
+ UPDIR -0.29537 -0.437585 0.84928
+
+END_CAMERA
+
+BACKGROUND 0.078 0.361 0.753
+
+LIGHT CENTER -3.1 9.8 12.1 RAD 0.002 COLOR 0.5 0.5 0.5
+
+LIGHT CENTER 11.3 5.1 8.8 RAD 0.002 COLOR 0.5 0.5 0.5
+
+TEXDEF txt001 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+PHONG METAL 0.5 PHONG_SIZE 4.81884
+ COLOR 1 1 1
+ TEXFUNC 0
+
+TRI
+ V0 -4 -2.66667 0 V1 -2.66667 -2.66667 0 V2 -4 -1.33333 0
+ txt001
+TRI
+ V0 -2.66667 -2.66667 0 V1 -2.66667 -1.33333 0 V2 -4 -1.33333 0
+ txt001
+TRI
+ V0 -4 0 0 V1 -2.66667 0 0 V2 -4 1.33333 0
+ txt001
+TRI
+ V0 -2.66667 0 0 V1 -2.66667 1.33333 0 V2 -4 1.33333 0
+ txt001
+TRI
+ V0 -4 2.66667 0 V1 -2.66667 2.66667 0 V2 -4 4 0
+ txt001
+TRI
+ V0 -2.66667 2.66667 0 V1 -2.66667 4 0 V2 -4 4 0
+ txt001
+TRI
+ V0 -2.66667 -4 0 V1 -1.33333 -4 0 V2 -2.66667 -2.66667 0
+ txt001
+TRI
+ V0 -1.33333 -4 0 V1 -1.33333 -2.66667 0 V2 -2.66667 -2.66667 0
+ txt001
+TRI
+ V0 -2.66667 -1.33333 0 V1 -1.33333 -1.33333 0 V2 -2.66667 0 0
+ txt001
+TRI
+ V0 -1.33333 -1.33333 0 V1 -1.33333 0 0 V2 -2.66667 0 0
+ txt001
+TRI
+ V0 -2.66667 1.33333 0 V1 -1.33333 1.33333 0 V2 -2.66667 2.66667 0
+ txt001
+TRI
+ V0 -1.33333 1.33333 0 V1 -1.33333 2.66667 0 V2 -2.66667 2.66667 0
+ txt001
+TRI
+ V0 -1.33333 -2.66667 0 V1 0 -2.66667 0 V2 -1.33333 -1.33333 0
+ txt001
+TRI
+ V0 0 -2.66667 0 V1 0 -1.33333 0 V2 -1.33333 -1.33333 0
+ txt001
+TRI
+ V0 -1.33333 0 0 V1 0 0 0 V2 -1.33333 1.33333 0
+ txt001
+TRI
+ V0 0 0 0 V1 0 1.33333 0 V2 -1.33333 1.33333 0
+ txt001
+TRI
+ V0 -1.33333 2.66667 0 V1 0 2.66667 0 V2 -1.33333 4 0
+ txt001
+TRI
+ V0 0 2.66667 0 V1 0 4 0 V2 -1.33333 4 0
+ txt001
+TRI
+ V0 0 -4 0 V1 1.33333 -4 0 V2 0 -2.66667 0
+ txt001
+TRI
+ V0 1.33333 -4 0 V1 1.33333 -2.66667 0 V2 0 -2.66667 0
+ txt001
+TRI
+ V0 0 -1.33333 0 V1 1.33333 -1.33333 0 V2 0 0 0
+ txt001
+TRI
+ V0 1.33333 -1.33333 0 V1 1.33333 0 0 V2 0 0 0
+ txt001
+TRI
+ V0 0 1.33333 0 V1 1.33333 1.33333 0 V2 0 2.66667 0
+ txt001
+TRI
+ V0 1.33333 1.33333 0 V1 1.33333 2.66667 0 V2 0 2.66667 0
+ txt001
+TRI
+ V0 1.33333 -2.66667 0 V1 2.66667 -2.66667 0 V2 1.33333 -1.33333 0
+ txt001
+TRI
+ V0 2.66667 -2.66667 0 V1 2.66667 -1.33333 0 V2 1.33333 -1.33333 0
+ txt001
+TRI
+ V0 1.33333 0 0 V1 2.66667 0 0 V2 1.33333 1.33333 0
+ txt001
+TRI
+ V0 2.66667 0 0 V1 2.66667 1.33333 0 V2 1.33333 1.33333 0
+ txt001
+TRI
+ V0 1.33333 2.66667 0 V1 2.66667 2.66667 0 V2 1.33333 4 0
+ txt001
+TRI
+ V0 2.66667 2.66667 0 V1 2.66667 4 0 V2 1.33333 4 0
+ txt001
+TRI
+ V0 2.66667 -4 0 V1 4 -4 0 V2 2.66667 -2.66667 0
+ txt001
+TRI
+ V0 4 -4 0 V1 4 -2.66667 0 V2 2.66667 -2.66667 0
+ txt001
+TRI
+ V0 2.66667 -1.33333 0 V1 4 -1.33333 0 V2 2.66667 0 0
+ txt001
+TRI
+ V0 4 -1.33333 0 V1 4 0 0 V2 2.66667 0 0
+ txt001
+TRI
+ V0 2.66667 1.33333 0 V1 4 1.33333 0 V2 2.66667 2.66667 0
+ txt001
+TRI
+ V0 4 1.33333 0 V1 4 2.66667 0 V2 2.66667 2.66667 0
+ txt001
+TEXDEF txt002 AMBIENT 0 DIFFUSE 0.5 SPECULAR 0.5 OPACITY 1
+PHONG METAL 0.5 PHONG_SIZE 4.81884
+ COLOR 0.5 0.5 0.5
+ TEXFUNC 0
+
+TRI
+ V0 -4 -4 0 V1 -2.66667 -4 0 V2 -4 -2.66667 0
+ txt002
+TRI
+ V0 -2.66667 -4 0 V1 -2.66667 -2.66667 0 V2 -4 -2.66667 0
+ txt002
+TRI
+ V0 -4 -1.33333 0 V1 -2.66667 -1.33333 0 V2 -4 0 0
+ txt002
+TRI
+ V0 -2.66667 -1.33333 0 V1 -2.66667 0 0 V2 -4 0 0
+ txt002
+TRI
+ V0 -4 1.33333 0 V1 -2.66667 1.33333 0 V2 -4 2.66667 0
+ txt002
+TRI
+ V0 -2.66667 1.33333 0 V1 -2.66667 2.66667 0 V2 -4 2.66667 0
+ txt002
+TRI
+ V0 -2.66667 -2.66667 0 V1 -1.33333 -2.66667 0 V2 -2.66667 -1.33333 0
+ txt002
+TRI
+ V0 -1.33333 -2.66667 0 V1 -1.33333 -1.33333 0 V2 -2.66667 -1.33333 0
+ txt002
+TRI
+ V0 -2.66667 0 0 V1 -1.33333 0 0 V2 -2.66667 1.33333 0
+ txt002
+TRI
+ V0 -1.33333 0 0 V1 -1.33333 1.33333 0 V2 -2.66667 1.33333 0
+ txt002
+TRI
+ V0 -2.66667 2.66667 0 V1 -1.33333 2.66667 0 V2 -2.66667 4 0
+ txt002
+TRI
+ V0 -1.33333 2.66667 0 V1 -1.33333 4 0 V2 -2.66667 4 0
+ txt002
+TRI
+ V0 -1.33333 -4 0 V1 0 -4 0 V2 -1.33333 -2.66667 0
+ txt002
+TRI
+ V0 0 -4 0 V1 0 -2.66667 0 V2 -1.33333 -2.66667 0
+ txt002
+TRI
+ V0 -1.33333 -1.33333 0 V1 0 -1.33333 0 V2 -1.33333 0 0
+ txt002
+TRI
+ V0 0 -1.33333 0 V1 0 0 0 V2 -1.33333 0 0
+ txt002
+TRI
+ V0 -1.33333 1.33333 0 V1 0 1.33333 0 V2 -1.33333 2.66667 0
+ txt002
+TRI
+ V0 0 1.33333 0 V1 0 2.66667 0 V2 -1.33333 2.66667 0
+ txt002
+TRI
+ V0 0 -2.66667 0 V1 1.33333 -2.66667 0 V2 0 -1.33333 0
+ txt002
+TRI
+ V0 1.33333 -2.66667 0 V1 1.33333 -1.33333 0 V2 0 -1.33333 0
+ txt002
+TRI
+ V0 0 0 0 V1 1.33333 0 0 V2 0 1.33333 0
+ txt002
+TRI
+ V0 1.33333 0 0 V1 1.33333 1.33333 0 V2 0 1.33333 0
+ txt002
+TRI
+ V0 0 2.66667 0 V1 1.33333 2.66667 0 V2 0 4 0
+ txt002
+TRI
+ V0 1.33333 2.66667 0 V1 1.33333 4 0 V2 0 4 0
+ txt002
+TRI
+ V0 1.33333 -4 0 V1 2.66667 -4 0 V2 1.33333 -2.66667 0
+ txt002
+TRI
+ V0 2.66667 -4 0 V1 2.66667 -2.66667 0 V2 1.33333 -2.66667 0
+ txt002
+TRI
+ V0 1.33333 -1.33333 0 V1 2.66667 -1.33333 0 V2 1.33333 0 0
+ txt002
+TRI
+ V0 2.66667 -1.33333 0 V1 2.66667 0 0 V2 1.33333 0 0
+ txt002
+TRI
+ V0 1.33333 1.33333 0 V1 2.66667 1.33333 0 V2 1.33333 2.66667 0
+ txt002
+TRI
+ V0 2.66667 1.33333 0 V1 2.66667 2.66667 0 V2 1.33333 2.66667 0
+ txt002
+TRI
+ V0 2.66667 -2.66667 0 V1 4 -2.66667 0 V2 2.66667 -1.33333 0
+ txt002
+TRI
+ V0 4 -2.66667 0 V1 4 -1.33333 0 V2 2.66667 -1.33333 0
+ txt002
+TRI
+ V0 2.66667 0 0 V1 4 0 0 V2 2.66667 1.33333 0
+ txt002
+TRI
+ V0 4 0 0 V1 4 1.33333 0 V2 2.66667 1.33333 0
+ txt002
+TRI
+ V0 2.66667 2.66667 0 V1 4 2.66667 0 V2 2.66667 4 0
+ txt002
+TRI
+ V0 4 2.66667 0 V1 4 4 0 V2 2.66667 4 0
+ txt002
+TEXDEF txt003 AMBIENT 0 DIFFUSE 0.75 SPECULAR 0.25 OPACITY 1
+PHONG PLASTIC 0.25 PHONG_SIZE 45.2776
+ COLOR 1 0.5 0.1
+ TEXFUNC 0
+
+STRI
+ V0 1.4 0 2.4 V1 1.35074 -0.375926 2.4 V2 1.33276 -0.370922 2.45469
+ N0 -0.902861 -0 -0.429934 N1 -0.871509 0.234929 -0.430442 N2 -0.953562 0.257047 -0.156989
+ txt003
+STRI
+ V0 1.33276 -0.370922 2.45469 V1 1.38137 0 2.45469 V2 1.4 0 2.4
+ N0 -0.953562 0.257047 -0.156989 N1 -0.987636 -0 -0.156768 N2 -0.902861 -0 -0.429934
+ txt003
+STRI
+ V0 1.35074 -0.375926 2.4 V1 1.21126 -0.711407 2.4 V2 1.19514 -0.701938 2.45469
+ N0 -0.871509 0.234929 -0.430442 N1 -0.780517 0.4527 -0.43111 N2 -0.854265 0.495474 -0.157281
+ txt003
+STRI
+ V0 1.19514 -0.701938 2.45469 V1 1.33276 -0.370922 2.45469 V2 1.35074 -0.375926 2.4
+ N0 -0.854265 0.495474 -0.157281 N1 -0.953562 0.257047 -0.156989 N2 -0.871509 0.234929 -0.430442
+ txt003
+STRI
+ V0 1.21126 -0.711407 2.4 V1 0.994 -0.994 2.4 V2 0.98077 -0.98077 2.45469
+ N0 -0.780517 0.4527 -0.43111 N1 -0.637936 0.637936 -0.431366 N2 -0.698293 0.698293 -0.157393
+ txt003
+STRI
+ V0 0.98077 -0.98077 2.45469 V1 1.19514 -0.701938 2.45469 V2 1.21126 -0.711407 2.4
+ N0 -0.698293 0.698293 -0.157393 N1 -0.854265 0.495474 -0.157281 N2 -0.780517 0.4527 -0.43111
+ txt003
+STRI
+ V0 0.994 -0.994 2.4 V1 0.711407 -1.21126 2.4 V2 0.701938 -1.19514 2.45469
+ N0 -0.637936 0.637936 -0.431366 N1 -0.4527 0.780517 -0.43111 N2 -0.495474 0.854265 -0.157281
+ txt003
+STRI
+ V0 0.701938 -1.19514 2.45469 V1 0.98077 -0.98077 2.45469 V2 0.994 -0.994 2.4
+ N0 -0.495474 0.854265 -0.157281 N1 -0.698293 0.698293 -0.157393 N2 -0.637936 0.637936 -0.431366
+ txt003
+STRI
+ V0 0.711407 -1.21126 2.4 V1 0.375926 -1.35074 2.4 V2 0.370922 -1.33276 2.45469
+ N0 -0.4527 0.780517 -0.43111 N1 -0.234929 0.871509 -0.430442 N2 -0.257047 0.953562 -0.156989
+ txt003
+STRI
+ V0 0.370922 -1.33276 2.45469 V1 0.701938 -1.19514 2.45469 V2 0.711407 -1.21126 2.4
+ N0 -0.257047 0.953562 -0.156989 N1 -0.495474 0.854265 -0.157281 N2 -0.4527 0.780517 -0.43111
+ txt003
+STRI
+ V0 0.375926 -1.35074 2.4 V1 0 -1.4 2.4 V2 0 -1.38137 2.45469
+ N0 -0.234929 0.871509 -0.430442 N1 7.30595e-17 0.902861 -0.429934 N2 -9.89971e-17 0.987636 -0.156768
+ txt003
+STRI
+ V0 0 -1.38137 2.45469 V1 0.370922 -1.33276 2.45469 V2 0.375926 -1.35074 2.4
+ N0 -9.89971e-17 0.987636 -0.156768 N1 -0.257047 0.953562 -0.156989 N2 -0.234929 0.871509 -0.430442
+ txt003
+STRI
+ V0 1.38137 0 2.45469 V1 1.33276 -0.370922 2.45469 V2 1.33555 -0.371699 2.4875
+ N0 -0.987636 -0 -0.156768 N1 -0.953562 0.257047 -0.156989 N2 -0.849414 0.228972 0.475466
+ txt003
+STRI
+ V0 1.33555 -0.371699 2.4875 V1 1.38426 0 2.4875 V2 1.38137 0 2.45469
+ N0 -0.849414 0.228972 0.475466 N1 -0.880022 0 0.474933 N2 -0.987636 -0 -0.156768
+ txt003
+STRI
+ V0 1.33276 -0.370922 2.45469 V1 1.19514 -0.701938 2.45469 V2 1.19764 -0.703409 2.4875
+ N0 -0.953562 0.257047 -0.156989 N1 -0.854265 0.495474 -0.157281 N2 -0.760669 0.441188 0.476167
+ txt003
+STRI
+ V0 1.19764 -0.703409 2.4875 V1 1.33555 -0.371699 2.4875 V2 1.33276 -0.370922 2.45469
+ N0 -0.760669 0.441188 0.476167 N1 -0.849414 0.228972 0.475466 N2 -0.953562 0.257047 -0.156989
+ txt003
+STRI
+ V0 1.19514 -0.701938 2.45469 V1 0.98077 -0.98077 2.45469 V2 0.982824 -0.982824 2.4875
+ N0 -0.854265 0.495474 -0.157281 N1 -0.698293 0.698293 -0.157393 N2 -0.621695 0.621695 0.476435
+ txt003
+STRI
+ V0 0.982824 -0.982824 2.4875 V1 1.19764 -0.703409 2.4875 V2 1.19514 -0.701938 2.45469
+ N0 -0.621695 0.621695 0.476435 N1 -0.760669 0.441188 0.476167 N2 -0.854265 0.495474 -0.157281
+ txt003
+STRI
+ V0 0.98077 -0.98077 2.45469 V1 0.701938 -1.19514 2.45469 V2 0.703409 -1.19764 2.4875
+ N0 -0.698293 0.698293 -0.157393 N1 -0.495474 0.854265 -0.157281 N2 -0.441188 0.760669 0.476167
+ txt003
+STRI
+ V0 0.703409 -1.19764 2.4875 V1 0.982824 -0.982824 2.4875 V2 0.98077 -0.98077 2.45469
+ N0 -0.441188 0.760669 0.476167 N1 -0.621695 0.621695 0.476435 N2 -0.698293 0.698293 -0.157393
+ txt003
+STRI
+ V0 0.701938 -1.19514 2.45469 V1 0.370922 -1.33276 2.45469 V2 0.371699 -1.33555 2.4875
+ N0 -0.495474 0.854265 -0.157281 N1 -0.257047 0.953562 -0.156989 N2 -0.228972 0.849414 0.475466
+ txt003
+STRI
+ V0 0.371699 -1.33555 2.4875 V1 0.703409 -1.19764 2.4875 V2 0.701938 -1.19514 2.45469
+ N0 -0.228972 0.849414 0.475466 N1 -0.441188 0.760669 0.476167 N2 -0.495474 0.854265 -0.157281
+ txt003
+STRI
+ V0 0.370922 -1.33276 2.45469 V1 0 -1.38137 2.45469 V2 0 -1.38426 2.4875
+ N0 -0.257047 0.953562 -0.156989 N1 -9.89971e-17 0.987636 -0.156768 N2 -6.08179e-16 0.880022 0.474933
+ txt003
+STRI
+ V0 0 -1.38426 2.4875 V1 0.371699 -1.33555 2.4875 V2 0.370922 -1.33276 2.45469
+ N0 -6.08179e-16 0.880022 0.474933 N1 -0.228972 0.849414 0.475466 N2 -0.257047 0.953562 -0.156989
+ txt003
+STRI
+ V0 1.38426 0 2.4875 V1 1.33555 -0.371699 2.4875 V2 1.35376 -0.376765 2.49844
+ N0 -0.880022 0 0.474933 N1 -0.849414 0.228972 0.475466 N2 2.13636e-15 -5.93089e-16 1
+ txt003
+STRI
+ V0 1.35376 -0.376765 2.49844 V1 1.40312 0 2.49844 V2 1.38426 0 2.4875
+ N0 2.13636e-15 -5.93089e-16 1 N1 2.22045e-15 0 1 N2 -0.880022 0 0.474933
+ txt003
+STRI
+ V0 1.33555 -0.371699 2.4875 V1 1.19764 -0.703409 2.4875 V2 1.21396 -0.712995 2.49844
+ N0 -0.849414 0.228972 0.475466 N1 -0.760669 0.441188 0.476167 N2 1.87966e-15 -1.16933e-15 1
+ txt003
+STRI
+ V0 1.21396 -0.712995 2.49844 V1 1.35376 -0.376765 2.49844 V2 1.33555 -0.371699 2.4875
+ N0 1.87966e-15 -1.16933e-15 1 N1 2.13636e-15 -5.93089e-16 1 N2 -0.849414 0.228972 0.475466
+ txt003
+STRI
+ V0 1.19764 -0.703409 2.4875 V1 0.982824 -0.982824 2.4875 V2 0.996219 -0.996219 2.49844
+ N0 -0.760669 0.441188 0.476167 N1 -0.621695 0.621695 0.476435 N2 1.4538e-15 -1.67359e-15 1
+ txt003
+STRI
+ V0 0.996219 -0.996219 2.49844 V1 1.21396 -0.712995 2.49844 V2 1.19764 -0.703409 2.4875
+ N0 1.4538e-15 -1.67359e-15 1 N1 1.87966e-15 -1.16933e-15 1 N2 -0.760669 0.441188 0.476167
+ txt003
+STRI
+ V0 0.982824 -0.982824 2.4875 V1 0.703409 -1.19764 2.4875 V2 0.712995 -1.21396 2.49844
+ N0 -0.621695 0.621695 0.476435 N1 -0.441188 0.760669 0.476167 N2 8.74229e-16 -2.05298e-15 1
+ txt003
+STRI
+ V0 0.712995 -1.21396 2.49844 V1 0.996219 -0.996219 2.49844 V2 0.982824 -0.982824 2.4875
+ N0 8.74229e-16 -2.05298e-15 1 N1 1.4538e-15 -1.67359e-15 1 N2 -0.621695 0.621695 0.476435
+ txt003
+STRI
+ V0 0.703409 -1.19764 2.4875 V1 0.371699 -1.33555 2.4875 V2 0.376765 -1.35376 2.49844
+ N0 -0.441188 0.760669 0.476167 N1 -0.228972 0.849414 0.475466 N2 1.77072e-16 -2.25214e-15 1
+ txt003
+STRI
+ V0 0.376765 -1.35376 2.49844 V1 0.712995 -1.21396 2.49844 V2 0.703409 -1.19764 2.4875
+ N0 1.77072e-16 -2.25214e-15 1 N1 8.74229e-16 -2.05298e-15 1 N2 -0.441188 0.760669 0.476167
+ txt003
+STRI
+ V0 0.371699 -1.33555 2.4875 V1 0 -1.38426 2.4875 V2 0 -1.40312 2.49844
+ N0 -0.228972 0.849414 0.475466 N1 -6.08179e-16 0.880022 0.474933 N2 -5.65179e-16 -2.22045e-15 1
+ txt003
+STRI
+ V0 0 -1.40312 2.49844 V1 0.376765 -1.35376 2.49844 V2 0.371699 -1.33555 2.4875
+ N0 -5.65179e-16 -2.22045e-15 1 N1 1.77072e-16 -2.25214e-15 1 N2 -0.228972 0.849414 0.475466
+ txt003
+STRI
+ V0 1.40312 0 2.49844 V1 1.35376 -0.376765 2.49844 V2 1.38201 -0.384628 2.4875
+ N0 2.22045e-15 0 1 N1 2.13636e-15 -5.93089e-16 1 N2 0.537012 -0.14476 0.831061
+ txt003
+STRI
+ V0 1.38201 -0.384628 2.4875 V1 1.43241 0 2.4875 V2 1.40312 0 2.49844
+ N0 0.537012 -0.14476 0.831061 N1 0.556738 0 0.830688 N2 2.22045e-15 0 1
+ txt003
+STRI
+ V0 1.35376 -0.376765 2.49844 V1 1.21396 -0.712995 2.49844 V2 1.2393 -0.727875 2.4875
+ N0 2.13636e-15 -5.93089e-16 1 N1 1.87966e-15 -1.16933e-15 1 N2 0.480481 -0.278679 0.83155
+ txt003
+STRI
+ V0 1.2393 -0.727875 2.4875 V1 1.38201 -0.384628 2.4875 V2 1.35376 -0.376765 2.49844
+ N0 0.480481 -0.278679 0.83155 N1 0.537012 -0.14476 0.831061 N2 2.13636e-15 -5.93089e-16 1
+ txt003
+STRI
+ V0 1.21396 -0.712995 2.49844 V1 0.996219 -0.996219 2.49844 V2 1.01701 -1.01701 2.4875
+ N0 1.87966e-15 -1.16933e-15 1 N1 1.4538e-15 -1.67359e-15 1 N2 0.392564 -0.392564 0.831737
+ txt003
+STRI
+ V0 1.01701 -1.01701 2.4875 V1 1.2393 -0.727875 2.4875 V2 1.21396 -0.712995 2.49844
+ N0 0.392564 -0.392564 0.831737 N1 0.480481 -0.278679 0.83155 N2 1.87966e-15 -1.16933e-15 1
+ txt003
+STRI
+ V0 0.996219 -0.996219 2.49844 V1 0.712995 -1.21396 2.49844 V2 0.727875 -1.2393 2.4875
+ N0 1.4538e-15 -1.67359e-15 1 N1 8.74229e-16 -2.05298e-15 1 N2 0.278679 -0.480481 0.83155
+ txt003
+STRI
+ V0 0.727875 -1.2393 2.4875 V1 1.01701 -1.01701 2.4875 V2 0.996219 -0.996219 2.49844
+ N0 0.278679 -0.480481 0.83155 N1 0.392564 -0.392564 0.831737 N2 1.4538e-15 -1.67359e-15 1
+ txt003
+STRI
+ V0 0.712995 -1.21396 2.49844 V1 0.376765 -1.35376 2.49844 V2 0.384628 -1.38201 2.4875
+ N0 8.74229e-16 -2.05298e-15 1 N1 1.77072e-16 -2.25214e-15 1 N2 0.14476 -0.537012 0.831061
+ txt003
+STRI
+ V0 0.384628 -1.38201 2.4875 V1 0.727875 -1.2393 2.4875 V2 0.712995 -1.21396 2.49844
+ N0 0.14476 -0.537012 0.831061 N1 0.278679 -0.480481 0.83155 N2 8.74229e-16 -2.05298e-15 1
+ txt003
+STRI
+ V0 0.376765 -1.35376 2.49844 V1 0 -1.40312 2.49844 V2 0 -1.43241 2.4875
+ N0 1.77072e-16 -2.25214e-15 1 N1 -5.65179e-16 -2.22045e-15 1 N2 -4.5989e-16 -0.556738 0.830688
+ txt003
+STRI
+ V0 0 -1.43241 2.4875 V1 0.384628 -1.38201 2.4875 V2 0.376765 -1.35376 2.49844
+ N0 -4.5989e-16 -0.556738 0.830688 N1 0.14476 -0.537012 0.831061 N2 1.77072e-16 -2.25214e-15 1
+ txt003
+STRI
+ V0 1.43241 0 2.4875 V1 1.38201 -0.384628 2.4875 V2 1.41495 -0.393796 2.45469
+ N0 0.556738 0 0.830688 N1 0.537012 -0.14476 0.831061 N2 0.755869 -0.203756 0.622211
+ txt003
+STRI
+ V0 1.41495 -0.393796 2.45469 V1 1.46655 0 2.45469 V2 1.43241 0 2.4875
+ N0 0.755869 -0.203756 0.622211 N1 0.783289 0 0.621658 N2 0.556738 0 0.830688
+ txt003
+STRI
+ V0 1.38201 -0.384628 2.4875 V1 1.2393 -0.727875 2.4875 V2 1.26884 -0.745225 2.45469
+ N0 0.537012 -0.14476 0.831061 N1 0.480481 -0.278679 0.83155 N2 0.67669 -0.39248 0.622937
+ txt003
+STRI
+ V0 1.26884 -0.745225 2.45469 V1 1.41495 -0.393796 2.45469 V2 1.38201 -0.384628 2.4875
+ N0 0.67669 -0.39248 0.622937 N1 0.755869 -0.203756 0.622211 N2 0.537012 -0.14476 0.831061
+ txt003
+STRI
+ V0 1.2393 -0.727875 2.4875 V1 1.01701 -1.01701 2.4875 V2 1.04125 -1.04125 2.45469
+ N0 0.480481 -0.278679 0.83155 N1 0.392564 -0.392564 0.831737 N2 0.552993 -0.552993 0.623215
+ txt003
+STRI
+ V0 1.04125 -1.04125 2.45469 V1 1.26884 -0.745225 2.45469 V2 1.2393 -0.727875 2.4875
+ N0 0.552993 -0.552993 0.623215 N1 0.67669 -0.39248 0.622937 N2 0.480481 -0.278679 0.83155
+ txt003
+STRI
+ V0 1.01701 -1.01701 2.4875 V1 0.727875 -1.2393 2.4875 V2 0.745225 -1.26884 2.45469
+ N0 0.392564 -0.392564 0.831737 N1 0.278679 -0.480481 0.83155 N2 0.39248 -0.67669 0.622937
+ txt003
+STRI
+ V0 0.745225 -1.26884 2.45469 V1 1.04125 -1.04125 2.45469 V2 1.01701 -1.01701 2.4875
+ N0 0.39248 -0.67669 0.622937 N1 0.552993 -0.552993 0.623215 N2 0.392564 -0.392564 0.831737
+ txt003
+STRI
+ V0 0.727875 -1.2393 2.4875 V1 0.384628 -1.38201 2.4875 V2 0.393796 -1.41495 2.45469
+ N0 0.278679 -0.480481 0.83155 N1 0.14476 -0.537012 0.831061 N2 0.203756 -0.755869 0.622211
+ txt003
+STRI
+ V0 0.393796 -1.41495 2.45469 V1 0.745225 -1.26884 2.45469 V2 0.727875 -1.2393 2.4875
+ N0 0.203756 -0.755869 0.622211 N1 0.39248 -0.67669 0.622937 N2 0.278679 -0.480481 0.83155
+ txt003
+STRI
+ V0 0.384628 -1.38201 2.4875 V1 0 -1.43241 2.4875 V2 0 -1.46655 2.45469
+ N0 0.14476 -0.537012 0.831061 N1 -4.5989e-16 -0.556738 0.830688 N2 -1.94969e-16 -0.783289 0.621658
+ txt003
+STRI
+ V0 0 -1.46655 2.45469 V1 0.393796 -1.41495 2.45469 V2 0.384628 -1.38201 2.4875
+ N0 -1.94969e-16 -0.783289 0.621658 N1 0.203756 -0.755869 0.622211 N2 0.14476 -0.537012 0.831061
+ txt003
+STRI
+ V0 1.46655 0 2.45469 V1 1.41495 -0.393796 2.45469 V2 1.44722 -0.402778 2.4
+ N0 0.783289 0 0.621658 N1 0.755869 -0.203756 0.622211 N2 0.871509 -0.234929 0.430442
+ txt003
+STRI
+ V0 1.44722 -0.402778 2.4 V1 1.5 0 2.4 V2 1.46655 0 2.45469
+ N0 0.871509 -0.234929 0.430442 N1 0.902861 0 0.429934 N2 0.783289 0 0.621658
+ txt003
+STRI
+ V0 1.41495 -0.393796 2.45469 V1 1.26884 -0.745225 2.45469 V2 1.29778 -0.762222 2.4
+ N0 0.755869 -0.203756 0.622211 N1 0.67669 -0.39248 0.622937 N2 0.780517 -0.4527 0.43111
+ txt003
+STRI
+ V0 1.29778 -0.762222 2.4 V1 1.44722 -0.402778 2.4 V2 1.41495 -0.393796 2.45469
+ N0 0.780517 -0.4527 0.43111 N1 0.871509 -0.234929 0.430442 N2 0.755869 -0.203756 0.622211
+ txt003
+STRI
+ V0 1.26884 -0.745225 2.45469 V1 1.04125 -1.04125 2.45469 V2 1.065 -1.065 2.4
+ N0 0.67669 -0.39248 0.622937 N1 0.552993 -0.552993 0.623215 N2 0.637936 -0.637936 0.431366
+ txt003
+STRI
+ V0 1.065 -1.065 2.4 V1 1.29778 -0.762222 2.4 V2 1.26884 -0.745225 2.45469
+ N0 0.637936 -0.637936 0.431366 N1 0.780517 -0.4527 0.43111 N2 0.67669 -0.39248 0.622937
+ txt003
+STRI
+ V0 1.04125 -1.04125 2.45469 V1 0.745225 -1.26884 2.45469 V2 0.762222 -1.29778 2.4
+ N0 0.552993 -0.552993 0.623215 N1 0.39248 -0.67669 0.622937 N2 0.4527 -0.780517 0.43111
+ txt003
+STRI
+ V0 0.762222 -1.29778 2.4 V1 1.065 -1.065 2.4 V2 1.04125 -1.04125 2.45469
+ N0 0.4527 -0.780517 0.43111 N1 0.637936 -0.637936 0.431366 N2 0.552993 -0.552993 0.623215
+ txt003
+STRI
+ V0 0.745225 -1.26884 2.45469 V1 0.393796 -1.41495 2.45469 V2 0.402778 -1.44722 2.4
+ N0 0.39248 -0.67669 0.622937 N1 0.203756 -0.755869 0.622211 N2 0.234929 -0.871509 0.430442
+ txt003
+STRI
+ V0 0.402778 -1.44722 2.4 V1 0.762222 -1.29778 2.4 V2 0.745225 -1.26884 2.45469
+ N0 0.234929 -0.871509 0.430442 N1 0.4527 -0.780517 0.43111 N2 0.39248 -0.67669 0.622937
+ txt003
+STRI
+ V0 0.393796 -1.41495 2.45469 V1 0 -1.46655 2.45469 V2 0 -1.5 2.4
+ N0 0.203756 -0.755869 0.622211 N1 -1.94969e-16 -0.783289 0.621658 N2 -6.81889e-17 -0.902861 0.429934
+ txt003
+STRI
+ V0 0 -1.5 2.4 V1 0.402778 -1.44722 2.4 V2 0.393796 -1.41495 2.45469
+ N0 -6.81889e-17 -0.902861 0.429934 N1 0.234929 -0.871509 0.430442 N2 0.203756 -0.755869 0.622211
+ txt003
+STRI
+ V0 0 -1.4 2.4 V1 -0.375926 -1.35074 2.4 V2 -0.370922 -1.33276 2.45469
+ N0 0 0.902861 -0.429934 N1 0.234929 0.871509 -0.430442 N2 0.257047 0.953562 -0.156989
+ txt003
+STRI
+ V0 -0.370922 -1.33276 2.45469 V1 0 -1.38137 2.45469 V2 0 -1.4 2.4
+ N0 0.257047 0.953562 -0.156989 N1 0 0.987636 -0.156768 N2 0 0.902861 -0.429934
+ txt003
+STRI
+ V0 -0.375926 -1.35074 2.4 V1 -0.711407 -1.21126 2.4 V2 -0.701938 -1.19514 2.45469
+ N0 0.234929 0.871509 -0.430442 N1 0.4527 0.780517 -0.43111 N2 0.495474 0.854265 -0.157281
+ txt003
+STRI
+ V0 -0.701938 -1.19514 2.45469 V1 -0.370922 -1.33276 2.45469 V2 -0.375926 -1.35074 2.4
+ N0 0.495474 0.854265 -0.157281 N1 0.257047 0.953562 -0.156989 N2 0.234929 0.871509 -0.430442
+ txt003
+STRI
+ V0 -0.711407 -1.21126 2.4 V1 -0.994 -0.994 2.4 V2 -0.98077 -0.98077 2.45469
+ N0 0.4527 0.780517 -0.43111 N1 0.637936 0.637936 -0.431366 N2 0.698293 0.698293 -0.157393
+ txt003
+STRI
+ V0 -0.98077 -0.98077 2.45469 V1 -0.701938 -1.19514 2.45469 V2 -0.711407 -1.21126 2.4
+ N0 0.698293 0.698293 -0.157393 N1 0.495474 0.854265 -0.157281 N2 0.4527 0.780517 -0.43111
+ txt003
+STRI
+ V0 -0.994 -0.994 2.4 V1 -1.21126 -0.711407 2.4 V2 -1.19514 -0.701938 2.45469
+ N0 0.637936 0.637936 -0.431366 N1 0.780517 0.4527 -0.43111 N2 0.854265 0.495474 -0.157281
+ txt003
+STRI
+ V0 -1.19514 -0.701938 2.45469 V1 -0.98077 -0.98077 2.45469 V2 -0.994 -0.994 2.4
+ N0 0.854265 0.495474 -0.157281 N1 0.698293 0.698293 -0.157393 N2 0.637936 0.637936 -0.431366
+ txt003
+STRI
+ V0 -1.21126 -0.711407 2.4 V1 -1.35074 -0.375926 2.4 V2 -1.33276 -0.370922 2.45469
+ N0 0.780517 0.4527 -0.43111 N1 0.871509 0.234929 -0.430442 N2 0.953562 0.257047 -0.156989
+ txt003
+STRI
+ V0 -1.33276 -0.370922 2.45469 V1 -1.19514 -0.701938 2.45469 V2 -1.21126 -0.711407 2.4
+ N0 0.953562 0.257047 -0.156989 N1 0.854265 0.495474 -0.157281 N2 0.780517 0.4527 -0.43111
+ txt003
+STRI
+ V0 -1.35074 -0.375926 2.4 V1 -1.4 0 2.4 V2 -1.38137 0 2.45469
+ N0 0.871509 0.234929 -0.430442 N1 0.902861 -7.30595e-17 -0.429934 N2 0.987636 9.89971e-17 -0.156768
+ txt003
+STRI
+ V0 -1.38137 0 2.45469 V1 -1.33276 -0.370922 2.45469 V2 -1.35074 -0.375926 2.4
+ N0 0.987636 9.89971e-17 -0.156768 N1 0.953562 0.257047 -0.156989 N2 0.871509 0.234929 -0.430442
+ txt003
+STRI
+ V0 0 -1.38137 2.45469 V1 -0.370922 -1.33276 2.45469 V2 -0.371699 -1.33555 2.4875
+ N0 0 0.987636 -0.156768 N1 0.257047 0.953562 -0.156989 N2 0.228972 0.849414 0.475466
+ txt003
+STRI
+ V0 -0.371699 -1.33555 2.4875 V1 0 -1.38426 2.4875 V2 0 -1.38137 2.45469
+ N0 0.228972 0.849414 0.475466 N1 0 0.880022 0.474933 N2 0 0.987636 -0.156768
+ txt003
+STRI
+ V0 -0.370922 -1.33276 2.45469 V1 -0.701938 -1.19514 2.45469 V2 -0.703409 -1.19764 2.4875
+ N0 0.257047 0.953562 -0.156989 N1 0.495474 0.854265 -0.157281 N2 0.441188 0.760669 0.476167
+ txt003
+STRI
+ V0 -0.703409 -1.19764 2.4875 V1 -0.371699 -1.33555 2.4875 V2 -0.370922 -1.33276 2.45469
+ N0 0.441188 0.760669 0.476167 N1 0.228972 0.849414 0.475466 N2 0.257047 0.953562 -0.156989
+ txt003
+STRI
+ V0 -0.701938 -1.19514 2.45469 V1 -0.98077 -0.98077 2.45469 V2 -0.982824 -0.982824 2.4875
+ N0 0.495474 0.854265 -0.157281 N1 0.698293 0.698293 -0.157393 N2 0.621695 0.621695 0.476435
+ txt003
+STRI
+ V0 -0.982824 -0.982824 2.4875 V1 -0.703409 -1.19764 2.4875 V2 -0.701938 -1.19514 2.45469
+ N0 0.621695 0.621695 0.476435 N1 0.441188 0.760669 0.476167 N2 0.495474 0.854265 -0.157281
+ txt003
+STRI
+ V0 -0.98077 -0.98077 2.45469 V1 -1.19514 -0.701938 2.45469 V2 -1.19764 -0.703409 2.4875
+ N0 0.698293 0.698293 -0.157393 N1 0.854265 0.495474 -0.157281 N2 0.760669 0.441188 0.476167
+ txt003
+STRI
+ V0 -1.19764 -0.703409 2.4875 V1 -0.982824 -0.982824 2.4875 V2 -0.98077 -0.98077 2.45469
+ N0 0.760669 0.441188 0.476167 N1 0.621695 0.621695 0.476435 N2 0.698293 0.698293 -0.157393
+ txt003
+STRI
+ V0 -1.19514 -0.701938 2.45469 V1 -1.33276 -0.370922 2.45469 V2 -1.33555 -0.371699 2.4875
+ N0 0.854265 0.495474 -0.157281 N1 0.953562 0.257047 -0.156989 N2 0.849414 0.228972 0.475466
+ txt003
+STRI
+ V0 -1.33555 -0.371699 2.4875 V1 -1.19764 -0.703409 2.4875 V2 -1.19514 -0.701938 2.45469
+ N0 0.849414 0.228972 0.475466 N1 0.760669 0.441188 0.476167 N2 0.854265 0.495474 -0.157281
+ txt003
+STRI
+ V0 -1.33276 -0.370922 2.45469 V1 -1.38137 0 2.45469 V2 -1.38426 0 2.4875
+ N0 0.953562 0.257047 -0.156989 N1 0.987636 9.89971e-17 -0.156768 N2 0.880022 6.08179e-16 0.474933
+ txt003
+STRI
+ V0 -1.38426 0 2.4875 V1 -1.33555 -0.371699 2.4875 V2 -1.33276 -0.370922 2.45469
+ N0 0.880022 6.08179e-16 0.474933 N1 0.849414 0.228972 0.475466 N2 0.953562 0.257047 -0.156989
+ txt003
+STRI
+ V0 0 -1.38426 2.4875 V1 -0.371699 -1.33555 2.4875 V2 -0.376765 -1.35376 2.49844
+ N0 0 0.880022 0.474933 N1 0.228972 0.849414 0.475466 N2 -5.93089e-16 -2.13636e-15 1
+ txt003
+STRI
+ V0 -0.376765 -1.35376 2.49844 V1 0 -1.40312 2.49844 V2 0 -1.38426 2.4875
+ N0 -5.93089e-16 -2.13636e-15 1 N1 0 -2.22045e-15 1 N2 0 0.880022 0.474933
+ txt003
+STRI
+ V0 -0.371699 -1.33555 2.4875 V1 -0.703409 -1.19764 2.4875 V2 -0.712995 -1.21396 2.49844
+ N0 0.228972 0.849414 0.475466 N1 0.441188 0.760669 0.476167 N2 -1.16933e-15 -1.87966e-15 1
+ txt003
+STRI
+ V0 -0.712995 -1.21396 2.49844 V1 -0.376765 -1.35376 2.49844 V2 -0.371699 -1.33555 2.4875
+ N0 -1.16933e-15 -1.87966e-15 1 N1 -5.93089e-16 -2.13636e-15 1 N2 0.228972 0.849414 0.475466
+ txt003
+STRI
+ V0 -0.703409 -1.19764 2.4875 V1 -0.982824 -0.982824 2.4875 V2 -0.996219 -0.996219 2.49844
+ N0 0.441188 0.760669 0.476167 N1 0.621695 0.621695 0.476435 N2 -1.67359e-15 -1.4538e-15 1
+ txt003
+STRI
+ V0 -0.996219 -0.996219 2.49844 V1 -0.712995 -1.21396 2.49844 V2 -0.703409 -1.19764 2.4875
+ N0 -1.67359e-15 -1.4538e-15 1 N1 -1.16933e-15 -1.87966e-15 1 N2 0.441188 0.760669 0.476167
+ txt003
+STRI
+ V0 -0.982824 -0.982824 2.4875 V1 -1.19764 -0.703409 2.4875 V2 -1.21396 -0.712995 2.49844
+ N0 0.621695 0.621695 0.476435 N1 0.760669 0.441188 0.476167 N2 -2.05298e-15 -8.74229e-16 1
+ txt003
+STRI
+ V0 -1.21396 -0.712995 2.49844 V1 -0.996219 -0.996219 2.49844 V2 -0.982824 -0.982824 2.4875
+ N0 -2.05298e-15 -8.74229e-16 1 N1 -1.67359e-15 -1.4538e-15 1 N2 0.621695 0.621695 0.476435
+ txt003
+STRI
+ V0 -1.19764 -0.703409 2.4875 V1 -1.33555 -0.371699 2.4875 V2 -1.35376 -0.376765 2.49844
+ N0 0.760669 0.441188 0.476167 N1 0.849414 0.228972 0.475466 N2 -2.25214e-15 -1.77072e-16 1
+ txt003
+STRI
+ V0 -1.35376 -0.376765 2.49844 V1 -1.21396 -0.712995 2.49844 V2 -1.19764 -0.703409 2.4875
+ N0 -2.25214e-15 -1.77072e-16 1 N1 -2.05298e-15 -8.74229e-16 1 N2 0.760669 0.441188 0.476167
+ txt003
+STRI
+ V0 -1.33555 -0.371699 2.4875 V1 -1.38426 0 2.4875 V2 -1.40312 0 2.49844
+ N0 0.849414 0.228972 0.475466 N1 0.880022 6.08179e-16 0.474933 N2 -2.22045e-15 5.65179e-16 1
+ txt003
+STRI
+ V0 -1.40312 0 2.49844 V1 -1.35376 -0.376765 2.49844 V2 -1.33555 -0.371699 2.4875
+ N0 -2.22045e-15 5.65179e-16 1 N1 -2.25214e-15 -1.77072e-16 1 N2 0.849414 0.228972 0.475466
+ txt003
+STRI
+ V0 0 -1.40312 2.49844 V1 -0.376765 -1.35376 2.49844 V2 -0.384628 -1.38201 2.4875
+ N0 0 -2.22045e-15 1 N1 -5.93089e-16 -2.13636e-15 1 N2 -0.14476 -0.537012 0.831061
+ txt003
+STRI
+ V0 -0.384628 -1.38201 2.4875 V1 0 -1.43241 2.4875 V2 0 -1.40312 2.49844
+ N0 -0.14476 -0.537012 0.831061 N1 0 -0.556738 0.830688 N2 0 -2.22045e-15 1
+ txt003
+STRI
+ V0 -0.376765 -1.35376 2.49844 V1 -0.712995 -1.21396 2.49844 V2 -0.727875 -1.2393 2.4875
+ N0 -5.93089e-16 -2.13636e-15 1 N1 -1.16933e-15 -1.87966e-15 1 N2 -0.278679 -0.480481 0.83155
+ txt003
+STRI
+ V0 -0.727875 -1.2393 2.4875 V1 -0.384628 -1.38201 2.4875 V2 -0.376765 -1.35376 2.49844
+ N0 -0.278679 -0.480481 0.83155 N1 -0.14476 -0.537012 0.831061 N2 -5.93089e-16 -2.13636e-15 1
+ txt003
+STRI
+ V0 -0.712995 -1.21396 2.49844 V1 -0.996219 -0.996219 2.49844 V2 -1.01701 -1.01701 2.4875
+ N0 -1.16933e-15 -1.87966e-15 1 N1 -1.67359e-15 -1.4538e-15 1 N2 -0.392564 -0.392564 0.831737
+ txt003
+STRI
+ V0 -1.01701 -1.01701 2.4875 V1 -0.727875 -1.2393 2.4875 V2 -0.712995 -1.21396 2.49844
+ N0 -0.392564 -0.392564 0.831737 N1 -0.278679 -0.480481 0.83155 N2 -1.16933e-15 -1.87966e-15 1
+ txt003
+STRI
+ V0 -0.996219 -0.996219 2.49844 V1 -1.21396 -0.712995 2.49844 V2 -1.2393 -0.727875 2.4875
+ N0 -1.67359e-15 -1.4538e-15 1 N1 -2.05298e-15 -8.74229e-16 1 N2 -0.480481 -0.278679 0.83155
+ txt003
+STRI
+ V0 -1.2393 -0.727875 2.4875 V1 -1.01701 -1.01701 2.4875 V2 -0.996219 -0.996219 2.49844
+ N0 -0.480481 -0.278679 0.83155 N1 -0.392564 -0.392564 0.831737 N2 -1.67359e-15 -1.4538e-15 1
+ txt003
+STRI
+ V0 -1.21396 -0.712995 2.49844 V1 -1.35376 -0.376765 2.49844 V2 -1.38201 -0.384628 2.4875
+ N0 -2.05298e-15 -8.74229e-16 1 N1 -2.25214e-15 -1.77072e-16 1 N2 -0.537012 -0.14476 0.831061
+ txt003
+STRI
+ V0 -1.38201 -0.384628 2.4875 V1 -1.2393 -0.727875 2.4875 V2 -1.21396 -0.712995 2.49844
+ N0 -0.537012 -0.14476 0.831061 N1 -0.480481 -0.278679 0.83155 N2 -2.05298e-15 -8.74229e-16 1
+ txt003
+STRI
+ V0 -1.35376 -0.376765 2.49844 V1 -1.40312 0 2.49844 V2 -1.43241 0 2.4875
+ N0 -2.25214e-15 -1.77072e-16 1 N1 -2.22045e-15 5.65179e-16 1 N2 -0.556738 4.5989e-16 0.830688
+ txt003
+STRI
+ V0 -1.43241 0 2.4875 V1 -1.38201 -0.384628 2.4875 V2 -1.35376 -0.376765 2.49844
+ N0 -0.556738 4.5989e-16 0.830688 N1 -0.537012 -0.14476 0.831061 N2 -2.25214e-15 -1.77072e-16 1
+ txt003
+STRI
+ V0 0 -1.43241 2.4875 V1 -0.384628 -1.38201 2.4875 V2 -0.393796 -1.41495 2.45469
+ N0 0 -0.556738 0.830688 N1 -0.14476 -0.537012 0.831061 N2 -0.203756 -0.755869 0.622211
+ txt003
+STRI
+ V0 -0.393796 -1.41495 2.45469 V1 0 -1.46655 2.45469 V2 0 -1.43241 2.4875
+ N0 -0.203756 -0.755869 0.622211 N1 0 -0.783289 0.621658 N2 0 -0.556738 0.830688
+ txt003
+STRI
+ V0 -0.384628 -1.38201 2.4875 V1 -0.727875 -1.2393 2.4875 V2 -0.745225 -1.26884 2.45469
+ N0 -0.14476 -0.537012 0.831061 N1 -0.278679 -0.480481 0.83155 N2 -0.39248 -0.67669 0.622937
+ txt003
+STRI
+ V0 -0.745225 -1.26884 2.45469 V1 -0.393796 -1.41495 2.45469 V2 -0.384628 -1.38201 2.4875
+ N0 -0.39248 -0.67669 0.622937 N1 -0.203756 -0.755869 0.622211 N2 -0.14476 -0.537012 0.831061
+ txt003
+STRI
+ V0 -0.727875 -1.2393 2.4875 V1 -1.01701 -1.01701 2.4875 V2 -1.04125 -1.04125 2.45469
+ N0 -0.278679 -0.480481 0.83155 N1 -0.392564 -0.392564 0.831737 N2 -0.552993 -0.552993 0.623215
+ txt003
+STRI
+ V0 -1.04125 -1.04125 2.45469 V1 -0.745225 -1.26884 2.45469 V2 -0.727875 -1.2393 2.4875
+ N0 -0.552993 -0.552993 0.623215 N1 -0.39248 -0.67669 0.622937 N2 -0.278679 -0.480481 0.83155
+ txt003
+STRI
+ V0 -1.01701 -1.01701 2.4875 V1 -1.2393 -0.727875 2.4875 V2 -1.26884 -0.745225 2.45469
+ N0 -0.392564 -0.392564 0.831737 N1 -0.480481 -0.278679 0.83155 N2 -0.67669 -0.39248 0.622937
+ txt003
+STRI
+ V0 -1.26884 -0.745225 2.45469 V1 -1.04125 -1.04125 2.45469 V2 -1.01701 -1.01701 2.4875
+ N0 -0.67669 -0.39248 0.622937 N1 -0.552993 -0.552993 0.623215 N2 -0.392564 -0.392564 0.831737
+ txt003
+STRI
+ V0 -1.2393 -0.727875 2.4875 V1 -1.38201 -0.384628 2.4875 V2 -1.41495 -0.393796 2.45469
+ N0 -0.480481 -0.278679 0.83155 N1 -0.537012 -0.14476 0.831061 N2 -0.755869 -0.203756 0.622211
+ txt003
+STRI
+ V0 -1.41495 -0.393796 2.45469 V1 -1.26884 -0.745225 2.45469 V2 -1.2393 -0.727875 2.4875
+ N0 -0.755869 -0.203756 0.622211 N1 -0.67669 -0.39248 0.622937 N2 -0.480481 -0.278679 0.83155
+ txt003
+STRI
+ V0 -1.38201 -0.384628 2.4875 V1 -1.43241 0 2.4875 V2 -1.46655 0 2.45469
+ N0 -0.537012 -0.14476 0.831061 N1 -0.556738 4.5989e-16 0.830688 N2 -0.783289 1.94969e-16 0.621658
+ txt003
+STRI
+ V0 -1.46655 0 2.45469 V1 -1.41495 -0.393796 2.45469 V2 -1.38201 -0.384628 2.4875
+ N0 -0.783289 1.94969e-16 0.621658 N1 -0.755869 -0.203756 0.622211 N2 -0.537012 -0.14476 0.831061
+ txt003
+STRI
+ V0 0 -1.46655 2.45469 V1 -0.393796 -1.41495 2.45469 V2 -0.402778 -1.44722 2.4
+ N0 0 -0.783289 0.621658 N1 -0.203756 -0.755869 0.622211 N2 -0.234929 -0.871509 0.430442
+ txt003
+STRI
+ V0 -0.402778 -1.44722 2.4 V1 0 -1.5 2.4 V2 0 -1.46655 2.45469
+ N0 -0.234929 -0.871509 0.430442 N1 0 -0.902861 0.429934 N2 0 -0.783289 0.621658
+ txt003
+STRI
+ V0 -0.393796 -1.41495 2.45469 V1 -0.745225 -1.26884 2.45469 V2 -0.762222 -1.29778 2.4
+ N0 -0.203756 -0.755869 0.622211 N1 -0.39248 -0.67669 0.622937 N2 -0.4527 -0.780517 0.43111
+ txt003
+STRI
+ V0 -0.762222 -1.29778 2.4 V1 -0.402778 -1.44722 2.4 V2 -0.393796 -1.41495 2.45469
+ N0 -0.4527 -0.780517 0.43111 N1 -0.234929 -0.871509 0.430442 N2 -0.203756 -0.755869 0.622211
+ txt003
+STRI
+ V0 -0.745225 -1.26884 2.45469 V1 -1.04125 -1.04125 2.45469 V2 -1.065 -1.065 2.4
+ N0 -0.39248 -0.67669 0.622937 N1 -0.552993 -0.552993 0.623215 N2 -0.637936 -0.637936 0.431366
+ txt003
+STRI
+ V0 -1.065 -1.065 2.4 V1 -0.762222 -1.29778 2.4 V2 -0.745225 -1.26884 2.45469
+ N0 -0.637936 -0.637936 0.431366 N1 -0.4527 -0.780517 0.43111 N2 -0.39248 -0.67669 0.622937
+ txt003
+STRI
+ V0 -1.04125 -1.04125 2.45469 V1 -1.26884 -0.745225 2.45469 V2 -1.29778 -0.762222 2.4
+ N0 -0.552993 -0.552993 0.623215 N1 -0.67669 -0.39248 0.622937 N2 -0.780517 -0.4527 0.43111
+ txt003
+STRI
+ V0 -1.29778 -0.762222 2.4 V1 -1.065 -1.065 2.4 V2 -1.04125 -1.04125 2.45469
+ N0 -0.780517 -0.4527 0.43111 N1 -0.637936 -0.637936 0.431366 N2 -0.552993 -0.552993 0.623215
+ txt003
+STRI
+ V0 -1.26884 -0.745225 2.45469 V1 -1.41495 -0.393796 2.45469 V2 -1.44722 -0.402778 2.4
+ N0 -0.67669 -0.39248 0.622937 N1 -0.755869 -0.203756 0.622211 N2 -0.871509 -0.234929 0.430442
+ txt003
+STRI
+ V0 -1.44722 -0.402778 2.4 V1 -1.29778 -0.762222 2.4 V2 -1.26884 -0.745225 2.45469
+ N0 -0.871509 -0.234929 0.430442 N1 -0.780517 -0.4527 0.43111 N2 -0.67669 -0.39248 0.622937
+ txt003
+STRI
+ V0 -1.41495 -0.393796 2.45469 V1 -1.46655 0 2.45469 V2 -1.5 0 2.4
+ N0 -0.755869 -0.203756 0.622211 N1 -0.783289 1.94969e-16 0.621658 N2 -0.902861 6.81889e-17 0.429934
+ txt003
+STRI
+ V0 -1.5 0 2.4 V1 -1.44722 -0.402778 2.4 V2 -1.41495 -0.393796 2.45469
+ N0 -0.902861 6.81889e-17 0.429934 N1 -0.871509 -0.234929 0.430442 N2 -0.755869 -0.203756 0.622211
+ txt003
+STRI
+ V0 -1.4 0 2.4 V1 -1.35074 0.375926 2.4 V2 -1.33276 0.370922 2.45469
+ N0 0.902861 0 -0.429934 N1 0.871509 -0.234929 -0.430442 N2 0.953562 -0.257047 -0.156989
+ txt003
+STRI
+ V0 -1.33276 0.370922 2.45469 V1 -1.38137 0 2.45469 V2 -1.4 0 2.4
+ N0 0.953562 -0.257047 -0.156989 N1 0.987636 0 -0.156768 N2 0.902861 0 -0.429934
+ txt003
+STRI
+ V0 -1.35074 0.375926 2.4 V1 -1.21126 0.711407 2.4 V2 -1.19514 0.701938 2.45469
+ N0 0.871509 -0.234929 -0.430442 N1 0.780517 -0.4527 -0.43111 N2 0.854265 -0.495474 -0.157281
+ txt003
+STRI
+ V0 -1.19514 0.701938 2.45469 V1 -1.33276 0.370922 2.45469 V2 -1.35074 0.375926 2.4
+ N0 0.854265 -0.495474 -0.157281 N1 0.953562 -0.257047 -0.156989 N2 0.871509 -0.234929 -0.430442
+ txt003
+STRI
+ V0 -1.21126 0.711407 2.4 V1 -0.994 0.994 2.4 V2 -0.98077 0.98077 2.45469
+ N0 0.780517 -0.4527 -0.43111 N1 0.637936 -0.637936 -0.431366 N2 0.698293 -0.698293 -0.157393
+ txt003
+STRI
+ V0 -0.98077 0.98077 2.45469 V1 -1.19514 0.701938 2.45469 V2 -1.21126 0.711407 2.4
+ N0 0.698293 -0.698293 -0.157393 N1 0.854265 -0.495474 -0.157281 N2 0.780517 -0.4527 -0.43111
+ txt003
+STRI
+ V0 -0.994 0.994 2.4 V1 -0.711407 1.21126 2.4 V2 -0.701938 1.19514 2.45469
+ N0 0.637936 -0.637936 -0.431366 N1 0.4527 -0.780517 -0.43111 N2 0.495474 -0.854265 -0.157281
+ txt003
+STRI
+ V0 -0.701938 1.19514 2.45469 V1 -0.98077 0.98077 2.45469 V2 -0.994 0.994 2.4
+ N0 0.495474 -0.854265 -0.157281 N1 0.698293 -0.698293 -0.157393 N2 0.637936 -0.637936 -0.431366
+ txt003
+STRI
+ V0 -0.711407 1.21126 2.4 V1 -0.375926 1.35074 2.4 V2 -0.370922 1.33276 2.45469
+ N0 0.4527 -0.780517 -0.43111 N1 0.234929 -0.871509 -0.430442 N2 0.257047 -0.953562 -0.156989
+ txt003
+STRI
+ V0 -0.370922 1.33276 2.45469 V1 -0.701938 1.19514 2.45469 V2 -0.711407 1.21126 2.4
+ N0 0.257047 -0.953562 -0.156989 N1 0.495474 -0.854265 -0.157281 N2 0.4527 -0.780517 -0.43111
+ txt003
+STRI
+ V0 -0.375926 1.35074 2.4 V1 0 1.4 2.4 V2 0 1.38137 2.45469
+ N0 0.234929 -0.871509 -0.430442 N1 -7.30595e-17 -0.902861 -0.429934 N2 9.89971e-17 -0.987636 -0.156768
+ txt003
+STRI
+ V0 0 1.38137 2.45469 V1 -0.370922 1.33276 2.45469 V2 -0.375926 1.35074 2.4
+ N0 9.89971e-17 -0.987636 -0.156768 N1 0.257047 -0.953562 -0.156989 N2 0.234929 -0.871509 -0.430442
+ txt003
+STRI
+ V0 -1.38137 0 2.45469 V1 -1.33276 0.370922 2.45469 V2 -1.33555 0.371699 2.4875
+ N0 0.987636 0 -0.156768 N1 0.953562 -0.257047 -0.156989 N2 0.849414 -0.228972 0.475466
+ txt003
+STRI
+ V0 -1.33555 0.371699 2.4875 V1 -1.38426 0 2.4875 V2 -1.38137 0 2.45469
+ N0 0.849414 -0.228972 0.475466 N1 0.880022 -0 0.474933 N2 0.987636 0 -0.156768
+ txt003
+STRI
+ V0 -1.33276 0.370922 2.45469 V1 -1.19514 0.701938 2.45469 V2 -1.19764 0.703409 2.4875
+ N0 0.953562 -0.257047 -0.156989 N1 0.854265 -0.495474 -0.157281 N2 0.760669 -0.441188 0.476167
+ txt003
+STRI
+ V0 -1.19764 0.703409 2.4875 V1 -1.33555 0.371699 2.4875 V2 -1.33276 0.370922 2.45469
+ N0 0.760669 -0.441188 0.476167 N1 0.849414 -0.228972 0.475466 N2 0.953562 -0.257047 -0.156989
+ txt003
+STRI
+ V0 -1.19514 0.701938 2.45469 V1 -0.98077 0.98077 2.45469 V2 -0.982824 0.982824 2.4875
+ N0 0.854265 -0.495474 -0.157281 N1 0.698293 -0.698293 -0.157393 N2 0.621695 -0.621695 0.476435
+ txt003
+STRI
+ V0 -0.982824 0.982824 2.4875 V1 -1.19764 0.703409 2.4875 V2 -1.19514 0.701938 2.45469
+ N0 0.621695 -0.621695 0.476435 N1 0.760669 -0.441188 0.476167 N2 0.854265 -0.495474 -0.157281
+ txt003
+STRI
+ V0 -0.98077 0.98077 2.45469 V1 -0.701938 1.19514 2.45469 V2 -0.703409 1.19764 2.4875
+ N0 0.698293 -0.698293 -0.157393 N1 0.495474 -0.854265 -0.157281 N2 0.441188 -0.760669 0.476167
+ txt003
+STRI
+ V0 -0.703409 1.19764 2.4875 V1 -0.982824 0.982824 2.4875 V2 -0.98077 0.98077 2.45469
+ N0 0.441188 -0.760669 0.476167 N1 0.621695 -0.621695 0.476435 N2 0.698293 -0.698293 -0.157393
+ txt003
+STRI
+ V0 -0.701938 1.19514 2.45469 V1 -0.370922 1.33276 2.45469 V2 -0.371699 1.33555 2.4875
+ N0 0.495474 -0.854265 -0.157281 N1 0.257047 -0.953562 -0.156989 N2 0.228972 -0.849414 0.475466
+ txt003
+STRI
+ V0 -0.371699 1.33555 2.4875 V1 -0.703409 1.19764 2.4875 V2 -0.701938 1.19514 2.45469
+ N0 0.228972 -0.849414 0.475466 N1 0.441188 -0.760669 0.476167 N2 0.495474 -0.854265 -0.157281
+ txt003
+STRI
+ V0 -0.370922 1.33276 2.45469 V1 0 1.38137 2.45469 V2 0 1.38426 2.4875
+ N0 0.257047 -0.953562 -0.156989 N1 9.89971e-17 -0.987636 -0.156768 N2 6.08179e-16 -0.880022 0.474933
+ txt003
+STRI
+ V0 0 1.38426 2.4875 V1 -0.371699 1.33555 2.4875 V2 -0.370922 1.33276 2.45469
+ N0 6.08179e-16 -0.880022 0.474933 N1 0.228972 -0.849414 0.475466 N2 0.257047 -0.953562 -0.156989
+ txt003
+STRI
+ V0 -1.38426 0 2.4875 V1 -1.33555 0.371699 2.4875 V2 -1.35376 0.376765 2.49844
+ N0 0.880022 -0 0.474933 N1 0.849414 -0.228972 0.475466 N2 -2.13636e-15 5.93089e-16 1
+ txt003
+STRI
+ V0 -1.35376 0.376765 2.49844 V1 -1.40312 0 2.49844 V2 -1.38426 0 2.4875
+ N0 -2.13636e-15 5.93089e-16 1 N1 -2.22045e-15 0 1 N2 0.880022 -0 0.474933
+ txt003
+STRI
+ V0 -1.33555 0.371699 2.4875 V1 -1.19764 0.703409 2.4875 V2 -1.21396 0.712995 2.49844
+ N0 0.849414 -0.228972 0.475466 N1 0.760669 -0.441188 0.476167 N2 -1.87966e-15 1.16933e-15 1
+ txt003
+STRI
+ V0 -1.21396 0.712995 2.49844 V1 -1.35376 0.376765 2.49844 V2 -1.33555 0.371699 2.4875
+ N0 -1.87966e-15 1.16933e-15 1 N1 -2.13636e-15 5.93089e-16 1 N2 0.849414 -0.228972 0.475466
+ txt003
+STRI
+ V0 -1.19764 0.703409 2.4875 V1 -0.982824 0.982824 2.4875 V2 -0.996219 0.996219 2.49844
+ N0 0.760669 -0.441188 0.476167 N1 0.621695 -0.621695 0.476435 N2 -1.4538e-15 1.67359e-15 1
+ txt003
+STRI
+ V0 -0.996219 0.996219 2.49844 V1 -1.21396 0.712995 2.49844 V2 -1.19764 0.703409 2.4875
+ N0 -1.4538e-15 1.67359e-15 1 N1 -1.87966e-15 1.16933e-15 1 N2 0.760669 -0.441188 0.476167
+ txt003
+STRI
+ V0 -0.982824 0.982824 2.4875 V1 -0.703409 1.19764 2.4875 V2 -0.712995 1.21396 2.49844
+ N0 0.621695 -0.621695 0.476435 N1 0.441188 -0.760669 0.476167 N2 -8.74229e-16 2.05298e-15 1
+ txt003
+STRI
+ V0 -0.712995 1.21396 2.49844 V1 -0.996219 0.996219 2.49844 V2 -0.982824 0.982824 2.4875
+ N0 -8.74229e-16 2.05298e-15 1 N1 -1.4538e-15 1.67359e-15 1 N2 0.621695 -0.621695 0.476435
+ txt003
+STRI
+ V0 -0.703409 1.19764 2.4875 V1 -0.371699 1.33555 2.4875 V2 -0.376765 1.35376 2.49844
+ N0 0.441188 -0.760669 0.476167 N1 0.228972 -0.849414 0.475466 N2 -1.77072e-16 2.25214e-15 1
+ txt003
+STRI
+ V0 -0.376765 1.35376 2.49844 V1 -0.712995 1.21396 2.49844 V2 -0.703409 1.19764 2.4875
+ N0 -1.77072e-16 2.25214e-15 1 N1 -8.74229e-16 2.05298e-15 1 N2 0.441188 -0.760669 0.476167
+ txt003
+STRI
+ V0 -0.371699 1.33555 2.4875 V1 0 1.38426 2.4875 V2 0 1.40312 2.49844
+ N0 0.228972 -0.849414 0.475466 N1 6.08179e-16 -0.880022 0.474933 N2 5.65179e-16 2.22045e-15 1
+ txt003
+STRI
+ V0 0 1.40312 2.49844 V1 -0.376765 1.35376 2.49844 V2 -0.371699 1.33555 2.4875
+ N0 5.65179e-16 2.22045e-15 1 N1 -1.77072e-16 2.25214e-15 1 N2 0.228972 -0.849414 0.475466
+ txt003
+STRI
+ V0 -1.40312 0 2.49844 V1 -1.35376 0.376765 2.49844 V2 -1.38201 0.384628 2.4875
+ N0 -2.22045e-15 0 1 N1 -2.13636e-15 5.93089e-16 1 N2 -0.537012 0.14476 0.831061
+ txt003
+STRI
+ V0 -1.38201 0.384628 2.4875 V1 -1.43241 0 2.4875 V2 -1.40312 0 2.49844
+ N0 -0.537012 0.14476 0.831061 N1 -0.556738 0 0.830688 N2 -2.22045e-15 0 1
+ txt003
+STRI
+ V0 -1.35376 0.376765 2.49844 V1 -1.21396 0.712995 2.49844 V2 -1.2393 0.727875 2.4875
+ N0 -2.13636e-15 5.93089e-16 1 N1 -1.87966e-15 1.16933e-15 1 N2 -0.480481 0.278679 0.83155
+ txt003
+STRI
+ V0 -1.2393 0.727875 2.4875 V1 -1.38201 0.384628 2.4875 V2 -1.35376 0.376765 2.49844
+ N0 -0.480481 0.278679 0.83155 N1 -0.537012 0.14476 0.831061 N2 -2.13636e-15 5.93089e-16 1
+ txt003
+STRI
+ V0 -1.21396 0.712995 2.49844 V1 -0.996219 0.996219 2.49844 V2 -1.01701 1.01701 2.4875
+ N0 -1.87966e-15 1.16933e-15 1 N1 -1.4538e-15 1.67359e-15 1 N2 -0.392564 0.392564 0.831737
+ txt003
+STRI
+ V0 -1.01701 1.01701 2.4875 V1 -1.2393 0.727875 2.4875 V2 -1.21396 0.712995 2.49844
+ N0 -0.392564 0.392564 0.831737 N1 -0.480481 0.278679 0.83155 N2 -1.87966e-15 1.16933e-15 1
+ txt003
+STRI
+ V0 -0.996219 0.996219 2.49844 V1 -0.712995 1.21396 2.49844 V2 -0.727875 1.2393 2.4875
+ N0 -1.4538e-15 1.67359e-15 1 N1 -8.74229e-16 2.05298e-15 1 N2 -0.278679 0.480481 0.83155
+ txt003
+STRI
+ V0 -0.727875 1.2393 2.4875 V1 -1.01701 1.01701 2.4875 V2 -0.996219 0.996219 2.49844
+ N0 -0.278679 0.480481 0.83155 N1 -0.392564 0.392564 0.831737 N2 -1.4538e-15 1.67359e-15 1
+ txt003
+STRI
+ V0 -0.712995 1.21396 2.49844 V1 -0.376765 1.35376 2.49844 V2 -0.384628 1.38201 2.4875
+ N0 -8.74229e-16 2.05298e-15 1 N1 -1.77072e-16 2.25214e-15 1 N2 -0.14476 0.537012 0.831061
+ txt003
+STRI
+ V0 -0.384628 1.38201 2.4875 V1 -0.727875 1.2393 2.4875 V2 -0.712995 1.21396 2.49844
+ N0 -0.14476 0.537012 0.831061 N1 -0.278679 0.480481 0.83155 N2 -8.74229e-16 2.05298e-15 1
+ txt003
+STRI
+ V0 -0.376765 1.35376 2.49844 V1 0 1.40312 2.49844 V2 0 1.43241 2.4875
+ N0 -1.77072e-16 2.25214e-15 1 N1 5.65179e-16 2.22045e-15 1 N2 4.5989e-16 0.556738 0.830688
+ txt003
+STRI
+ V0 0 1.43241 2.4875 V1 -0.384628 1.38201 2.4875 V2 -0.376765 1.35376 2.49844
+ N0 4.5989e-16 0.556738 0.830688 N1 -0.14476 0.537012 0.831061 N2 -1.77072e-16 2.25214e-15 1
+ txt003
+STRI
+ V0 -1.43241 0 2.4875 V1 -1.38201 0.384628 2.4875 V2 -1.41495 0.393796 2.45469
+ N0 -0.556738 0 0.830688 N1 -0.537012 0.14476 0.831061 N2 -0.755869 0.203756 0.622211
+ txt003
+STRI
+ V0 -1.41495 0.393796 2.45469 V1 -1.46655 0 2.45469 V2 -1.43241 0 2.4875
+ N0 -0.755869 0.203756 0.622211 N1 -0.783289 0 0.621658 N2 -0.556738 0 0.830688
+ txt003
+STRI
+ V0 -1.38201 0.384628 2.4875 V1 -1.2393 0.727875 2.4875 V2 -1.26884 0.745225 2.45469
+ N0 -0.537012 0.14476 0.831061 N1 -0.480481 0.278679 0.83155 N2 -0.67669 0.39248 0.622937
+ txt003
+STRI
+ V0 -1.26884 0.745225 2.45469 V1 -1.41495 0.393796 2.45469 V2 -1.38201 0.384628 2.4875
+ N0 -0.67669 0.39248 0.622937 N1 -0.755869 0.203756 0.622211 N2 -0.537012 0.14476 0.831061
+ txt003
+STRI
+ V0 -1.2393 0.727875 2.4875 V1 -1.01701 1.01701 2.4875 V2 -1.04125 1.04125 2.45469
+ N0 -0.480481 0.278679 0.83155 N1 -0.392564 0.392564 0.831737 N2 -0.552993 0.552993 0.623215
+ txt003
+STRI
+ V0 -1.04125 1.04125 2.45469 V1 -1.26884 0.745225 2.45469 V2 -1.2393 0.727875 2.4875
+ N0 -0.552993 0.552993 0.623215 N1 -0.67669 0.39248 0.622937 N2 -0.480481 0.278679 0.83155
+ txt003
+STRI
+ V0 -1.01701 1.01701 2.4875 V1 -0.727875 1.2393 2.4875 V2 -0.745225 1.26884 2.45469
+ N0 -0.392564 0.392564 0.831737 N1 -0.278679 0.480481 0.83155 N2 -0.39248 0.67669 0.622937
+ txt003
+STRI
+ V0 -0.745225 1.26884 2.45469 V1 -1.04125 1.04125 2.45469 V2 -1.01701 1.01701 2.4875
+ N0 -0.39248 0.67669 0.622937 N1 -0.552993 0.552993 0.623215 N2 -0.392564 0.392564 0.831737
+ txt003
+STRI
+ V0 -0.727875 1.2393 2.4875 V1 -0.384628 1.38201 2.4875 V2 -0.393796 1.41495 2.45469
+ N0 -0.278679 0.480481 0.83155 N1 -0.14476 0.537012 0.831061 N2 -0.203756 0.755869 0.622211
+ txt003
+STRI
+ V0 -0.393796 1.41495 2.45469 V1 -0.745225 1.26884 2.45469 V2 -0.727875 1.2393 2.4875
+ N0 -0.203756 0.755869 0.622211 N1 -0.39248 0.67669 0.622937 N2 -0.278679 0.480481 0.83155
+ txt003
+STRI
+ V0 -0.384628 1.38201 2.4875 V1 0 1.43241 2.4875 V2 0 1.46655 2.45469
+ N0 -0.14476 0.537012 0.831061 N1 4.5989e-16 0.556738 0.830688 N2 1.94969e-16 0.783289 0.621658
+ txt003
+STRI
+ V0 0 1.46655 2.45469 V1 -0.393796 1.41495 2.45469 V2 -0.384628 1.38201 2.4875
+ N0 1.94969e-16 0.783289 0.621658 N1 -0.203756 0.755869 0.622211 N2 -0.14476 0.537012 0.831061
+ txt003
+STRI
+ V0 -1.46655 0 2.45469 V1 -1.41495 0.393796 2.45469 V2 -1.44722 0.402778 2.4
+ N0 -0.783289 0 0.621658 N1 -0.755869 0.203756 0.622211 N2 -0.871509 0.234929 0.430442
+ txt003
+STRI
+ V0 -1.44722 0.402778 2.4 V1 -1.5 0 2.4 V2 -1.46655 0 2.45469
+ N0 -0.871509 0.234929 0.430442 N1 -0.902861 0 0.429934 N2 -0.783289 0 0.621658
+ txt003
+STRI
+ V0 -1.41495 0.393796 2.45469 V1 -1.26884 0.745225 2.45469 V2 -1.29778 0.762222 2.4
+ N0 -0.755869 0.203756 0.622211 N1 -0.67669 0.39248 0.622937 N2 -0.780517 0.4527 0.43111
+ txt003
+STRI
+ V0 -1.29778 0.762222 2.4 V1 -1.44722 0.402778 2.4 V2 -1.41495 0.393796 2.45469
+ N0 -0.780517 0.4527 0.43111 N1 -0.871509 0.234929 0.430442 N2 -0.755869 0.203756 0.622211
+ txt003
+STRI
+ V0 -1.26884 0.745225 2.45469 V1 -1.04125 1.04125 2.45469 V2 -1.065 1.065 2.4
+ N0 -0.67669 0.39248 0.622937 N1 -0.552993 0.552993 0.623215 N2 -0.637936 0.637936 0.431366
+ txt003
+STRI
+ V0 -1.065 1.065 2.4 V1 -1.29778 0.762222 2.4 V2 -1.26884 0.745225 2.45469
+ N0 -0.637936 0.637936 0.431366 N1 -0.780517 0.4527 0.43111 N2 -0.67669 0.39248 0.622937
+ txt003
+STRI
+ V0 -1.04125 1.04125 2.45469 V1 -0.745225 1.26884 2.45469 V2 -0.762222 1.29778 2.4
+ N0 -0.552993 0.552993 0.623215 N1 -0.39248 0.67669 0.622937 N2 -0.4527 0.780517 0.43111
+ txt003
+STRI
+ V0 -0.762222 1.29778 2.4 V1 -1.065 1.065 2.4 V2 -1.04125 1.04125 2.45469
+ N0 -0.4527 0.780517 0.43111 N1 -0.637936 0.637936 0.431366 N2 -0.552993 0.552993 0.623215
+ txt003
+STRI
+ V0 -0.745225 1.26884 2.45469 V1 -0.393796 1.41495 2.45469 V2 -0.402778 1.44722 2.4
+ N0 -0.39248 0.67669 0.622937 N1 -0.203756 0.755869 0.622211 N2 -0.234929 0.871509 0.430442
+ txt003
+STRI
+ V0 -0.402778 1.44722 2.4 V1 -0.762222 1.29778 2.4 V2 -0.745225 1.26884 2.45469
+ N0 -0.234929 0.871509 0.430442 N1 -0.4527 0.780517 0.43111 N2 -0.39248 0.67669 0.622937
+ txt003
+STRI
+ V0 -0.393796 1.41495 2.45469 V1 0 1.46655 2.45469 V2 0 1.5 2.4
+ N0 -0.203756 0.755869 0.622211 N1 1.94969e-16 0.783289 0.621658 N2 6.81889e-17 0.902861 0.429934
+ txt003
+STRI
+ V0 0 1.5 2.4 V1 -0.402778 1.44722 2.4 V2 -0.393796 1.41495 2.45469
+ N0 6.81889e-17 0.902861 0.429934 N1 -0.234929 0.871509 0.430442 N2 -0.203756 0.755869 0.622211
+ txt003
+STRI
+ V0 0 1.4 2.4 V1 0.375926 1.35074 2.4 V2 0.370922 1.33276 2.45469
+ N0 0 -0.902861 -0.429934 N1 -0.234929 -0.871509 -0.430442 N2 -0.257047 -0.953562 -0.156989
+ txt003
+STRI
+ V0 0.370922 1.33276 2.45469 V1 0 1.38137 2.45469 V2 0 1.4 2.4
+ N0 -0.257047 -0.953562 -0.156989 N1 0 -0.987636 -0.156768 N2 0 -0.902861 -0.429934
+ txt003
+STRI
+ V0 0.375926 1.35074 2.4 V1 0.711407 1.21126 2.4 V2 0.701938 1.19514 2.45469
+ N0 -0.234929 -0.871509 -0.430442 N1 -0.4527 -0.780517 -0.43111 N2 -0.495474 -0.854265 -0.157281
+ txt003
+STRI
+ V0 0.701938 1.19514 2.45469 V1 0.370922 1.33276 2.45469 V2 0.375926 1.35074 2.4
+ N0 -0.495474 -0.854265 -0.157281 N1 -0.257047 -0.953562 -0.156989 N2 -0.234929 -0.871509 -0.430442
+ txt003
+STRI
+ V0 0.711407 1.21126 2.4 V1 0.994 0.994 2.4 V2 0.98077 0.98077 2.45469
+ N0 -0.4527 -0.780517 -0.43111 N1 -0.637936 -0.637936 -0.431366 N2 -0.698293 -0.698293 -0.157393
+ txt003
+STRI
+ V0 0.98077 0.98077 2.45469 V1 0.701938 1.19514 2.45469 V2 0.711407 1.21126 2.4
+ N0 -0.698293 -0.698293 -0.157393 N1 -0.495474 -0.854265 -0.157281 N2 -0.4527 -0.780517 -0.43111
+ txt003
+STRI
+ V0 0.994 0.994 2.4 V1 1.21126 0.711407 2.4 V2 1.19514 0.701938 2.45469
+ N0 -0.637936 -0.637936 -0.431366 N1 -0.780517 -0.4527 -0.43111 N2 -0.854265 -0.495474 -0.157281
+ txt003
+STRI
+ V0 1.19514 0.701938 2.45469 V1 0.98077 0.98077 2.45469 V2 0.994 0.994 2.4
+ N0 -0.854265 -0.495474 -0.157281 N1 -0.698293 -0.698293 -0.157393 N2 -0.637936 -0.637936 -0.431366
+ txt003
+STRI
+ V0 1.21126 0.711407 2.4 V1 1.35074 0.375926 2.4 V2 1.33276 0.370922 2.45469
+ N0 -0.780517 -0.4527 -0.43111 N1 -0.871509 -0.234929 -0.430442 N2 -0.953562 -0.257047 -0.156989
+ txt003
+STRI
+ V0 1.33276 0.370922 2.45469 V1 1.19514 0.701938 2.45469 V2 1.21126 0.711407 2.4
+ N0 -0.953562 -0.257047 -0.156989 N1 -0.854265 -0.495474 -0.157281 N2 -0.780517 -0.4527 -0.43111
+ txt003
+STRI
+ V0 1.35074 0.375926 2.4 V1 1.4 0 2.4 V2 1.38137 0 2.45469
+ N0 -0.871509 -0.234929 -0.430442 N1 -0.902861 7.30595e-17 -0.429934 N2 -0.987636 -9.89971e-17 -0.156768
+ txt003
+STRI
+ V0 1.38137 0 2.45469 V1 1.33276 0.370922 2.45469 V2 1.35074 0.375926 2.4
+ N0 -0.987636 -9.89971e-17 -0.156768 N1 -0.953562 -0.257047 -0.156989 N2 -0.871509 -0.234929 -0.430442
+ txt003
+STRI
+ V0 0 1.38137 2.45469 V1 0.370922 1.33276 2.45469 V2 0.371699 1.33555 2.4875
+ N0 0 -0.987636 -0.156768 N1 -0.257047 -0.953562 -0.156989 N2 -0.228972 -0.849414 0.475466
+ txt003
+STRI
+ V0 0.371699 1.33555 2.4875 V1 0 1.38426 2.4875 V2 0 1.38137 2.45469
+ N0 -0.228972 -0.849414 0.475466 N1 0 -0.880022 0.474933 N2 0 -0.987636 -0.156768
+ txt003
+STRI
+ V0 0.370922 1.33276 2.45469 V1 0.701938 1.19514 2.45469 V2 0.703409 1.19764 2.4875
+ N0 -0.257047 -0.953562 -0.156989 N1 -0.495474 -0.854265 -0.157281 N2 -0.441188 -0.760669 0.476167
+ txt003
+STRI
+ V0 0.703409 1.19764 2.4875 V1 0.371699 1.33555 2.4875 V2 0.370922 1.33276 2.45469
+ N0 -0.441188 -0.760669 0.476167 N1 -0.228972 -0.849414 0.475466 N2 -0.257047 -0.953562 -0.156989
+ txt003
+STRI
+ V0 0.701938 1.19514 2.45469 V1 0.98077 0.98077 2.45469 V2 0.982824 0.982824 2.4875
+ N0 -0.495474 -0.854265 -0.157281 N1 -0.698293 -0.698293 -0.157393 N2 -0.621695 -0.621695 0.476435
+ txt003
+STRI
+ V0 0.982824 0.982824 2.4875 V1 0.703409 1.19764 2.4875 V2 0.701938 1.19514 2.45469
+ N0 -0.621695 -0.621695 0.476435 N1 -0.441188 -0.760669 0.476167 N2 -0.495474 -0.854265 -0.157281
+ txt003
+STRI
+ V0 0.98077 0.98077 2.45469 V1 1.19514 0.701938 2.45469 V2 1.19764 0.703409 2.4875
+ N0 -0.698293 -0.698293 -0.157393 N1 -0.854265 -0.495474 -0.157281 N2 -0.760669 -0.441188 0.476167
+ txt003
+STRI
+ V0 1.19764 0.703409 2.4875 V1 0.982824 0.982824 2.4875 V2 0.98077 0.98077 2.45469
+ N0 -0.760669 -0.441188 0.476167 N1 -0.621695 -0.621695 0.476435 N2 -0.698293 -0.698293 -0.157393
+ txt003
+STRI
+ V0 1.19514 0.701938 2.45469 V1 1.33276 0.370922 2.45469 V2 1.33555 0.371699 2.4875
+ N0 -0.854265 -0.495474 -0.157281 N1 -0.953562 -0.257047 -0.156989 N2 -0.849414 -0.228972 0.475466
+ txt003
+STRI
+ V0 1.33555 0.371699 2.4875 V1 1.19764 0.703409 2.4875 V2 1.19514 0.701938 2.45469
+ N0 -0.849414 -0.228972 0.475466 N1 -0.760669 -0.441188 0.476167 N2 -0.854265 -0.495474 -0.157281
+ txt003
+STRI
+ V0 1.33276 0.370922 2.45469 V1 1.38137 0 2.45469 V2 1.38426 0 2.4875
+ N0 -0.953562 -0.257047 -0.156989 N1 -0.987636 -9.89971e-17 -0.156768 N2 -0.880022 -6.08179e-16 0.474933
+ txt003
+STRI
+ V0 1.38426 0 2.4875 V1 1.33555 0.371699 2.4875 V2 1.33276 0.370922 2.45469
+ N0 -0.880022 -6.08179e-16 0.474933 N1 -0.849414 -0.228972 0.475466 N2 -0.953562 -0.257047 -0.156989
+ txt003
+STRI
+ V0 0 1.38426 2.4875 V1 0.371699 1.33555 2.4875 V2 0.376765 1.35376 2.49844
+ N0 0 -0.880022 0.474933 N1 -0.228972 -0.849414 0.475466 N2 5.93089e-16 2.13636e-15 1
+ txt003
+STRI
+ V0 0.376765 1.35376 2.49844 V1 0 1.40312 2.49844 V2 0 1.38426 2.4875
+ N0 5.93089e-16 2.13636e-15 1 N1 -0 2.22045e-15 1 N2 0 -0.880022 0.474933
+ txt003
+STRI
+ V0 0.371699 1.33555 2.4875 V1 0.703409 1.19764 2.4875 V2 0.712995 1.21396 2.49844
+ N0 -0.228972 -0.849414 0.475466 N1 -0.441188 -0.760669 0.476167 N2 1.16933e-15 1.87966e-15 1
+ txt003
+STRI
+ V0 0.712995 1.21396 2.49844 V1 0.376765 1.35376 2.49844 V2 0.371699 1.33555 2.4875
+ N0 1.16933e-15 1.87966e-15 1 N1 5.93089e-16 2.13636e-15 1 N2 -0.228972 -0.849414 0.475466
+ txt003
+STRI
+ V0 0.703409 1.19764 2.4875 V1 0.982824 0.982824 2.4875 V2 0.996219 0.996219 2.49844
+ N0 -0.441188 -0.760669 0.476167 N1 -0.621695 -0.621695 0.476435 N2 1.67359e-15 1.4538e-15 1
+ txt003
+STRI
+ V0 0.996219 0.996219 2.49844 V1 0.712995 1.21396 2.49844 V2 0.703409 1.19764 2.4875
+ N0 1.67359e-15 1.4538e-15 1 N1 1.16933e-15 1.87966e-15 1 N2 -0.441188 -0.760669 0.476167
+ txt003
+STRI
+ V0 0.982824 0.982824 2.4875 V1 1.19764 0.703409 2.4875 V2 1.21396 0.712995 2.49844
+ N0 -0.621695 -0.621695 0.476435 N1 -0.760669 -0.441188 0.476167 N2 2.05298e-15 8.74229e-16 1
+ txt003
+STRI
+ V0 1.21396 0.712995 2.49844 V1 0.996219 0.996219 2.49844 V2 0.982824 0.982824 2.4875
+ N0 2.05298e-15 8.74229e-16 1 N1 1.67359e-15 1.4538e-15 1 N2 -0.621695 -0.621695 0.476435
+ txt003
+STRI
+ V0 1.19764 0.703409 2.4875 V1 1.33555 0.371699 2.4875 V2 1.35376 0.376765 2.49844
+ N0 -0.760669 -0.441188 0.476167 N1 -0.849414 -0.228972 0.475466 N2 2.25214e-15 1.77072e-16 1
+ txt003
+STRI
+ V0 1.35376 0.376765 2.49844 V1 1.21396 0.712995 2.49844 V2 1.19764 0.703409 2.4875
+ N0 2.25214e-15 1.77072e-16 1 N1 2.05298e-15 8.74229e-16 1 N2 -0.760669 -0.441188 0.476167
+ txt003
+STRI
+ V0 1.33555 0.371699 2.4875 V1 1.38426 0 2.4875 V2 1.40312 0 2.49844
+ N0 -0.849414 -0.228972 0.475466 N1 -0.880022 -6.08179e-16 0.474933 N2 2.22045e-15 -5.65179e-16 1
+ txt003
+STRI
+ V0 1.40312 0 2.49844 V1 1.35376 0.376765 2.49844 V2 1.33555 0.371699 2.4875
+ N0 2.22045e-15 -5.65179e-16 1 N1 2.25214e-15 1.77072e-16 1 N2 -0.849414 -0.228972 0.475466
+ txt003
+STRI
+ V0 0 1.40312 2.49844 V1 0.376765 1.35376 2.49844 V2 0.384628 1.38201 2.4875
+ N0 -0 2.22045e-15 1 N1 5.93089e-16 2.13636e-15 1 N2 0.14476 0.537012 0.831061
+ txt003
+STRI
+ V0 0.384628 1.38201 2.4875 V1 0 1.43241 2.4875 V2 0 1.40312 2.49844
+ N0 0.14476 0.537012 0.831061 N1 -0 0.556738 0.830688 N2 -0 2.22045e-15 1
+ txt003
+STRI
+ V0 0.376765 1.35376 2.49844 V1 0.712995 1.21396 2.49844 V2 0.727875 1.2393 2.4875
+ N0 5.93089e-16 2.13636e-15 1 N1 1.16933e-15 1.87966e-15 1 N2 0.278679 0.480481 0.83155
+ txt003
+STRI
+ V0 0.727875 1.2393 2.4875 V1 0.384628 1.38201 2.4875 V2 0.376765 1.35376 2.49844
+ N0 0.278679 0.480481 0.83155 N1 0.14476 0.537012 0.831061 N2 5.93089e-16 2.13636e-15 1
+ txt003
+STRI
+ V0 0.712995 1.21396 2.49844 V1 0.996219 0.996219 2.49844 V2 1.01701 1.01701 2.4875
+ N0 1.16933e-15 1.87966e-15 1 N1 1.67359e-15 1.4538e-15 1 N2 0.392564 0.392564 0.831737
+ txt003
+STRI
+ V0 1.01701 1.01701 2.4875 V1 0.727875 1.2393 2.4875 V2 0.712995 1.21396 2.49844
+ N0 0.392564 0.392564 0.831737 N1 0.278679 0.480481 0.83155 N2 1.16933e-15 1.87966e-15 1
+ txt003
+STRI
+ V0 0.996219 0.996219 2.49844 V1 1.21396 0.712995 2.49844 V2 1.2393 0.727875 2.4875
+ N0 1.67359e-15 1.4538e-15 1 N1 2.05298e-15 8.74229e-16 1 N2 0.480481 0.278679 0.83155
+ txt003
+STRI
+ V0 1.2393 0.727875 2.4875 V1 1.01701 1.01701 2.4875 V2 0.996219 0.996219 2.49844
+ N0 0.480481 0.278679 0.83155 N1 0.392564 0.392564 0.831737 N2 1.67359e-15 1.4538e-15 1
+ txt003
+STRI
+ V0 1.21396 0.712995 2.49844 V1 1.35376 0.376765 2.49844 V2 1.38201 0.384628 2.4875
+ N0 2.05298e-15 8.74229e-16 1 N1 2.25214e-15 1.77072e-16 1 N2 0.537012 0.14476 0.831061
+ txt003
+STRI
+ V0 1.38201 0.384628 2.4875 V1 1.2393 0.727875 2.4875 V2 1.21396 0.712995 2.49844
+ N0 0.537012 0.14476 0.831061 N1 0.480481 0.278679 0.83155 N2 2.05298e-15 8.74229e-16 1
+ txt003
+STRI
+ V0 1.35376 0.376765 2.49844 V1 1.40312 0 2.49844 V2 1.43241 0 2.4875
+ N0 2.25214e-15 1.77072e-16 1 N1 2.22045e-15 -5.65179e-16 1 N2 0.556738 -4.5989e-16 0.830688
+ txt003
+STRI
+ V0 1.43241 0 2.4875 V1 1.38201 0.384628 2.4875 V2 1.35376 0.376765 2.49844
+ N0 0.556738 -4.5989e-16 0.830688 N1 0.537012 0.14476 0.831061 N2 2.25214e-15 1.77072e-16 1
+ txt003
+STRI
+ V0 0 1.43241 2.4875 V1 0.384628 1.38201 2.4875 V2 0.393796 1.41495 2.45469
+ N0 -0 0.556738 0.830688 N1 0.14476 0.537012 0.831061 N2 0.203756 0.755869 0.622211
+ txt003
+STRI
+ V0 0.393796 1.41495 2.45469 V1 0 1.46655 2.45469 V2 0 1.43241 2.4875
+ N0 0.203756 0.755869 0.622211 N1 -0 0.783289 0.621658 N2 -0 0.556738 0.830688
+ txt003
+STRI
+ V0 0.384628 1.38201 2.4875 V1 0.727875 1.2393 2.4875 V2 0.745225 1.26884 2.45469
+ N0 0.14476 0.537012 0.831061 N1 0.278679 0.480481 0.83155 N2 0.39248 0.67669 0.622937
+ txt003
+STRI
+ V0 0.745225 1.26884 2.45469 V1 0.393796 1.41495 2.45469 V2 0.384628 1.38201 2.4875
+ N0 0.39248 0.67669 0.622937 N1 0.203756 0.755869 0.622211 N2 0.14476 0.537012 0.831061
+ txt003
+STRI
+ V0 0.727875 1.2393 2.4875 V1 1.01701 1.01701 2.4875 V2 1.04125 1.04125 2.45469
+ N0 0.278679 0.480481 0.83155 N1 0.392564 0.392564 0.831737 N2 0.552993 0.552993 0.623215
+ txt003
+STRI
+ V0 1.04125 1.04125 2.45469 V1 0.745225 1.26884 2.45469 V2 0.727875 1.2393 2.4875
+ N0 0.552993 0.552993 0.623215 N1 0.39248 0.67669 0.622937 N2 0.278679 0.480481 0.83155
+ txt003
+STRI
+ V0 1.01701 1.01701 2.4875 V1 1.2393 0.727875 2.4875 V2 1.26884 0.745225 2.45469
+ N0 0.392564 0.392564 0.831737 N1 0.480481 0.278679 0.83155 N2 0.67669 0.39248 0.622937
+ txt003
+STRI
+ V0 1.26884 0.745225 2.45469 V1 1.04125 1.04125 2.45469 V2 1.01701 1.01701 2.4875
+ N0 0.67669 0.39248 0.622937 N1 0.552993 0.552993 0.623215 N2 0.392564 0.392564 0.831737
+ txt003
+STRI
+ V0 1.2393 0.727875 2.4875 V1 1.38201 0.384628 2.4875 V2 1.41495 0.393796 2.45469
+ N0 0.480481 0.278679 0.83155 N1 0.537012 0.14476 0.831061 N2 0.755869 0.203756 0.622211
+ txt003
+STRI
+ V0 1.41495 0.393796 2.45469 V1 1.26884 0.745225 2.45469 V2 1.2393 0.727875 2.4875
+ N0 0.755869 0.203756 0.622211 N1 0.67669 0.39248 0.622937 N2 0.480481 0.278679 0.83155
+ txt003
+STRI
+ V0 1.38201 0.384628 2.4875 V1 1.43241 0 2.4875 V2 1.46655 0 2.45469
+ N0 0.537012 0.14476 0.831061 N1 0.556738 -4.5989e-16 0.830688 N2 0.783289 -1.94969e-16 0.621658
+ txt003
+STRI
+ V0 1.46655 0 2.45469 V1 1.41495 0.393796 2.45469 V2 1.38201 0.384628 2.4875
+ N0 0.783289 -1.94969e-16 0.621658 N1 0.755869 0.203756 0.622211 N2 0.537012 0.14476 0.831061
+ txt003
+STRI
+ V0 0 1.46655 2.45469 V1 0.393796 1.41495 2.45469 V2 0.402778 1.44722 2.4
+ N0 -0 0.783289 0.621658 N1 0.203756 0.755869 0.622211 N2 0.234929 0.871509 0.430442
+ txt003
+STRI
+ V0 0.402778 1.44722 2.4 V1 0 1.5 2.4 V2 0 1.46655 2.45469
+ N0 0.234929 0.871509 0.430442 N1 -0 0.902861 0.429934 N2 -0 0.783289 0.621658
+ txt003
+STRI
+ V0 0.393796 1.41495 2.45469 V1 0.745225 1.26884 2.45469 V2 0.762222 1.29778 2.4
+ N0 0.203756 0.755869 0.622211 N1 0.39248 0.67669 0.622937 N2 0.4527 0.780517 0.43111
+ txt003
+STRI
+ V0 0.762222 1.29778 2.4 V1 0.402778 1.44722 2.4 V2 0.393796 1.41495 2.45469
+ N0 0.4527 0.780517 0.43111 N1 0.234929 0.871509 0.430442 N2 0.203756 0.755869 0.622211
+ txt003
+STRI
+ V0 0.745225 1.26884 2.45469 V1 1.04125 1.04125 2.45469 V2 1.065 1.065 2.4
+ N0 0.39248 0.67669 0.622937 N1 0.552993 0.552993 0.623215 N2 0.637936 0.637936 0.431366
+ txt003
+STRI
+ V0 1.065 1.065 2.4 V1 0.762222 1.29778 2.4 V2 0.745225 1.26884 2.45469
+ N0 0.637936 0.637936 0.431366 N1 0.4527 0.780517 0.43111 N2 0.39248 0.67669 0.622937
+ txt003
+STRI
+ V0 1.04125 1.04125 2.45469 V1 1.26884 0.745225 2.45469 V2 1.29778 0.762222 2.4
+ N0 0.552993 0.552993 0.623215 N1 0.67669 0.39248 0.622937 N2 0.780517 0.4527 0.43111
+ txt003
+STRI
+ V0 1.29778 0.762222 2.4 V1 1.065 1.065 2.4 V2 1.04125 1.04125 2.45469
+ N0 0.780517 0.4527 0.43111 N1 0.637936 0.637936 0.431366 N2 0.552993 0.552993 0.623215
+ txt003
+STRI
+ V0 1.26884 0.745225 2.45469 V1 1.41495 0.393796 2.45469 V2 1.44722 0.402778 2.4
+ N0 0.67669 0.39248 0.622937 N1 0.755869 0.203756 0.622211 N2 0.871509 0.234929 0.430442
+ txt003
+STRI
+ V0 1.44722 0.402778 2.4 V1 1.29778 0.762222 2.4 V2 1.26884 0.745225 2.45469
+ N0 0.871509 0.234929 0.430442 N1 0.780517 0.4527 0.43111 N2 0.67669 0.39248 0.622937
+ txt003
+STRI
+ V0 1.41495 0.393796 2.45469 V1 1.46655 0 2.45469 V2 1.5 0 2.4
+ N0 0.755869 0.203756 0.622211 N1 0.783289 -1.94969e-16 0.621658 N2 0.902861 -6.81889e-17 0.429934
+ txt003
+STRI
+ V0 1.5 0 2.4 V1 1.44722 0.402778 2.4 V2 1.41495 0.393796 2.45469
+ N0 0.902861 -6.81889e-17 0.429934 N1 0.871509 0.234929 0.430442 N2 0.755869 0.203756 0.622211
+ txt003
+STRI
+ V0 1.5 0 2.4 V1 1.44722 -0.402778 2.4 V2 1.56671 -0.436032 2.13785
+ N0 0.902861 0 0.429934 N1 0.871509 -0.234929 0.430442 N2 0.875348 -0.235963 0.422003
+ txt003
+STRI
+ V0 1.56671 -0.436032 2.13785 V1 1.62384 0 2.13785 V2 1.5 0 2.4
+ N0 0.875348 -0.235963 0.422003 N1 0.906828 0 0.4215 N2 0.902861 0 0.429934
+ txt003
+STRI
+ V0 1.44722 -0.402778 2.4 V1 1.29778 -0.762222 2.4 V2 1.40492 -0.825153 2.13785
+ N0 0.871509 -0.234929 0.430442 N1 0.780517 -0.4527 0.43111 N2 0.783966 -0.4547 0.422664
+ txt003
+STRI
+ V0 1.40492 -0.825153 2.13785 V1 1.56671 -0.436032 2.13785 V2 1.44722 -0.402778 2.4
+ N0 0.783966 -0.4547 0.422664 N1 0.875348 -0.235963 0.422003 N2 0.871509 -0.234929 0.430442
+ txt003
+STRI
+ V0 1.29778 -0.762222 2.4 V1 1.065 -1.065 2.4 V2 1.15293 -1.15293 2.13785
+ N0 0.780517 -0.4527 0.43111 N1 0.637936 -0.637936 0.431366 N2 0.640758 -0.640758 0.422917
+ txt003
+STRI
+ V0 1.15293 -1.15293 2.13785 V1 1.40492 -0.825153 2.13785 V2 1.29778 -0.762222 2.4
+ N0 0.640758 -0.640758 0.422917 N1 0.783966 -0.4547 0.422664 N2 0.780517 -0.4527 0.43111
+ txt003
+STRI
+ V0 1.065 -1.065 2.4 V1 0.762222 -1.29778 2.4 V2 0.825153 -1.40492 2.13785
+ N0 0.637936 -0.637936 0.431366 N1 0.4527 -0.780517 0.43111 N2 0.4547 -0.783966 0.422664
+ txt003
+STRI
+ V0 0.825153 -1.40492 2.13785 V1 1.15293 -1.15293 2.13785 V2 1.065 -1.065 2.4
+ N0 0.4547 -0.783966 0.422664 N1 0.640758 -0.640758 0.422917 N2 0.637936 -0.637936 0.431366
+ txt003
+STRI
+ V0 0.762222 -1.29778 2.4 V1 0.402778 -1.44722 2.4 V2 0.436032 -1.56671 2.13785
+ N0 0.4527 -0.780517 0.43111 N1 0.234929 -0.871509 0.430442 N2 0.235963 -0.875348 0.422003
+ txt003
+STRI
+ V0 0.436032 -1.56671 2.13785 V1 0.825153 -1.40492 2.13785 V2 0.762222 -1.29778 2.4
+ N0 0.235963 -0.875348 0.422003 N1 0.4547 -0.783966 0.422664 N2 0.4527 -0.780517 0.43111
+ txt003
+STRI
+ V0 0.402778 -1.44722 2.4 V1 0 -1.5 2.4 V2 2.22045e-16 -1.62384 2.13785
+ N0 0.234929 -0.871509 0.430442 N1 -2.27296e-16 -0.902861 0.429934 N2 -2.05843e-16 -0.906828 0.4215
+ txt003
+STRI
+ V0 2.22045e-16 -1.62384 2.13785 V1 0.436032 -1.56671 2.13785 V2 0.402778 -1.44722 2.4
+ N0 -2.05843e-16 -0.906828 0.4215 N1 0.235963 -0.875348 0.422003 N2 0.234929 -0.871509 0.430442
+ txt003
+STRI
+ V0 1.62384 0 2.13785 V1 1.56671 -0.436032 2.13785 V2 1.67949 -0.467421 1.87778
+ N0 0.906828 0 0.4215 N1 0.875348 -0.235963 0.422003 N2 0.886771 -0.239043 0.395595
+ txt003
+STRI
+ V0 1.67949 -0.467421 1.87778 V1 1.74074 0 1.87778 V2 1.62384 0 2.13785
+ N0 0.886771 -0.239043 0.395595 N1 0.918633 0 0.395111 N2 0.906828 0 0.4215
+ txt003
+STRI
+ V0 1.56671 -0.436032 2.13785 V1 1.40492 -0.825153 2.13785 V2 1.50606 -0.884554 1.87778
+ N0 0.875348 -0.235963 0.422003 N1 0.783966 -0.4547 0.422664 N2 0.794229 -0.460653 0.39623
+ txt003
+STRI
+ V0 1.50606 -0.884554 1.87778 V1 1.67949 -0.467421 1.87778 V2 1.56671 -0.436032 2.13785
+ N0 0.794229 -0.460653 0.39623 N1 0.886771 -0.239043 0.395595 N2 0.875348 -0.235963 0.422003
+ txt003
+STRI
+ V0 1.40492 -0.825153 2.13785 V1 1.15293 -1.15293 2.13785 V2 1.23593 -1.23593 1.87778
+ N0 0.783966 -0.4547 0.422664 N1 0.640758 -0.640758 0.422917 N2 0.649156 -0.649156 0.396474
+ txt003
+STRI
+ V0 1.23593 -1.23593 1.87778 V1 1.50606 -0.884554 1.87778 V2 1.40492 -0.825153 2.13785
+ N0 0.649156 -0.649156 0.396474 N1 0.794229 -0.460653 0.39623 N2 0.783966 -0.4547 0.422664
+ txt003
+STRI
+ V0 1.15293 -1.15293 2.13785 V1 0.825153 -1.40492 2.13785 V2 0.884554 -1.50606 1.87778
+ N0 0.640758 -0.640758 0.422917 N1 0.4547 -0.783966 0.422664 N2 0.460653 -0.794229 0.39623
+ txt003
+STRI
+ V0 0.884554 -1.50606 1.87778 V1 1.23593 -1.23593 1.87778 V2 1.15293 -1.15293 2.13785
+ N0 0.460653 -0.794229 0.39623 N1 0.649156 -0.649156 0.396474 N2 0.640758 -0.640758 0.422917
+ txt003
+STRI
+ V0 0.825153 -1.40492 2.13785 V1 0.436032 -1.56671 2.13785 V2 0.467421 -1.67949 1.87778
+ N0 0.4547 -0.783966 0.422664 N1 0.235963 -0.875348 0.422003 N2 0.239043 -0.886771 0.395595
+ txt003
+STRI
+ V0 0.467421 -1.67949 1.87778 V1 0.884554 -1.50606 1.87778 V2 0.825153 -1.40492 2.13785
+ N0 0.239043 -0.886771 0.395595 N1 0.460653 -0.794229 0.39623 N2 0.4547 -0.783966 0.422664
+ txt003
+STRI
+ V0 0.436032 -1.56671 2.13785 V1 2.22045e-16 -1.62384 2.13785 V2 0 -1.74074 1.87778
+ N0 0.235963 -0.875348 0.422003 N1 -2.05843e-16 -0.906828 0.4215 N2 -1.79998e-16 -0.918633 0.395111
+ txt003
+STRI
+ V0 0 -1.74074 1.87778 V1 0.467421 -1.67949 1.87778 V2 0.436032 -1.56671 2.13785
+ N0 -1.79998e-16 -0.918633 0.395111 N1 0.239043 -0.886771 0.395595 N2 0.235963 -0.875348 0.422003
+ txt003
+STRI
+ V0 1.74074 0 1.87778 V1 1.67949 -0.467421 1.87778 V2 1.77888 -0.495081 1.62188
+ N0 0.918633 0 0.395111 N1 0.886771 -0.239043 0.395595 N2 0.90527 -0.244029 0.347757
+ txt003
+STRI
+ V0 1.77888 -0.495081 1.62188 V1 1.84375 0 1.62188 V2 1.74074 0 1.87778
+ N0 0.90527 -0.244029 0.347757 N1 0.937749 0 0.347314 N2 0.918633 0 0.395111
+ txt003
+STRI
+ V0 1.67949 -0.467421 1.87778 V1 1.50606 -0.884554 1.87778 V2 1.59519 -0.936898 1.62188
+ N0 0.886771 -0.239043 0.395595 N1 0.794229 -0.460653 0.39623 N2 0.810853 -0.470295 0.34834
+ txt003
+STRI
+ V0 1.59519 -0.936898 1.62188 V1 1.77888 -0.495081 1.62188 V2 1.67949 -0.467421 1.87778
+ N0 0.810853 -0.470295 0.34834 N1 0.90527 -0.244029 0.347757 N2 0.886771 -0.239043 0.395595
+ txt003
+STRI
+ V0 1.50606 -0.884554 1.87778 V1 1.23593 -1.23593 1.87778 V2 1.30906 -1.30906 1.62188
+ N0 0.794229 -0.460653 0.39623 N1 0.649156 -0.649156 0.396474 N2 0.662761 -0.662761 0.348563
+ txt003
+STRI
+ V0 1.30906 -1.30906 1.62188 V1 1.59519 -0.936898 1.62188 V2 1.50606 -0.884554 1.87778
+ N0 0.662761 -0.662761 0.348563 N1 0.810853 -0.470295 0.34834 N2 0.794229 -0.460653 0.39623
+ txt003
+STRI
+ V0 1.23593 -1.23593 1.87778 V1 0.884554 -1.50606 1.87778 V2 0.936898 -1.59519 1.62187
+ N0 0.649156 -0.649156 0.396474 N1 0.460653 -0.794229 0.39623 N2 0.470295 -0.810853 0.34834
+ txt003
+STRI
+ V0 0.936898 -1.59519 1.62187 V1 1.30906 -1.30906 1.62188 V2 1.23593 -1.23593 1.87778
+ N0 0.470295 -0.810853 0.34834 N1 0.662761 -0.662761 0.348563 N2 0.649156 -0.649156 0.396474
+ txt003
+STRI
+ V0 0.884554 -1.50606 1.87778 V1 0.467421 -1.67949 1.87778 V2 0.495081 -1.77888 1.62187
+ N0 0.460653 -0.794229 0.39623 N1 0.239043 -0.886771 0.395595 N2 0.244029 -0.90527 0.347757
+ txt003
+STRI
+ V0 0.495081 -1.77888 1.62187 V1 0.936898 -1.59519 1.62187 V2 0.884554 -1.50606 1.87778
+ N0 0.244029 -0.90527 0.347757 N1 0.470295 -0.810853 0.34834 N2 0.460653 -0.794229 0.39623
+ txt003
+STRI
+ V0 0.467421 -1.67949 1.87778 V1 0 -1.74074 1.87778 V2 0 -1.84375 1.62187
+ N0 0.239043 -0.886771 0.395595 N1 -1.79998e-16 -0.918633 0.395111 N2 -1.49384e-16 -0.937749 0.347314
+ txt003
+STRI
+ V0 0 -1.84375 1.62187 V1 0.495081 -1.77888 1.62187 V2 0.467421 -1.67949 1.87778
+ N0 -1.49384e-16 -0.937749 0.347314 N1 0.244029 -0.90527 0.347757 N2 0.239043 -0.886771 0.395595
+ txt003
+STRI
+ V0 1.84375 0 1.62188 V1 1.77888 -0.495081 1.62188 V2 1.85816 -0.517147 1.37222
+ N0 0.937749 0 0.347314 N1 0.90527 -0.244029 0.347757 N2 0.929073 -0.250446 0.272213
+ txt003
+STRI
+ V0 1.85816 -0.517147 1.37222 V1 1.92593 0 1.37222 V2 1.84375 0 1.62188
+ N0 0.929073 -0.250446 0.272213 N1 0.96234 0 0.271848 N2 0.937749 0 0.347314
+ txt003
+STRI
+ V0 1.77888 -0.495081 1.62188 V1 1.59519 -0.936898 1.62188 V2 1.66628 -0.978656 1.37222
+ N0 0.90527 -0.244029 0.347757 N1 0.810853 -0.470295 0.34834 N2 0.832247 -0.482704 0.272693
+ txt003
+STRI
+ V0 1.66628 -0.978656 1.37222 V1 1.85816 -0.517147 1.37222 V2 1.77888 -0.495081 1.62188
+ N0 0.832247 -0.482704 0.272693 N1 0.929073 -0.250446 0.272213 N2 0.90527 -0.244029 0.347757
+ txt003
+STRI
+ V0 1.59519 -0.936898 1.62188 V1 1.30906 -1.30906 1.62188 V2 1.36741 -1.36741 1.37222
+ N0 0.810853 -0.470295 0.34834 N1 0.662761 -0.662761 0.348563 N2 0.680271 -0.680271 0.272877
+ txt003
+STRI
+ V0 1.36741 -1.36741 1.37222 V1 1.66628 -0.978656 1.37222 V2 1.59519 -0.936898 1.62188
+ N0 0.680271 -0.680271 0.272877 N1 0.832247 -0.482704 0.272693 N2 0.810853 -0.470295 0.34834
+ txt003
+STRI
+ V0 1.30906 -1.30906 1.62188 V1 0.936898 -1.59519 1.62187 V2 0.978656 -1.66628 1.37222
+ N0 0.662761 -0.662761 0.348563 N1 0.470295 -0.810853 0.34834 N2 0.482704 -0.832247 0.272693
+ txt003
+STRI
+ V0 0.978656 -1.66628 1.37222 V1 1.36741 -1.36741 1.37222 V2 1.30906 -1.30906 1.62188
+ N0 0.482704 -0.832247 0.272693 N1 0.680271 -0.680271 0.272877 N2 0.662761 -0.662761 0.348563
+ txt003
+STRI
+ V0 0.936898 -1.59519 1.62187 V1 0.495081 -1.77888 1.62187 V2 0.517147 -1.85816 1.37222
+ N0 0.470295 -0.810853 0.34834 N1 0.244029 -0.90527 0.347757 N2 0.250446 -0.929073 0.272213
+ txt003
+STRI
+ V0 0.517147 -1.85816 1.37222 V1 0.978656 -1.66628 1.37222 V2 0.936898 -1.59519 1.62187
+ N0 0.250446 -0.929073 0.272213 N1 0.482704 -0.832247 0.272693 N2 0.470295 -0.810853 0.34834
+ txt003
+STRI
+ V0 0.495081 -1.77888 1.62187 V1 0 -1.84375 1.62187 V2 2.22045e-16 -1.92593 1.37222
+ N0 0.244029 -0.90527 0.347757 N1 -1.49384e-16 -0.937749 0.347314 N2 -1.11936e-16 -0.96234 0.271848
+ txt003
+STRI
+ V0 2.22045e-16 -1.92593 1.37222 V1 0.517147 -1.85816 1.37222 V2 0.495081 -1.77888 1.62187
+ N0 -1.11936e-16 -0.96234 0.271848 N1 0.250446 -0.929073 0.272213 N2 0.244029 -0.90527 0.347757
+ txt003
+STRI
+ V0 1.92593 0 1.37222 V1 1.85816 -0.517147 1.37222 V2 1.91065 -0.531754 1.1309
+ N0 0.96234 0 0.271848 N1 0.929073 -0.250446 0.272213 N2 0.953145 -0.256935 0.159686
+ txt003
+STRI
+ V0 1.91065 -0.531754 1.1309 V1 1.98032 0 1.1309 V2 1.92593 0 1.37222
+ N0 0.953145 -0.256935 0.159686 N1 0.987204 0 0.15946 N2 0.96234 0 0.271848
+ txt003
+STRI
+ V0 1.85816 -0.517147 1.37222 V1 1.66628 -0.978656 1.37222 V2 1.71335 -1.0063 1.1309
+ N0 0.929073 -0.250446 0.272213 N1 0.832247 -0.482704 0.272693 N2 0.853889 -0.495256 0.159982
+ txt003
+STRI
+ V0 1.71335 -1.0063 1.1309 V1 1.91065 -0.531754 1.1309 V2 1.85816 -0.517147 1.37222
+ N0 0.853889 -0.495256 0.159982 N1 0.953145 -0.256935 0.159686 N2 0.929073 -0.250446 0.272213
+ txt003
+STRI
+ V0 1.66628 -0.978656 1.37222 V1 1.36741 -1.36741 1.37222 V2 1.40603 -1.40603 1.1309
+ N0 0.832247 -0.482704 0.272693 N1 0.680271 -0.680271 0.272877 N2 0.697986 -0.697986 0.160096
+ txt003
+STRI
+ V0 1.40603 -1.40603 1.1309 V1 1.71335 -1.0063 1.1309 V2 1.66628 -0.978656 1.37222
+ N0 0.697986 -0.697986 0.160096 N1 0.853889 -0.495256 0.159982 N2 0.832247 -0.482704 0.272693
+ txt003
+STRI
+ V0 1.36741 -1.36741 1.37222 V1 0.978656 -1.66628 1.37222 V2 1.0063 -1.71335 1.1309
+ N0 0.680271 -0.680271 0.272877 N1 0.482704 -0.832247 0.272693 N2 0.495256 -0.853889 0.159982
+ txt003
+STRI
+ V0 1.0063 -1.71335 1.1309 V1 1.40603 -1.40603 1.1309 V2 1.36741 -1.36741 1.37222
+ N0 0.495256 -0.853889 0.159982 N1 0.697986 -0.697986 0.160096 N2 0.680271 -0.680271 0.272877
+ txt003
+STRI
+ V0 0.978656 -1.66628 1.37222 V1 0.517147 -1.85816 1.37222 V2 0.531754 -1.91065 1.1309
+ N0 0.482704 -0.832247 0.272693 N1 0.250446 -0.929073 0.272213 N2 0.256935 -0.953145 0.159686
+ txt003
+STRI
+ V0 0.531754 -1.91065 1.1309 V1 1.0063 -1.71335 1.1309 V2 0.978656 -1.66628 1.37222
+ N0 0.256935 -0.953145 0.159686 N1 0.495256 -0.853889 0.159982 N2 0.482704 -0.832247 0.272693
+ txt003
+STRI
+ V0 0.517147 -1.85816 1.37222 V1 2.22045e-16 -1.92593 1.37222 V2 -2.22045e-16 -1.98032 1.1309
+ N0 0.250446 -0.929073 0.272213 N1 -1.11936e-16 -0.96234 0.271848 N2 -6.38555e-17 -0.987204 0.15946
+ txt003
+STRI
+ V0 -2.22045e-16 -1.98032 1.1309 V1 0.531754 -1.91065 1.1309 V2 0.517147 -1.85816 1.37222
+ N0 -6.38555e-17 -0.987204 0.15946 N1 0.256935 -0.953145 0.159686 N2 0.250446 -0.929073 0.272213
+ txt003
+STRI
+ V0 1.98032 0 1.1309 V1 1.91065 -0.531754 1.1309 V2 1.92963 -0.537037 0.9
+ N0 0.987204 0 0.15946 N1 0.953145 -0.256935 0.159686 N2 0.965535 -0.260275 5.17854e-17
+ txt003
+STRI
+ V0 1.92963 -0.537037 0.9 V1 2 0 0.9 V2 1.98032 0 1.1309
+ N0 0.965535 -0.260275 5.17854e-17 N1 1 0 0 N2 0.987204 0 0.15946
+ txt003
+STRI
+ V0 1.91065 -0.531754 1.1309 V1 1.71335 -1.0063 1.1309 V2 1.73037 -1.0163 0.9
+ N0 0.953145 -0.256935 0.159686 N1 0.853889 -0.495256 0.159982 N2 0.865031 -0.501718 1.36587e-16
+ txt003
+STRI
+ V0 1.73037 -1.0163 0.9 V1 1.92963 -0.537037 0.9 V2 1.91065 -0.531754 1.1309
+ N0 0.865031 -0.501718 1.36587e-16 N1 0.965535 -0.260275 5.17854e-17 N2 0.953145 -0.256935 0.159686
+ txt003
+STRI
+ V0 1.71335 -1.0063 1.1309 V1 1.40603 -1.40603 1.1309 V2 1.42 -1.42 0.9
+ N0 0.853889 -0.495256 0.159982 N1 0.697986 -0.697986 0.160096 N2 0.707107 -0.707107 1.74455e-16
+ txt003
+STRI
+ V0 1.42 -1.42 0.9 V1 1.73037 -1.0163 0.9 V2 1.71335 -1.0063 1.1309
+ N0 0.707107 -0.707107 1.74455e-16 N1 0.865031 -0.501718 1.36587e-16 N2 0.853889 -0.495256 0.159982
+ txt003
+STRI
+ V0 1.40603 -1.40603 1.1309 V1 1.0063 -1.71335 1.1309 V2 1.0163 -1.73037 0.9
+ N0 0.697986 -0.697986 0.160096 N1 0.495256 -0.853889 0.159982 N2 0.501718 -0.865031 1.36587e-16
+ txt003
+STRI
+ V0 1.0163 -1.73037 0.9 V1 1.42 -1.42 0.9 V2 1.40603 -1.40603 1.1309
+ N0 0.501718 -0.865031 1.36587e-16 N1 0.707107 -0.707107 1.74455e-16 N2 0.697986 -0.697986 0.160096
+ txt003
+STRI
+ V0 1.0063 -1.71335 1.1309 V1 0.531754 -1.91065 1.1309 V2 0.537037 -1.92963 0.9
+ N0 0.495256 -0.853889 0.159982 N1 0.256935 -0.953145 0.159686 N2 0.260275 -0.965535 5.17854e-17
+ txt003
+STRI
+ V0 0.537037 -1.92963 0.9 V1 1.0163 -1.73037 0.9 V2 1.0063 -1.71335 1.1309
+ N0 0.260275 -0.965535 5.17854e-17 N1 0.501718 -0.865031 1.36587e-16 N2 0.495256 -0.853889 0.159982
+ txt003
+STRI
+ V0 0.531754 -1.91065 1.1309 V1 -2.22045e-16 -1.98032 1.1309 V2 0 -2 0.9
+ N0 0.256935 -0.953145 0.159686 N1 -6.38555e-17 -0.987204 0.15946 N2 0 -1 -0
+ txt003
+STRI
+ V0 0 -2 0.9 V1 0.537037 -1.92963 0.9 V2 0.531754 -1.91065 1.1309
+ N0 0 -1 -0 N1 0.260275 -0.965535 5.17854e-17 N2 0.256935 -0.953145 0.159686
+ txt003
+STRI
+ V0 0 -1.5 2.4 V1 -0.402778 -1.44722 2.4 V2 -0.436032 -1.56671 2.13785
+ N0 0 -0.902861 0.429934 N1 -0.234929 -0.871509 0.430442 N2 -0.235963 -0.875348 0.422003
+ txt003
+STRI
+ V0 -0.436032 -1.56671 2.13785 V1 0 -1.62384 2.13785 V2 0 -1.5 2.4
+ N0 -0.235963 -0.875348 0.422003 N1 0 -0.906828 0.4215 N2 0 -0.902861 0.429934
+ txt003
+STRI
+ V0 -0.402778 -1.44722 2.4 V1 -0.762222 -1.29778 2.4 V2 -0.825153 -1.40492 2.13785
+ N0 -0.234929 -0.871509 0.430442 N1 -0.4527 -0.780517 0.43111 N2 -0.4547 -0.783966 0.422664
+ txt003
+STRI
+ V0 -0.825153 -1.40492 2.13785 V1 -0.436032 -1.56671 2.13785 V2 -0.402778 -1.44722 2.4
+ N0 -0.4547 -0.783966 0.422664 N1 -0.235963 -0.875348 0.422003 N2 -0.234929 -0.871509 0.430442
+ txt003
+STRI
+ V0 -0.762222 -1.29778 2.4 V1 -1.065 -1.065 2.4 V2 -1.15293 -1.15293 2.13785
+ N0 -0.4527 -0.780517 0.43111 N1 -0.637936 -0.637936 0.431366 N2 -0.640758 -0.640758 0.422917
+ txt003
+STRI
+ V0 -1.15293 -1.15293 2.13785 V1 -0.825153 -1.40492 2.13785 V2 -0.762222 -1.29778 2.4
+ N0 -0.640758 -0.640758 0.422917 N1 -0.4547 -0.783966 0.422664 N2 -0.4527 -0.780517 0.43111
+ txt003
+STRI
+ V0 -1.065 -1.065 2.4 V1 -1.29778 -0.762222 2.4 V2 -1.40492 -0.825153 2.13785
+ N0 -0.637936 -0.637936 0.431366 N1 -0.780517 -0.4527 0.43111 N2 -0.783966 -0.4547 0.422664
+ txt003
+STRI
+ V0 -1.40492 -0.825153 2.13785 V1 -1.15293 -1.15293 2.13785 V2 -1.065 -1.065 2.4
+ N0 -0.783966 -0.4547 0.422664 N1 -0.640758 -0.640758 0.422917 N2 -0.637936 -0.637936 0.431366
+ txt003
+STRI
+ V0 -1.29778 -0.762222 2.4 V1 -1.44722 -0.402778 2.4 V2 -1.56671 -0.436032 2.13785
+ N0 -0.780517 -0.4527 0.43111 N1 -0.871509 -0.234929 0.430442 N2 -0.875348 -0.235963 0.422003
+ txt003
+STRI
+ V0 -1.56671 -0.436032 2.13785 V1 -1.40492 -0.825153 2.13785 V2 -1.29778 -0.762222 2.4
+ N0 -0.875348 -0.235963 0.422003 N1 -0.783966 -0.4547 0.422664 N2 -0.780517 -0.4527 0.43111
+ txt003
+STRI
+ V0 -1.44722 -0.402778 2.4 V1 -1.5 0 2.4 V2 -1.62384 -2.22045e-16 2.13785
+ N0 -0.871509 -0.234929 0.430442 N1 -0.902861 2.27296e-16 0.429934 N2 -0.906828 2.05843e-16 0.4215
+ txt003
+STRI
+ V0 -1.62384 -2.22045e-16 2.13785 V1 -1.56671 -0.436032 2.13785 V2 -1.44722 -0.402778 2.4
+ N0 -0.906828 2.05843e-16 0.4215 N1 -0.875348 -0.235963 0.422003 N2 -0.871509 -0.234929 0.430442
+ txt003
+STRI
+ V0 0 -1.62384 2.13785 V1 -0.436032 -1.56671 2.13785 V2 -0.467421 -1.67949 1.87778
+ N0 0 -0.906828 0.4215 N1 -0.235963 -0.875348 0.422003 N2 -0.239043 -0.886771 0.395595
+ txt003
+STRI
+ V0 -0.467421 -1.67949 1.87778 V1 0 -1.74074 1.87778 V2 0 -1.62384 2.13785
+ N0 -0.239043 -0.886771 0.395595 N1 0 -0.918633 0.395111 N2 0 -0.906828 0.4215
+ txt003
+STRI
+ V0 -0.436032 -1.56671 2.13785 V1 -0.825153 -1.40492 2.13785 V2 -0.884554 -1.50606 1.87778
+ N0 -0.235963 -0.875348 0.422003 N1 -0.4547 -0.783966 0.422664 N2 -0.460653 -0.794229 0.39623
+ txt003
+STRI
+ V0 -0.884554 -1.50606 1.87778 V1 -0.467421 -1.67949 1.87778 V2 -0.436032 -1.56671 2.13785
+ N0 -0.460653 -0.794229 0.39623 N1 -0.239043 -0.886771 0.395595 N2 -0.235963 -0.875348 0.422003
+ txt003
+STRI
+ V0 -0.825153 -1.40492 2.13785 V1 -1.15293 -1.15293 2.13785 V2 -1.23593 -1.23593 1.87778
+ N0 -0.4547 -0.783966 0.422664 N1 -0.640758 -0.640758 0.422917 N2 -0.649156 -0.649156 0.396474
+ txt003
+STRI
+ V0 -1.23593 -1.23593 1.87778 V1 -0.884554 -1.50606 1.87778 V2 -0.825153 -1.40492 2.13785
+ N0 -0.649156 -0.649156 0.396474 N1 -0.460653 -0.794229 0.39623 N2 -0.4547 -0.783966 0.422664
+ txt003
+STRI
+ V0 -1.15293 -1.15293 2.13785 V1 -1.40492 -0.825153 2.13785 V2 -1.50606 -0.884554 1.87778
+ N0 -0.640758 -0.640758 0.422917 N1 -0.783966 -0.4547 0.422664 N2 -0.794229 -0.460653 0.39623
+ txt003
+STRI
+ V0 -1.50606 -0.884554 1.87778 V1 -1.23593 -1.23593 1.87778 V2 -1.15293 -1.15293 2.13785
+ N0 -0.794229 -0.460653 0.39623 N1 -0.649156 -0.649156 0.396474 N2 -0.640758 -0.640758 0.422917
+ txt003
+STRI
+ V0 -1.40492 -0.825153 2.13785 V1 -1.56671 -0.436032 2.13785 V2 -1.67949 -0.467421 1.87778
+ N0 -0.783966 -0.4547 0.422664 N1 -0.875348 -0.235963 0.422003 N2 -0.886771 -0.239043 0.395595
+ txt003
+STRI
+ V0 -1.67949 -0.467421 1.87778 V1 -1.50606 -0.884554 1.87778 V2 -1.40492 -0.825153 2.13785
+ N0 -0.886771 -0.239043 0.395595 N1 -0.794229 -0.460653 0.39623 N2 -0.783966 -0.4547 0.422664
+ txt003
+STRI
+ V0 -1.56671 -0.436032 2.13785 V1 -1.62384 -2.22045e-16 2.13785 V2 -1.74074 0 1.87778
+ N0 -0.875348 -0.235963 0.422003 N1 -0.906828 2.05843e-16 0.4215 N2 -0.918633 1.79998e-16 0.395111
+ txt003
+STRI
+ V0 -1.74074 0 1.87778 V1 -1.67949 -0.467421 1.87778 V2 -1.56671 -0.436032 2.13785
+ N0 -0.918633 1.79998e-16 0.395111 N1 -0.886771 -0.239043 0.395595 N2 -0.875348 -0.235963 0.422003
+ txt003
+STRI
+ V0 0 -1.74074 1.87778 V1 -0.467421 -1.67949 1.87778 V2 -0.495081 -1.77888 1.62188
+ N0 0 -0.918633 0.395111 N1 -0.239043 -0.886771 0.395595 N2 -0.244029 -0.90527 0.347757
+ txt003
+STRI
+ V0 -0.495081 -1.77888 1.62188 V1 0 -1.84375 1.62188 V2 0 -1.74074 1.87778
+ N0 -0.244029 -0.90527 0.347757 N1 0 -0.937749 0.347314 N2 0 -0.918633 0.395111
+ txt003
+STRI
+ V0 -0.467421 -1.67949 1.87778 V1 -0.884554 -1.50606 1.87778 V2 -0.936898 -1.59519 1.62188
+ N0 -0.239043 -0.886771 0.395595 N1 -0.460653 -0.794229 0.39623 N2 -0.470295 -0.810853 0.34834
+ txt003
+STRI
+ V0 -0.936898 -1.59519 1.62188 V1 -0.495081 -1.77888 1.62188 V2 -0.467421 -1.67949 1.87778
+ N0 -0.470295 -0.810853 0.34834 N1 -0.244029 -0.90527 0.347757 N2 -0.239043 -0.886771 0.395595
+ txt003
+STRI
+ V0 -0.884554 -1.50606 1.87778 V1 -1.23593 -1.23593 1.87778 V2 -1.30906 -1.30906 1.62188
+ N0 -0.460653 -0.794229 0.39623 N1 -0.649156 -0.649156 0.396474 N2 -0.662761 -0.662761 0.348563
+ txt003
+STRI
+ V0 -1.30906 -1.30906 1.62188 V1 -0.936898 -1.59519 1.62188 V2 -0.884554 -1.50606 1.87778
+ N0 -0.662761 -0.662761 0.348563 N1 -0.470295 -0.810853 0.34834 N2 -0.460653 -0.794229 0.39623
+ txt003
+STRI
+ V0 -1.23593 -1.23593 1.87778 V1 -1.50606 -0.884554 1.87778 V2 -1.59519 -0.936898 1.62187
+ N0 -0.649156 -0.649156 0.396474 N1 -0.794229 -0.460653 0.39623 N2 -0.810853 -0.470295 0.34834
+ txt003
+STRI
+ V0 -1.59519 -0.936898 1.62187 V1 -1.30906 -1.30906 1.62188 V2 -1.23593 -1.23593 1.87778
+ N0 -0.810853 -0.470295 0.34834 N1 -0.662761 -0.662761 0.348563 N2 -0.649156 -0.649156 0.396474
+ txt003
+STRI
+ V0 -1.50606 -0.884554 1.87778 V1 -1.67949 -0.467421 1.87778 V2 -1.77888 -0.495081 1.62187
+ N0 -0.794229 -0.460653 0.39623 N1 -0.886771 -0.239043 0.395595 N2 -0.90527 -0.244029 0.347757
+ txt003
+STRI
+ V0 -1.77888 -0.495081 1.62187 V1 -1.59519 -0.936898 1.62187 V2 -1.50606 -0.884554 1.87778
+ N0 -0.90527 -0.244029 0.347757 N1 -0.810853 -0.470295 0.34834 N2 -0.794229 -0.460653 0.39623
+ txt003
+STRI
+ V0 -1.67949 -0.467421 1.87778 V1 -1.74074 0 1.87778 V2 -1.84375 0 1.62187
+ N0 -0.886771 -0.239043 0.395595 N1 -0.918633 1.79998e-16 0.395111 N2 -0.937749 1.49384e-16 0.347314
+ txt003
+STRI
+ V0 -1.84375 0 1.62187 V1 -1.77888 -0.495081 1.62187 V2 -1.67949 -0.467421 1.87778
+ N0 -0.937749 1.49384e-16 0.347314 N1 -0.90527 -0.244029 0.347757 N2 -0.886771 -0.239043 0.395595
+ txt003
+STRI
+ V0 0 -1.84375 1.62188 V1 -0.495081 -1.77888 1.62188 V2 -0.517147 -1.85816 1.37222
+ N0 0 -0.937749 0.347314 N1 -0.244029 -0.90527 0.347757 N2 -0.250446 -0.929073 0.272213
+ txt003
+STRI
+ V0 -0.517147 -1.85816 1.37222 V1 0 -1.92593 1.37222 V2 0 -1.84375 1.62188
+ N0 -0.250446 -0.929073 0.272213 N1 0 -0.96234 0.271848 N2 0 -0.937749 0.347314
+ txt003
+STRI
+ V0 -0.495081 -1.77888 1.62188 V1 -0.936898 -1.59519 1.62188 V2 -0.978656 -1.66628 1.37222
+ N0 -0.244029 -0.90527 0.347757 N1 -0.470295 -0.810853 0.34834 N2 -0.482704 -0.832247 0.272693
+ txt003
+STRI
+ V0 -0.978656 -1.66628 1.37222 V1 -0.517147 -1.85816 1.37222 V2 -0.495081 -1.77888 1.62188
+ N0 -0.482704 -0.832247 0.272693 N1 -0.250446 -0.929073 0.272213 N2 -0.244029 -0.90527 0.347757
+ txt003
+STRI
+ V0 -0.936898 -1.59519 1.62188 V1 -1.30906 -1.30906 1.62188 V2 -1.36741 -1.36741 1.37222
+ N0 -0.470295 -0.810853 0.34834 N1 -0.662761 -0.662761 0.348563 N2 -0.680271 -0.680271 0.272877
+ txt003
+STRI
+ V0 -1.36741 -1.36741 1.37222 V1 -0.978656 -1.66628 1.37222 V2 -0.936898 -1.59519 1.62188
+ N0 -0.680271 -0.680271 0.272877 N1 -0.482704 -0.832247 0.272693 N2 -0.470295 -0.810853 0.34834
+ txt003
+STRI
+ V0 -1.30906 -1.30906 1.62188 V1 -1.59519 -0.936898 1.62187 V2 -1.66628 -0.978656 1.37222
+ N0 -0.662761 -0.662761 0.348563 N1 -0.810853 -0.470295 0.34834 N2 -0.832247 -0.482704 0.272693
+ txt003
+STRI
+ V0 -1.66628 -0.978656 1.37222 V1 -1.36741 -1.36741 1.37222 V2 -1.30906 -1.30906 1.62188
+ N0 -0.832247 -0.482704 0.272693 N1 -0.680271 -0.680271 0.272877 N2 -0.662761 -0.662761 0.348563
+ txt003
+STRI
+ V0 -1.59519 -0.936898 1.62187 V1 -1.77888 -0.495081 1.62187 V2 -1.85816 -0.517147 1.37222
+ N0 -0.810853 -0.470295 0.34834 N1 -0.90527 -0.244029 0.347757 N2 -0.929073 -0.250446 0.272213
+ txt003
+STRI
+ V0 -1.85816 -0.517147 1.37222 V1 -1.66628 -0.978656 1.37222 V2 -1.59519 -0.936898 1.62187
+ N0 -0.929073 -0.250446 0.272213 N1 -0.832247 -0.482704 0.272693 N2 -0.810853 -0.470295 0.34834
+ txt003
+STRI
+ V0 -1.77888 -0.495081 1.62187 V1 -1.84375 0 1.62187 V2 -1.92593 -2.22045e-16 1.37222
+ N0 -0.90527 -0.244029 0.347757 N1 -0.937749 1.49384e-16 0.347314 N2 -0.96234 1.11936e-16 0.271848
+ txt003
+STRI
+ V0 -1.92593 -2.22045e-16 1.37222 V1 -1.85816 -0.517147 1.37222 V2 -1.77888 -0.495081 1.62187
+ N0 -0.96234 1.11936e-16 0.271848 N1 -0.929073 -0.250446 0.272213 N2 -0.90527 -0.244029 0.347757
+ txt003
+STRI
+ V0 0 -1.92593 1.37222 V1 -0.517147 -1.85816 1.37222 V2 -0.531754 -1.91065 1.1309
+ N0 0 -0.96234 0.271848 N1 -0.250446 -0.929073 0.272213 N2 -0.256935 -0.953145 0.159686
+ txt003
+STRI
+ V0 -0.531754 -1.91065 1.1309 V1 0 -1.98032 1.1309 V2 0 -1.92593 1.37222
+ N0 -0.256935 -0.953145 0.159686 N1 0 -0.987204 0.15946 N2 0 -0.96234 0.271848
+ txt003
+STRI
+ V0 -0.517147 -1.85816 1.37222 V1 -0.978656 -1.66628 1.37222 V2 -1.0063 -1.71335 1.1309
+ N0 -0.250446 -0.929073 0.272213 N1 -0.482704 -0.832247 0.272693 N2 -0.495256 -0.853889 0.159982
+ txt003
+STRI
+ V0 -1.0063 -1.71335 1.1309 V1 -0.531754 -1.91065 1.1309 V2 -0.517147 -1.85816 1.37222
+ N0 -0.495256 -0.853889 0.159982 N1 -0.256935 -0.953145 0.159686 N2 -0.250446 -0.929073 0.272213
+ txt003
+STRI
+ V0 -0.978656 -1.66628 1.37222 V1 -1.36741 -1.36741 1.37222 V2 -1.40603 -1.40603 1.1309
+ N0 -0.482704 -0.832247 0.272693 N1 -0.680271 -0.680271 0.272877 N2 -0.697986 -0.697986 0.160096
+ txt003
+STRI
+ V0 -1.40603 -1.40603 1.1309 V1 -1.0063 -1.71335 1.1309 V2 -0.978656 -1.66628 1.37222
+ N0 -0.697986 -0.697986 0.160096 N1 -0.495256 -0.853889 0.159982 N2 -0.482704 -0.832247 0.272693
+ txt003
+STRI
+ V0 -1.36741 -1.36741 1.37222 V1 -1.66628 -0.978656 1.37222 V2 -1.71335 -1.0063 1.1309
+ N0 -0.680271 -0.680271 0.272877 N1 -0.832247 -0.482704 0.272693 N2 -0.853889 -0.495256 0.159982
+ txt003
+STRI
+ V0 -1.71335 -1.0063 1.1309 V1 -1.40603 -1.40603 1.1309 V2 -1.36741 -1.36741 1.37222
+ N0 -0.853889 -0.495256 0.159982 N1 -0.697986 -0.697986 0.160096 N2 -0.680271 -0.680271 0.272877
+ txt003
+STRI
+ V0 -1.66628 -0.978656 1.37222 V1 -1.85816 -0.517147 1.37222 V2 -1.91065 -0.531754 1.1309
+ N0 -0.832247 -0.482704 0.272693 N1 -0.929073 -0.250446 0.272213 N2 -0.953145 -0.256935 0.159686
+ txt003
+STRI
+ V0 -1.91065 -0.531754 1.1309 V1 -1.71335 -1.0063 1.1309 V2 -1.66628 -0.978656 1.37222
+ N0 -0.953145 -0.256935 0.159686 N1 -0.853889 -0.495256 0.159982 N2 -0.832247 -0.482704 0.272693
+ txt003
+STRI
+ V0 -1.85816 -0.517147 1.37222 V1 -1.92593 -2.22045e-16 1.37222 V2 -1.98032 2.22045e-16 1.1309
+ N0 -0.929073 -0.250446 0.272213 N1 -0.96234 1.11936e-16 0.271848 N2 -0.987204 6.38555e-17 0.15946
+ txt003
+STRI
+ V0 -1.98032 2.22045e-16 1.1309 V1 -1.91065 -0.531754 1.1309 V2 -1.85816 -0.517147 1.37222
+ N0 -0.987204 6.38555e-17 0.15946 N1 -0.953145 -0.256935 0.159686 N2 -0.929073 -0.250446 0.272213
+ txt003
+STRI
+ V0 0 -1.98032 1.1309 V1 -0.531754 -1.91065 1.1309 V2 -0.537037 -1.92963 0.9
+ N0 0 -0.987204 0.15946 N1 -0.256935 -0.953145 0.159686 N2 -0.260275 -0.965535 5.17854e-17
+ txt003
+STRI
+ V0 -0.537037 -1.92963 0.9 V1 0 -2 0.9 V2 0 -1.98032 1.1309
+ N0 -0.260275 -0.965535 5.17854e-17 N1 -0 -1 -0 N2 0 -0.987204 0.15946
+ txt003
+STRI
+ V0 -0.531754 -1.91065 1.1309 V1 -1.0063 -1.71335 1.1309 V2 -1.0163 -1.73037 0.9
+ N0 -0.256935 -0.953145 0.159686 N1 -0.495256 -0.853889 0.159982 N2 -0.501718 -0.865031 1.36587e-16
+ txt003
+STRI
+ V0 -1.0163 -1.73037 0.9 V1 -0.537037 -1.92963 0.9 V2 -0.531754 -1.91065 1.1309
+ N0 -0.501718 -0.865031 1.36587e-16 N1 -0.260275 -0.965535 5.17854e-17 N2 -0.256935 -0.953145 0.159686
+ txt003
+STRI
+ V0 -1.0063 -1.71335 1.1309 V1 -1.40603 -1.40603 1.1309 V2 -1.42 -1.42 0.9
+ N0 -0.495256 -0.853889 0.159982 N1 -0.697986 -0.697986 0.160096 N2 -0.707107 -0.707107 1.74455e-16
+ txt003
+STRI
+ V0 -1.42 -1.42 0.9 V1 -1.0163 -1.73037 0.9 V2 -1.0063 -1.71335 1.1309
+ N0 -0.707107 -0.707107 1.74455e-16 N1 -0.501718 -0.865031 1.36587e-16 N2 -0.495256 -0.853889 0.159982
+ txt003
+STRI
+ V0 -1.40603 -1.40603 1.1309 V1 -1.71335 -1.0063 1.1309 V2 -1.73037 -1.0163 0.9
+ N0 -0.697986 -0.697986 0.160096 N1 -0.853889 -0.495256 0.159982 N2 -0.865031 -0.501718 1.36587e-16
+ txt003
+STRI
+ V0 -1.73037 -1.0163 0.9 V1 -1.42 -1.42 0.9 V2 -1.40603 -1.40603 1.1309
+ N0 -0.865031 -0.501718 1.36587e-16 N1 -0.707107 -0.707107 1.74455e-16 N2 -0.697986 -0.697986 0.160096
+ txt003
+STRI
+ V0 -1.71335 -1.0063 1.1309 V1 -1.91065 -0.531754 1.1309 V2 -1.92963 -0.537037 0.9
+ N0 -0.853889 -0.495256 0.159982 N1 -0.953145 -0.256935 0.159686 N2 -0.965535 -0.260275 5.17854e-17
+ txt003
+STRI
+ V0 -1.92963 -0.537037 0.9 V1 -1.73037 -1.0163 0.9 V2 -1.71335 -1.0063 1.1309
+ N0 -0.965535 -0.260275 5.17854e-17 N1 -0.865031 -0.501718 1.36587e-16 N2 -0.853889 -0.495256 0.159982
+ txt003
+STRI
+ V0 -1.91065 -0.531754 1.1309 V1 -1.98032 2.22045e-16 1.1309 V2 -2 0 0.9
+ N0 -0.953145 -0.256935 0.159686 N1 -0.987204 6.38555e-17 0.15946 N2 -1 0 0
+ txt003
+STRI
+ V0 -2 0 0.9 V1 -1.92963 -0.537037 0.9 V2 -1.91065 -0.531754 1.1309
+ N0 -1 0 0 N1 -0.965535 -0.260275 5.17854e-17 N2 -0.953145 -0.256935 0.159686
+ txt003
+STRI
+ V0 -1.5 0 2.4 V1 -1.44722 0.402778 2.4 V2 -1.56671 0.436032 2.13785
+ N0 -0.902861 0 0.429934 N1 -0.871509 0.234929 0.430442 N2 -0.875348 0.235963 0.422003
+ txt003
+STRI
+ V0 -1.56671 0.436032 2.13785 V1 -1.62384 0 2.13785 V2 -1.5 0 2.4
+ N0 -0.875348 0.235963 0.422003 N1 -0.906828 0 0.4215 N2 -0.902861 0 0.429934
+ txt003
+STRI
+ V0 -1.44722 0.402778 2.4 V1 -1.29778 0.762222 2.4 V2 -1.40492 0.825153 2.13785
+ N0 -0.871509 0.234929 0.430442 N1 -0.780517 0.4527 0.43111 N2 -0.783966 0.4547 0.422664
+ txt003
+STRI
+ V0 -1.40492 0.825153 2.13785 V1 -1.56671 0.436032 2.13785 V2 -1.44722 0.402778 2.4
+ N0 -0.783966 0.4547 0.422664 N1 -0.875348 0.235963 0.422003 N2 -0.871509 0.234929 0.430442
+ txt003
+STRI
+ V0 -1.29778 0.762222 2.4 V1 -1.065 1.065 2.4 V2 -1.15293 1.15293 2.13785
+ N0 -0.780517 0.4527 0.43111 N1 -0.637936 0.637936 0.431366 N2 -0.640758 0.640758 0.422917
+ txt003
+STRI
+ V0 -1.15293 1.15293 2.13785 V1 -1.40492 0.825153 2.13785 V2 -1.29778 0.762222 2.4
+ N0 -0.640758 0.640758 0.422917 N1 -0.783966 0.4547 0.422664 N2 -0.780517 0.4527 0.43111
+ txt003
+STRI
+ V0 -1.065 1.065 2.4 V1 -0.762222 1.29778 2.4 V2 -0.825153 1.40492 2.13785
+ N0 -0.637936 0.637936 0.431366 N1 -0.4527 0.780517 0.43111 N2 -0.4547 0.783966 0.422664
+ txt003
+STRI
+ V0 -0.825153 1.40492 2.13785 V1 -1.15293 1.15293 2.13785 V2 -1.065 1.065 2.4
+ N0 -0.4547 0.783966 0.422664 N1 -0.640758 0.640758 0.422917 N2 -0.637936 0.637936 0.431366
+ txt003
+STRI
+ V0 -0.762222 1.29778 2.4 V1 -0.402778 1.44722 2.4 V2 -0.436032 1.56671 2.13785
+ N0 -0.4527 0.780517 0.43111 N1 -0.234929 0.871509 0.430442 N2 -0.235963 0.875348 0.422003
+ txt003
+STRI
+ V0 -0.436032 1.56671 2.13785 V1 -0.825153 1.40492 2.13785 V2 -0.762222 1.29778 2.4
+ N0 -0.235963 0.875348 0.422003 N1 -0.4547 0.783966 0.422664 N2 -0.4527 0.780517 0.43111
+ txt003
+STRI
+ V0 -0.402778 1.44722 2.4 V1 0 1.5 2.4 V2 -2.22045e-16 1.62384 2.13785
+ N0 -0.234929 0.871509 0.430442 N1 2.27296e-16 0.902861 0.429934 N2 2.05843e-16 0.906828 0.4215
+ txt003
+STRI
+ V0 -2.22045e-16 1.62384 2.13785 V1 -0.436032 1.56671 2.13785 V2 -0.402778 1.44722 2.4
+ N0 2.05843e-16 0.906828 0.4215 N1 -0.235963 0.875348 0.422003 N2 -0.234929 0.871509 0.430442
+ txt003
+STRI
+ V0 -1.62384 0 2.13785 V1 -1.56671 0.436032 2.13785 V2 -1.67949 0.467421 1.87778
+ N0 -0.906828 0 0.4215 N1 -0.875348 0.235963 0.422003 N2 -0.886771 0.239043 0.395595
+ txt003
+STRI
+ V0 -1.67949 0.467421 1.87778 V1 -1.74074 0 1.87778 V2 -1.62384 0 2.13785
+ N0 -0.886771 0.239043 0.395595 N1 -0.918633 0 0.395111 N2 -0.906828 0 0.4215
+ txt003
+STRI
+ V0 -1.56671 0.436032 2.13785 V1 -1.40492 0.825153 2.13785 V2 -1.50606 0.884554 1.87778
+ N0 -0.875348 0.235963 0.422003 N1 -0.783966 0.4547 0.422664 N2 -0.794229 0.460653 0.39623
+ txt003
+STRI
+ V0 -1.50606 0.884554 1.87778 V1 -1.67949 0.467421 1.87778 V2 -1.56671 0.436032 2.13785
+ N0 -0.794229 0.460653 0.39623 N1 -0.886771 0.239043 0.395595 N2 -0.875348 0.235963 0.422003
+ txt003
+STRI
+ V0 -1.40492 0.825153 2.13785 V1 -1.15293 1.15293 2.13785 V2 -1.23593 1.23593 1.87778
+ N0 -0.783966 0.4547 0.422664 N1 -0.640758 0.640758 0.422917 N2 -0.649156 0.649156 0.396474
+ txt003
+STRI
+ V0 -1.23593 1.23593 1.87778 V1 -1.50606 0.884554 1.87778 V2 -1.40492 0.825153 2.13785
+ N0 -0.649156 0.649156 0.396474 N1 -0.794229 0.460653 0.39623 N2 -0.783966 0.4547 0.422664
+ txt003
+STRI
+ V0 -1.15293 1.15293 2.13785 V1 -0.825153 1.40492 2.13785 V2 -0.884554 1.50606 1.87778
+ N0 -0.640758 0.640758 0.422917 N1 -0.4547 0.783966 0.422664 N2 -0.460653 0.794229 0.39623
+ txt003
+STRI
+ V0 -0.884554 1.50606 1.87778 V1 -1.23593 1.23593 1.87778 V2 -1.15293 1.15293 2.13785
+ N0 -0.460653 0.794229 0.39623 N1 -0.649156 0.649156 0.396474 N2 -0.640758 0.640758 0.422917
+ txt003
+STRI
+ V0 -0.825153 1.40492 2.13785 V1 -0.436032 1.56671 2.13785 V2 -0.467421 1.67949 1.87778
+ N0 -0.4547 0.783966 0.422664 N1 -0.235963 0.875348 0.422003 N2 -0.239043 0.886771 0.395595
+ txt003
+STRI
+ V0 -0.467421 1.67949 1.87778 V1 -0.884554 1.50606 1.87778 V2 -0.825153 1.40492 2.13785
+ N0 -0.239043 0.886771 0.395595 N1 -0.460653 0.794229 0.39623 N2 -0.4547 0.783966 0.422664
+ txt003
+STRI
+ V0 -0.436032 1.56671 2.13785 V1 -2.22045e-16 1.62384 2.13785 V2 0 1.74074 1.87778
+ N0 -0.235963 0.875348 0.422003 N1 2.05843e-16 0.906828 0.4215 N2 1.79998e-16 0.918633 0.395111
+ txt003
+STRI
+ V0 0 1.74074 1.87778 V1 -0.467421 1.67949 1.87778 V2 -0.436032 1.56671 2.13785
+ N0 1.79998e-16 0.918633 0.395111 N1 -0.239043 0.886771 0.395595 N2 -0.235963 0.875348 0.422003
+ txt003
+STRI
+ V0 -1.74074 0 1.87778 V1 -1.67949 0.467421 1.87778 V2 -1.77888 0.495081 1.62188
+ N0 -0.918633 0 0.395111 N1 -0.886771 0.239043 0.395595 N2 -0.90527 0.244029 0.347757
+ txt003
+STRI
+ V0 -1.77888 0.495081 1.62188 V1 -1.84375 0 1.62188 V2 -1.74074 0 1.87778
+ N0 -0.90527 0.244029 0.347757 N1 -0.937749 0 0.347314 N2 -0.918633 0 0.395111
+ txt003
+STRI
+ V0 -1.67949 0.467421 1.87778 V1 -1.50606 0.884554 1.87778 V2 -1.59519 0.936898 1.62188
+ N0 -0.886771 0.239043 0.395595 N1 -0.794229 0.460653 0.39623 N2 -0.810853 0.470295 0.34834
+ txt003
+STRI
+ V0 -1.59519 0.936898 1.62188 V1 -1.77888 0.495081 1.62188 V2 -1.67949 0.467421 1.87778
+ N0 -0.810853 0.470295 0.34834 N1 -0.90527 0.244029 0.347757 N2 -0.886771 0.239043 0.395595
+ txt003
+STRI
+ V0 -1.50606 0.884554 1.87778 V1 -1.23593 1.23593 1.87778 V2 -1.30906 1.30906 1.62188
+ N0 -0.794229 0.460653 0.39623 N1 -0.649156 0.649156 0.396474 N2 -0.662761 0.662761 0.348563
+ txt003
+STRI
+ V0 -1.30906 1.30906 1.62188 V1 -1.59519 0.936898 1.62188 V2 -1.50606 0.884554 1.87778
+ N0 -0.662761 0.662761 0.348563 N1 -0.810853 0.470295 0.34834 N2 -0.794229 0.460653 0.39623
+ txt003
+STRI
+ V0 -1.23593 1.23593 1.87778 V1 -0.884554 1.50606 1.87778 V2 -0.936898 1.59519 1.62187
+ N0 -0.649156 0.649156 0.396474 N1 -0.460653 0.794229 0.39623 N2 -0.470295 0.810853 0.34834
+ txt003
+STRI
+ V0 -0.936898 1.59519 1.62187 V1 -1.30906 1.30906 1.62188 V2 -1.23593 1.23593 1.87778
+ N0 -0.470295 0.810853 0.34834 N1 -0.662761 0.662761 0.348563 N2 -0.649156 0.649156 0.396474
+ txt003
+STRI
+ V0 -0.884554 1.50606 1.87778 V1 -0.467421 1.67949 1.87778 V2 -0.495081 1.77888 1.62187
+ N0 -0.460653 0.794229 0.39623 N1 -0.239043 0.886771 0.395595 N2 -0.244029 0.90527 0.347757
+ txt003
+STRI
+ V0 -0.495081 1.77888 1.62187 V1 -0.936898 1.59519 1.62187 V2 -0.884554 1.50606 1.87778
+ N0 -0.244029 0.90527 0.347757 N1 -0.470295 0.810853 0.34834 N2 -0.460653 0.794229 0.39623
+ txt003
+STRI
+ V0 -0.467421 1.67949 1.87778 V1 0 1.74074 1.87778 V2 0 1.84375 1.62187
+ N0 -0.239043 0.886771 0.395595 N1 1.79998e-16 0.918633 0.395111 N2 1.49384e-16 0.937749 0.347314
+ txt003
+STRI
+ V0 0 1.84375 1.62187 V1 -0.495081 1.77888 1.62187 V2 -0.467421 1.67949 1.87778
+ N0 1.49384e-16 0.937749 0.347314 N1 -0.244029 0.90527 0.347757 N2 -0.239043 0.886771 0.395595
+ txt003
+STRI
+ V0 -1.84375 0 1.62188 V1 -1.77888 0.495081 1.62188 V2 -1.85816 0.517147 1.37222
+ N0 -0.937749 0 0.347314 N1 -0.90527 0.244029 0.347757 N2 -0.929073 0.250446 0.272213
+ txt003
+STRI
+ V0 -1.85816 0.517147 1.37222 V1 -1.92593 0 1.37222 V2 -1.84375 0 1.62188
+ N0 -0.929073 0.250446 0.272213 N1 -0.96234 0 0.271848 N2 -0.937749 0 0.347314
+ txt003
+STRI
+ V0 -1.77888 0.495081 1.62188 V1 -1.59519 0.936898 1.62188 V2 -1.66628 0.978656 1.37222
+ N0 -0.90527 0.244029 0.347757 N1 -0.810853 0.470295 0.34834 N2 -0.832247 0.482704 0.272693
+ txt003
+STRI
+ V0 -1.66628 0.978656 1.37222 V1 -1.85816 0.517147 1.37222 V2 -1.77888 0.495081 1.62188
+ N0 -0.832247 0.482704 0.272693 N1 -0.929073 0.250446 0.272213 N2 -0.90527 0.244029 0.347757
+ txt003
+STRI
+ V0 -1.59519 0.936898 1.62188 V1 -1.30906 1.30906 1.62188 V2 -1.36741 1.36741 1.37222
+ N0 -0.810853 0.470295 0.34834 N1 -0.662761 0.662761 0.348563 N2 -0.680271 0.680271 0.272877
+ txt003
+STRI
+ V0 -1.36741 1.36741 1.37222 V1 -1.66628 0.978656 1.37222 V2 -1.59519 0.936898 1.62188
+ N0 -0.680271 0.680271 0.272877 N1 -0.832247 0.482704 0.272693 N2 -0.810853 0.470295 0.34834
+ txt003
+STRI
+ V0 -1.30906 1.30906 1.62188 V1 -0.936898 1.59519 1.62187 V2 -0.978656 1.66628 1.37222
+ N0 -0.662761 0.662761 0.348563 N1 -0.470295 0.810853 0.34834 N2 -0.482704 0.832247 0.272693
+ txt003
+STRI
+ V0 -0.978656 1.66628 1.37222 V1 -1.36741 1.36741 1.37222 V2 -1.30906 1.30906 1.62188
+ N0 -0.482704 0.832247 0.272693 N1 -0.680271 0.680271 0.272877 N2 -0.662761 0.662761 0.348563
+ txt003
+STRI
+ V0 -0.936898 1.59519 1.62187 V1 -0.495081 1.77888 1.62187 V2 -0.517147 1.85816 1.37222
+ N0 -0.470295 0.810853 0.34834 N1 -0.244029 0.90527 0.347757 N2 -0.250446 0.929073 0.272213
+ txt003
+STRI
+ V0 -0.517147 1.85816 1.37222 V1 -0.978656 1.66628 1.37222 V2 -0.936898 1.59519 1.62187
+ N0 -0.250446 0.929073 0.272213 N1 -0.482704 0.832247 0.272693 N2 -0.470295 0.810853 0.34834
+ txt003
+STRI
+ V0 -0.495081 1.77888 1.62187 V1 0 1.84375 1.62187 V2 -2.22045e-16 1.92593 1.37222
+ N0 -0.244029 0.90527 0.347757 N1 1.49384e-16 0.937749 0.347314 N2 1.11936e-16 0.96234 0.271848
+ txt003
+STRI
+ V0 -2.22045e-16 1.92593 1.37222 V1 -0.517147 1.85816 1.37222 V2 -0.495081 1.77888 1.62187
+ N0 1.11936e-16 0.96234 0.271848 N1 -0.250446 0.929073 0.272213 N2 -0.244029 0.90527 0.347757
+ txt003
+STRI
+ V0 -1.92593 0 1.37222 V1 -1.85816 0.517147 1.37222 V2 -1.91065 0.531754 1.1309
+ N0 -0.96234 0 0.271848 N1 -0.929073 0.250446 0.272213 N2 -0.953145 0.256935 0.159686
+ txt003
+STRI
+ V0 -1.91065 0.531754 1.1309 V1 -1.98032 0 1.1309 V2 -1.92593 0 1.37222
+ N0 -0.953145 0.256935 0.159686 N1 -0.987204 0 0.15946 N2 -0.96234 0 0.271848
+ txt003
+STRI
+ V0 -1.85816 0.517147 1.37222 V1 -1.66628 0.978656 1.37222 V2 -1.71335 1.0063 1.1309
+ N0 -0.929073 0.250446 0.272213 N1 -0.832247 0.482704 0.272693 N2 -0.853889 0.495256 0.159982
+ txt003
+STRI
+ V0 -1.71335 1.0063 1.1309 V1 -1.91065 0.531754 1.1309 V2 -1.85816 0.517147 1.37222
+ N0 -0.853889 0.495256 0.159982 N1 -0.953145 0.256935 0.159686 N2 -0.929073 0.250446 0.272213
+ txt003
+STRI
+ V0 -1.66628 0.978656 1.37222 V1 -1.36741 1.36741 1.37222 V2 -1.40603 1.40603 1.1309
+ N0 -0.832247 0.482704 0.272693 N1 -0.680271 0.680271 0.272877 N2 -0.697986 0.697986 0.160096
+ txt003
+STRI
+ V0 -1.40603 1.40603 1.1309 V1 -1.71335 1.0063 1.1309 V2 -1.66628 0.978656 1.37222
+ N0 -0.697986 0.697986 0.160096 N1 -0.853889 0.495256 0.159982 N2 -0.832247 0.482704 0.272693
+ txt003
+STRI
+ V0 -1.36741 1.36741 1.37222 V1 -0.978656 1.66628 1.37222 V2 -1.0063 1.71335 1.1309
+ N0 -0.680271 0.680271 0.272877 N1 -0.482704 0.832247 0.272693 N2 -0.495256 0.853889 0.159982
+ txt003
+STRI
+ V0 -1.0063 1.71335 1.1309 V1 -1.40603 1.40603 1.1309 V2 -1.36741 1.36741 1.37222
+ N0 -0.495256 0.853889 0.159982 N1 -0.697986 0.697986 0.160096 N2 -0.680271 0.680271 0.272877
+ txt003
+STRI
+ V0 -0.978656 1.66628 1.37222 V1 -0.517147 1.85816 1.37222 V2 -0.531754 1.91065 1.1309
+ N0 -0.482704 0.832247 0.272693 N1 -0.250446 0.929073 0.272213 N2 -0.256935 0.953145 0.159686
+ txt003
+STRI
+ V0 -0.531754 1.91065 1.1309 V1 -1.0063 1.71335 1.1309 V2 -0.978656 1.66628 1.37222
+ N0 -0.256935 0.953145 0.159686 N1 -0.495256 0.853889 0.159982 N2 -0.482704 0.832247 0.272693
+ txt003
+STRI
+ V0 -0.517147 1.85816 1.37222 V1 -2.22045e-16 1.92593 1.37222 V2 2.22045e-16 1.98032 1.1309
+ N0 -0.250446 0.929073 0.272213 N1 1.11936e-16 0.96234 0.271848 N2 6.38555e-17 0.987204 0.15946
+ txt003
+STRI
+ V0 2.22045e-16 1.98032 1.1309 V1 -0.531754 1.91065 1.1309 V2 -0.517147 1.85816 1.37222
+ N0 6.38555e-17 0.987204 0.15946 N1 -0.256935 0.953145 0.159686 N2 -0.250446 0.929073 0.272213
+ txt003
+STRI
+ V0 -1.98032 0 1.1309 V1 -1.91065 0.531754 1.1309 V2 -1.92963 0.537037 0.9
+ N0 -0.987204 0 0.15946 N1 -0.953145 0.256935 0.159686 N2 -0.965535 0.260275 5.17854e-17
+ txt003
+STRI
+ V0 -1.92963 0.537037 0.9 V1 -2 0 0.9 V2 -1.98032 0 1.1309
+ N0 -0.965535 0.260275 5.17854e-17 N1 -1 0 0 N2 -0.987204 0 0.15946
+ txt003
+STRI
+ V0 -1.91065 0.531754 1.1309 V1 -1.71335 1.0063 1.1309 V2 -1.73037 1.0163 0.9
+ N0 -0.953145 0.256935 0.159686 N1 -0.853889 0.495256 0.159982 N2 -0.865031 0.501718 1.36587e-16
+ txt003
+STRI
+ V0 -1.73037 1.0163 0.9 V1 -1.92963 0.537037 0.9 V2 -1.91065 0.531754 1.1309
+ N0 -0.865031 0.501718 1.36587e-16 N1 -0.965535 0.260275 5.17854e-17 N2 -0.953145 0.256935 0.159686
+ txt003
+STRI
+ V0 -1.71335 1.0063 1.1309 V1 -1.40603 1.40603 1.1309 V2 -1.42 1.42 0.9
+ N0 -0.853889 0.495256 0.159982 N1 -0.697986 0.697986 0.160096 N2 -0.707107 0.707107 1.74455e-16
+ txt003
+STRI
+ V0 -1.42 1.42 0.9 V1 -1.73037 1.0163 0.9 V2 -1.71335 1.0063 1.1309
+ N0 -0.707107 0.707107 1.74455e-16 N1 -0.865031 0.501718 1.36587e-16 N2 -0.853889 0.495256 0.159982
+ txt003
+STRI
+ V0 -1.40603 1.40603 1.1309 V1 -1.0063 1.71335 1.1309 V2 -1.0163 1.73037 0.9
+ N0 -0.697986 0.697986 0.160096 N1 -0.495256 0.853889 0.159982 N2 -0.501718 0.865031 1.36587e-16
+ txt003
+STRI
+ V0 -1.0163 1.73037 0.9 V1 -1.42 1.42 0.9 V2 -1.40603 1.40603 1.1309
+ N0 -0.501718 0.865031 1.36587e-16 N1 -0.707107 0.707107 1.74455e-16 N2 -0.697986 0.697986 0.160096
+ txt003
+STRI
+ V0 -1.0063 1.71335 1.1309 V1 -0.531754 1.91065 1.1309 V2 -0.537037 1.92963 0.9
+ N0 -0.495256 0.853889 0.159982 N1 -0.256935 0.953145 0.159686 N2 -0.260275 0.965535 5.17854e-17
+ txt003
+STRI
+ V0 -0.537037 1.92963 0.9 V1 -1.0163 1.73037 0.9 V2 -1.0063 1.71335 1.1309
+ N0 -0.260275 0.965535 5.17854e-17 N1 -0.501718 0.865031 1.36587e-16 N2 -0.495256 0.853889 0.159982
+ txt003
+STRI
+ V0 -0.531754 1.91065 1.1309 V1 2.22045e-16 1.98032 1.1309 V2 0 2 0.9
+ N0 -0.256935 0.953145 0.159686 N1 6.38555e-17 0.987204 0.15946 N2 0 1 0
+ txt003
+STRI
+ V0 0 2 0.9 V1 -0.537037 1.92963 0.9 V2 -0.531754 1.91065 1.1309
+ N0 0 1 0 N1 -0.260275 0.965535 5.17854e-17 N2 -0.256935 0.953145 0.159686
+ txt003
+STRI
+ V0 0 1.5 2.4 V1 0.402778 1.44722 2.4 V2 0.436032 1.56671 2.13785
+ N0 -0 0.902861 0.429934 N1 0.234929 0.871509 0.430442 N2 0.235963 0.875348 0.422003
+ txt003
+STRI
+ V0 0.436032 1.56671 2.13785 V1 0 1.62384 2.13785 V2 0 1.5 2.4
+ N0 0.235963 0.875348 0.422003 N1 -0 0.906828 0.4215 N2 -0 0.902861 0.429934
+ txt003
+STRI
+ V0 0.402778 1.44722 2.4 V1 0.762222 1.29778 2.4 V2 0.825153 1.40492 2.13785
+ N0 0.234929 0.871509 0.430442 N1 0.4527 0.780517 0.43111 N2 0.4547 0.783966 0.422664
+ txt003
+STRI
+ V0 0.825153 1.40492 2.13785 V1 0.436032 1.56671 2.13785 V2 0.402778 1.44722 2.4
+ N0 0.4547 0.783966 0.422664 N1 0.235963 0.875348 0.422003 N2 0.234929 0.871509 0.430442
+ txt003
+STRI
+ V0 0.762222 1.29778 2.4 V1 1.065 1.065 2.4 V2 1.15293 1.15293 2.13785
+ N0 0.4527 0.780517 0.43111 N1 0.637936 0.637936 0.431366 N2 0.640758 0.640758 0.422917
+ txt003
+STRI
+ V0 1.15293 1.15293 2.13785 V1 0.825153 1.40492 2.13785 V2 0.762222 1.29778 2.4
+ N0 0.640758 0.640758 0.422917 N1 0.4547 0.783966 0.422664 N2 0.4527 0.780517 0.43111
+ txt003
+STRI
+ V0 1.065 1.065 2.4 V1 1.29778 0.762222 2.4 V2 1.40492 0.825153 2.13785
+ N0 0.637936 0.637936 0.431366 N1 0.780517 0.4527 0.43111 N2 0.783966 0.4547 0.422664
+ txt003
+STRI
+ V0 1.40492 0.825153 2.13785 V1 1.15293 1.15293 2.13785 V2 1.065 1.065 2.4
+ N0 0.783966 0.4547 0.422664 N1 0.640758 0.640758 0.422917 N2 0.637936 0.637936 0.431366
+ txt003
+STRI
+ V0 1.29778 0.762222 2.4 V1 1.44722 0.402778 2.4 V2 1.56671 0.436032 2.13785
+ N0 0.780517 0.4527 0.43111 N1 0.871509 0.234929 0.430442 N2 0.875348 0.235963 0.422003
+ txt003
+STRI
+ V0 1.56671 0.436032 2.13785 V1 1.40492 0.825153 2.13785 V2 1.29778 0.762222 2.4
+ N0 0.875348 0.235963 0.422003 N1 0.783966 0.4547 0.422664 N2 0.780517 0.4527 0.43111
+ txt003
+STRI
+ V0 1.44722 0.402778 2.4 V1 1.5 0 2.4 V2 1.62384 2.22045e-16 2.13785
+ N0 0.871509 0.234929 0.430442 N1 0.902861 -2.27296e-16 0.429934 N2 0.906828 -2.05843e-16 0.4215
+ txt003
+STRI
+ V0 1.62384 2.22045e-16 2.13785 V1 1.56671 0.436032 2.13785 V2 1.44722 0.402778 2.4
+ N0 0.906828 -2.05843e-16 0.4215 N1 0.875348 0.235963 0.422003 N2 0.871509 0.234929 0.430442
+ txt003
+STRI
+ V0 0 1.62384 2.13785 V1 0.436032 1.56671 2.13785 V2 0.467421 1.67949 1.87778
+ N0 -0 0.906828 0.4215 N1 0.235963 0.875348 0.422003 N2 0.239043 0.886771 0.395595
+ txt003
+STRI
+ V0 0.467421 1.67949 1.87778 V1 0 1.74074 1.87778 V2 0 1.62384 2.13785
+ N0 0.239043 0.886771 0.395595 N1 -0 0.918633 0.395111 N2 -0 0.906828 0.4215
+ txt003
+STRI
+ V0 0.436032 1.56671 2.13785 V1 0.825153 1.40492 2.13785 V2 0.884554 1.50606 1.87778
+ N0 0.235963 0.875348 0.422003 N1 0.4547 0.783966 0.422664 N2 0.460653 0.794229 0.39623
+ txt003
+STRI
+ V0 0.884554 1.50606 1.87778 V1 0.467421 1.67949 1.87778 V2 0.436032 1.56671 2.13785
+ N0 0.460653 0.794229 0.39623 N1 0.239043 0.886771 0.395595 N2 0.235963 0.875348 0.422003
+ txt003
+STRI
+ V0 0.825153 1.40492 2.13785 V1 1.15293 1.15293 2.13785 V2 1.23593 1.23593 1.87778
+ N0 0.4547 0.783966 0.422664 N1 0.640758 0.640758 0.422917 N2 0.649156 0.649156 0.396474
+ txt003
+STRI
+ V0 1.23593 1.23593 1.87778 V1 0.884554 1.50606 1.87778 V2 0.825153 1.40492 2.13785
+ N0 0.649156 0.649156 0.396474 N1 0.460653 0.794229 0.39623 N2 0.4547 0.783966 0.422664
+ txt003
+STRI
+ V0 1.15293 1.15293 2.13785 V1 1.40492 0.825153 2.13785 V2 1.50606 0.884554 1.87778
+ N0 0.640758 0.640758 0.422917 N1 0.783966 0.4547 0.422664 N2 0.794229 0.460653 0.39623
+ txt003
+STRI
+ V0 1.50606 0.884554 1.87778 V1 1.23593 1.23593 1.87778 V2 1.15293 1.15293 2.13785
+ N0 0.794229 0.460653 0.39623 N1 0.649156 0.649156 0.396474 N2 0.640758 0.640758 0.422917
+ txt003
+STRI
+ V0 1.40492 0.825153 2.13785 V1 1.56671 0.436032 2.13785 V2 1.67949 0.467421 1.87778
+ N0 0.783966 0.4547 0.422664 N1 0.875348 0.235963 0.422003 N2 0.886771 0.239043 0.395595
+ txt003
+STRI
+ V0 1.67949 0.467421 1.87778 V1 1.50606 0.884554 1.87778 V2 1.40492 0.825153 2.13785
+ N0 0.886771 0.239043 0.395595 N1 0.794229 0.460653 0.39623 N2 0.783966 0.4547 0.422664
+ txt003
+STRI
+ V0 1.56671 0.436032 2.13785 V1 1.62384 2.22045e-16 2.13785 V2 1.74074 0 1.87778
+ N0 0.875348 0.235963 0.422003 N1 0.906828 -2.05843e-16 0.4215 N2 0.918633 -1.79998e-16 0.395111
+ txt003
+STRI
+ V0 1.74074 0 1.87778 V1 1.67949 0.467421 1.87778 V2 1.56671 0.436032 2.13785
+ N0 0.918633 -1.79998e-16 0.395111 N1 0.886771 0.239043 0.395595 N2 0.875348 0.235963 0.422003
+ txt003
+STRI
+ V0 0 1.74074 1.87778 V1 0.467421 1.67949 1.87778 V2 0.495081 1.77888 1.62188
+ N0 -0 0.918633 0.395111 N1 0.239043 0.886771 0.395595 N2 0.244029 0.90527 0.347757
+ txt003
+STRI
+ V0 0.495081 1.77888 1.62188 V1 0 1.84375 1.62188 V2 0 1.74074 1.87778
+ N0 0.244029 0.90527 0.347757 N1 -0 0.937749 0.347314 N2 -0 0.918633 0.395111
+ txt003
+STRI
+ V0 0.467421 1.67949 1.87778 V1 0.884554 1.50606 1.87778 V2 0.936898 1.59519 1.62188
+ N0 0.239043 0.886771 0.395595 N1 0.460653 0.794229 0.39623 N2 0.470295 0.810853 0.34834
+ txt003
+STRI
+ V0 0.936898 1.59519 1.62188 V1 0.495081 1.77888 1.62188 V2 0.467421 1.67949 1.87778
+ N0 0.470295 0.810853 0.34834 N1 0.244029 0.90527 0.347757 N2 0.239043 0.886771 0.395595
+ txt003
+STRI
+ V0 0.884554 1.50606 1.87778 V1 1.23593 1.23593 1.87778 V2 1.30906 1.30906 1.62188
+ N0 0.460653 0.794229 0.39623 N1 0.649156 0.649156 0.396474 N2 0.662761 0.662761 0.348563
+ txt003
+STRI
+ V0 1.30906 1.30906 1.62188 V1 0.936898 1.59519 1.62188 V2 0.884554 1.50606 1.87778
+ N0 0.662761 0.662761 0.348563 N1 0.470295 0.810853 0.34834 N2 0.460653 0.794229 0.39623
+ txt003
+STRI
+ V0 1.23593 1.23593 1.87778 V1 1.50606 0.884554 1.87778 V2 1.59519 0.936898 1.62187
+ N0 0.649156 0.649156 0.396474 N1 0.794229 0.460653 0.39623 N2 0.810853 0.470295 0.34834
+ txt003
+STRI
+ V0 1.59519 0.936898 1.62187 V1 1.30906 1.30906 1.62188 V2 1.23593 1.23593 1.87778
+ N0 0.810853 0.470295 0.34834 N1 0.662761 0.662761 0.348563 N2 0.649156 0.649156 0.396474
+ txt003
+STRI
+ V0 1.50606 0.884554 1.87778 V1 1.67949 0.467421 1.87778 V2 1.77888 0.495081 1.62187
+ N0 0.794229 0.460653 0.39623 N1 0.886771 0.239043 0.395595 N2 0.90527 0.244029 0.347757
+ txt003
+STRI
+ V0 1.77888 0.495081 1.62187 V1 1.59519 0.936898 1.62187 V2 1.50606 0.884554 1.87778
+ N0 0.90527 0.244029 0.347757 N1 0.810853 0.470295 0.34834 N2 0.794229 0.460653 0.39623
+ txt003
+STRI
+ V0 1.67949 0.467421 1.87778 V1 1.74074 0 1.87778 V2 1.84375 0 1.62187
+ N0 0.886771 0.239043 0.395595 N1 0.918633 -1.79998e-16 0.395111 N2 0.937749 -1.49384e-16 0.347314
+ txt003
+STRI
+ V0 1.84375 0 1.62187 V1 1.77888 0.495081 1.62187 V2 1.67949 0.467421 1.87778
+ N0 0.937749 -1.49384e-16 0.347314 N1 0.90527 0.244029 0.347757 N2 0.886771 0.239043 0.395595
+ txt003
+STRI
+ V0 0 1.84375 1.62188 V1 0.495081 1.77888 1.62188 V2 0.517147 1.85816 1.37222
+ N0 -0 0.937749 0.347314 N1 0.244029 0.90527 0.347757 N2 0.250446 0.929073 0.272213
+ txt003
+STRI
+ V0 0.517147 1.85816 1.37222 V1 0 1.92593 1.37222 V2 0 1.84375 1.62188
+ N0 0.250446 0.929073 0.272213 N1 -0 0.96234 0.271848 N2 -0 0.937749 0.347314
+ txt003
+STRI
+ V0 0.495081 1.77888 1.62188 V1 0.936898 1.59519 1.62188 V2 0.978656 1.66628 1.37222
+ N0 0.244029 0.90527 0.347757 N1 0.470295 0.810853 0.34834 N2 0.482704 0.832247 0.272693
+ txt003
+STRI
+ V0 0.978656 1.66628 1.37222 V1 0.517147 1.85816 1.37222 V2 0.495081 1.77888 1.62188
+ N0 0.482704 0.832247 0.272693 N1 0.250446 0.929073 0.272213 N2 0.244029 0.90527 0.347757
+ txt003
+STRI
+ V0 0.936898 1.59519 1.62188 V1 1.30906 1.30906 1.62188 V2 1.36741 1.36741 1.37222
+ N0 0.470295 0.810853 0.34834 N1 0.662761 0.662761 0.348563 N2 0.680271 0.680271 0.272877
+ txt003
+STRI
+ V0 1.36741 1.36741 1.37222 V1 0.978656 1.66628 1.37222 V2 0.936898 1.59519 1.62188
+ N0 0.680271 0.680271 0.272877 N1 0.482704 0.832247 0.272693 N2 0.470295 0.810853 0.34834
+ txt003
+STRI
+ V0 1.30906 1.30906 1.62188 V1 1.59519 0.936898 1.62187 V2 1.66628 0.978656 1.37222
+ N0 0.662761 0.662761 0.348563 N1 0.810853 0.470295 0.34834 N2 0.832247 0.482704 0.272693
+ txt003
+STRI
+ V0 1.66628 0.978656 1.37222 V1 1.36741 1.36741 1.37222 V2 1.30906 1.30906 1.62188
+ N0 0.832247 0.482704 0.272693 N1 0.680271 0.680271 0.272877 N2 0.662761 0.662761 0.348563
+ txt003
+STRI
+ V0 1.59519 0.936898 1.62187 V1 1.77888 0.495081 1.62187 V2 1.85816 0.517147 1.37222
+ N0 0.810853 0.470295 0.34834 N1 0.90527 0.244029 0.347757 N2 0.929073 0.250446 0.272213
+ txt003
+STRI
+ V0 1.85816 0.517147 1.37222 V1 1.66628 0.978656 1.37222 V2 1.59519 0.936898 1.62187
+ N0 0.929073 0.250446 0.272213 N1 0.832247 0.482704 0.272693 N2 0.810853 0.470295 0.34834
+ txt003
+STRI
+ V0 1.77888 0.495081 1.62187 V1 1.84375 0 1.62187 V2 1.92593 2.22045e-16 1.37222
+ N0 0.90527 0.244029 0.347757 N1 0.937749 -1.49384e-16 0.347314 N2 0.96234 -1.11936e-16 0.271848
+ txt003
+STRI
+ V0 1.92593 2.22045e-16 1.37222 V1 1.85816 0.517147 1.37222 V2 1.77888 0.495081 1.62187
+ N0 0.96234 -1.11936e-16 0.271848 N1 0.929073 0.250446 0.272213 N2 0.90527 0.244029 0.347757
+ txt003
+STRI
+ V0 0 1.92593 1.37222 V1 0.517147 1.85816 1.37222 V2 0.531754 1.91065 1.1309
+ N0 -0 0.96234 0.271848 N1 0.250446 0.929073 0.272213 N2 0.256935 0.953145 0.159686
+ txt003
+STRI
+ V0 0.531754 1.91065 1.1309 V1 0 1.98032 1.1309 V2 0 1.92593 1.37222
+ N0 0.256935 0.953145 0.159686 N1 -0 0.987204 0.15946 N2 -0 0.96234 0.271848
+ txt003
+STRI
+ V0 0.517147 1.85816 1.37222 V1 0.978656 1.66628 1.37222 V2 1.0063 1.71335 1.1309
+ N0 0.250446 0.929073 0.272213 N1 0.482704 0.832247 0.272693 N2 0.495256 0.853889 0.159982
+ txt003
+STRI
+ V0 1.0063 1.71335 1.1309 V1 0.531754 1.91065 1.1309 V2 0.517147 1.85816 1.37222
+ N0 0.495256 0.853889 0.159982 N1 0.256935 0.953145 0.159686 N2 0.250446 0.929073 0.272213
+ txt003
+STRI
+ V0 0.978656 1.66628 1.37222 V1 1.36741 1.36741 1.37222 V2 1.40603 1.40603 1.1309
+ N0 0.482704 0.832247 0.272693 N1 0.680271 0.680271 0.272877 N2 0.697986 0.697986 0.160096
+ txt003
+STRI
+ V0 1.40603 1.40603 1.1309 V1 1.0063 1.71335 1.1309 V2 0.978656 1.66628 1.37222
+ N0 0.697986 0.697986 0.160096 N1 0.495256 0.853889 0.159982 N2 0.482704 0.832247 0.272693
+ txt003
+STRI
+ V0 1.36741 1.36741 1.37222 V1 1.66628 0.978656 1.37222 V2 1.71335 1.0063 1.1309
+ N0 0.680271 0.680271 0.272877 N1 0.832247 0.482704 0.272693 N2 0.853889 0.495256 0.159982
+ txt003
+STRI
+ V0 1.71335 1.0063 1.1309 V1 1.40603 1.40603 1.1309 V2 1.36741 1.36741 1.37222
+ N0 0.853889 0.495256 0.159982 N1 0.697986 0.697986 0.160096 N2 0.680271 0.680271 0.272877
+ txt003
+STRI
+ V0 1.66628 0.978656 1.37222 V1 1.85816 0.517147 1.37222 V2 1.91065 0.531754 1.1309
+ N0 0.832247 0.482704 0.272693 N1 0.929073 0.250446 0.272213 N2 0.953145 0.256935 0.159686
+ txt003
+STRI
+ V0 1.91065 0.531754 1.1309 V1 1.71335 1.0063 1.1309 V2 1.66628 0.978656 1.37222
+ N0 0.953145 0.256935 0.159686 N1 0.853889 0.495256 0.159982 N2 0.832247 0.482704 0.272693
+ txt003
+STRI
+ V0 1.85816 0.517147 1.37222 V1 1.92593 2.22045e-16 1.37222 V2 1.98032 -2.22045e-16 1.1309
+ N0 0.929073 0.250446 0.272213 N1 0.96234 -1.11936e-16 0.271848 N2 0.987204 -6.38555e-17 0.15946
+ txt003
+STRI
+ V0 1.98032 -2.22045e-16 1.1309 V1 1.91065 0.531754 1.1309 V2 1.85816 0.517147 1.37222
+ N0 0.987204 -6.38555e-17 0.15946 N1 0.953145 0.256935 0.159686 N2 0.929073 0.250446 0.272213
+ txt003
+STRI
+ V0 0 1.98032 1.1309 V1 0.531754 1.91065 1.1309 V2 0.537037 1.92963 0.9
+ N0 -0 0.987204 0.15946 N1 0.256935 0.953145 0.159686 N2 0.260275 0.965535 5.17854e-17
+ txt003
+STRI
+ V0 0.537037 1.92963 0.9 V1 0 2 0.9 V2 0 1.98032 1.1309
+ N0 0.260275 0.965535 5.17854e-17 N1 -0 1 0 N2 -0 0.987204 0.15946
+ txt003
+STRI
+ V0 0.531754 1.91065 1.1309 V1 1.0063 1.71335 1.1309 V2 1.0163 1.73037 0.9
+ N0 0.256935 0.953145 0.159686 N1 0.495256 0.853889 0.159982 N2 0.501718 0.865031 1.36587e-16
+ txt003
+STRI
+ V0 1.0163 1.73037 0.9 V1 0.537037 1.92963 0.9 V2 0.531754 1.91065 1.1309
+ N0 0.501718 0.865031 1.36587e-16 N1 0.260275 0.965535 5.17854e-17 N2 0.256935 0.953145 0.159686
+ txt003
+STRI
+ V0 1.0063 1.71335 1.1309 V1 1.40603 1.40603 1.1309 V2 1.42 1.42 0.9
+ N0 0.495256 0.853889 0.159982 N1 0.697986 0.697986 0.160096 N2 0.707107 0.707107 1.74455e-16
+ txt003
+STRI
+ V0 1.42 1.42 0.9 V1 1.0163 1.73037 0.9 V2 1.0063 1.71335 1.1309
+ N0 0.707107 0.707107 1.74455e-16 N1 0.501718 0.865031 1.36587e-16 N2 0.495256 0.853889 0.159982
+ txt003
+STRI
+ V0 1.40603 1.40603 1.1309 V1 1.71335 1.0063 1.1309 V2 1.73037 1.0163 0.9
+ N0 0.697986 0.697986 0.160096 N1 0.853889 0.495256 0.159982 N2 0.865031 0.501718 1.36587e-16
+ txt003
+STRI
+ V0 1.73037 1.0163 0.9 V1 1.42 1.42 0.9 V2 1.40603 1.40603 1.1309
+ N0 0.865031 0.501718 1.36587e-16 N1 0.707107 0.707107 1.74455e-16 N2 0.697986 0.697986 0.160096
+ txt003
+STRI
+ V0 1.71335 1.0063 1.1309 V1 1.91065 0.531754 1.1309 V2 1.92963 0.537037 0.9
+ N0 0.853889 0.495256 0.159982 N1 0.953145 0.256935 0.159686 N2 0.965535 0.260275 5.17854e-17
+ txt003
+STRI
+ V0 1.92963 0.537037 0.9 V1 1.73037 1.0163 0.9 V2 1.71335 1.0063 1.1309
+ N0 0.965535 0.260275 5.17854e-17 N1 0.865031 0.501718 1.36587e-16 N2 0.853889 0.495256 0.159982
+ txt003
+STRI
+ V0 1.91065 0.531754 1.1309 V1 1.98032 -2.22045e-16 1.1309 V2 2 0 0.9
+ N0 0.953145 0.256935 0.159686 N1 0.987204 -6.38555e-17 0.15946 N2 1 0 0
+ txt003
+STRI
+ V0 2 0 0.9 V1 1.92963 0.537037 0.9 V2 1.91065 0.531754 1.1309
+ N0 1 0 0 N1 0.965535 0.260275 5.17854e-17 N2 0.953145 0.256935 0.159686
+ txt003
+STRI
+ V0 2 0 0.9 V1 1.92963 -0.537037 0.9 V2 1.8939 -0.527092 0.693403
+ N0 1 0 0 N1 0.965535 -0.260275 0 N2 0.905874 -0.244192 -0.346067
+ txt003
+STRI
+ V0 1.8939 -0.527092 0.693403 V1 1.96296 0 0.693403 V2 2 0 0.9
+ N0 0.905874 -0.244192 -0.346067 N1 0.938373 0 -0.345625 N2 1 0 0
+ txt003
+STRI
+ V0 1.92963 -0.537037 0.9 V1 1.73037 -1.0163 0.9 V2 1.69833 -0.997476 0.693403
+ N0 0.965535 -0.260275 0 N1 0.865031 -0.501718 0 N2 0.811395 -0.470609 -0.346647
+ txt003
+STRI
+ V0 1.69833 -0.997476 0.693403 V1 1.8939 -0.527092 0.693403 V2 1.92963 -0.537037 0.9
+ N0 0.811395 -0.470609 -0.346647 N1 0.905874 -0.244192 -0.346067 N2 0.965535 -0.260275 0
+ txt003
+STRI
+ V0 1.73037 -1.0163 0.9 V1 1.42 -1.42 0.9 V2 1.3937 -1.3937 0.693403
+ N0 0.865031 -0.501718 0 N1 0.707107 -0.707107 0 N2 0.663205 -0.663205 -0.34687
+ txt003
+STRI
+ V0 1.3937 -1.3937 0.693403 V1 1.69833 -0.997476 0.693403 V2 1.73037 -1.0163 0.9
+ N0 0.663205 -0.663205 -0.34687 N1 0.811395 -0.470609 -0.346647 N2 0.865031 -0.501718 0
+ txt003
+STRI
+ V0 1.42 -1.42 0.9 V1 1.0163 -1.73037 0.9 V2 0.997476 -1.69833 0.693403
+ N0 0.707107 -0.707107 0 N1 0.501718 -0.865031 0 N2 0.470609 -0.811395 -0.346647
+ txt003
+STRI
+ V0 0.997476 -1.69833 0.693403 V1 1.3937 -1.3937 0.693403 V2 1.42 -1.42 0.9
+ N0 0.470609 -0.811395 -0.346647 N1 0.663205 -0.663205 -0.34687 N2 0.707107 -0.707107 0
+ txt003
+STRI
+ V0 1.0163 -1.73037 0.9 V1 0.537037 -1.92963 0.9 V2 0.527092 -1.8939 0.693403
+ N0 0.501718 -0.865031 0 N1 0.260275 -0.965535 0 N2 0.244192 -0.905874 -0.346067
+ txt003
+STRI
+ V0 0.527092 -1.8939 0.693403 V1 0.997476 -1.69833 0.693403 V2 1.0163 -1.73037 0.9
+ N0 0.244192 -0.905874 -0.346067 N1 0.470609 -0.811395 -0.346647 N2 0.501718 -0.865031 0
+ txt003
+STRI
+ V0 0.537037 -1.92963 0.9 V1 0 -2 0.9 V2 2.22045e-16 -1.96296 0.693403
+ N0 0.260275 -0.965535 0 N1 -0 -1 -0 N2 -3.49072e-17 -0.938373 -0.345625
+ txt003
+STRI
+ V0 2.22045e-16 -1.96296 0.693403 V1 0.527092 -1.8939 0.693403 V2 0.537037 -1.92963 0.9
+ N0 -3.49072e-17 -0.938373 -0.345625 N1 0.244192 -0.905874 -0.346067 N2 0.260275 -0.965535 0
+ txt003
+STRI
+ V0 1.96296 0 0.693403 V1 1.8939 -0.527092 0.693403 V2 1.80456 -0.502229 0.522222
+ N0 0.938373 0 -0.345625 N1 0.905874 -0.244192 -0.346067 N2 0.782908 -0.211045 -0.585248
+ txt003
+STRI
+ V0 1.80456 -0.502229 0.522222 V1 1.87037 0 0.522222 V2 1.96296 0 0.693403
+ N0 0.782908 -0.211045 -0.585248 N1 0.811257 0 -0.58469 N2 0.938373 0 -0.345625
+ txt003
+STRI
+ V0 1.8939 -0.527092 0.693403 V1 1.69833 -0.997476 0.693403 V2 1.61822 -0.950425 0.522222
+ N0 0.905874 -0.244192 -0.346067 N1 0.811395 -0.470609 -0.346647 N2 0.700957 -0.406555 -0.58598
+ txt003
+STRI
+ V0 1.61822 -0.950425 0.522222 V1 1.80456 -0.502229 0.522222 V2 1.8939 -0.527092 0.693403
+ N0 0.700957 -0.406555 -0.58598 N1 0.782908 -0.211045 -0.585248 N2 0.905874 -0.244192 -0.346067
+ txt003
+STRI
+ V0 1.69833 -0.997476 0.693403 V1 1.3937 -1.3937 0.693403 V2 1.32796 -1.32796 0.522222
+ N0 0.811395 -0.470609 -0.346647 N1 0.663205 -0.663205 -0.34687 N2 0.572843 -0.572843 -0.586261
+ txt003
+STRI
+ V0 1.32796 -1.32796 0.522222 V1 1.61822 -0.950425 0.522222 V2 1.69833 -0.997476 0.693403
+ N0 0.572843 -0.572843 -0.586261 N1 0.700957 -0.406555 -0.58598 N2 0.811395 -0.470609 -0.346647
+ txt003
+STRI
+ V0 1.3937 -1.3937 0.693403 V1 0.997476 -1.69833 0.693403 V2 0.950425 -1.61822 0.522222
+ N0 0.663205 -0.663205 -0.34687 N1 0.470609 -0.811395 -0.346647 N2 0.406555 -0.700957 -0.58598
+ txt003
+STRI
+ V0 0.950425 -1.61822 0.522222 V1 1.32796 -1.32796 0.522222 V2 1.3937 -1.3937 0.693403
+ N0 0.406555 -0.700957 -0.58598 N1 0.572843 -0.572843 -0.586261 N2 0.663205 -0.663205 -0.34687
+ txt003
+STRI
+ V0 0.997476 -1.69833 0.693403 V1 0.527092 -1.8939 0.693403 V2 0.502229 -1.80456 0.522222
+ N0 0.470609 -0.811395 -0.346647 N1 0.244192 -0.905874 -0.346067 N2 0.211045 -0.782908 -0.585248
+ txt003
+STRI
+ V0 0.502229 -1.80456 0.522222 V1 0.950425 -1.61822 0.522222 V2 0.997476 -1.69833 0.693403
+ N0 0.211045 -0.782908 -0.585248 N1 0.406555 -0.700957 -0.58598 N2 0.470609 -0.811395 -0.346647
+ txt003
+STRI
+ V0 0.527092 -1.8939 0.693403 V1 2.22045e-16 -1.96296 0.693403 V2 2.22045e-16 -1.87037 0.522222
+ N0 0.244192 -0.905874 -0.346067 N1 -3.49072e-17 -0.938373 -0.345625 N2 -6.19755e-17 -0.811257 -0.58469
+ txt003
+STRI
+ V0 2.22045e-16 -1.87037 0.522222 V1 0.502229 -1.80456 0.522222 V2 0.527092 -1.8939 0.693403
+ N0 -6.19755e-17 -0.811257 -0.58469 N1 0.211045 -0.782908 -0.585248 N2 0.244192 -0.905874 -0.346067
+ txt003
+STRI
+ V0 1.87037 0 0.522222 V1 1.80456 -0.502229 0.522222 V2 1.68843 -0.469907 0.384375
+ N0 0.811257 0 -0.58469 N1 0.782908 -0.211045 -0.585248 N2 0.673539 -0.181563 -0.716506
+ txt003
+STRI
+ V0 1.68843 -0.469907 0.384375 V1 1.75 0 0.384375 V2 1.87037 0 0.522222
+ N0 0.673539 -0.181563 -0.716506 N1 0.6981 0 -0.716 N2 0.811257 0 -0.58469
+ txt003
+STRI
+ V0 1.80456 -0.502229 0.522222 V1 1.61822 -0.950425 0.522222 V2 1.51407 -0.889259 0.384375
+ N0 0.782908 -0.211045 -0.585248 N1 0.700957 -0.406555 -0.58598 N2 0.602839 -0.349647 -0.717169
+ txt003
+STRI
+ V0 1.51407 -0.889259 0.384375 V1 1.68843 -0.469907 0.384375 V2 1.80456 -0.502229 0.522222
+ N0 0.602839 -0.349647 -0.717169 N1 0.673539 -0.181563 -0.716506 N2 0.782908 -0.211045 -0.585248
+ txt003
+STRI
+ V0 1.61822 -0.950425 0.522222 V1 1.32796 -1.32796 0.522222 V2 1.2425 -1.2425 0.384375
+ N0 0.700957 -0.406555 -0.58598 N1 0.572843 -0.572843 -0.586261 N2 0.492597 -0.492597 -0.717423
+ txt003
+STRI
+ V0 1.2425 -1.2425 0.384375 V1 1.51407 -0.889259 0.384375 V2 1.61822 -0.950425 0.522222
+ N0 0.492597 -0.492597 -0.717423 N1 0.602839 -0.349647 -0.717169 N2 0.700957 -0.406555 -0.58598
+ txt003
+STRI
+ V0 1.32796 -1.32796 0.522222 V1 0.950425 -1.61822 0.522222 V2 0.889259 -1.51407 0.384375
+ N0 0.572843 -0.572843 -0.586261 N1 0.406555 -0.700957 -0.58598 N2 0.349647 -0.602839 -0.717169
+ txt003
+STRI
+ V0 0.889259 -1.51407 0.384375 V1 1.2425 -1.2425 0.384375 V2 1.32796 -1.32796 0.522222
+ N0 0.349647 -0.602839 -0.717169 N1 0.492597 -0.492597 -0.717423 N2 0.572843 -0.572843 -0.586261
+ txt003
+STRI
+ V0 0.950425 -1.61822 0.522222 V1 0.502229 -1.80456 0.522222 V2 0.469907 -1.68843 0.384375
+ N0 0.406555 -0.700957 -0.58598 N1 0.211045 -0.782908 -0.585248 N2 0.181563 -0.673539 -0.716506
+ txt003
+STRI
+ V0 0.469907 -1.68843 0.384375 V1 0.889259 -1.51407 0.384375 V2 0.950425 -1.61822 0.522222
+ N0 0.181563 -0.673539 -0.716506 N1 0.349647 -0.602839 -0.717169 N2 0.406555 -0.700957 -0.58598
+ txt003
+STRI
+ V0 0.502229 -1.80456 0.522222 V1 2.22045e-16 -1.87037 0.522222 V2 2.22045e-16 -1.75 0.384375
+ N0 0.211045 -0.782908 -0.585248 N1 -6.19755e-17 -0.811257 -0.58469 N2 -8.11143e-17 -0.6981 -0.716
+ txt003
+STRI
+ V0 2.22045e-16 -1.75 0.384375 V1 0.469907 -1.68843 0.384375 V2 0.502229 -1.80456 0.522222
+ N0 -8.11143e-17 -0.6981 -0.716 N1 0.181563 -0.673539 -0.716506 N2 0.211045 -0.782908 -0.585248
+ txt003
+STRI
+ V0 1.75 0 0.384375 V1 1.68843 -0.469907 0.384375 V2 1.57229 -0.437586 0.277778
+ N0 0.6981 0 -0.716 N1 0.673539 -0.181563 -0.716506 N2 0.61392 -0.165491 -0.771826
+ txt003
+STRI
+ V0 1.57229 -0.437586 0.277778 V1 1.62963 0 0.277778 V2 1.75 0 0.384375
+ N0 0.61392 -0.165491 -0.771826 N1 0.636383 0 -0.771373 N2 0.6981 0 -0.716
+ txt003
+STRI
+ V0 1.68843 -0.469907 0.384375 V1 1.51407 -0.889259 0.384375 V2 1.40993 -0.828093 0.277778
+ N0 0.673539 -0.181563 -0.716506 N1 0.602839 -0.349647 -0.717169 N2 0.549392 -0.318647 -0.77242
+ txt003
+STRI
+ V0 1.40993 -0.828093 0.277778 V1 1.57229 -0.437586 0.277778 V2 1.68843 -0.469907 0.384375
+ N0 0.549392 -0.318647 -0.77242 N1 0.61392 -0.165491 -0.771826 N2 0.673539 -0.181563 -0.716506
+ txt003
+STRI
+ V0 1.51407 -0.889259 0.384375 V1 1.2425 -1.2425 0.384375 V2 1.15704 -1.15704 0.277778
+ N0 0.602839 -0.349647 -0.717169 N1 0.492597 -0.492597 -0.717423 N2 0.448897 -0.448897 -0.772647
+ txt003
+STRI
+ V0 1.15704 -1.15704 0.277778 V1 1.40993 -0.828093 0.277778 V2 1.51407 -0.889259 0.384375
+ N0 0.448897 -0.448897 -0.772647 N1 0.549392 -0.318647 -0.77242 N2 0.602839 -0.349647 -0.717169
+ txt003
+STRI
+ V0 1.2425 -1.2425 0.384375 V1 0.889259 -1.51407 0.384375 V2 0.828093 -1.40993 0.277778
+ N0 0.492597 -0.492597 -0.717423 N1 0.349647 -0.602839 -0.717169 N2 0.318647 -0.549392 -0.77242
+ txt003
+STRI
+ V0 0.828093 -1.40993 0.277778 V1 1.15704 -1.15704 0.277778 V2 1.2425 -1.2425 0.384375
+ N0 0.318647 -0.549392 -0.77242 N1 0.448897 -0.448897 -0.772647 N2 0.492597 -0.492597 -0.717423
+ txt003
+STRI
+ V0 0.889259 -1.51407 0.384375 V1 0.469907 -1.68843 0.384375 V2 0.437586 -1.57229 0.277778
+ N0 0.349647 -0.602839 -0.717169 N1 0.181563 -0.673539 -0.716506 N2 0.165491 -0.61392 -0.771826
+ txt003
+STRI
+ V0 0.437586 -1.57229 0.277778 V1 0.828093 -1.40993 0.277778 V2 0.889259 -1.51407 0.384375
+ N0 0.165491 -0.61392 -0.771826 N1 0.318647 -0.549392 -0.77242 N2 0.349647 -0.602839 -0.717169
+ txt003
+STRI
+ V0 0.469907 -1.68843 0.384375 V1 2.22045e-16 -1.75 0.384375 V2 0 -1.62963 0.277778
+ N0 0.181563 -0.673539 -0.716506 N1 -8.11143e-17 -0.6981 -0.716 N2 -1.97068e-16 -0.636383 -0.771373
+ txt003
+STRI
+ V0 0 -1.62963 0.277778 V1 0.437586 -1.57229 0.277778 V2 0.469907 -1.68843 0.384375
+ N0 -1.97068e-16 -0.636383 -0.771373 N1 0.165491 -0.61392 -0.771826 N2 0.181563 -0.673539 -0.716506
+ txt003
+STRI
+ V0 1.62963 0 0.277778 V1 1.57229 -0.437586 0.277778 V2 1.48296 -0.412723 0.200347
+ N0 0.636383 0 -0.771373 N1 0.61392 -0.165491 -0.771826 N2 0.651276 -0.175561 -0.738253
+ txt003
+STRI
+ V0 1.48296 -0.412723 0.200347 V1 1.53704 0 0.200347 V2 1.62963 0 0.277778
+ N0 0.651276 -0.175561 -0.738253 N1 0.675056 0 -0.737766 N2 0.636383 0 -0.771373
+ txt003
+STRI
+ V0 1.57229 -0.437586 0.277778 V1 1.40993 -0.828093 0.277778 V2 1.32982 -0.781043 0.200347
+ N0 0.61392 -0.165491 -0.771826 N1 0.549392 -0.318647 -0.77242 N2 0.582878 -0.338069 -0.738893
+ txt003
+STRI
+ V0 1.32982 -0.781043 0.200347 V1 1.48296 -0.412723 0.200347 V2 1.57229 -0.437586 0.277778
+ N0 0.582878 -0.338069 -0.738893 N1 0.651276 -0.175561 -0.738253 N2 0.61392 -0.165491 -0.771826
+ txt003
+STRI
+ V0 1.40993 -0.828093 0.277778 V1 1.15704 -1.15704 0.277778 V2 1.0913 -1.0913 0.200347
+ N0 0.549392 -0.318647 -0.77242 N1 0.448897 -0.448897 -0.772647 N2 0.476275 -0.476275 -0.739137
+ txt003
+STRI
+ V0 1.0913 -1.0913 0.200347 V1 1.32982 -0.781043 0.200347 V2 1.40993 -0.828093 0.277778
+ N0 0.476275 -0.476275 -0.739137 N1 0.582878 -0.338069 -0.738893 N2 0.549392 -0.318647 -0.77242
+ txt003
+STRI
+ V0 1.15704 -1.15704 0.277778 V1 0.828093 -1.40993 0.277778 V2 0.781043 -1.32982 0.200347
+ N0 0.448897 -0.448897 -0.772647 N1 0.318647 -0.549392 -0.77242 N2 0.338069 -0.582878 -0.738893
+ txt003
+STRI
+ V0 0.781043 -1.32982 0.200347 V1 1.0913 -1.0913 0.200347 V2 1.15704 -1.15704 0.277778
+ N0 0.338069 -0.582878 -0.738893 N1 0.476275 -0.476275 -0.739137 N2 0.448897 -0.448897 -0.772647
+ txt003
+STRI
+ V0 0.828093 -1.40993 0.277778 V1 0.437586 -1.57229 0.277778 V2 0.412723 -1.48296 0.200347
+ N0 0.318647 -0.549392 -0.77242 N1 0.165491 -0.61392 -0.771826 N2 0.175561 -0.651276 -0.738253
+ txt003
+STRI
+ V0 0.412723 -1.48296 0.200347 V1 0.781043 -1.32982 0.200347 V2 0.828093 -1.40993 0.277778
+ N0 0.175561 -0.651276 -0.738253 N1 0.338069 -0.582878 -0.738893 N2 0.318647 -0.549392 -0.77242
+ txt003
+STRI
+ V0 0.437586 -1.57229 0.277778 V1 0 -1.62963 0.277778 V2 0 -1.53704 0.200347
+ N0 0.165491 -0.61392 -0.771826 N1 -1.97068e-16 -0.636383 -0.771373 N2 -9.51605e-17 -0.675056 -0.737766
+ txt003
+STRI
+ V0 0 -1.53704 0.200347 V1 0.412723 -1.48296 0.200347 V2 0.437586 -1.57229 0.277778
+ N0 -9.51605e-17 -0.675056 -0.737766 N1 0.175561 -0.651276 -0.738253 N2 0.165491 -0.61392 -0.771826
+ txt003
+STRI
+ V0 1.53704 0 0.200347 V1 1.48296 -0.412723 0.200347 V2 1.44722 -0.402778 0.15
+ N0 0.675056 0 -0.737766 N1 0.651276 -0.175561 -0.738253 N2 0.965535 -0.260275 0
+ txt003
+STRI
+ V0 1.44722 -0.402778 0.15 V1 1.5 0 0.15 V2 1.53704 0 0.200347
+ N0 0.965535 -0.260275 0 N1 1 0 0 N2 0.675056 0 -0.737766
+ txt003
+STRI
+ V0 1.48296 -0.412723 0.200347 V1 1.32982 -0.781043 0.200347 V2 1.29778 -0.762222 0.15
+ N0 0.651276 -0.175561 -0.738253 N1 0.582878 -0.338069 -0.738893 N2 0.865031 -0.501718 0
+ txt003
+STRI
+ V0 1.29778 -0.762222 0.15 V1 1.44722 -0.402778 0.15 V2 1.48296 -0.412723 0.200347
+ N0 0.865031 -0.501718 0 N1 0.965535 -0.260275 0 N2 0.651276 -0.175561 -0.738253
+ txt003
+STRI
+ V0 1.32982 -0.781043 0.200347 V1 1.0913 -1.0913 0.200347 V2 1.065 -1.065 0.15
+ N0 0.582878 -0.338069 -0.738893 N1 0.476275 -0.476275 -0.739137 N2 0.707107 -0.707107 0
+ txt003
+STRI
+ V0 1.065 -1.065 0.15 V1 1.29778 -0.762222 0.15 V2 1.32982 -0.781043 0.200347
+ N0 0.707107 -0.707107 0 N1 0.865031 -0.501718 0 N2 0.582878 -0.338069 -0.738893
+ txt003
+STRI
+ V0 1.0913 -1.0913 0.200347 V1 0.781043 -1.32982 0.200347 V2 0.762222 -1.29778 0.15
+ N0 0.476275 -0.476275 -0.739137 N1 0.338069 -0.582878 -0.738893 N2 0.501718 -0.865031 0
+ txt003
+STRI
+ V0 0.762222 -1.29778 0.15 V1 1.065 -1.065 0.15 V2 1.0913 -1.0913 0.200347
+ N0 0.501718 -0.865031 0 N1 0.707107 -0.707107 0 N2 0.476275 -0.476275 -0.739137
+ txt003
+STRI
+ V0 0.781043 -1.32982 0.200347 V1 0.412723 -1.48296 0.200347 V2 0.402778 -1.44722 0.15
+ N0 0.338069 -0.582878 -0.738893 N1 0.175561 -0.651276 -0.738253 N2 0.260275 -0.965535 0
+ txt003
+STRI
+ V0 0.402778 -1.44722 0.15 V1 0.762222 -1.29778 0.15 V2 0.781043 -1.32982 0.200347
+ N0 0.260275 -0.965535 0 N1 0.501718 -0.865031 0 N2 0.338069 -0.582878 -0.738893
+ txt003
+STRI
+ V0 0.412723 -1.48296 0.200347 V1 0 -1.53704 0.200347 V2 0 -1.5 0.15
+ N0 0.175561 -0.651276 -0.738253 N1 -9.51605e-17 -0.675056 -0.737766 N2 -0 -1 -0
+ txt003
+STRI
+ V0 0 -1.5 0.15 V1 0.402778 -1.44722 0.15 V2 0.412723 -1.48296 0.200347
+ N0 -0 -1 -0 N1 0.260275 -0.965535 0 N2 0.175561 -0.651276 -0.738253
+ txt003
+STRI
+ V0 0 -2 0.9 V1 -0.537037 -1.92963 0.9 V2 -0.527092 -1.8939 0.693403
+ N0 -0 -1 -0 N1 -0.260275 -0.965535 -0 N2 -0.244192 -0.905874 -0.346067
+ txt003
+STRI
+ V0 -0.527092 -1.8939 0.693403 V1 0 -1.96296 0.693403 V2 0 -2 0.9
+ N0 -0.244192 -0.905874 -0.346067 N1 -0 -0.938373 -0.345625 N2 -0 -1 -0
+ txt003
+STRI
+ V0 -0.537037 -1.92963 0.9 V1 -1.0163 -1.73037 0.9 V2 -0.997476 -1.69833 0.693403
+ N0 -0.260275 -0.965535 -0 N1 -0.501718 -0.865031 -0 N2 -0.470609 -0.811395 -0.346647
+ txt003
+STRI
+ V0 -0.997476 -1.69833 0.693403 V1 -0.527092 -1.8939 0.693403 V2 -0.537037 -1.92963 0.9
+ N0 -0.470609 -0.811395 -0.346647 N1 -0.244192 -0.905874 -0.346067 N2 -0.260275 -0.965535 -0
+ txt003
+STRI
+ V0 -1.0163 -1.73037 0.9 V1 -1.42 -1.42 0.9 V2 -1.3937 -1.3937 0.693403
+ N0 -0.501718 -0.865031 -0 N1 -0.707107 -0.707107 -0 N2 -0.663205 -0.663205 -0.34687
+ txt003
+STRI
+ V0 -1.3937 -1.3937 0.693403 V1 -0.997476 -1.69833 0.693403 V2 -1.0163 -1.73037 0.9
+ N0 -0.663205 -0.663205 -0.34687 N1 -0.470609 -0.811395 -0.346647 N2 -0.501718 -0.865031 -0
+ txt003
+STRI
+ V0 -1.42 -1.42 0.9 V1 -1.73037 -1.0163 0.9 V2 -1.69833 -0.997476 0.693403
+ N0 -0.707107 -0.707107 -0 N1 -0.865031 -0.501718 -0 N2 -0.811395 -0.470609 -0.346647
+ txt003
+STRI
+ V0 -1.69833 -0.997476 0.693403 V1 -1.3937 -1.3937 0.693403 V2 -1.42 -1.42 0.9
+ N0 -0.811395 -0.470609 -0.346647 N1 -0.663205 -0.663205 -0.34687 N2 -0.707107 -0.707107 -0
+ txt003
+STRI
+ V0 -1.73037 -1.0163 0.9 V1 -1.92963 -0.537037 0.9 V2 -1.8939 -0.527092 0.693403
+ N0 -0.865031 -0.501718 -0 N1 -0.965535 -0.260275 -0 N2 -0.905874 -0.244192 -0.346067
+ txt003
+STRI
+ V0 -1.8939 -0.527092 0.693403 V1 -1.69833 -0.997476 0.693403 V2 -1.73037 -1.0163 0.9
+ N0 -0.905874 -0.244192 -0.346067 N1 -0.811395 -0.470609 -0.346647 N2 -0.865031 -0.501718 -0
+ txt003
+STRI
+ V0 -1.92963 -0.537037 0.9 V1 -2 0 0.9 V2 -1.96296 -2.22045e-16 0.693403
+ N0 -0.965535 -0.260275 -0 N1 -1 0 0 N2 -0.938373 3.49072e-17 -0.345625
+ txt003
+STRI
+ V0 -1.96296 -2.22045e-16 0.693403 V1 -1.8939 -0.527092 0.693403 V2 -1.92963 -0.537037 0.9
+ N0 -0.938373 3.49072e-17 -0.345625 N1 -0.905874 -0.244192 -0.346067 N2 -0.965535 -0.260275 -0
+ txt003
+STRI
+ V0 0 -1.96296 0.693403 V1 -0.527092 -1.8939 0.693403 V2 -0.502229 -1.80456 0.522222
+ N0 -0 -0.938373 -0.345625 N1 -0.244192 -0.905874 -0.346067 N2 -0.211045 -0.782908 -0.585248
+ txt003
+STRI
+ V0 -0.502229 -1.80456 0.522222 V1 0 -1.87037 0.522222 V2 0 -1.96296 0.693403
+ N0 -0.211045 -0.782908 -0.585248 N1 -0 -0.811257 -0.58469 N2 -0 -0.938373 -0.345625
+ txt003
+STRI
+ V0 -0.527092 -1.8939 0.693403 V1 -0.997476 -1.69833 0.693403 V2 -0.950425 -1.61822 0.522222
+ N0 -0.244192 -0.905874 -0.346067 N1 -0.470609 -0.811395 -0.346647 N2 -0.406555 -0.700957 -0.58598
+ txt003
+STRI
+ V0 -0.950425 -1.61822 0.522222 V1 -0.502229 -1.80456 0.522222 V2 -0.527092 -1.8939 0.693403
+ N0 -0.406555 -0.700957 -0.58598 N1 -0.211045 -0.782908 -0.585248 N2 -0.244192 -0.905874 -0.346067
+ txt003
+STRI
+ V0 -0.997476 -1.69833 0.693403 V1 -1.3937 -1.3937 0.693403 V2 -1.32796 -1.32796 0.522222
+ N0 -0.470609 -0.811395 -0.346647 N1 -0.663205 -0.663205 -0.34687 N2 -0.572843 -0.572843 -0.586261
+ txt003
+STRI
+ V0 -1.32796 -1.32796 0.522222 V1 -0.950425 -1.61822 0.522222 V2 -0.997476 -1.69833 0.693403
+ N0 -0.572843 -0.572843 -0.586261 N1 -0.406555 -0.700957 -0.58598 N2 -0.470609 -0.811395 -0.346647
+ txt003
+STRI
+ V0 -1.3937 -1.3937 0.693403 V1 -1.69833 -0.997476 0.693403 V2 -1.61822 -0.950425 0.522222
+ N0 -0.663205 -0.663205 -0.34687 N1 -0.811395 -0.470609 -0.346647 N2 -0.700957 -0.406555 -0.58598
+ txt003
+STRI
+ V0 -1.61822 -0.950425 0.522222 V1 -1.32796 -1.32796 0.522222 V2 -1.3937 -1.3937 0.693403
+ N0 -0.700957 -0.406555 -0.58598 N1 -0.572843 -0.572843 -0.586261 N2 -0.663205 -0.663205 -0.34687
+ txt003
+STRI
+ V0 -1.69833 -0.997476 0.693403 V1 -1.8939 -0.527092 0.693403 V2 -1.80456 -0.502229 0.522222
+ N0 -0.811395 -0.470609 -0.346647 N1 -0.905874 -0.244192 -0.346067 N2 -0.782908 -0.211045 -0.585248
+ txt003
+STRI
+ V0 -1.80456 -0.502229 0.522222 V1 -1.61822 -0.950425 0.522222 V2 -1.69833 -0.997476 0.693403
+ N0 -0.782908 -0.211045 -0.585248 N1 -0.700957 -0.406555 -0.58598 N2 -0.811395 -0.470609 -0.346647
+ txt003
+STRI
+ V0 -1.8939 -0.527092 0.693403 V1 -1.96296 -2.22045e-16 0.693403 V2 -1.87037 -2.22045e-16 0.522222
+ N0 -0.905874 -0.244192 -0.346067 N1 -0.938373 3.49072e-17 -0.345625 N2 -0.811257 6.19755e-17 -0.58469
+ txt003
+STRI
+ V0 -1.87037 -2.22045e-16 0.522222 V1 -1.80456 -0.502229 0.522222 V2 -1.8939 -0.527092 0.693403
+ N0 -0.811257 6.19755e-17 -0.58469 N1 -0.782908 -0.211045 -0.585248 N2 -0.905874 -0.244192 -0.346067
+ txt003
+STRI
+ V0 0 -1.87037 0.522222 V1 -0.502229 -1.80456 0.522222 V2 -0.469907 -1.68843 0.384375
+ N0 -0 -0.811257 -0.58469 N1 -0.211045 -0.782908 -0.585248 N2 -0.181563 -0.673539 -0.716506
+ txt003
+STRI
+ V0 -0.469907 -1.68843 0.384375 V1 0 -1.75 0.384375 V2 0 -1.87037 0.522222
+ N0 -0.181563 -0.673539 -0.716506 N1 -0 -0.6981 -0.716 N2 -0 -0.811257 -0.58469
+ txt003
+STRI
+ V0 -0.502229 -1.80456 0.522222 V1 -0.950425 -1.61822 0.522222 V2 -0.889259 -1.51407 0.384375
+ N0 -0.211045 -0.782908 -0.585248 N1 -0.406555 -0.700957 -0.58598 N2 -0.349647 -0.602839 -0.717169
+ txt003
+STRI
+ V0 -0.889259 -1.51407 0.384375 V1 -0.469907 -1.68843 0.384375 V2 -0.502229 -1.80456 0.522222
+ N0 -0.349647 -0.602839 -0.717169 N1 -0.181563 -0.673539 -0.716506 N2 -0.211045 -0.782908 -0.585248
+ txt003
+STRI
+ V0 -0.950425 -1.61822 0.522222 V1 -1.32796 -1.32796 0.522222 V2 -1.2425 -1.2425 0.384375
+ N0 -0.406555 -0.700957 -0.58598 N1 -0.572843 -0.572843 -0.586261 N2 -0.492597 -0.492597 -0.717423
+ txt003
+STRI
+ V0 -1.2425 -1.2425 0.384375 V1 -0.889259 -1.51407 0.384375 V2 -0.950425 -1.61822 0.522222
+ N0 -0.492597 -0.492597 -0.717423 N1 -0.349647 -0.602839 -0.717169 N2 -0.406555 -0.700957 -0.58598
+ txt003
+STRI
+ V0 -1.32796 -1.32796 0.522222 V1 -1.61822 -0.950425 0.522222 V2 -1.51407 -0.889259 0.384375
+ N0 -0.572843 -0.572843 -0.586261 N1 -0.700957 -0.406555 -0.58598 N2 -0.602839 -0.349647 -0.717169
+ txt003
+STRI
+ V0 -1.51407 -0.889259 0.384375 V1 -1.2425 -1.2425 0.384375 V2 -1.32796 -1.32796 0.522222
+ N0 -0.602839 -0.349647 -0.717169 N1 -0.492597 -0.492597 -0.717423 N2 -0.572843 -0.572843 -0.586261
+ txt003
+STRI
+ V0 -1.61822 -0.950425 0.522222 V1 -1.80456 -0.502229 0.522222 V2 -1.68843 -0.469907 0.384375
+ N0 -0.700957 -0.406555 -0.58598 N1 -0.782908 -0.211045 -0.585248 N2 -0.673539 -0.181563 -0.716506
+ txt003
+STRI
+ V0 -1.68843 -0.469907 0.384375 V1 -1.51407 -0.889259 0.384375 V2 -1.61822 -0.950425 0.522222
+ N0 -0.673539 -0.181563 -0.716506 N1 -0.602839 -0.349647 -0.717169 N2 -0.700957 -0.406555 -0.58598
+ txt003
+STRI
+ V0 -1.80456 -0.502229 0.522222 V1 -1.87037 -2.22045e-16 0.522222 V2 -1.75 -2.22045e-16 0.384375
+ N0 -0.782908 -0.211045 -0.585248 N1 -0.811257 6.19755e-17 -0.58469 N2 -0.6981 8.11143e-17 -0.716
+ txt003
+STRI
+ V0 -1.75 -2.22045e-16 0.384375 V1 -1.68843 -0.469907 0.384375 V2 -1.80456 -0.502229 0.522222
+ N0 -0.6981 8.11143e-17 -0.716 N1 -0.673539 -0.181563 -0.716506 N2 -0.782908 -0.211045 -0.585248
+ txt003
+STRI
+ V0 0 -1.75 0.384375 V1 -0.469907 -1.68843 0.384375 V2 -0.437586 -1.57229 0.277778
+ N0 -0 -0.6981 -0.716 N1 -0.181563 -0.673539 -0.716506 N2 -0.165491 -0.61392 -0.771826
+ txt003
+STRI
+ V0 -0.437586 -1.57229 0.277778 V1 0 -1.62963 0.277778 V2 0 -1.75 0.384375
+ N0 -0.165491 -0.61392 -0.771826 N1 -0 -0.636383 -0.771373 N2 -0 -0.6981 -0.716
+ txt003
+STRI
+ V0 -0.469907 -1.68843 0.384375 V1 -0.889259 -1.51407 0.384375 V2 -0.828093 -1.40993 0.277778
+ N0 -0.181563 -0.673539 -0.716506 N1 -0.349647 -0.602839 -0.717169 N2 -0.318647 -0.549392 -0.77242
+ txt003
+STRI
+ V0 -0.828093 -1.40993 0.277778 V1 -0.437586 -1.57229 0.277778 V2 -0.469907 -1.68843 0.384375
+ N0 -0.318647 -0.549392 -0.77242 N1 -0.165491 -0.61392 -0.771826 N2 -0.181563 -0.673539 -0.716506
+ txt003
+STRI
+ V0 -0.889259 -1.51407 0.384375 V1 -1.2425 -1.2425 0.384375 V2 -1.15704 -1.15704 0.277778
+ N0 -0.349647 -0.602839 -0.717169 N1 -0.492597 -0.492597 -0.717423 N2 -0.448897 -0.448897 -0.772647
+ txt003
+STRI
+ V0 -1.15704 -1.15704 0.277778 V1 -0.828093 -1.40993 0.277778 V2 -0.889259 -1.51407 0.384375
+ N0 -0.448897 -0.448897 -0.772647 N1 -0.318647 -0.549392 -0.77242 N2 -0.349647 -0.602839 -0.717169
+ txt003
+STRI
+ V0 -1.2425 -1.2425 0.384375 V1 -1.51407 -0.889259 0.384375 V2 -1.40993 -0.828093 0.277778
+ N0 -0.492597 -0.492597 -0.717423 N1 -0.602839 -0.349647 -0.717169 N2 -0.549392 -0.318647 -0.77242
+ txt003
+STRI
+ V0 -1.40993 -0.828093 0.277778 V1 -1.15704 -1.15704 0.277778 V2 -1.2425 -1.2425 0.384375
+ N0 -0.549392 -0.318647 -0.77242 N1 -0.448897 -0.448897 -0.772647 N2 -0.492597 -0.492597 -0.717423
+ txt003
+STRI
+ V0 -1.51407 -0.889259 0.384375 V1 -1.68843 -0.469907 0.384375 V2 -1.57229 -0.437586 0.277778
+ N0 -0.602839 -0.349647 -0.717169 N1 -0.673539 -0.181563 -0.716506 N2 -0.61392 -0.165491 -0.771826
+ txt003
+STRI
+ V0 -1.57229 -0.437586 0.277778 V1 -1.40993 -0.828093 0.277778 V2 -1.51407 -0.889259 0.384375
+ N0 -0.61392 -0.165491 -0.771826 N1 -0.549392 -0.318647 -0.77242 N2 -0.602839 -0.349647 -0.717169
+ txt003
+STRI
+ V0 -1.68843 -0.469907 0.384375 V1 -1.75 -2.22045e-16 0.384375 V2 -1.62963 0 0.277778
+ N0 -0.673539 -0.181563 -0.716506 N1 -0.6981 8.11143e-17 -0.716 N2 -0.636383 1.97068e-16 -0.771373
+ txt003
+STRI
+ V0 -1.62963 0 0.277778 V1 -1.57229 -0.437586 0.277778 V2 -1.68843 -0.469907 0.384375
+ N0 -0.636383 1.97068e-16 -0.771373 N1 -0.61392 -0.165491 -0.771826 N2 -0.673539 -0.181563 -0.716506
+ txt003
+STRI
+ V0 0 -1.62963 0.277778 V1 -0.437586 -1.57229 0.277778 V2 -0.412723 -1.48296 0.200347
+ N0 -0 -0.636383 -0.771373 N1 -0.165491 -0.61392 -0.771826 N2 -0.175561 -0.651276 -0.738253
+ txt003
+STRI
+ V0 -0.412723 -1.48296 0.200347 V1 0 -1.53704 0.200347 V2 0 -1.62963 0.277778
+ N0 -0.175561 -0.651276 -0.738253 N1 -0 -0.675056 -0.737766 N2 -0 -0.636383 -0.771373
+ txt003
+STRI
+ V0 -0.437586 -1.57229 0.277778 V1 -0.828093 -1.40993 0.277778 V2 -0.781043 -1.32982 0.200347
+ N0 -0.165491 -0.61392 -0.771826 N1 -0.318647 -0.549392 -0.77242 N2 -0.338069 -0.582878 -0.738893
+ txt003
+STRI
+ V0 -0.781043 -1.32982 0.200347 V1 -0.412723 -1.48296 0.200347 V2 -0.437586 -1.57229 0.277778
+ N0 -0.338069 -0.582878 -0.738893 N1 -0.175561 -0.651276 -0.738253 N2 -0.165491 -0.61392 -0.771826
+ txt003
+STRI
+ V0 -0.828093 -1.40993 0.277778 V1 -1.15704 -1.15704 0.277778 V2 -1.0913 -1.0913 0.200347
+ N0 -0.318647 -0.549392 -0.77242 N1 -0.448897 -0.448897 -0.772647 N2 -0.476275 -0.476275 -0.739137
+ txt003
+STRI
+ V0 -1.0913 -1.0913 0.200347 V1 -0.781043 -1.32982 0.200347 V2 -0.828093 -1.40993 0.277778
+ N0 -0.476275 -0.476275 -0.739137 N1 -0.338069 -0.582878 -0.738893 N2 -0.318647 -0.549392 -0.77242
+ txt003
+STRI
+ V0 -1.15704 -1.15704 0.277778 V1 -1.40993 -0.828093 0.277778 V2 -1.32982 -0.781043 0.200347
+ N0 -0.448897 -0.448897 -0.772647 N1 -0.549392 -0.318647 -0.77242 N2 -0.582878 -0.338069 -0.738893
+ txt003
+STRI
+ V0 -1.32982 -0.781043 0.200347 V1 -1.0913 -1.0913 0.200347 V2 -1.15704 -1.15704 0.277778
+ N0 -0.582878 -0.338069 -0.738893 N1 -0.476275 -0.476275 -0.739137 N2 -0.448897 -0.448897 -0.772647
+ txt003
+STRI
+ V0 -1.40993 -0.828093 0.277778 V1 -1.57229 -0.437586 0.277778 V2 -1.48296 -0.412723 0.200347
+ N0 -0.549392 -0.318647 -0.77242 N1 -0.61392 -0.165491 -0.771826 N2 -0.651276 -0.175561 -0.738253
+ txt003
+STRI
+ V0 -1.48296 -0.412723 0.200347 V1 -1.32982 -0.781043 0.200347 V2 -1.40993 -0.828093 0.277778
+ N0 -0.651276 -0.175561 -0.738253 N1 -0.582878 -0.338069 -0.738893 N2 -0.549392 -0.318647 -0.77242
+ txt003
+STRI
+ V0 -1.57229 -0.437586 0.277778 V1 -1.62963 0 0.277778 V2 -1.53704 0 0.200347
+ N0 -0.61392 -0.165491 -0.771826 N1 -0.636383 1.97068e-16 -0.771373 N2 -0.675056 9.51605e-17 -0.737766
+ txt003
+STRI
+ V0 -1.53704 0 0.200347 V1 -1.48296 -0.412723 0.200347 V2 -1.57229 -0.437586 0.277778
+ N0 -0.675056 9.51605e-17 -0.737766 N1 -0.651276 -0.175561 -0.738253 N2 -0.61392 -0.165491 -0.771826
+ txt003
+STRI
+ V0 0 -1.53704 0.200347 V1 -0.412723 -1.48296 0.200347 V2 -0.402778 -1.44722 0.15
+ N0 -0 -0.675056 -0.737766 N1 -0.175561 -0.651276 -0.738253 N2 -0.260275 -0.965535 -0
+ txt003
+STRI
+ V0 -0.402778 -1.44722 0.15 V1 0 -1.5 0.15 V2 0 -1.53704 0.200347
+ N0 -0.260275 -0.965535 -0 N1 -0 -1 -0 N2 -0 -0.675056 -0.737766
+ txt003
+STRI
+ V0 -0.412723 -1.48296 0.200347 V1 -0.781043 -1.32982 0.200347 V2 -0.762222 -1.29778 0.15
+ N0 -0.175561 -0.651276 -0.738253 N1 -0.338069 -0.582878 -0.738893 N2 -0.501718 -0.865031 -0
+ txt003
+STRI
+ V0 -0.762222 -1.29778 0.15 V1 -0.402778 -1.44722 0.15 V2 -0.412723 -1.48296 0.200347
+ N0 -0.501718 -0.865031 -0 N1 -0.260275 -0.965535 -0 N2 -0.175561 -0.651276 -0.738253
+ txt003
+STRI
+ V0 -0.781043 -1.32982 0.200347 V1 -1.0913 -1.0913 0.200347 V2 -1.065 -1.065 0.15
+ N0 -0.338069 -0.582878 -0.738893 N1 -0.476275 -0.476275 -0.739137 N2 -0.707107 -0.707107 -0
+ txt003
+STRI
+ V0 -1.065 -1.065 0.15 V1 -0.762222 -1.29778 0.15 V2 -0.781043 -1.32982 0.200347
+ N0 -0.707107 -0.707107 -0 N1 -0.501718 -0.865031 -0 N2 -0.338069 -0.582878 -0.738893
+ txt003
+STRI
+ V0 -1.0913 -1.0913 0.200347 V1 -1.32982 -0.781043 0.200347 V2 -1.29778 -0.762222 0.15
+ N0 -0.476275 -0.476275 -0.739137 N1 -0.582878 -0.338069 -0.738893 N2 -0.865031 -0.501718 -0
+ txt003
+STRI
+ V0 -1.29778 -0.762222 0.15 V1 -1.065 -1.065 0.15 V2 -1.0913 -1.0913 0.200347
+ N0 -0.865031 -0.501718 -0 N1 -0.707107 -0.707107 -0 N2 -0.476275 -0.476275 -0.739137
+ txt003
+STRI
+ V0 -1.32982 -0.781043 0.200347 V1 -1.48296 -0.412723 0.200347 V2 -1.44722 -0.402778 0.15
+ N0 -0.582878 -0.338069 -0.738893 N1 -0.651276 -0.175561 -0.738253 N2 -0.965535 -0.260275 -0
+ txt003
+STRI
+ V0 -1.44722 -0.402778 0.15 V1 -1.29778 -0.762222 0.15 V2 -1.32982 -0.781043 0.200347
+ N0 -0.965535 -0.260275 -0 N1 -0.865031 -0.501718 -0 N2 -0.582878 -0.338069 -0.738893
+ txt003
+STRI
+ V0 -1.48296 -0.412723 0.200347 V1 -1.53704 0 0.200347 V2 -1.5 0 0.15
+ N0 -0.651276 -0.175561 -0.738253 N1 -0.675056 9.51605e-17 -0.737766 N2 -1 0 0
+ txt003
+STRI
+ V0 -1.5 0 0.15 V1 -1.44722 -0.402778 0.15 V2 -1.48296 -0.412723 0.200347
+ N0 -1 0 0 N1 -0.965535 -0.260275 -0 N2 -0.651276 -0.175561 -0.738253
+ txt003
+STRI
+ V0 -2 0 0.9 V1 -1.92963 0.537037 0.9 V2 -1.8939 0.527092 0.693403
+ N0 -1 0 0 N1 -0.965535 0.260275 0 N2 -0.905874 0.244192 -0.346067
+ txt003
+STRI
+ V0 -1.8939 0.527092 0.693403 V1 -1.96296 0 0.693403 V2 -2 0 0.9
+ N0 -0.905874 0.244192 -0.346067 N1 -0.938373 0 -0.345625 N2 -1 0 0
+ txt003
+STRI
+ V0 -1.92963 0.537037 0.9 V1 -1.73037 1.0163 0.9 V2 -1.69833 0.997476 0.693403
+ N0 -0.965535 0.260275 0 N1 -0.865031 0.501718 0 N2 -0.811395 0.470609 -0.346647
+ txt003
+STRI
+ V0 -1.69833 0.997476 0.693403 V1 -1.8939 0.527092 0.693403 V2 -1.92963 0.537037 0.9
+ N0 -0.811395 0.470609 -0.346647 N1 -0.905874 0.244192 -0.346067 N2 -0.965535 0.260275 0
+ txt003
+STRI
+ V0 -1.73037 1.0163 0.9 V1 -1.42 1.42 0.9 V2 -1.3937 1.3937 0.693403
+ N0 -0.865031 0.501718 0 N1 -0.707107 0.707107 0 N2 -0.663205 0.663205 -0.34687
+ txt003
+STRI
+ V0 -1.3937 1.3937 0.693403 V1 -1.69833 0.997476 0.693403 V2 -1.73037 1.0163 0.9
+ N0 -0.663205 0.663205 -0.34687 N1 -0.811395 0.470609 -0.346647 N2 -0.865031 0.501718 0
+ txt003
+STRI
+ V0 -1.42 1.42 0.9 V1 -1.0163 1.73037 0.9 V2 -0.997476 1.69833 0.693403
+ N0 -0.707107 0.707107 0 N1 -0.501718 0.865031 0 N2 -0.470609 0.811395 -0.346647
+ txt003
+STRI
+ V0 -0.997476 1.69833 0.693403 V1 -1.3937 1.3937 0.693403 V2 -1.42 1.42 0.9
+ N0 -0.470609 0.811395 -0.346647 N1 -0.663205 0.663205 -0.34687 N2 -0.707107 0.707107 0
+ txt003
+STRI
+ V0 -1.0163 1.73037 0.9 V1 -0.537037 1.92963 0.9 V2 -0.527092 1.8939 0.693403
+ N0 -0.501718 0.865031 0 N1 -0.260275 0.965535 0 N2 -0.244192 0.905874 -0.346067
+ txt003
+STRI
+ V0 -0.527092 1.8939 0.693403 V1 -0.997476 1.69833 0.693403 V2 -1.0163 1.73037 0.9
+ N0 -0.244192 0.905874 -0.346067 N1 -0.470609 0.811395 -0.346647 N2 -0.501718 0.865031 0
+ txt003
+STRI
+ V0 -0.537037 1.92963 0.9 V1 0 2 0.9 V2 -2.22045e-16 1.96296 0.693403
+ N0 -0.260275 0.965535 0 N1 -0 1 0 N2 3.49072e-17 0.938373 -0.345625
+ txt003
+STRI
+ V0 -2.22045e-16 1.96296 0.693403 V1 -0.527092 1.8939 0.693403 V2 -0.537037 1.92963 0.9
+ N0 3.49072e-17 0.938373 -0.345625 N1 -0.244192 0.905874 -0.346067 N2 -0.260275 0.965535 0
+ txt003
+STRI
+ V0 -1.96296 0 0.693403 V1 -1.8939 0.527092 0.693403 V2 -1.80456 0.502229 0.522222
+ N0 -0.938373 0 -0.345625 N1 -0.905874 0.244192 -0.346067 N2 -0.782908 0.211045 -0.585248
+ txt003
+STRI
+ V0 -1.80456 0.502229 0.522222 V1 -1.87037 0 0.522222 V2 -1.96296 0 0.693403
+ N0 -0.782908 0.211045 -0.585248 N1 -0.811257 0 -0.58469 N2 -0.938373 0 -0.345625
+ txt003
+STRI
+ V0 -1.8939 0.527092 0.693403 V1 -1.69833 0.997476 0.693403 V2 -1.61822 0.950425 0.522222
+ N0 -0.905874 0.244192 -0.346067 N1 -0.811395 0.470609 -0.346647 N2 -0.700957 0.406555 -0.58598
+ txt003
+STRI
+ V0 -1.61822 0.950425 0.522222 V1 -1.80456 0.502229 0.522222 V2 -1.8939 0.527092 0.693403
+ N0 -0.700957 0.406555 -0.58598 N1 -0.782908 0.211045 -0.585248 N2 -0.905874 0.244192 -0.346067
+ txt003
+STRI
+ V0 -1.69833 0.997476 0.693403 V1 -1.3937 1.3937 0.693403 V2 -1.32796 1.32796 0.522222
+ N0 -0.811395 0.470609 -0.346647 N1 -0.663205 0.663205 -0.34687 N2 -0.572843 0.572843 -0.586261
+ txt003
+STRI
+ V0 -1.32796 1.32796 0.522222 V1 -1.61822 0.950425 0.522222 V2 -1.69833 0.997476 0.693403
+ N0 -0.572843 0.572843 -0.586261 N1 -0.700957 0.406555 -0.58598 N2 -0.811395 0.470609 -0.346647
+ txt003
+STRI
+ V0 -1.3937 1.3937 0.693403 V1 -0.997476 1.69833 0.693403 V2 -0.950425 1.61822 0.522222
+ N0 -0.663205 0.663205 -0.34687 N1 -0.470609 0.811395 -0.346647 N2 -0.406555 0.700957 -0.58598
+ txt003
+STRI
+ V0 -0.950425 1.61822 0.522222 V1 -1.32796 1.32796 0.522222 V2 -1.3937 1.3937 0.693403
+ N0 -0.406555 0.700957 -0.58598 N1 -0.572843 0.572843 -0.586261 N2 -0.663205 0.663205 -0.34687
+ txt003
+STRI
+ V0 -0.997476 1.69833 0.693403 V1 -0.527092 1.8939 0.693403 V2 -0.502229 1.80456 0.522222
+ N0 -0.470609 0.811395 -0.346647 N1 -0.244192 0.905874 -0.346067 N2 -0.211045 0.782908 -0.585248
+ txt003
+STRI
+ V0 -0.502229 1.80456 0.522222 V1 -0.950425 1.61822 0.522222 V2 -0.997476 1.69833 0.693403
+ N0 -0.211045 0.782908 -0.585248 N1 -0.406555 0.700957 -0.58598 N2 -0.470609 0.811395 -0.346647
+ txt003
+STRI
+ V0 -0.527092 1.8939 0.693403 V1 -2.22045e-16 1.96296 0.693403 V2 -2.22045e-16 1.87037 0.522222
+ N0 -0.244192 0.905874 -0.346067 N1 3.49072e-17 0.938373 -0.345625 N2 6.19755e-17 0.811257 -0.58469
+ txt003
+STRI
+ V0 -2.22045e-16 1.87037 0.522222 V1 -0.502229 1.80456 0.522222 V2 -0.527092 1.8939 0.693403
+ N0 6.19755e-17 0.811257 -0.58469 N1 -0.211045 0.782908 -0.585248 N2 -0.244192 0.905874 -0.346067
+ txt003
+STRI
+ V0 -1.87037 0 0.522222 V1 -1.80456 0.502229 0.522222 V2 -1.68843 0.469907 0.384375
+ N0 -0.811257 0 -0.58469 N1 -0.782908 0.211045 -0.585248 N2 -0.673539 0.181563 -0.716506
+ txt003
+STRI
+ V0 -1.68843 0.469907 0.384375 V1 -1.75 0 0.384375 V2 -1.87037 0 0.522222
+ N0 -0.673539 0.181563 -0.716506 N1 -0.6981 0 -0.716 N2 -0.811257 0 -0.58469
+ txt003
+STRI
+ V0 -1.80456 0.502229 0.522222 V1 -1.61822 0.950425 0.522222 V2 -1.51407 0.889259 0.384375
+ N0 -0.782908 0.211045 -0.585248 N1 -0.700957 0.406555 -0.58598 N2 -0.602839 0.349647 -0.717169
+ txt003
+STRI
+ V0 -1.51407 0.889259 0.384375 V1 -1.68843 0.469907 0.384375 V2 -1.80456 0.502229 0.522222
+ N0 -0.602839 0.349647 -0.717169 N1 -0.673539 0.181563 -0.716506 N2 -0.782908 0.211045 -0.585248
+ txt003
+STRI
+ V0 -1.61822 0.950425 0.522222 V1 -1.32796 1.32796 0.522222 V2 -1.2425 1.2425 0.384375
+ N0 -0.700957 0.406555 -0.58598 N1 -0.572843 0.572843 -0.586261 N2 -0.492597 0.492597 -0.717423
+ txt003
+STRI
+ V0 -1.2425 1.2425 0.384375 V1 -1.51407 0.889259 0.384375 V2 -1.61822 0.950425 0.522222
+ N0 -0.492597 0.492597 -0.717423 N1 -0.602839 0.349647 -0.717169 N2 -0.700957 0.406555 -0.58598
+ txt003
+STRI
+ V0 -1.32796 1.32796 0.522222 V1 -0.950425 1.61822 0.522222 V2 -0.889259 1.51407 0.384375
+ N0 -0.572843 0.572843 -0.586261 N1 -0.406555 0.700957 -0.58598 N2 -0.349647 0.602839 -0.717169
+ txt003
+STRI
+ V0 -0.889259 1.51407 0.384375 V1 -1.2425 1.2425 0.384375 V2 -1.32796 1.32796 0.522222
+ N0 -0.349647 0.602839 -0.717169 N1 -0.492597 0.492597 -0.717423 N2 -0.572843 0.572843 -0.586261
+ txt003
+STRI
+ V0 -0.950425 1.61822 0.522222 V1 -0.502229 1.80456 0.522222 V2 -0.469907 1.68843 0.384375
+ N0 -0.406555 0.700957 -0.58598 N1 -0.211045 0.782908 -0.585248 N2 -0.181563 0.673539 -0.716506
+ txt003
+STRI
+ V0 -0.469907 1.68843 0.384375 V1 -0.889259 1.51407 0.384375 V2 -0.950425 1.61822 0.522222
+ N0 -0.181563 0.673539 -0.716506 N1 -0.349647 0.602839 -0.717169 N2 -0.406555 0.700957 -0.58598
+ txt003
+STRI
+ V0 -0.502229 1.80456 0.522222 V1 -2.22045e-16 1.87037 0.522222 V2 -2.22045e-16 1.75 0.384375
+ N0 -0.211045 0.782908 -0.585248 N1 6.19755e-17 0.811257 -0.58469 N2 8.11143e-17 0.6981 -0.716
+ txt003
+STRI
+ V0 -2.22045e-16 1.75 0.384375 V1 -0.469907 1.68843 0.384375 V2 -0.502229 1.80456 0.522222
+ N0 8.11143e-17 0.6981 -0.716 N1 -0.181563 0.673539 -0.716506 N2 -0.211045 0.782908 -0.585248
+ txt003
+STRI
+ V0 -1.75 0 0.384375 V1 -1.68843 0.469907 0.384375 V2 -1.57229 0.437586 0.277778
+ N0 -0.6981 0 -0.716 N1 -0.673539 0.181563 -0.716506 N2 -0.61392 0.165491 -0.771826
+ txt003
+STRI
+ V0 -1.57229 0.437586 0.277778 V1 -1.62963 0 0.277778 V2 -1.75 0 0.384375
+ N0 -0.61392 0.165491 -0.771826 N1 -0.636383 0 -0.771373 N2 -0.6981 0 -0.716
+ txt003
+STRI
+ V0 -1.68843 0.469907 0.384375 V1 -1.51407 0.889259 0.384375 V2 -1.40993 0.828093 0.277778
+ N0 -0.673539 0.181563 -0.716506 N1 -0.602839 0.349647 -0.717169 N2 -0.549392 0.318647 -0.77242
+ txt003
+STRI
+ V0 -1.40993 0.828093 0.277778 V1 -1.57229 0.437586 0.277778 V2 -1.68843 0.469907 0.384375
+ N0 -0.549392 0.318647 -0.77242 N1 -0.61392 0.165491 -0.771826 N2 -0.673539 0.181563 -0.716506
+ txt003
+STRI
+ V0 -1.51407 0.889259 0.384375 V1 -1.2425 1.2425 0.384375 V2 -1.15704 1.15704 0.277778
+ N0 -0.602839 0.349647 -0.717169 N1 -0.492597 0.492597 -0.717423 N2 -0.448897 0.448897 -0.772647
+ txt003
+STRI
+ V0 -1.15704 1.15704 0.277778 V1 -1.40993 0.828093 0.277778 V2 -1.51407 0.889259 0.384375
+ N0 -0.448897 0.448897 -0.772647 N1 -0.549392 0.318647 -0.77242 N2 -0.602839 0.349647 -0.717169
+ txt003
+STRI
+ V0 -1.2425 1.2425 0.384375 V1 -0.889259 1.51407 0.384375 V2 -0.828093 1.40993 0.277778
+ N0 -0.492597 0.492597 -0.717423 N1 -0.349647 0.602839 -0.717169 N2 -0.318647 0.549392 -0.77242
+ txt003
+STRI
+ V0 -0.828093 1.40993 0.277778 V1 -1.15704 1.15704 0.277778 V2 -1.2425 1.2425 0.384375
+ N0 -0.318647 0.549392 -0.77242 N1 -0.448897 0.448897 -0.772647 N2 -0.492597 0.492597 -0.717423
+ txt003
+STRI
+ V0 -0.889259 1.51407 0.384375 V1 -0.469907 1.68843 0.384375 V2 -0.437586 1.57229 0.277778
+ N0 -0.349647 0.602839 -0.717169 N1 -0.181563 0.673539 -0.716506 N2 -0.165491 0.61392 -0.771826
+ txt003
+STRI
+ V0 -0.437586 1.57229 0.277778 V1 -0.828093 1.40993 0.277778 V2 -0.889259 1.51407 0.384375
+ N0 -0.165491 0.61392 -0.771826 N1 -0.318647 0.549392 -0.77242 N2 -0.349647 0.602839 -0.717169
+ txt003
+STRI
+ V0 -0.469907 1.68843 0.384375 V1 -2.22045e-16 1.75 0.384375 V2 0 1.62963 0.277778
+ N0 -0.181563 0.673539 -0.716506 N1 8.11143e-17 0.6981 -0.716 N2 1.97068e-16 0.636383 -0.771373
+ txt003
+STRI
+ V0 0 1.62963 0.277778 V1 -0.437586 1.57229 0.277778 V2 -0.469907 1.68843 0.384375
+ N0 1.97068e-16 0.636383 -0.771373 N1 -0.165491 0.61392 -0.771826 N2 -0.181563 0.673539 -0.716506
+ txt003
+STRI
+ V0 -1.62963 0 0.277778 V1 -1.57229 0.437586 0.277778 V2 -1.48296 0.412723 0.200347
+ N0 -0.636383 0 -0.771373 N1 -0.61392 0.165491 -0.771826 N2 -0.651276 0.175561 -0.738253
+ txt003
+STRI
+ V0 -1.48296 0.412723 0.200347 V1 -1.53704 0 0.200347 V2 -1.62963 0 0.277778
+ N0 -0.651276 0.175561 -0.738253 N1 -0.675056 0 -0.737766 N2 -0.636383 0 -0.771373
+ txt003
+STRI
+ V0 -1.57229 0.437586 0.277778 V1 -1.40993 0.828093 0.277778 V2 -1.32982 0.781043 0.200347
+ N0 -0.61392 0.165491 -0.771826 N1 -0.549392 0.318647 -0.77242 N2 -0.582878 0.338069 -0.738893
+ txt003
+STRI
+ V0 -1.32982 0.781043 0.200347 V1 -1.48296 0.412723 0.200347 V2 -1.57229 0.437586 0.277778
+ N0 -0.582878 0.338069 -0.738893 N1 -0.651276 0.175561 -0.738253 N2 -0.61392 0.165491 -0.771826
+ txt003
+STRI
+ V0 -1.40993 0.828093 0.277778 V1 -1.15704 1.15704 0.277778 V2 -1.0913 1.0913 0.200347
+ N0 -0.549392 0.318647 -0.77242 N1 -0.448897 0.448897 -0.772647 N2 -0.476275 0.476275 -0.739137
+ txt003
+STRI
+ V0 -1.0913 1.0913 0.200347 V1 -1.32982 0.781043 0.200347 V2 -1.40993 0.828093 0.277778
+ N0 -0.476275 0.476275 -0.739137 N1 -0.582878 0.338069 -0.738893 N2 -0.549392 0.318647 -0.77242
+ txt003
+STRI
+ V0 -1.15704 1.15704 0.277778 V1 -0.828093 1.40993 0.277778 V2 -0.781043 1.32982 0.200347
+ N0 -0.448897 0.448897 -0.772647 N1 -0.318647 0.549392 -0.77242 N2 -0.338069 0.582878 -0.738893
+ txt003
+STRI
+ V0 -0.781043 1.32982 0.200347 V1 -1.0913 1.0913 0.200347 V2 -1.15704 1.15704 0.277778
+ N0 -0.338069 0.582878 -0.738893 N1 -0.476275 0.476275 -0.739137 N2 -0.448897 0.448897 -0.772647
+ txt003
+STRI
+ V0 -0.828093 1.40993 0.277778 V1 -0.437586 1.57229 0.277778 V2 -0.412723 1.48296 0.200347
+ N0 -0.318647 0.549392 -0.77242 N1 -0.165491 0.61392 -0.771826 N2 -0.175561 0.651276 -0.738253
+ txt003
+STRI
+ V0 -0.412723 1.48296 0.200347 V1 -0.781043 1.32982 0.200347 V2 -0.828093 1.40993 0.277778
+ N0 -0.175561 0.651276 -0.738253 N1 -0.338069 0.582878 -0.738893 N2 -0.318647 0.549392 -0.77242
+ txt003
+STRI
+ V0 -0.437586 1.57229 0.277778 V1 0 1.62963 0.277778 V2 0 1.53704 0.200347
+ N0 -0.165491 0.61392 -0.771826 N1 1.97068e-16 0.636383 -0.771373 N2 9.51605e-17 0.675056 -0.737766
+ txt003
+STRI
+ V0 0 1.53704 0.200347 V1 -0.412723 1.48296 0.200347 V2 -0.437586 1.57229 0.277778
+ N0 9.51605e-17 0.675056 -0.737766 N1 -0.175561 0.651276 -0.738253 N2 -0.165491 0.61392 -0.771826
+ txt003
+STRI
+ V0 -1.53704 0 0.200347 V1 -1.48296 0.412723 0.200347 V2 -1.44722 0.402778 0.15
+ N0 -0.675056 0 -0.737766 N1 -0.651276 0.175561 -0.738253 N2 -0.965535 0.260275 0
+ txt003
+STRI
+ V0 -1.44722 0.402778 0.15 V1 -1.5 0 0.15 V2 -1.53704 0 0.200347
+ N0 -0.965535 0.260275 0 N1 -1 0 0 N2 -0.675056 0 -0.737766
+ txt003
+STRI
+ V0 -1.48296 0.412723 0.200347 V1 -1.32982 0.781043 0.200347 V2 -1.29778 0.762222 0.15
+ N0 -0.651276 0.175561 -0.738253 N1 -0.582878 0.338069 -0.738893 N2 -0.865031 0.501718 0
+ txt003
+STRI
+ V0 -1.29778 0.762222 0.15 V1 -1.44722 0.402778 0.15 V2 -1.48296 0.412723 0.200347
+ N0 -0.865031 0.501718 0 N1 -0.965535 0.260275 0 N2 -0.651276 0.175561 -0.738253
+ txt003
+STRI
+ V0 -1.32982 0.781043 0.200347 V1 -1.0913 1.0913 0.200347 V2 -1.065 1.065 0.15
+ N0 -0.582878 0.338069 -0.738893 N1 -0.476275 0.476275 -0.739137 N2 -0.707107 0.707107 0
+ txt003
+STRI
+ V0 -1.065 1.065 0.15 V1 -1.29778 0.762222 0.15 V2 -1.32982 0.781043 0.200347
+ N0 -0.707107 0.707107 0 N1 -0.865031 0.501718 0 N2 -0.582878 0.338069 -0.738893
+ txt003
+STRI
+ V0 -1.0913 1.0913 0.200347 V1 -0.781043 1.32982 0.200347 V2 -0.762222 1.29778 0.15
+ N0 -0.476275 0.476275 -0.739137 N1 -0.338069 0.582878 -0.738893 N2 -0.501718 0.865031 0
+ txt003
+STRI
+ V0 -0.762222 1.29778 0.15 V1 -1.065 1.065 0.15 V2 -1.0913 1.0913 0.200347
+ N0 -0.501718 0.865031 0 N1 -0.707107 0.707107 0 N2 -0.476275 0.476275 -0.739137
+ txt003
+STRI
+ V0 -0.781043 1.32982 0.200347 V1 -0.412723 1.48296 0.200347 V2 -0.402778 1.44722 0.15
+ N0 -0.338069 0.582878 -0.738893 N1 -0.175561 0.651276 -0.738253 N2 -0.260275 0.965535 0
+ txt003
+STRI
+ V0 -0.402778 1.44722 0.15 V1 -0.762222 1.29778 0.15 V2 -0.781043 1.32982 0.200347
+ N0 -0.260275 0.965535 0 N1 -0.501718 0.865031 0 N2 -0.338069 0.582878 -0.738893
+ txt003
+STRI
+ V0 -0.412723 1.48296 0.200347 V1 0 1.53704 0.200347 V2 0 1.5 0.15
+ N0 -0.175561 0.651276 -0.738253 N1 9.51605e-17 0.675056 -0.737766 N2 -0 1 0
+ txt003
+STRI
+ V0 0 1.5 0.15 V1 -0.402778 1.44722 0.15 V2 -0.412723 1.48296 0.200347
+ N0 -0 1 0 N1 -0.260275 0.965535 0 N2 -0.175561 0.651276 -0.738253
+ txt003
+STRI
+ V0 0 2 0.9 V1 0.537037 1.92963 0.9 V2 0.527092 1.8939 0.693403
+ N0 -0 1 0 N1 0.260275 0.965535 0 N2 0.244192 0.905874 -0.346067
+ txt003
+STRI
+ V0 0.527092 1.8939 0.693403 V1 0 1.96296 0.693403 V2 0 2 0.9
+ N0 0.244192 0.905874 -0.346067 N1 0 0.938373 -0.345625 N2 -0 1 0
+ txt003
+STRI
+ V0 0.537037 1.92963 0.9 V1 1.0163 1.73037 0.9 V2 0.997476 1.69833 0.693403
+ N0 0.260275 0.965535 0 N1 0.501718 0.865031 0 N2 0.470609 0.811395 -0.346647
+ txt003
+STRI
+ V0 0.997476 1.69833 0.693403 V1 0.527092 1.8939 0.693403 V2 0.537037 1.92963 0.9
+ N0 0.470609 0.811395 -0.346647 N1 0.244192 0.905874 -0.346067 N2 0.260275 0.965535 0
+ txt003
+STRI
+ V0 1.0163 1.73037 0.9 V1 1.42 1.42 0.9 V2 1.3937 1.3937 0.693403
+ N0 0.501718 0.865031 0 N1 0.707107 0.707107 0 N2 0.663205 0.663205 -0.34687
+ txt003
+STRI
+ V0 1.3937 1.3937 0.693403 V1 0.997476 1.69833 0.693403 V2 1.0163 1.73037 0.9
+ N0 0.663205 0.663205 -0.34687 N1 0.470609 0.811395 -0.346647 N2 0.501718 0.865031 0
+ txt003
+STRI
+ V0 1.42 1.42 0.9 V1 1.73037 1.0163 0.9 V2 1.69833 0.997476 0.693403
+ N0 0.707107 0.707107 0 N1 0.865031 0.501718 0 N2 0.811395 0.470609 -0.346647
+ txt003
+STRI
+ V0 1.69833 0.997476 0.693403 V1 1.3937 1.3937 0.693403 V2 1.42 1.42 0.9
+ N0 0.811395 0.470609 -0.346647 N1 0.663205 0.663205 -0.34687 N2 0.707107 0.707107 0
+ txt003
+STRI
+ V0 1.73037 1.0163 0.9 V1 1.92963 0.537037 0.9 V2 1.8939 0.527092 0.693403
+ N0 0.865031 0.501718 0 N1 0.965535 0.260275 0 N2 0.905874 0.244192 -0.346067
+ txt003
+STRI
+ V0 1.8939 0.527092 0.693403 V1 1.69833 0.997476 0.693403 V2 1.73037 1.0163 0.9
+ N0 0.905874 0.244192 -0.346067 N1 0.811395 0.470609 -0.346647 N2 0.865031 0.501718 0
+ txt003
+STRI
+ V0 1.92963 0.537037 0.9 V1 2 0 0.9 V2 1.96296 2.22045e-16 0.693403
+ N0 0.965535 0.260275 0 N1 1 0 0 N2 0.938373 -3.49072e-17 -0.345625
+ txt003
+STRI
+ V0 1.96296 2.22045e-16 0.693403 V1 1.8939 0.527092 0.693403 V2 1.92963 0.537037 0.9
+ N0 0.938373 -3.49072e-17 -0.345625 N1 0.905874 0.244192 -0.346067 N2 0.965535 0.260275 0
+ txt003
+STRI
+ V0 0 1.96296 0.693403 V1 0.527092 1.8939 0.693403 V2 0.502229 1.80456 0.522222
+ N0 0 0.938373 -0.345625 N1 0.244192 0.905874 -0.346067 N2 0.211045 0.782908 -0.585248
+ txt003
+STRI
+ V0 0.502229 1.80456 0.522222 V1 0 1.87037 0.522222 V2 0 1.96296 0.693403
+ N0 0.211045 0.782908 -0.585248 N1 0 0.811257 -0.58469 N2 0 0.938373 -0.345625
+ txt003
+STRI
+ V0 0.527092 1.8939 0.693403 V1 0.997476 1.69833 0.693403 V2 0.950425 1.61822 0.522222
+ N0 0.244192 0.905874 -0.346067 N1 0.470609 0.811395 -0.346647 N2 0.406555 0.700957 -0.58598
+ txt003
+STRI
+ V0 0.950425 1.61822 0.522222 V1 0.502229 1.80456 0.522222 V2 0.527092 1.8939 0.693403
+ N0 0.406555 0.700957 -0.58598 N1 0.211045 0.782908 -0.585248 N2 0.244192 0.905874 -0.346067
+ txt003
+STRI
+ V0 0.997476 1.69833 0.693403 V1 1.3937 1.3937 0.693403 V2 1.32796 1.32796 0.522222
+ N0 0.470609 0.811395 -0.346647 N1 0.663205 0.663205 -0.34687 N2 0.572843 0.572843 -0.586261
+ txt003
+STRI
+ V0 1.32796 1.32796 0.522222 V1 0.950425 1.61822 0.522222 V2 0.997476 1.69833 0.693403
+ N0 0.572843 0.572843 -0.586261 N1 0.406555 0.700957 -0.58598 N2 0.470609 0.811395 -0.346647
+ txt003
+STRI
+ V0 1.3937 1.3937 0.693403 V1 1.69833 0.997476 0.693403 V2 1.61822 0.950425 0.522222
+ N0 0.663205 0.663205 -0.34687 N1 0.811395 0.470609 -0.346647 N2 0.700957 0.406555 -0.58598
+ txt003
+STRI
+ V0 1.61822 0.950425 0.522222 V1 1.32796 1.32796 0.522222 V2 1.3937 1.3937 0.693403
+ N0 0.700957 0.406555 -0.58598 N1 0.572843 0.572843 -0.586261 N2 0.663205 0.663205 -0.34687
+ txt003
+STRI
+ V0 1.69833 0.997476 0.693403 V1 1.8939 0.527092 0.693403 V2 1.80456 0.502229 0.522222
+ N0 0.811395 0.470609 -0.346647 N1 0.905874 0.244192 -0.346067 N2 0.782908 0.211045 -0.585248
+ txt003
+STRI
+ V0 1.80456 0.502229 0.522222 V1 1.61822 0.950425 0.522222 V2 1.69833 0.997476 0.693403
+ N0 0.782908 0.211045 -0.585248 N1 0.700957 0.406555 -0.58598 N2 0.811395 0.470609 -0.346647
+ txt003
+STRI
+ V0 1.8939 0.527092 0.693403 V1 1.96296 2.22045e-16 0.693403 V2 1.87037 2.22045e-16 0.522222
+ N0 0.905874 0.244192 -0.346067 N1 0.938373 -3.49072e-17 -0.345625 N2 0.811257 -6.19755e-17 -0.58469
+ txt003
+STRI
+ V0 1.87037 2.22045e-16 0.522222 V1 1.80456 0.502229 0.522222 V2 1.8939 0.527092 0.693403
+ N0 0.811257 -6.19755e-17 -0.58469 N1 0.782908 0.211045 -0.585248 N2 0.905874 0.244192 -0.346067
+ txt003
+STRI
+ V0 0 1.87037 0.522222 V1 0.502229 1.80456 0.522222 V2 0.469907 1.68843 0.384375
+ N0 0 0.811257 -0.58469 N1 0.211045 0.782908 -0.585248 N2 0.181563 0.673539 -0.716506
+ txt003
+STRI
+ V0 0.469907 1.68843 0.384375 V1 0 1.75 0.384375 V2 0 1.87037 0.522222
+ N0 0.181563 0.673539 -0.716506 N1 0 0.6981 -0.716 N2 0 0.811257 -0.58469
+ txt003
+STRI
+ V0 0.502229 1.80456 0.522222 V1 0.950425 1.61822 0.522222 V2 0.889259 1.51407 0.384375
+ N0 0.211045 0.782908 -0.585248 N1 0.406555 0.700957 -0.58598 N2 0.349647 0.602839 -0.717169
+ txt003
+STRI
+ V0 0.889259 1.51407 0.384375 V1 0.469907 1.68843 0.384375 V2 0.502229 1.80456 0.522222
+ N0 0.349647 0.602839 -0.717169 N1 0.181563 0.673539 -0.716506 N2 0.211045 0.782908 -0.585248
+ txt003
+STRI
+ V0 0.950425 1.61822 0.522222 V1 1.32796 1.32796 0.522222 V2 1.2425 1.2425 0.384375
+ N0 0.406555 0.700957 -0.58598 N1 0.572843 0.572843 -0.586261 N2 0.492597 0.492597 -0.717423
+ txt003
+STRI
+ V0 1.2425 1.2425 0.384375 V1 0.889259 1.51407 0.384375 V2 0.950425 1.61822 0.522222
+ N0 0.492597 0.492597 -0.717423 N1 0.349647 0.602839 -0.717169 N2 0.406555 0.700957 -0.58598
+ txt003
+STRI
+ V0 1.32796 1.32796 0.522222 V1 1.61822 0.950425 0.522222 V2 1.51407 0.889259 0.384375
+ N0 0.572843 0.572843 -0.586261 N1 0.700957 0.406555 -0.58598 N2 0.602839 0.349647 -0.717169
+ txt003
+STRI
+ V0 1.51407 0.889259 0.384375 V1 1.2425 1.2425 0.384375 V2 1.32796 1.32796 0.522222
+ N0 0.602839 0.349647 -0.717169 N1 0.492597 0.492597 -0.717423 N2 0.572843 0.572843 -0.586261
+ txt003
+STRI
+ V0 1.61822 0.950425 0.522222 V1 1.80456 0.502229 0.522222 V2 1.68843 0.469907 0.384375
+ N0 0.700957 0.406555 -0.58598 N1 0.782908 0.211045 -0.585248 N2 0.673539 0.181563 -0.716506
+ txt003
+STRI
+ V0 1.68843 0.469907 0.384375 V1 1.51407 0.889259 0.384375 V2 1.61822 0.950425 0.522222
+ N0 0.673539 0.181563 -0.716506 N1 0.602839 0.349647 -0.717169 N2 0.700957 0.406555 -0.58598
+ txt003
+STRI
+ V0 1.80456 0.502229 0.522222 V1 1.87037 2.22045e-16 0.522222 V2 1.75 2.22045e-16 0.384375
+ N0 0.782908 0.211045 -0.585248 N1 0.811257 -6.19755e-17 -0.58469 N2 0.6981 -8.11143e-17 -0.716
+ txt003
+STRI
+ V0 1.75 2.22045e-16 0.384375 V1 1.68843 0.469907 0.384375 V2 1.80456 0.502229 0.522222
+ N0 0.6981 -8.11143e-17 -0.716 N1 0.673539 0.181563 -0.716506 N2 0.782908 0.211045 -0.585248
+ txt003
+STRI
+ V0 0 1.75 0.384375 V1 0.469907 1.68843 0.384375 V2 0.437586 1.57229 0.277778
+ N0 0 0.6981 -0.716 N1 0.181563 0.673539 -0.716506 N2 0.165491 0.61392 -0.771826
+ txt003
+STRI
+ V0 0.437586 1.57229 0.277778 V1 0 1.62963 0.277778 V2 0 1.75 0.384375
+ N0 0.165491 0.61392 -0.771826 N1 0 0.636383 -0.771373 N2 0 0.6981 -0.716
+ txt003
+STRI
+ V0 0.469907 1.68843 0.384375 V1 0.889259 1.51407 0.384375 V2 0.828093 1.40993 0.277778
+ N0 0.181563 0.673539 -0.716506 N1 0.349647 0.602839 -0.717169 N2 0.318647 0.549392 -0.77242
+ txt003
+STRI
+ V0 0.828093 1.40993 0.277778 V1 0.437586 1.57229 0.277778 V2 0.469907 1.68843 0.384375
+ N0 0.318647 0.549392 -0.77242 N1 0.165491 0.61392 -0.771826 N2 0.181563 0.673539 -0.716506
+ txt003
+STRI
+ V0 0.889259 1.51407 0.384375 V1 1.2425 1.2425 0.384375 V2 1.15704 1.15704 0.277778
+ N0 0.349647 0.602839 -0.717169 N1 0.492597 0.492597 -0.717423 N2 0.448897 0.448897 -0.772647
+ txt003
+STRI
+ V0 1.15704 1.15704 0.277778 V1 0.828093 1.40993 0.277778 V2 0.889259 1.51407 0.384375
+ N0 0.448897 0.448897 -0.772647 N1 0.318647 0.549392 -0.77242 N2 0.349647 0.602839 -0.717169
+ txt003
+STRI
+ V0 1.2425 1.2425 0.384375 V1 1.51407 0.889259 0.384375 V2 1.40993 0.828093 0.277778
+ N0 0.492597 0.492597 -0.717423 N1 0.602839 0.349647 -0.717169 N2 0.549392 0.318647 -0.77242
+ txt003
+STRI
+ V0 1.40993 0.828093 0.277778 V1 1.15704 1.15704 0.277778 V2 1.2425 1.2425 0.384375
+ N0 0.549392 0.318647 -0.77242 N1 0.448897 0.448897 -0.772647 N2 0.492597 0.492597 -0.717423
+ txt003
+STRI
+ V0 1.51407 0.889259 0.384375 V1 1.68843 0.469907 0.384375 V2 1.57229 0.437586 0.277778
+ N0 0.602839 0.349647 -0.717169 N1 0.673539 0.181563 -0.716506 N2 0.61392 0.165491 -0.771826
+ txt003
+STRI
+ V0 1.57229 0.437586 0.277778 V1 1.40993 0.828093 0.277778 V2 1.51407 0.889259 0.384375
+ N0 0.61392 0.165491 -0.771826 N1 0.549392 0.318647 -0.77242 N2 0.602839 0.349647 -0.717169
+ txt003
+STRI
+ V0 1.68843 0.469907 0.384375 V1 1.75 2.22045e-16 0.384375 V2 1.62963 0 0.277778
+ N0 0.673539 0.181563 -0.716506 N1 0.6981 -8.11143e-17 -0.716 N2 0.636383 -1.97068e-16 -0.771373
+ txt003
+STRI
+ V0 1.62963 0 0.277778 V1 1.57229 0.437586 0.277778 V2 1.68843 0.469907 0.384375
+ N0 0.636383 -1.97068e-16 -0.771373 N1 0.61392 0.165491 -0.771826 N2 0.673539 0.181563 -0.716506
+ txt003
+STRI
+ V0 0 1.62963 0.277778 V1 0.437586 1.57229 0.277778 V2 0.412723 1.48296 0.200347
+ N0 0 0.636383 -0.771373 N1 0.165491 0.61392 -0.771826 N2 0.175561 0.651276 -0.738253
+ txt003
+STRI
+ V0 0.412723 1.48296 0.200347 V1 0 1.53704 0.200347 V2 0 1.62963 0.277778
+ N0 0.175561 0.651276 -0.738253 N1 0 0.675056 -0.737766 N2 0 0.636383 -0.771373
+ txt003
+STRI
+ V0 0.437586 1.57229 0.277778 V1 0.828093 1.40993 0.277778 V2 0.781043 1.32982 0.200347
+ N0 0.165491 0.61392 -0.771826 N1 0.318647 0.549392 -0.77242 N2 0.338069 0.582878 -0.738893
+ txt003
+STRI
+ V0 0.781043 1.32982 0.200347 V1 0.412723 1.48296 0.200347 V2 0.437586 1.57229 0.277778
+ N0 0.338069 0.582878 -0.738893 N1 0.175561 0.651276 -0.738253 N2 0.165491 0.61392 -0.771826
+ txt003
+STRI
+ V0 0.828093 1.40993 0.277778 V1 1.15704 1.15704 0.277778 V2 1.0913 1.0913 0.200347
+ N0 0.318647 0.549392 -0.77242 N1 0.448897 0.448897 -0.772647 N2 0.476275 0.476275 -0.739137
+ txt003
+STRI
+ V0 1.0913 1.0913 0.200347 V1 0.781043 1.32982 0.200347 V2 0.828093 1.40993 0.277778
+ N0 0.476275 0.476275 -0.739137 N1 0.338069 0.582878 -0.738893 N2 0.318647 0.549392 -0.77242
+ txt003
+STRI
+ V0 1.15704 1.15704 0.277778 V1 1.40993 0.828093 0.277778 V2 1.32982 0.781043 0.200347
+ N0 0.448897 0.448897 -0.772647 N1 0.549392 0.318647 -0.77242 N2 0.582878 0.338069 -0.738893
+ txt003
+STRI
+ V0 1.32982 0.781043 0.200347 V1 1.0913 1.0913 0.200347 V2 1.15704 1.15704 0.277778
+ N0 0.582878 0.338069 -0.738893 N1 0.476275 0.476275 -0.739137 N2 0.448897 0.448897 -0.772647
+ txt003
+STRI
+ V0 1.40993 0.828093 0.277778 V1 1.57229 0.437586 0.277778 V2 1.48296 0.412723 0.200347
+ N0 0.549392 0.318647 -0.77242 N1 0.61392 0.165491 -0.771826 N2 0.651276 0.175561 -0.738253
+ txt003
+STRI
+ V0 1.48296 0.412723 0.200347 V1 1.32982 0.781043 0.200347 V2 1.40993 0.828093 0.277778
+ N0 0.651276 0.175561 -0.738253 N1 0.582878 0.338069 -0.738893 N2 0.549392 0.318647 -0.77242
+ txt003
+STRI
+ V0 1.57229 0.437586 0.277778 V1 1.62963 0 0.277778 V2 1.53704 0 0.200347
+ N0 0.61392 0.165491 -0.771826 N1 0.636383 -1.97068e-16 -0.771373 N2 0.675056 -9.51605e-17 -0.737766
+ txt003
+STRI
+ V0 1.53704 0 0.200347 V1 1.48296 0.412723 0.200347 V2 1.57229 0.437586 0.277778
+ N0 0.675056 -9.51605e-17 -0.737766 N1 0.651276 0.175561 -0.738253 N2 0.61392 0.165491 -0.771826
+ txt003
+STRI
+ V0 0 1.53704 0.200347 V1 0.412723 1.48296 0.200347 V2 0.402778 1.44722 0.15
+ N0 0 0.675056 -0.737766 N1 0.175561 0.651276 -0.738253 N2 0.260275 0.965535 0
+ txt003
+STRI
+ V0 0.402778 1.44722 0.15 V1 0 1.5 0.15 V2 0 1.53704 0.200347
+ N0 0.260275 0.965535 0 N1 -0 1 0 N2 0 0.675056 -0.737766
+ txt003
+STRI
+ V0 0.412723 1.48296 0.200347 V1 0.781043 1.32982 0.200347 V2 0.762222 1.29778 0.15
+ N0 0.175561 0.651276 -0.738253 N1 0.338069 0.582878 -0.738893 N2 0.501718 0.865031 0
+ txt003
+STRI
+ V0 0.762222 1.29778 0.15 V1 0.402778 1.44722 0.15 V2 0.412723 1.48296 0.200347
+ N0 0.501718 0.865031 0 N1 0.260275 0.965535 0 N2 0.175561 0.651276 -0.738253
+ txt003
+STRI
+ V0 0.781043 1.32982 0.200347 V1 1.0913 1.0913 0.200347 V2 1.065 1.065 0.15
+ N0 0.338069 0.582878 -0.738893 N1 0.476275 0.476275 -0.739137 N2 0.707107 0.707107 0
+ txt003
+STRI
+ V0 1.065 1.065 0.15 V1 0.762222 1.29778 0.15 V2 0.781043 1.32982 0.200347
+ N0 0.707107 0.707107 0 N1 0.501718 0.865031 0 N2 0.338069 0.582878 -0.738893
+ txt003
+STRI
+ V0 1.0913 1.0913 0.200347 V1 1.32982 0.781043 0.200347 V2 1.29778 0.762222 0.15
+ N0 0.476275 0.476275 -0.739137 N1 0.582878 0.338069 -0.738893 N2 0.865031 0.501718 0
+ txt003
+STRI
+ V0 1.29778 0.762222 0.15 V1 1.065 1.065 0.15 V2 1.0913 1.0913 0.200347
+ N0 0.865031 0.501718 0 N1 0.707107 0.707107 0 N2 0.476275 0.476275 -0.739137
+ txt003
+STRI
+ V0 1.32982 0.781043 0.200347 V1 1.48296 0.412723 0.200347 V2 1.44722 0.402778 0.15
+ N0 0.582878 0.338069 -0.738893 N1 0.651276 0.175561 -0.738253 N2 0.965535 0.260275 0
+ txt003
+STRI
+ V0 1.44722 0.402778 0.15 V1 1.29778 0.762222 0.15 V2 1.32982 0.781043 0.200347
+ N0 0.965535 0.260275 0 N1 0.865031 0.501718 0 N2 0.582878 0.338069 -0.738893
+ txt003
+STRI
+ V0 1.48296 0.412723 0.200347 V1 1.53704 0 0.200347 V2 1.5 0 0.15
+ N0 0.651276 0.175561 -0.738253 N1 0.675056 -9.51605e-17 -0.737766 N2 1 0 0
+ txt003
+STRI
+ V0 1.5 0 0.15 V1 1.44722 0.402778 0.15 V2 1.48296 0.412723 0.200347
+ N0 1 0 0 N1 0.965535 0.260275 0 N2 0.651276 0.175561 -0.738253
+ txt003
+STRI
+ V0 -1.6 0 2.025 V1 -1.59259 -0.125 2.04167 V2 -1.92704 -0.125 2.04055
+ N0 -0 -0 -1 N1 -0 -0.298275 -0.95448 N2 0.0104256 -0.297446 -0.954682
+ txt003
+STRI
+ V0 -1.92704 -0.125 2.04055 V1 -1.92454 0 2.02396 V2 -1.6 0 2.025
+ N0 0.0104256 -0.297446 -0.954682 N1 0.0104645 0 -0.999945 N2 -0 -0 -1
+ txt003
+STRI
+ V0 -1.59259 -0.125 2.04167 V1 -1.57407 -0.2 2.08333 V2 -1.9333 -0.2 2.08202
+ N0 -0 -0.298275 -0.95448 N1 -0 -0.707107 -0.707107 N2 0.00846382 -0.706077 -0.708084
+ txt003
+STRI
+ V0 -1.9333 -0.2 2.08202 V1 -1.92704 -0.125 2.04055 V2 -1.59259 -0.125 2.04167
+ N0 0.00846382 -0.706077 -0.708084 N1 0.0104256 -0.297446 -0.954682 N2 -0 -0.298275 -0.95448
+ txt003
+STRI
+ V0 -1.57407 -0.2 2.08333 V1 -1.55 -0.225 2.1375 V2 -1.94144 -0.225 2.13594
+ N0 -0 -0.707107 -0.707107 N1 0 -1 0 N2 -1.61364e-18 -1 -2.43505e-19
+ txt003
+STRI
+ V0 -1.94144 -0.225 2.13594 V1 -1.9333 -0.2 2.08202 V2 -1.57407 -0.2 2.08333
+ N0 -1.61364e-18 -1 -2.43505e-19 N1 0.00846382 -0.706077 -0.708084 N2 -0 -0.707107 -0.707107
+ txt003
+STRI
+ V0 -1.55 -0.225 2.1375 V1 -1.52593 -0.2 2.19167 V2 -1.94957 -0.2 2.18985
+ N0 0 -1 0 N1 0 -0.707107 0.707107 N2 -0.00997559 -0.706181 0.707961
+ txt003
+STRI
+ V0 -1.94957 -0.2 2.18985 V1 -1.94144 -0.225 2.13594 V2 -1.55 -0.225 2.1375
+ N0 -0.00997559 -0.706181 0.707961 N1 -1.61364e-18 -1 -2.43505e-19 N2 0 -1 0
+ txt003
+STRI
+ V0 -1.52593 -0.2 2.19167 V1 -1.50741 -0.125 2.23333 V2 -1.95583 -0.125 2.23133
+ N0 0 -0.707107 0.707107 N1 0 -0.298275 0.95448 N2 -0.0140841 -0.297589 0.95459
+ txt003
+STRI
+ V0 -1.95583 -0.125 2.23133 V1 -1.94957 -0.2 2.18985 V2 -1.52593 -0.2 2.19167
+ N0 -0.0140841 -0.297589 0.95459 N1 -0.00997559 -0.706181 0.707961 N2 0 -0.707107 0.707107
+ txt003
+STRI
+ V0 -1.50741 -0.125 2.23333 V1 -1.5 0 2.25 V2 -1.95833 0 2.24792
+ N0 0 -0.298275 0.95448 N1 0 1.97373e-15 1 N2 -0.0149983 1.96426e-15 0.999888
+ txt003
+STRI
+ V0 -1.95833 0 2.24792 V1 -1.95583 -0.125 2.23133 V2 -1.50741 -0.125 2.23333
+ N0 -0.0149983 1.96426e-15 0.999888 N1 -0.0140841 -0.297589 0.95459 N2 0 -0.298275 0.95448
+ txt003
+STRI
+ V0 -1.92454 0 2.02396 V1 -1.92704 -0.125 2.04055 V2 -2.20645 -0.125 2.03272
+ N0 0.0104645 0 -0.999945 N1 0.0104256 -0.297446 -0.954682 N2 0.0510028 -0.296675 -0.953616
+ txt003
+STRI
+ V0 -2.20645 -0.125 2.03272 V1 -2.1963 0 2.01667 V2 -1.92454 0 2.02396
+ N0 0.0510028 -0.296675 -0.953616 N1 0.0510696 0 -0.998695 N2 0.0104645 0 -0.999945
+ txt003
+STRI
+ V0 -1.92704 -0.125 2.04055 V1 -1.9333 -0.2 2.08202 V2 -2.23182 -0.2 2.07284
+ N0 0.0104256 -0.297446 -0.954682 N1 0.00846382 -0.706077 -0.708084 N2 0.0415994 -0.706072 -0.706918
+ txt003
+STRI
+ V0 -2.23182 -0.2 2.07284 V1 -2.20645 -0.125 2.03272 V2 -1.92704 -0.125 2.04055
+ N0 0.0415994 -0.706072 -0.706918 N1 0.0510028 -0.296675 -0.953616 N2 0.0104256 -0.297446 -0.954682
+ txt003
+STRI
+ V0 -1.9333 -0.2 2.08202 V1 -1.94144 -0.225 2.13594 V2 -2.26481 -0.225 2.125
+ N0 0.00846382 -0.706077 -0.708084 N1 -1.61364e-18 -1 -2.43505e-19 N2 -7.69071e-18 -1 -4.86421e-18
+ txt003
+STRI
+ V0 -2.26481 -0.225 2.125 V1 -2.23182 -0.2 2.07284 V2 -1.9333 -0.2 2.08202
+ N0 -7.69071e-18 -1 -4.86421e-18 N1 0.0415994 -0.706072 -0.706918 N2 0.00846382 -0.706077 -0.708084
+ txt003
+STRI
+ V0 -1.94144 -0.225 2.13594 V1 -1.94957 -0.2 2.18985 V2 -2.29781 -0.2 2.17716
+ N0 -1.61364e-18 -1 -2.43505e-19 N1 -0.00997559 -0.706181 0.707961 N2 -0.0493858 -0.708239 0.704243
+ txt003
+STRI
+ V0 -2.29781 -0.2 2.17716 V1 -2.26481 -0.225 2.125 V2 -1.94144 -0.225 2.13594
+ N0 -0.0493858 -0.708239 0.704243 N1 -7.69071e-18 -1 -4.86421e-18 N2 -1.61364e-18 -1 -2.43505e-19
+ txt003
+STRI
+ V0 -1.94957 -0.2 2.18985 V1 -1.95583 -0.125 2.23133 V2 -2.32318 -0.125 2.21728
+ N0 -0.00997559 -0.706181 0.707961 N1 -0.0140841 -0.297589 0.95459 N2 -0.0701017 -0.299663 0.951466
+ txt003
+STRI
+ V0 -2.32318 -0.125 2.21728 V1 -2.29781 -0.2 2.17716 V2 -1.94957 -0.2 2.18985
+ N0 -0.0701017 -0.299663 0.951466 N1 -0.0493858 -0.708239 0.704243 N2 -0.00997559 -0.706181 0.707961
+ txt003
+STRI
+ V0 -1.95583 -0.125 2.23133 V1 -1.95833 0 2.24792 V2 -2.33333 0 2.23333
+ N0 -0.0140841 -0.297589 0.95459 N1 -0.0149983 1.96426e-15 0.999888 N2 -0.0747899 1.66682e-15 0.997199
+ txt003
+STRI
+ V0 -2.33333 0 2.23333 V1 -2.32318 -0.125 2.21728 V2 -1.95583 -0.125 2.23133
+ N0 -0.0747899 1.66682e-15 0.997199 N1 -0.0701017 -0.299663 0.951466 N2 -0.0140841 -0.297589 0.95459
+ txt003
+STRI
+ V0 -2.1963 0 2.01667 V1 -2.20645 -0.125 2.03272 V2 -2.42824 -0.125 2.01146
+ N0 0.0510696 0 -0.998695 N1 0.0510028 -0.296675 -0.953616 N2 0.148104 -0.301279 -0.941964
+ txt003
+STRI
+ V0 -2.42824 -0.125 2.01146 V1 -2.4125 0 1.99687 V2 -2.1963 0 2.01667
+ N0 0.148104 -0.301279 -0.941964 N1 0.14834 0 -0.988936 N2 0.0510696 0 -0.998695
+ txt003
+STRI
+ V0 -2.20645 -0.125 2.03272 V1 -2.23182 -0.2 2.07284 V2 -2.46759 -0.2 2.04792
+ N0 0.0510028 -0.296675 -0.953616 N1 0.0415994 -0.706072 -0.706918 N2 0.119688 -0.715388 -0.6884
+ txt003
+STRI
+ V0 -2.46759 -0.2 2.04792 V1 -2.42824 -0.125 2.01146 V2 -2.20645 -0.125 2.03272
+ N0 0.119688 -0.715388 -0.6884 N1 0.148104 -0.301279 -0.941964 N2 0.0510028 -0.296675 -0.953616
+ txt003
+STRI
+ V0 -2.23182 -0.2 2.07284 V1 -2.26481 -0.225 2.125 V2 -2.51875 -0.225 2.09531
+ N0 0.0415994 -0.706072 -0.706918 N1 -7.69071e-18 -1 -4.86421e-18 N2 -1.96915e-17 -1 -2.12543e-17
+ txt003
+STRI
+ V0 -2.51875 -0.225 2.09531 V1 -2.46759 -0.2 2.04792 V2 -2.23182 -0.2 2.07284
+ N0 -1.96915e-17 -1 -2.12543e-17 N1 0.119688 -0.715388 -0.6884 N2 0.0415994 -0.706072 -0.706918
+ txt003
+STRI
+ V0 -2.26481 -0.225 2.125 V1 -2.29781 -0.2 2.17716 V2 -2.56991 -0.2 2.14271
+ N0 -7.69071e-18 -1 -4.86421e-18 N1 -0.0493858 -0.708239 0.704243 N2 -0.141352 -0.724137 0.675015
+ txt003
+STRI
+ V0 -2.56991 -0.2 2.14271 V1 -2.51875 -0.225 2.09531 V2 -2.26481 -0.225 2.125
+ N0 -0.141352 -0.724137 0.675015 N1 -1.96915e-17 -1 -2.12543e-17 N2 -7.69071e-18 -1 -4.86421e-18
+ txt003
+STRI
+ V0 -2.29781 -0.2 2.17716 V1 -2.32318 -0.125 2.21728 V2 -2.60926 -0.125 2.17917
+ N0 -0.0493858 -0.708239 0.704243 N1 -0.0701017 -0.299663 0.951466 N2 -0.204668 -0.313917 0.927128
+ txt003
+STRI
+ V0 -2.60926 -0.125 2.17917 V1 -2.56991 -0.2 2.14271 V2 -2.29781 -0.2 2.17716
+ N0 -0.204668 -0.313917 0.927128 N1 -0.141352 -0.724137 0.675015 N2 -0.0493858 -0.708239 0.704243
+ txt003
+STRI
+ V0 -2.32318 -0.125 2.21728 V1 -2.33333 0 2.23333 V2 -2.625 0 2.19375
+ N0 -0.0701017 -0.299663 0.951466 N1 -0.0747899 1.66682e-15 0.997199 N2 -0.219512 1.81728e-15 0.97561
+ txt003
+STRI
+ V0 -2.625 0 2.19375 V1 -2.60926 -0.125 2.17917 V2 -2.32318 -0.125 2.21728
+ N0 -0.219512 1.81728e-15 0.97561 N1 -0.204668 -0.313917 0.927128 N2 -0.0701017 -0.299663 0.951466
+ txt003
+STRI
+ V0 -2.4125 0 1.99687 V1 -2.42824 -0.125 2.01146 V2 -2.58985 -0.125 1.97006
+ N0 0.14834 0 -0.988936 N1 0.148104 -0.301279 -0.941964 N2 0.359682 -0.323804 -0.875089
+ txt003
+STRI
+ V0 -2.58985 -0.125 1.97006 V1 -2.57037 0 1.95833 V2 -2.4125 0 1.99687
+ N0 0.359682 -0.323804 -0.875089 N1 0.364399 0 -0.931243 N2 0.14834 0 -0.988936
+ txt003
+STRI
+ V0 -2.42824 -0.125 2.01146 V1 -2.46759 -0.2 2.04792 V2 -2.63855 -0.2 1.99938
+ N0 0.148104 -0.301279 -0.941964 N1 0.119688 -0.715388 -0.6884 N2 0.275915 -0.747596 -0.604128
+ txt003
+STRI
+ V0 -2.63855 -0.2 1.99938 V1 -2.58985 -0.125 1.97006 V2 -2.42824 -0.125 2.01146
+ N0 0.275915 -0.747596 -0.604128 N1 0.359682 -0.323804 -0.875089 N2 0.148104 -0.301279 -0.941964
+ txt003
+STRI
+ V0 -2.46759 -0.2 2.04792 V1 -2.51875 -0.225 2.09531 V2 -2.70185 -0.225 2.0375
+ N0 0.119688 -0.715388 -0.6884 N1 -1.96915e-17 -1 -2.12543e-17 N2 -3.40413e-17 -1 -5.65364e-17
+ txt003
+STRI
+ V0 -2.70185 -0.225 2.0375 V1 -2.63855 -0.2 1.99938 V2 -2.46759 -0.2 2.04792
+ N0 -3.40413e-17 -1 -5.65364e-17 N1 0.275915 -0.747596 -0.604128 N2 0.119688 -0.715388 -0.6884
+ txt003
+STRI
+ V0 -2.51875 -0.225 2.09531 V1 -2.56991 -0.2 2.14271 V2 -2.76516 -0.2 2.07562
+ N0 -1.96915e-17 -1 -2.12543e-17 N1 -0.141352 -0.724137 0.675015 N2 -0.313659 -0.763673 0.564289
+ txt003
+STRI
+ V0 -2.76516 -0.2 2.07562 V1 -2.70185 -0.225 2.0375 V2 -2.51875 -0.225 2.09531
+ N0 -0.313659 -0.763673 0.564289 N1 -3.40413e-17 -1 -5.65364e-17 N2 -1.96915e-17 -1 -2.12543e-17
+ txt003
+STRI
+ V0 -2.56991 -0.2 2.14271 V1 -2.60926 -0.125 2.17917 V2 -2.81385 -0.125 2.10494
+ N0 -0.141352 -0.724137 0.675015 N1 -0.204668 -0.313917 0.927128 N2 -0.474611 -0.350859 0.807244
+ txt003
+STRI
+ V0 -2.81385 -0.125 2.10494 V1 -2.76516 -0.2 2.07562 V2 -2.56991 -0.2 2.14271
+ N0 -0.474611 -0.350859 0.807244 N1 -0.313659 -0.763673 0.564289 N2 -0.141352 -0.724137 0.675015
+ txt003
+STRI
+ V0 -2.60926 -0.125 2.17917 V1 -2.625 0 2.19375 V2 -2.83333 0 2.11667
+ N0 -0.204668 -0.313917 0.927128 N1 -0.219512 1.81728e-15 0.97561 N2 -0.514496 1.6713e-15 0.857493
+ txt003
+STRI
+ V0 -2.83333 0 2.11667 V1 -2.81385 -0.125 2.10494 V2 -2.60926 -0.125 2.17917
+ N0 -0.514496 1.6713e-15 0.857493 N1 -0.474611 -0.350859 0.807244 N2 -0.204668 -0.313917 0.927128
+ txt003
+STRI
+ V0 -2.57037 0 1.95833 V1 -2.58985 -0.125 1.97006 V2 -2.6887 -0.125 1.90181
+ N0 0.364399 0 -0.931243 N1 0.359682 -0.323804 -0.875089 N2 0.727532 -0.37029 -0.577566
+ txt003
+STRI
+ V0 -2.6887 -0.125 1.90181 V1 -2.66713 0 1.89479 V2 -2.57037 0 1.95833
+ N0 0.727532 -0.37029 -0.577566 N1 0.767382 0 -0.64119 N2 0.364399 0 -0.931243
+ txt003
+STRI
+ V0 -2.58985 -0.125 1.97006 V1 -2.63855 -0.2 1.99938 V2 -2.74263 -0.2 1.91937
+ N0 0.359682 -0.323804 -0.875089 N1 0.275915 -0.747596 -0.604128 N2 0.497152 -0.792374 -0.35353
+ txt003
+STRI
+ V0 -2.74263 -0.2 1.91937 V1 -2.6887 -0.125 1.90181 V2 -2.58985 -0.125 1.97006
+ N0 0.497152 -0.792374 -0.35353 N1 0.727532 -0.37029 -0.577566 N2 0.359682 -0.323804 -0.875089
+ txt003
+STRI
+ V0 -2.63855 -0.2 1.99938 V1 -2.70185 -0.225 2.0375 V2 -2.81273 -0.225 1.94219
+ N0 0.275915 -0.747596 -0.604128 N1 -3.40413e-17 -1 -5.65364e-17 N2 -3.3285e-17 -1 -1.02253e-16
+ txt003
+STRI
+ V0 -2.81273 -0.225 1.94219 V1 -2.74263 -0.2 1.91937 V2 -2.63855 -0.2 1.99938
+ N0 -3.3285e-17 -1 -1.02253e-16 N1 0.497152 -0.792374 -0.35353 N2 0.275915 -0.747596 -0.604128
+ txt003
+STRI
+ V0 -2.70185 -0.225 2.0375 V1 -2.76516 -0.2 2.07562 V2 -2.88284 -0.2 1.96501
+ N0 -3.40413e-17 -1 -5.65364e-17 N1 -0.313659 -0.763673 0.564289 N2 -0.519903 -0.799556 0.300684
+ txt003
+STRI
+ V0 -2.88284 -0.2 1.96501 V1 -2.81273 -0.225 1.94219 V2 -2.70185 -0.225 2.0375
+ N0 -0.519903 -0.799556 0.300684 N1 -3.3285e-17 -1 -1.02253e-16 N2 -3.40413e-17 -1 -5.65364e-17
+ txt003
+STRI
+ V0 -2.76516 -0.2 2.07562 V1 -2.81385 -0.125 2.10494 V2 -2.93676 -0.125 1.98256
+ N0 -0.313659 -0.763673 0.564289 N1 -0.474611 -0.350859 0.807244 N2 -0.810111 -0.385772 0.441476
+ txt003
+STRI
+ V0 -2.93676 -0.125 1.98256 V1 -2.88284 -0.2 1.96501 V2 -2.76516 -0.2 2.07562
+ N0 -0.810111 -0.385772 0.441476 N1 -0.519903 -0.799556 0.300684 N2 -0.313659 -0.763673 0.564289
+ txt003
+STRI
+ V0 -2.81385 -0.125 2.10494 V1 -2.83333 0 2.11667 V2 -2.95833 0 1.98958
+ N0 -0.474611 -0.350859 0.807244 N1 -0.514496 1.6713e-15 0.857493 N2 -0.882353 9.28814e-16 0.470588
+ txt003
+STRI
+ V0 -2.95833 0 1.98958 V1 -2.93676 -0.125 1.98256 V2 -2.81385 -0.125 2.10494
+ N0 -0.882353 9.28814e-16 0.470588 N1 -0.810111 -0.385772 0.441476 N2 -0.474611 -0.350859 0.807244
+ txt003
+STRI
+ V0 -2.66713 0 1.89479 V1 -2.6887 -0.125 1.90181 V2 -2.72222 -0.125 1.8
+ N0 0.767382 0 -0.64119 N1 0.727532 -0.37029 -0.577566 N2 0.923077 -0.384615 2.05733e-15
+ txt003
+STRI
+ V0 -2.72222 -0.125 1.8 V1 -2.7 0 1.8 V2 -2.66713 0 1.89479
+ N0 0.923077 -0.384615 2.05733e-15 N1 1 0 2.63164e-15 N2 0.767382 0 -0.64119
+ txt003
+STRI
+ V0 -2.6887 -0.125 1.90181 V1 -2.74263 -0.2 1.91937 V2 -2.77778 -0.2 1.8
+ N0 0.727532 -0.37029 -0.577566 N1 0.497152 -0.792374 -0.35353 N2 0.6 -0.8 8.24322e-16
+ txt003
+STRI
+ V0 -2.77778 -0.2 1.8 V1 -2.72222 -0.125 1.8 V2 -2.6887 -0.125 1.90181
+ N0 0.6 -0.8 8.24322e-16 N1 0.923077 -0.384615 2.05733e-15 N2 0.727532 -0.37029 -0.577566
+ txt003
+STRI
+ V0 -2.74263 -0.2 1.91937 V1 -2.81273 -0.225 1.94219 V2 -2.85 -0.225 1.8
+ N0 0.497152 -0.792374 -0.35353 N1 -3.3285e-17 -1 -1.02253e-16 N2 -1.21738e-31 -1 -1.23358e-16
+ txt003
+STRI
+ V0 -2.85 -0.225 1.8 V1 -2.77778 -0.2 1.8 V2 -2.74263 -0.2 1.91937
+ N0 -1.21738e-31 -1 -1.23358e-16 N1 0.6 -0.8 8.24322e-16 N2 0.497152 -0.792374 -0.35353
+ txt003
+STRI
+ V0 -2.81273 -0.225 1.94219 V1 -2.88284 -0.2 1.96501 V2 -2.92222 -0.2 1.8
+ N0 -3.3285e-17 -1 -1.02253e-16 N1 -0.519903 -0.799556 0.300684 N2 -0.6 -0.8 -3.10757e-16
+ txt003
+STRI
+ V0 -2.92222 -0.2 1.8 V1 -2.85 -0.225 1.8 V2 -2.81273 -0.225 1.94219
+ N0 -0.6 -0.8 -3.10757e-16 N1 -1.21738e-31 -1 -1.23358e-16 N2 -3.3285e-17 -1 -1.02253e-16
+ txt003
+STRI
+ V0 -2.88284 -0.2 1.96501 V1 -2.93676 -0.125 1.98256 V2 -2.97778 -0.125 1.8
+ N0 -0.519903 -0.799556 0.300684 N1 -0.810111 -0.385772 0.441476 N2 -0.923077 -0.384615 -1.1396e-16
+ txt003
+STRI
+ V0 -2.97778 -0.125 1.8 V1 -2.92222 -0.2 1.8 V2 -2.88284 -0.2 1.96501
+ N0 -0.923077 -0.384615 -1.1396e-16 N1 -0.6 -0.8 -3.10757e-16 N2 -0.519903 -0.799556 0.300684
+ txt003
+STRI
+ V0 -2.93676 -0.125 1.98256 V1 -2.95833 0 1.98958 V2 -3 0 1.8
+ N0 -0.810111 -0.385772 0.441476 N1 -0.882353 9.28814e-16 0.470588 N2 -1 -4.93432e-16 -0
+ txt003
+STRI
+ V0 -3 0 1.8 V1 -2.97778 -0.125 1.8 V2 -2.93676 -0.125 1.98256
+ N0 -1 -4.93432e-16 -0 N1 -0.923077 -0.384615 -1.1396e-16 N2 -0.810111 -0.385772 0.441476
+ txt003
+STRI
+ V0 -1.5 0 2.25 V1 -1.50741 0.125 2.23333 V2 -1.95583 0.125 2.23133
+ N0 0 -0 1 N1 0 0.298275 0.95448 N2 -0.0140841 0.297589 0.95459
+ txt003
+STRI
+ V0 -1.95583 0.125 2.23133 V1 -1.95833 0 2.24792 V2 -1.5 0 2.25
+ N0 -0.0140841 0.297589 0.95459 N1 -0.0149983 0 0.999888 N2 0 -0 1
+ txt003
+STRI
+ V0 -1.50741 0.125 2.23333 V1 -1.52593 0.2 2.19167 V2 -1.94957 0.2 2.18985
+ N0 0 0.298275 0.95448 N1 0 0.707107 0.707107 N2 -0.00997559 0.706181 0.707961
+ txt003
+STRI
+ V0 -1.94957 0.2 2.18985 V1 -1.95583 0.125 2.23133 V2 -1.50741 0.125 2.23333
+ N0 -0.00997559 0.706181 0.707961 N1 -0.0140841 0.297589 0.95459 N2 0 0.298275 0.95448
+ txt003
+STRI
+ V0 -1.52593 0.2 2.19167 V1 -1.55 0.225 2.1375 V2 -1.94144 0.225 2.13594
+ N0 0 0.707107 0.707107 N1 0 1 0 N2 -1.61364e-18 1 -2.43505e-19
+ txt003
+STRI
+ V0 -1.94144 0.225 2.13594 V1 -1.94957 0.2 2.18985 V2 -1.52593 0.2 2.19167
+ N0 -1.61364e-18 1 -2.43505e-19 N1 -0.00997559 0.706181 0.707961 N2 0 0.707107 0.707107
+ txt003
+STRI
+ V0 -1.55 0.225 2.1375 V1 -1.57407 0.2 2.08333 V2 -1.9333 0.2 2.08202
+ N0 0 1 0 N1 0 0.707107 -0.707107 N2 0.00846382 0.706077 -0.708084
+ txt003
+STRI
+ V0 -1.9333 0.2 2.08202 V1 -1.94144 0.225 2.13594 V2 -1.55 0.225 2.1375
+ N0 0.00846382 0.706077 -0.708084 N1 -1.61364e-18 1 -2.43505e-19 N2 0 1 0
+ txt003
+STRI
+ V0 -1.57407 0.2 2.08333 V1 -1.59259 0.125 2.04167 V2 -1.92704 0.125 2.04055
+ N0 0 0.707107 -0.707107 N1 0 0.298275 -0.95448 N2 0.0104256 0.297446 -0.954682
+ txt003
+STRI
+ V0 -1.92704 0.125 2.04055 V1 -1.9333 0.2 2.08202 V2 -1.57407 0.2 2.08333
+ N0 0.0104256 0.297446 -0.954682 N1 0.00846382 0.706077 -0.708084 N2 0 0.707107 -0.707107
+ txt003
+STRI
+ V0 -1.59259 0.125 2.04167 V1 -1.6 0 2.025 V2 -1.92454 0 2.02396
+ N0 0 0.298275 -0.95448 N1 -0 -4.93432e-16 -1 N2 0.0104645 -4.86951e-16 -0.999945
+ txt003
+STRI
+ V0 -1.92454 0 2.02396 V1 -1.92704 0.125 2.04055 V2 -1.59259 0.125 2.04167
+ N0 0.0104645 -4.86951e-16 -0.999945 N1 0.0104256 0.297446 -0.954682 N2 0 0.298275 -0.95448
+ txt003
+STRI
+ V0 -1.95833 0 2.24792 V1 -1.95583 0.125 2.23133 V2 -2.32318 0.125 2.21728
+ N0 -0.0149983 0 0.999888 N1 -0.0140841 0.297589 0.95459 N2 -0.0701017 0.299663 0.951466
+ txt003
+STRI
+ V0 -2.32318 0.125 2.21728 V1 -2.33333 0 2.23333 V2 -1.95833 0 2.24792
+ N0 -0.0701017 0.299663 0.951466 N1 -0.0747899 0 0.997199 N2 -0.0149983 0 0.999888
+ txt003
+STRI
+ V0 -1.95583 0.125 2.23133 V1 -1.94957 0.2 2.18985 V2 -2.29781 0.2 2.17716
+ N0 -0.0140841 0.297589 0.95459 N1 -0.00997559 0.706181 0.707961 N2 -0.0493858 0.708239 0.704243
+ txt003
+STRI
+ V0 -2.29781 0.2 2.17716 V1 -2.32318 0.125 2.21728 V2 -1.95583 0.125 2.23133
+ N0 -0.0493858 0.708239 0.704243 N1 -0.0701017 0.299663 0.951466 N2 -0.0140841 0.297589 0.95459
+ txt003
+STRI
+ V0 -1.94957 0.2 2.18985 V1 -1.94144 0.225 2.13594 V2 -2.26481 0.225 2.125
+ N0 -0.00997559 0.706181 0.707961 N1 -1.61364e-18 1 -2.43505e-19 N2 -7.69071e-18 1 -4.86421e-18
+ txt003
+STRI
+ V0 -2.26481 0.225 2.125 V1 -2.29781 0.2 2.17716 V2 -1.94957 0.2 2.18985
+ N0 -7.69071e-18 1 -4.86421e-18 N1 -0.0493858 0.708239 0.704243 N2 -0.00997559 0.706181 0.707961
+ txt003
+STRI
+ V0 -1.94144 0.225 2.13594 V1 -1.9333 0.2 2.08202 V2 -2.23182 0.2 2.07284
+ N0 -1.61364e-18 1 -2.43505e-19 N1 0.00846382 0.706077 -0.708084 N2 0.0415994 0.706072 -0.706918
+ txt003
+STRI
+ V0 -2.23182 0.2 2.07284 V1 -2.26481 0.225 2.125 V2 -1.94144 0.225 2.13594
+ N0 0.0415994 0.706072 -0.706918 N1 -7.69071e-18 1 -4.86421e-18 N2 -1.61364e-18 1 -2.43505e-19
+ txt003
+STRI
+ V0 -1.9333 0.2 2.08202 V1 -1.92704 0.125 2.04055 V2 -2.20645 0.125 2.03272
+ N0 0.00846382 0.706077 -0.708084 N1 0.0104256 0.297446 -0.954682 N2 0.0510028 0.296675 -0.953616
+ txt003
+STRI
+ V0 -2.20645 0.125 2.03272 V1 -2.23182 0.2 2.07284 V2 -1.9333 0.2 2.08202
+ N0 0.0510028 0.296675 -0.953616 N1 0.0415994 0.706072 -0.706918 N2 0.00846382 0.706077 -0.708084
+ txt003
+STRI
+ V0 -1.92704 0.125 2.04055 V1 -1.92454 0 2.02396 V2 -2.1963 0 2.01667
+ N0 0.0104256 0.297446 -0.954682 N1 0.0104645 -4.86951e-16 -0.999945 N2 0.0510696 -2.08595e-16 -0.998695
+ txt003
+STRI
+ V0 -2.1963 0 2.01667 V1 -2.20645 0.125 2.03272 V2 -1.92704 0.125 2.04055
+ N0 0.0510696 -2.08595e-16 -0.998695 N1 0.0510028 0.296675 -0.953616 N2 0.0104256 0.297446 -0.954682
+ txt003
+STRI
+ V0 -2.33333 0 2.23333 V1 -2.32318 0.125 2.21728 V2 -2.60926 0.125 2.17917
+ N0 -0.0747899 0 0.997199 N1 -0.0701017 0.299663 0.951466 N2 -0.204668 0.313917 0.927128
+ txt003
+STRI
+ V0 -2.60926 0.125 2.17917 V1 -2.625 0 2.19375 V2 -2.33333 0 2.23333
+ N0 -0.204668 0.313917 0.927128 N1 -0.219512 0 0.97561 N2 -0.0747899 0 0.997199
+ txt003
+STRI
+ V0 -2.32318 0.125 2.21728 V1 -2.29781 0.2 2.17716 V2 -2.56991 0.2 2.14271
+ N0 -0.0701017 0.299663 0.951466 N1 -0.0493858 0.708239 0.704243 N2 -0.141352 0.724137 0.675015
+ txt003
+STRI
+ V0 -2.56991 0.2 2.14271 V1 -2.60926 0.125 2.17917 V2 -2.32318 0.125 2.21728
+ N0 -0.141352 0.724137 0.675015 N1 -0.204668 0.313917 0.927128 N2 -0.0701017 0.299663 0.951466
+ txt003
+STRI
+ V0 -2.29781 0.2 2.17716 V1 -2.26481 0.225 2.125 V2 -2.51875 0.225 2.09531
+ N0 -0.0493858 0.708239 0.704243 N1 -7.69071e-18 1 -4.86421e-18 N2 -1.96915e-17 1 -2.12543e-17
+ txt003
+STRI
+ V0 -2.51875 0.225 2.09531 V1 -2.56991 0.2 2.14271 V2 -2.29781 0.2 2.17716
+ N0 -1.96915e-17 1 -2.12543e-17 N1 -0.141352 0.724137 0.675015 N2 -0.0493858 0.708239 0.704243
+ txt003
+STRI
+ V0 -2.26481 0.225 2.125 V1 -2.23182 0.2 2.07284 V2 -2.46759 0.2 2.04792
+ N0 -7.69071e-18 1 -4.86421e-18 N1 0.0415994 0.706072 -0.706918 N2 0.119688 0.715388 -0.6884
+ txt003
+STRI
+ V0 -2.46759 0.2 2.04792 V1 -2.51875 0.225 2.09531 V2 -2.26481 0.225 2.125
+ N0 0.119688 0.715388 -0.6884 N1 -1.96915e-17 1 -2.12543e-17 N2 -7.69071e-18 1 -4.86421e-18
+ txt003
+STRI
+ V0 -2.23182 0.2 2.07284 V1 -2.20645 0.125 2.03272 V2 -2.42824 0.125 2.01146
+ N0 0.0415994 0.706072 -0.706918 N1 0.0510028 0.296675 -0.953616 N2 0.148104 0.301279 -0.941964
+ txt003
+STRI
+ V0 -2.42824 0.125 2.01146 V1 -2.46759 0.2 2.04792 V2 -2.23182 0.2 2.07284
+ N0 0.148104 0.301279 -0.941964 N1 0.119688 0.715388 -0.6884 N2 0.0415994 0.706072 -0.706918
+ txt003
+STRI
+ V0 -2.20645 0.125 2.03272 V1 -2.1963 0 2.01667 V2 -2.4125 0 1.99687
+ N0 0.0510028 0.296675 -0.953616 N1 0.0510696 -2.08595e-16 -0.998695 N2 0.14834 -4.14777e-16 -0.988936
+ txt003
+STRI
+ V0 -2.4125 0 1.99687 V1 -2.42824 0.125 2.01146 V2 -2.20645 0.125 2.03272
+ N0 0.14834 -4.14777e-16 -0.988936 N1 0.148104 0.301279 -0.941964 N2 0.0510028 0.296675 -0.953616
+ txt003
+STRI
+ V0 -2.625 0 2.19375 V1 -2.60926 0.125 2.17917 V2 -2.81385 0.125 2.10494
+ N0 -0.219512 0 0.97561 N1 -0.204668 0.313917 0.927128 N2 -0.474611 0.350859 0.807244
+ txt003
+STRI
+ V0 -2.81385 0.125 2.10494 V1 -2.83333 0 2.11667 V2 -2.625 0 2.19375
+ N0 -0.474611 0.350859 0.807244 N1 -0.514496 0 0.857493 N2 -0.219512 0 0.97561
+ txt003
+STRI
+ V0 -2.60926 0.125 2.17917 V1 -2.56991 0.2 2.14271 V2 -2.76516 0.2 2.07562
+ N0 -0.204668 0.313917 0.927128 N1 -0.141352 0.724137 0.675015 N2 -0.313659 0.763673 0.564289
+ txt003
+STRI
+ V0 -2.76516 0.2 2.07562 V1 -2.81385 0.125 2.10494 V2 -2.60926 0.125 2.17917
+ N0 -0.313659 0.763673 0.564289 N1 -0.474611 0.350859 0.807244 N2 -0.204668 0.313917 0.927128
+ txt003
+STRI
+ V0 -2.56991 0.2 2.14271 V1 -2.51875 0.225 2.09531 V2 -2.70185 0.225 2.0375
+ N0 -0.141352 0.724137 0.675015 N1 -1.96915e-17 1 -2.12543e-17 N2 -3.40413e-17 1 -5.65364e-17
+ txt003
+STRI
+ V0 -2.70185 0.225 2.0375 V1 -2.76516 0.2 2.07562 V2 -2.56991 0.2 2.14271
+ N0 -3.40413e-17 1 -5.65364e-17 N1 -0.313659 0.763673 0.564289 N2 -0.141352 0.724137 0.675015
+ txt003
+STRI
+ V0 -2.51875 0.225 2.09531 V1 -2.46759 0.2 2.04792 V2 -2.63855 0.2 1.99938
+ N0 -1.96915e-17 1 -2.12543e-17 N1 0.119688 0.715388 -0.6884 N2 0.275915 0.747596 -0.604128
+ txt003
+STRI
+ V0 -2.63855 0.2 1.99938 V1 -2.70185 0.225 2.0375 V2 -2.51875 0.225 2.09531
+ N0 0.275915 0.747596 -0.604128 N1 -3.40413e-17 1 -5.65364e-17 N2 -1.96915e-17 1 -2.12543e-17
+ txt003
+STRI
+ V0 -2.46759 0.2 2.04792 V1 -2.42824 0.125 2.01146 V2 -2.58985 0.125 1.97006
+ N0 0.119688 0.715388 -0.6884 N1 0.148104 0.301279 -0.941964 N2 0.359682 0.323804 -0.875089
+ txt003
+STRI
+ V0 -2.58985 0.125 1.97006 V1 -2.63855 0.2 1.99938 V2 -2.46759 0.2 2.04792
+ N0 0.359682 0.323804 -0.875089 N1 0.275915 0.747596 -0.604128 N2 0.119688 0.715388 -0.6884
+ txt003
+STRI
+ V0 -2.42824 0.125 2.01146 V1 -2.4125 0 1.99687 V2 -2.57037 0 1.95833
+ N0 0.148104 0.301279 -0.941964 N1 0.14834 -4.14777e-16 -0.988936 N2 0.364399 -4.84479e-16 -0.931243
+ txt003
+STRI
+ V0 -2.57037 0 1.95833 V1 -2.58985 0.125 1.97006 V2 -2.42824 0.125 2.01146
+ N0 0.364399 -4.84479e-16 -0.931243 N1 0.359682 0.323804 -0.875089 N2 0.148104 0.301279 -0.941964
+ txt003
+STRI
+ V0 -2.83333 0 2.11667 V1 -2.81385 0.125 2.10494 V2 -2.93676 0.125 1.98256
+ N0 -0.514496 0 0.857493 N1 -0.474611 0.350859 0.807244 N2 -0.810111 0.385772 0.441476
+ txt003
+STRI
+ V0 -2.93676 0.125 1.98256 V1 -2.95833 0 1.98958 V2 -2.83333 0 2.11667
+ N0 -0.810111 0.385772 0.441476 N1 -0.882353 0 0.470588 N2 -0.514496 0 0.857493
+ txt003
+STRI
+ V0 -2.81385 0.125 2.10494 V1 -2.76516 0.2 2.07562 V2 -2.88284 0.2 1.96501
+ N0 -0.474611 0.350859 0.807244 N1 -0.313659 0.763673 0.564289 N2 -0.519903 0.799556 0.300684
+ txt003
+STRI
+ V0 -2.88284 0.2 1.96501 V1 -2.93676 0.125 1.98256 V2 -2.81385 0.125 2.10494
+ N0 -0.519903 0.799556 0.300684 N1 -0.810111 0.385772 0.441476 N2 -0.474611 0.350859 0.807244
+ txt003
+STRI
+ V0 -2.76516 0.2 2.07562 V1 -2.70185 0.225 2.0375 V2 -2.81273 0.225 1.94219
+ N0 -0.313659 0.763673 0.564289 N1 -3.40413e-17 1 -5.65364e-17 N2 -3.3285e-17 1 -1.02253e-16
+ txt003
+STRI
+ V0 -2.81273 0.225 1.94219 V1 -2.88284 0.2 1.96501 V2 -2.76516 0.2 2.07562
+ N0 -3.3285e-17 1 -1.02253e-16 N1 -0.519903 0.799556 0.300684 N2 -0.313659 0.763673 0.564289
+ txt003
+STRI
+ V0 -2.70185 0.225 2.0375 V1 -2.63855 0.2 1.99938 V2 -2.74263 0.2 1.91937
+ N0 -3.40413e-17 1 -5.65364e-17 N1 0.275915 0.747596 -0.604128 N2 0.497152 0.792374 -0.35353
+ txt003
+STRI
+ V0 -2.74263 0.2 1.91937 V1 -2.81273 0.225 1.94219 V2 -2.70185 0.225 2.0375
+ N0 0.497152 0.792374 -0.35353 N1 -3.3285e-17 1 -1.02253e-16 N2 -3.40413e-17 1 -5.65364e-17
+ txt003
+STRI
+ V0 -2.63855 0.2 1.99938 V1 -2.58985 0.125 1.97006 V2 -2.6887 0.125 1.90181
+ N0 0.275915 0.747596 -0.604128 N1 0.359682 0.323804 -0.875089 N2 0.727532 0.37029 -0.577566
+ txt003
+STRI
+ V0 -2.6887 0.125 1.90181 V1 -2.74263 0.2 1.91937 V2 -2.63855 0.2 1.99938
+ N0 0.727532 0.37029 -0.577566 N1 0.497152 0.792374 -0.35353 N2 0.275915 0.747596 -0.604128
+ txt003
+STRI
+ V0 -2.58985 0.125 1.97006 V1 -2.57037 0 1.95833 V2 -2.66713 0 1.89479
+ N0 0.359682 0.323804 -0.875089 N1 0.364399 -4.84479e-16 -0.931243 N2 0.767382 -3.16384e-16 -0.64119
+ txt003
+STRI
+ V0 -2.66713 0 1.89479 V1 -2.6887 0.125 1.90181 V2 -2.58985 0.125 1.97006
+ N0 0.767382 -3.16384e-16 -0.64119 N1 0.727532 0.37029 -0.577566 N2 0.359682 0.323804 -0.875089
+ txt003
+STRI
+ V0 -2.95833 0 1.98958 V1 -2.93676 0.125 1.98256 V2 -2.97778 0.125 1.8
+ N0 -0.882353 0 0.470588 N1 -0.810111 0.385772 0.441476 N2 -0.923077 0.384615 -1.1396e-16
+ txt003
+STRI
+ V0 -2.97778 0.125 1.8 V1 -3 0 1.8 V2 -2.95833 0 1.98958
+ N0 -0.923077 0.384615 -1.1396e-16 N1 -1 0 0 N2 -0.882353 0 0.470588
+ txt003
+STRI
+ V0 -2.93676 0.125 1.98256 V1 -2.88284 0.2 1.96501 V2 -2.92222 0.2 1.8
+ N0 -0.810111 0.385772 0.441476 N1 -0.519903 0.799556 0.300684 N2 -0.6 0.8 -3.10757e-16
+ txt003
+STRI
+ V0 -2.92222 0.2 1.8 V1 -2.97778 0.125 1.8 V2 -2.93676 0.125 1.98256
+ N0 -0.6 0.8 -3.10757e-16 N1 -0.923077 0.384615 -1.1396e-16 N2 -0.810111 0.385772 0.441476
+ txt003
+STRI
+ V0 -2.88284 0.2 1.96501 V1 -2.81273 0.225 1.94219 V2 -2.85 0.225 1.8
+ N0 -0.519903 0.799556 0.300684 N1 -3.3285e-17 1 -1.02253e-16 N2 -2.13041e-31 1 -1.23358e-16
+ txt003
+STRI
+ V0 -2.85 0.225 1.8 V1 -2.92222 0.2 1.8 V2 -2.88284 0.2 1.96501
+ N0 -2.13041e-31 1 -1.23358e-16 N1 -0.6 0.8 -3.10757e-16 N2 -0.519903 0.799556 0.300684
+ txt003
+STRI
+ V0 -2.81273 0.225 1.94219 V1 -2.74263 0.2 1.91937 V2 -2.77778 0.2 1.8
+ N0 -3.3285e-17 1 -1.02253e-16 N1 0.497152 0.792374 -0.35353 N2 0.6 0.8 8.24322e-16
+ txt003
+STRI
+ V0 -2.77778 0.2 1.8 V1 -2.85 0.225 1.8 V2 -2.81273 0.225 1.94219
+ N0 0.6 0.8 8.24322e-16 N1 -2.13041e-31 1 -1.23358e-16 N2 -3.3285e-17 1 -1.02253e-16
+ txt003
+STRI
+ V0 -2.74263 0.2 1.91937 V1 -2.6887 0.125 1.90181 V2 -2.72222 0.125 1.8
+ N0 0.497152 0.792374 -0.35353 N1 0.727532 0.37029 -0.577566 N2 0.923077 0.384615 2.05733e-15
+ txt003
+STRI
+ V0 -2.72222 0.125 1.8 V1 -2.77778 0.2 1.8 V2 -2.74263 0.2 1.91937
+ N0 0.923077 0.384615 2.05733e-15 N1 0.6 0.8 8.24322e-16 N2 0.497152 0.792374 -0.35353
+ txt003
+STRI
+ V0 -2.6887 0.125 1.90181 V1 -2.66713 0 1.89479 V2 -2.7 0 1.8
+ N0 0.727532 0.37029 -0.577566 N1 0.767382 -3.16384e-16 -0.64119 N2 1 4.93432e-16 2.63164e-15
+ txt003
+STRI
+ V0 -2.7 0 1.8 V1 -2.72222 0.125 1.8 V2 -2.6887 0.125 1.90181
+ N0 1 4.93432e-16 2.63164e-15 N1 0.923077 0.384615 2.05733e-15 N2 0.727532 0.37029 -0.577566
+ txt003
+STRI
+ V0 -2.7 0 1.8 V1 -2.72222 -0.125 1.8 V2 -2.70418 -0.125 1.66398
+ N0 1 0 0 N1 0.923077 -0.384615 0 N2 0.895972 -0.38623 0.219226
+ txt003
+STRI
+ V0 -2.70418 -0.125 1.66398 V1 -2.68287 0 1.67083 V2 -2.7 0 1.8
+ N0 0.895972 -0.38623 0.219226 N1 0.972045 0 0.234794 N2 1 0 0
+ txt003
+STRI
+ V0 -2.72222 -0.125 1.8 V1 -2.77778 -0.2 1.8 V2 -2.75747 -0.2 1.64684
+ N0 0.923077 -0.384615 0 N1 0.6 -0.8 0 N2 0.57987 -0.801541 0.145888
+ txt003
+STRI
+ V0 -2.75747 -0.2 1.64684 V1 -2.70418 -0.125 1.66398 V2 -2.72222 -0.125 1.8
+ N0 0.57987 -0.801541 0.145888 N1 0.895972 -0.38623 0.219226 N2 0.923077 -0.384615 0
+ txt003
+STRI
+ V0 -2.77778 -0.2 1.8 V1 -2.85 -0.225 1.8 V2 -2.82674 -0.225 1.62457
+ N0 0.6 -0.8 0 N1 -0 -1 -0 N2 9.48478e-19 -1 -2.94924e-18
+ txt003
+STRI
+ V0 -2.82674 -0.225 1.62457 V1 -2.75747 -0.2 1.64684 V2 -2.77778 -0.2 1.8
+ N0 9.48478e-19 -1 -2.94924e-18 N1 0.57987 -0.801541 0.145888 N2 0.6 -0.8 0
+ txt003
+STRI
+ V0 -2.85 -0.225 1.8 V1 -2.92222 -0.2 1.8 V2 -2.896 -0.2 1.60229
+ N0 -0 -1 -0 N1 -0.6 -0.8 -0 N2 -0.577707 -0.801752 -0.153129
+ txt003
+STRI
+ V0 -2.896 -0.2 1.60229 V1 -2.82674 -0.225 1.62457 V2 -2.85 -0.225 1.8
+ N0 -0.577707 -0.801752 -0.153129 N1 9.48478e-19 -1 -2.94924e-18 N2 -0 -1 -0
+ txt003
+STRI
+ V0 -2.92222 -0.2 1.8 V1 -2.97778 -0.125 1.8 V2 -2.94929 -0.125 1.58515
+ N0 -0.6 -0.8 -0 N1 -0.923077 -0.384615 -0 N2 -0.890548 -0.386679 -0.23959
+ txt003
+STRI
+ V0 -2.94929 -0.125 1.58515 V1 -2.896 -0.2 1.60229 V2 -2.92222 -0.2 1.8
+ N0 -0.890548 -0.386679 -0.23959 N1 -0.577707 -0.801752 -0.153129 N2 -0.6 -0.8 -0
+ txt003
+STRI
+ V0 -2.97778 -0.125 1.8 V1 -3 0 1.8 V2 -2.9706 0 1.5783
+ N0 -0.923077 -0.384615 -0 N1 -1 -9.86865e-16 -0 N2 -0.965311 -7.59377e-16 -0.261102
+ txt003
+STRI
+ V0 -2.9706 0 1.5783 V1 -2.94929 -0.125 1.58515 V2 -2.97778 -0.125 1.8
+ N0 -0.965311 -7.59377e-16 -0.261102 N1 -0.890548 -0.386679 -0.23959 N2 -0.923077 -0.384615 -0
+ txt003
+STRI
+ V0 -2.68287 0 1.67083 V1 -2.70418 -0.125 1.66398 V2 -2.64829 -0.125 1.50535
+ N0 0.972045 0 0.234794 N1 0.895972 -0.38623 0.219226 N2 0.842942 -0.376421 0.38439
+ txt003
+STRI
+ V0 -2.64829 -0.125 1.50535 V1 -2.62963 0 1.51667 V2 -2.68287 0 1.67083
+ N0 0.842942 -0.376421 0.38439 N1 0.913812 0 0.406138 N2 0.972045 0 0.234794
+ txt003
+STRI
+ V0 -2.70418 -0.125 1.66398 V1 -2.75747 -0.2 1.64684 V2 -2.69492 -0.2 1.47706
+ N0 0.895972 -0.38623 0.219226 N1 0.57987 -0.801541 0.145888 N2 0.548194 -0.793356 0.264707
+ txt003
+STRI
+ V0 -2.69492 -0.2 1.47706 V1 -2.64829 -0.125 1.50535 V2 -2.70418 -0.125 1.66398
+ N0 0.548194 -0.793356 0.264707 N1 0.842942 -0.376421 0.38439 N2 0.895972 -0.38623 0.219226
+ txt003
+STRI
+ V0 -2.75747 -0.2 1.64684 V1 -2.82674 -0.225 1.62457 V2 -2.75556 -0.225 1.44028
+ N0 0.57987 -0.801541 0.145888 N1 9.48478e-19 -1 -2.94924e-18 N2 5.73642e-18 -1 -9.4564e-18
+ txt003
+STRI
+ V0 -2.75556 -0.225 1.44028 V1 -2.69492 -0.2 1.47706 V2 -2.75747 -0.2 1.64684
+ N0 5.73642e-18 -1 -9.4564e-18 N1 0.548194 -0.793356 0.264707 N2 0.57987 -0.801541 0.145888
+ txt003
+STRI
+ V0 -2.82674 -0.225 1.62457 V1 -2.896 -0.2 1.60229 V2 -2.81619 -0.2 1.4035
+ N0 9.48478e-19 -1 -2.94924e-18 N1 -0.577707 -0.801752 -0.153129 N2 -0.534196 -0.794341 -0.289235
+ txt003
+STRI
+ V0 -2.81619 -0.2 1.4035 V1 -2.75556 -0.225 1.44028 V2 -2.82674 -0.225 1.62457
+ N0 -0.534196 -0.794341 -0.289235 N1 5.73642e-18 -1 -9.4564e-18 N2 9.48478e-19 -1 -2.94924e-18
+ txt003
+STRI
+ V0 -2.896 -0.2 1.60229 V1 -2.94929 -0.125 1.58515 V2 -2.86283 -0.125 1.37521
+ N0 -0.577707 -0.801752 -0.153129 N1 -0.890548 -0.386679 -0.23959 N2 -0.807437 -0.378466 -0.452558
+ txt003
+STRI
+ V0 -2.86283 -0.125 1.37521 V1 -2.81619 -0.2 1.4035 V2 -2.896 -0.2 1.60229
+ N0 -0.807437 -0.378466 -0.452558 N1 -0.534196 -0.794341 -0.289235 N2 -0.577707 -0.801752 -0.153129
+ txt003
+STRI
+ V0 -2.94929 -0.125 1.58515 V1 -2.9706 0 1.5783 V2 -2.88148 0 1.36389
+ N0 -0.890548 -0.386679 -0.23959 N1 -0.965311 -7.59377e-16 -0.261102 N2 -0.869653 -7.07402e-16 -0.493664
+ txt003
+STRI
+ V0 -2.88148 0 1.36389 V1 -2.86283 -0.125 1.37521 V2 -2.94929 -0.125 1.58515
+ N0 -0.869653 -7.07402e-16 -0.493664 N1 -0.807437 -0.378466 -0.452558 N2 -0.890548 -0.386679 -0.23959
+ txt003
+STRI
+ V0 -2.62963 0 1.51667 V1 -2.64829 -0.125 1.50535 V2 -2.55185 -0.125 1.33576
+ N0 0.913812 0 0.406138 N1 0.842942 -0.376421 0.38439 N2 0.772293 -0.349434 0.530527
+ txt003
+STRI
+ V0 -2.55185 -0.125 1.33576 V1 -2.5375 0 1.35 V2 -2.62963 0 1.51667
+ N0 0.772293 -0.349434 0.530527 N1 0.83205 0 0.5547 N2 0.913812 0 0.406138
+ txt003
+STRI
+ V0 -2.64829 -0.125 1.50535 V1 -2.69492 -0.2 1.47706 V2 -2.58773 -0.2 1.30017
+ N0 0.842942 -0.376421 0.38439 N1 0.548194 -0.793356 0.264707 N2 0.515846 -0.768155 0.379264
+ txt003
+STRI
+ V0 -2.58773 -0.2 1.30017 V1 -2.55185 -0.125 1.33576 V2 -2.64829 -0.125 1.50535
+ N0 0.515846 -0.768155 0.379264 N1 0.772293 -0.349434 0.530527 N2 0.842942 -0.376421 0.38439
+ txt003
+STRI
+ V0 -2.69492 -0.2 1.47706 V1 -2.75556 -0.225 1.44028 V2 -2.63437 -0.225 1.25391
+ N0 0.548194 -0.793356 0.264707 N1 5.73642e-18 -1 -9.4564e-18 N2 1.5603e-17 -1 -1.57299e-17
+ txt003
+STRI
+ V0 -2.63437 -0.225 1.25391 V1 -2.58773 -0.2 1.30017 V2 -2.69492 -0.2 1.47706
+ N0 1.5603e-17 -1 -1.57299e-17 N1 0.515846 -0.768155 0.379264 N2 0.548194 -0.793356 0.264707
+ txt003
+STRI
+ V0 -2.75556 -0.225 1.44028 V1 -2.81619 -0.2 1.4035 V2 -2.68102 -0.2 1.20764
+ N0 5.73642e-18 -1 -9.4564e-18 N1 -0.534196 -0.794341 -0.289235 N2 -0.486433 -0.770599 -0.411777
+ txt003
+STRI
+ V0 -2.68102 -0.2 1.20764 V1 -2.63437 -0.225 1.25391 V2 -2.75556 -0.225 1.44028
+ N0 -0.486433 -0.770599 -0.411777 N1 1.5603e-17 -1 -1.57299e-17 N2 5.73642e-18 -1 -9.4564e-18
+ txt003
+STRI
+ V0 -2.81619 -0.2 1.4035 V1 -2.86283 -0.125 1.37521 V2 -2.7169 -0.125 1.17205
+ N0 -0.534196 -0.794341 -0.289235 N1 -0.807437 -0.378466 -0.452558 N2 -0.700515 -0.35392 -0.619694
+ txt003
+STRI
+ V0 -2.7169 -0.125 1.17205 V1 -2.68102 -0.2 1.20764 V2 -2.81619 -0.2 1.4035
+ N0 -0.700515 -0.35392 -0.619694 N1 -0.486433 -0.770599 -0.411777 N2 -0.534196 -0.794341 -0.289235
+ txt003
+STRI
+ V0 -2.86283 -0.125 1.37521 V1 -2.88148 0 1.36389 V2 -2.73125 0 1.15781
+ N0 -0.807437 -0.378466 -0.452558 N1 -0.869653 -7.07402e-16 -0.493664 N2 -0.743581 -2.38916e-16 -0.668646
+ txt003
+STRI
+ V0 -2.73125 0 1.15781 V1 -2.7169 -0.125 1.17205 V2 -2.86283 -0.125 1.37521
+ N0 -0.743581 -2.38916e-16 -0.668646 N1 -0.700515 -0.35392 -0.619694 N2 -0.807437 -0.378466 -0.452558
+ txt003
+STRI
+ V0 -2.5375 0 1.35 V1 -2.55185 -0.125 1.33576 V2 -2.41221 -0.125 1.16687
+ N0 0.83205 0 0.5547 N1 0.772293 -0.349434 0.530527 N2 0.676612 -0.31353 0.666255
+ txt003
+STRI
+ V0 -2.41221 -0.125 1.16687 V1 -2.4037 0 1.18333 V2 -2.5375 0 1.35
+ N0 0.676612 -0.31353 0.666255 N1 0.722374 0 0.691503 N2 0.83205 0 0.5547
+ txt003
+STRI
+ V0 -2.55185 -0.125 1.33576 V1 -2.58773 -0.2 1.30017 V2 -2.43347 -0.2 1.12572
+ N0 0.772293 -0.349434 0.530527 N1 0.515846 -0.768155 0.379264 N2 0.471519 -0.729692 0.495195
+ txt003
+STRI
+ V0 -2.43347 -0.2 1.12572 V1 -2.41221 -0.125 1.16687 V2 -2.55185 -0.125 1.33576
+ N0 0.471519 -0.729692 0.495195 N1 0.676612 -0.31353 0.666255 N2 0.772293 -0.349434 0.530527
+ txt003
+STRI
+ V0 -2.58773 -0.2 1.30017 V1 -2.63437 -0.225 1.25391 V2 -2.46111 -0.225 1.07222
+ N0 0.515846 -0.768155 0.379264 N1 1.5603e-17 -1 -1.57299e-17 N2 3.17396e-17 -1 -1.63988e-17
+ txt003
+STRI
+ V0 -2.46111 -0.225 1.07222 V1 -2.43347 -0.2 1.12572 V2 -2.58773 -0.2 1.30017
+ N0 3.17396e-17 -1 -1.63988e-17 N1 0.471519 -0.729692 0.495195 N2 0.515846 -0.768155 0.379264
+ txt003
+STRI
+ V0 -2.63437 -0.225 1.25391 V1 -2.68102 -0.2 1.20764 V2 -2.48875 -0.2 1.01872
+ N0 1.5603e-17 -1 -1.57299e-17 N1 -0.486433 -0.770599 -0.411777 N2 -0.433172 -0.735531 -0.520919
+ txt003
+STRI
+ V0 -2.48875 -0.2 1.01872 V1 -2.46111 -0.225 1.07222 V2 -2.63437 -0.225 1.25391
+ N0 -0.433172 -0.735531 -0.520919 N1 3.17396e-17 -1 -1.63988e-17 N2 1.5603e-17 -1 -1.57299e-17
+ txt003
+STRI
+ V0 -2.68102 -0.2 1.20764 V1 -2.7169 -0.125 1.17205 V2 -2.51001 -0.125 0.977572
+ N0 -0.486433 -0.770599 -0.411777 N1 -0.700515 -0.35392 -0.619694 N2 -0.589822 -0.322549 -0.740319
+ txt003
+STRI
+ V0 -2.51001 -0.125 0.977572 V1 -2.48875 -0.2 1.01872 V2 -2.68102 -0.2 1.20764
+ N0 -0.589822 -0.322549 -0.740319 N1 -0.433172 -0.735531 -0.520919 N2 -0.486433 -0.770599 -0.411777
+ txt003
+STRI
+ V0 -2.7169 -0.125 1.17205 V1 -2.73125 0 1.15781 V2 -2.51852 0 0.961111
+ N0 -0.700515 -0.35392 -0.619694 N1 -0.743581 -2.38916e-16 -0.668646 N2 -0.617031 -2.64751e-17 -0.786939
+ txt003
+STRI
+ V0 -2.51852 0 0.961111 V1 -2.51001 -0.125 0.977572 V2 -2.7169 -0.125 1.17205
+ N0 -0.617031 -2.64751e-17 -0.786939 N1 -0.589822 -0.322549 -0.740319 N2 -0.700515 -0.35392 -0.619694
+ txt003
+STRI
+ V0 -2.4037 0 1.18333 V1 -2.41221 -0.125 1.16687 V2 -2.22668 -0.125 1.01033
+ N0 0.722374 0 0.691503 N1 0.676612 -0.31353 0.666255 N2 0.548733 -0.289562 0.784249
+ txt003
+STRI
+ V0 -2.22668 -0.125 1.01033 V1 -2.22546 0 1.02917 V2 -2.4037 0 1.18333
+ N0 0.548733 -0.289562 0.784249 N1 0.580973 0 0.813923 N2 0.722374 0 0.691503
+ txt003
+STRI
+ V0 -2.41221 -0.125 1.16687 V1 -2.43347 -0.2 1.12572 V2 -2.22972 -0.2 0.963227
+ N0 0.676612 -0.31353 0.666255 N1 0.471519 -0.729692 0.495195 N2 0.396971 -0.700023 0.593618
+ txt003
+STRI
+ V0 -2.22972 -0.2 0.963227 V1 -2.22668 -0.125 1.01033 V2 -2.41221 -0.125 1.16687
+ N0 0.396971 -0.700023 0.593618 N1 0.548733 -0.289562 0.784249 N2 0.676612 -0.31353 0.666255
+ txt003
+STRI
+ V0 -2.43347 -0.2 1.12572 V1 -2.46111 -0.225 1.07222 V2 -2.23368 -0.225 0.901997
+ N0 0.471519 -0.729692 0.495195 N1 3.17396e-17 -1 -1.63988e-17 N2 5.4409e-17 -1 -3.51585e-18
+ txt003
+STRI
+ V0 -2.23368 -0.225 0.901997 V1 -2.22972 -0.2 0.963227 V2 -2.43347 -0.2 1.12572
+ N0 5.4409e-17 -1 -3.51585e-18 N1 0.396971 -0.700023 0.593618 N2 0.471519 -0.729692 0.495195
+ txt003
+STRI
+ V0 -2.46111 -0.225 1.07222 V1 -2.48875 -0.2 1.01872 V2 -2.23764 -0.2 0.840766
+ N0 3.17396e-17 -1 -1.63988e-17 N1 -0.433172 -0.735531 -0.520919 N2 -0.367048 -0.708353 -0.60292
+ txt003
+STRI
+ V0 -2.23764 -0.2 0.840766 V1 -2.23368 -0.225 0.901997 V2 -2.46111 -0.225 1.07222
+ N0 -0.367048 -0.708353 -0.60292 N1 5.4409e-17 -1 -3.51585e-18 N2 3.17396e-17 -1 -1.63988e-17
+ txt003
+STRI
+ V0 -2.48875 -0.2 1.01872 V1 -2.51001 -0.125 0.977572 V2 -2.24068 -0.125 0.793666
+ N0 -0.433172 -0.735531 -0.520919 N1 -0.589822 -0.322549 -0.740319 N2 -0.485318 -0.301052 -0.820874
+ txt003
+STRI
+ V0 -2.24068 -0.125 0.793666 V1 -2.23764 -0.2 0.840766 V2 -2.48875 -0.2 1.01872
+ N0 -0.485318 -0.301052 -0.820874 N1 -0.367048 -0.708353 -0.60292 N2 -0.433172 -0.735531 -0.520919
+ txt003
+STRI
+ V0 -2.51001 -0.125 0.977572 V1 -2.51852 0 0.961111 V2 -2.2419 0 0.774826
+ N0 -0.589822 -0.322549 -0.740319 N1 -0.617031 -2.64751e-17 -0.786939 N2 -0.504836 2.02979e-16 -0.863216
+ txt003
+STRI
+ V0 -2.2419 0 0.774826 V1 -2.24068 -0.125 0.793666 V2 -2.51001 -0.125 0.977572
+ N0 -0.504836 2.02979e-16 -0.863216 N1 -0.485318 -0.301052 -0.820874 N2 -0.589822 -0.322549 -0.740319
+ txt003
+STRI
+ V0 -2.22546 0 1.02917 V1 -2.22668 -0.125 1.01033 V2 -1.99259 -0.125 0.877778
+ N0 0.580973 0 0.813923 N1 0.548733 -0.289562 0.784249 N2 0.390503 -0.30734 0.867784
+ txt003
+STRI
+ V0 -1.99259 -0.125 0.877778 V1 -2 0 0.9 V2 -2.22546 0 1.02917
+ N0 0.390503 -0.30734 0.867784 N1 0.410365 0 0.911922 N2 0.580973 0 0.813923
+ txt003
+STRI
+ V0 -2.22668 -0.125 1.01033 V1 -2.22972 -0.2 0.963227 V2 -1.97407 -0.2 0.822222
+ N0 0.548733 -0.289562 0.784249 N1 0.396971 -0.700023 0.593618 N2 0.285351 -0.718662 0.634113
+ txt003
+STRI
+ V0 -1.97407 -0.2 0.822222 V1 -1.99259 -0.125 0.877778 V2 -2.22668 -0.125 1.01033
+ N0 0.285351 -0.718662 0.634113 N1 0.390503 -0.30734 0.867784 N2 0.548733 -0.289562 0.784249
+ txt003
+STRI
+ V0 -2.22972 -0.2 0.963227 V1 -2.23368 -0.225 0.901997 V2 -1.95 -0.225 0.75
+ N0 0.396971 -0.700023 0.593618 N1 5.4409e-17 -1 -3.51585e-18 N2 7.83687e-17 -1 2.61229e-17
+ txt003
+STRI
+ V0 -1.95 -0.225 0.75 V1 -1.97407 -0.2 0.822222 V2 -2.22972 -0.2 0.963227
+ N0 7.83687e-17 -1 2.61229e-17 N1 0.285351 -0.718662 0.634113 N2 0.396971 -0.700023 0.593618
+ txt003
+STRI
+ V0 -2.23368 -0.225 0.901997 V1 -2.23764 -0.2 0.840766 V2 -1.92593 -0.2 0.677778
+ N0 5.4409e-17 -1 -3.51585e-18 N1 -0.367048 -0.708353 -0.60292 N2 -0.285351 -0.718662 -0.634113
+ txt003
+STRI
+ V0 -1.92593 -0.2 0.677778 V1 -1.95 -0.225 0.75 V2 -2.23368 -0.225 0.901997
+ N0 -0.285351 -0.718662 -0.634113 N1 7.83687e-17 -1 2.61229e-17 N2 5.4409e-17 -1 -3.51585e-18
+ txt003
+STRI
+ V0 -2.23764 -0.2 0.840766 V1 -2.24068 -0.125 0.793666 V2 -1.90741 -0.125 0.622222
+ N0 -0.367048 -0.708353 -0.60292 N1 -0.485318 -0.301052 -0.820874 N2 -0.390503 -0.30734 -0.867784
+ txt003
+STRI
+ V0 -1.90741 -0.125 0.622222 V1 -1.92593 -0.2 0.677778 V2 -2.23764 -0.2 0.840766
+ N0 -0.390503 -0.30734 -0.867784 N1 -0.285351 -0.718662 -0.634113 N2 -0.367048 -0.708353 -0.60292
+ txt003
+STRI
+ V0 -2.24068 -0.125 0.793666 V1 -2.2419 0 0.774826 V2 -1.9 0 0.6
+ N0 -0.485318 -0.301052 -0.820874 N1 -0.504836 2.02979e-16 -0.863216 N2 -0.410365 4.49972e-17 -0.911922
+ txt003
+STRI
+ V0 -1.9 0 0.6 V1 -1.90741 -0.125 0.622222 V2 -2.24068 -0.125 0.793666
+ N0 -0.410365 4.49972e-17 -0.911922 N1 -0.390503 -0.30734 -0.867784 N2 -0.485318 -0.301052 -0.820874
+ txt003
+STRI
+ V0 -3 0 1.8 V1 -2.97778 0.125 1.8 V2 -2.94929 0.125 1.58515
+ N0 -1 0 0 N1 -0.923077 0.384615 0 N2 -0.890548 0.386679 -0.23959
+ txt003
+STRI
+ V0 -2.94929 0.125 1.58515 V1 -2.9706 0 1.5783 V2 -3 0 1.8
+ N0 -0.890548 0.386679 -0.23959 N1 -0.965311 0 -0.261102 N2 -1 0 0
+ txt003
+STRI
+ V0 -2.97778 0.125 1.8 V1 -2.92222 0.2 1.8 V2 -2.896 0.2 1.60229
+ N0 -0.923077 0.384615 0 N1 -0.6 0.8 0 N2 -0.577707 0.801752 -0.153129
+ txt003
+STRI
+ V0 -2.896 0.2 1.60229 V1 -2.94929 0.125 1.58515 V2 -2.97778 0.125 1.8
+ N0 -0.577707 0.801752 -0.153129 N1 -0.890548 0.386679 -0.23959 N2 -0.923077 0.384615 0
+ txt003
+STRI
+ V0 -2.92222 0.2 1.8 V1 -2.85 0.225 1.8 V2 -2.82674 0.225 1.62457
+ N0 -0.6 0.8 0 N1 -0 1 0 N2 9.48478e-19 1 -2.94924e-18
+ txt003
+STRI
+ V0 -2.82674 0.225 1.62457 V1 -2.896 0.2 1.60229 V2 -2.92222 0.2 1.8
+ N0 9.48478e-19 1 -2.94924e-18 N1 -0.577707 0.801752 -0.153129 N2 -0.6 0.8 0
+ txt003
+STRI
+ V0 -2.85 0.225 1.8 V1 -2.77778 0.2 1.8 V2 -2.75747 0.2 1.64684
+ N0 -0 1 0 N1 0.6 0.8 0 N2 0.57987 0.801541 0.145888
+ txt003
+STRI
+ V0 -2.75747 0.2 1.64684 V1 -2.82674 0.225 1.62457 V2 -2.85 0.225 1.8
+ N0 0.57987 0.801541 0.145888 N1 9.48478e-19 1 -2.94924e-18 N2 -0 1 0
+ txt003
+STRI
+ V0 -2.77778 0.2 1.8 V1 -2.72222 0.125 1.8 V2 -2.70418 0.125 1.66398
+ N0 0.6 0.8 0 N1 0.923077 0.384615 0 N2 0.895972 0.38623 0.219226
+ txt003
+STRI
+ V0 -2.70418 0.125 1.66398 V1 -2.75747 0.2 1.64684 V2 -2.77778 0.2 1.8
+ N0 0.895972 0.38623 0.219226 N1 0.57987 0.801541 0.145888 N2 0.6 0.8 0
+ txt003
+STRI
+ V0 -2.72222 0.125 1.8 V1 -2.7 0 1.8 V2 -2.68287 0 1.67083
+ N0 0.923077 0.384615 0 N1 1 9.86865e-16 0 N2 0.972045 1.13306e-15 0.234794
+ txt003
+STRI
+ V0 -2.68287 0 1.67083 V1 -2.70418 0.125 1.66398 V2 -2.72222 0.125 1.8
+ N0 0.972045 1.13306e-15 0.234794 N1 0.895972 0.38623 0.219226 N2 0.923077 0.384615 0
+ txt003
+STRI
+ V0 -2.9706 0 1.5783 V1 -2.94929 0.125 1.58515 V2 -2.86283 0.125 1.37521
+ N0 -0.965311 0 -0.261102 N1 -0.890548 0.386679 -0.23959 N2 -0.807437 0.378466 -0.452558
+ txt003
+STRI
+ V0 -2.86283 0.125 1.37521 V1 -2.88148 0 1.36389 V2 -2.9706 0 1.5783
+ N0 -0.807437 0.378466 -0.452558 N1 -0.869653 0 -0.493664 N2 -0.965311 0 -0.261102
+ txt003
+STRI
+ V0 -2.94929 0.125 1.58515 V1 -2.896 0.2 1.60229 V2 -2.81619 0.2 1.4035
+ N0 -0.890548 0.386679 -0.23959 N1 -0.577707 0.801752 -0.153129 N2 -0.534196 0.794341 -0.289235
+ txt003
+STRI
+ V0 -2.81619 0.2 1.4035 V1 -2.86283 0.125 1.37521 V2 -2.94929 0.125 1.58515
+ N0 -0.534196 0.794341 -0.289235 N1 -0.807437 0.378466 -0.452558 N2 -0.890548 0.386679 -0.23959
+ txt003
+STRI
+ V0 -2.896 0.2 1.60229 V1 -2.82674 0.225 1.62457 V2 -2.75556 0.225 1.44028
+ N0 -0.577707 0.801752 -0.153129 N1 9.48478e-19 1 -2.94924e-18 N2 5.73642e-18 1 -9.4564e-18
+ txt003
+STRI
+ V0 -2.75556 0.225 1.44028 V1 -2.81619 0.2 1.4035 V2 -2.896 0.2 1.60229
+ N0 5.73642e-18 1 -9.4564e-18 N1 -0.534196 0.794341 -0.289235 N2 -0.577707 0.801752 -0.153129
+ txt003
+STRI
+ V0 -2.82674 0.225 1.62457 V1 -2.75747 0.2 1.64684 V2 -2.69492 0.2 1.47706
+ N0 9.48478e-19 1 -2.94924e-18 N1 0.57987 0.801541 0.145888 N2 0.548194 0.793356 0.264707
+ txt003
+STRI
+ V0 -2.69492 0.2 1.47706 V1 -2.75556 0.225 1.44028 V2 -2.82674 0.225 1.62457
+ N0 0.548194 0.793356 0.264707 N1 5.73642e-18 1 -9.4564e-18 N2 9.48478e-19 1 -2.94924e-18
+ txt003
+STRI
+ V0 -2.75747 0.2 1.64684 V1 -2.70418 0.125 1.66398 V2 -2.64829 0.125 1.50535
+ N0 0.57987 0.801541 0.145888 N1 0.895972 0.38623 0.219226 N2 0.842942 0.376421 0.38439
+ txt003
+STRI
+ V0 -2.64829 0.125 1.50535 V1 -2.69492 0.2 1.47706 V2 -2.75747 0.2 1.64684
+ N0 0.842942 0.376421 0.38439 N1 0.548194 0.793356 0.264707 N2 0.57987 0.801541 0.145888
+ txt003
+STRI
+ V0 -2.70418 0.125 1.66398 V1 -2.68287 0 1.67083 V2 -2.62963 0 1.51667
+ N0 0.895972 0.38623 0.219226 N1 0.972045 1.13306e-15 0.234794 N2 0.913812 1.42786e-15 0.406138
+ txt003
+STRI
+ V0 -2.62963 0 1.51667 V1 -2.64829 0.125 1.50535 V2 -2.70418 0.125 1.66398
+ N0 0.913812 1.42786e-15 0.406138 N1 0.842942 0.376421 0.38439 N2 0.895972 0.38623 0.219226
+ txt003
+STRI
+ V0 -2.88148 0 1.36389 V1 -2.86283 0.125 1.37521 V2 -2.7169 0.125 1.17205
+ N0 -0.869653 0 -0.493664 N1 -0.807437 0.378466 -0.452558 N2 -0.700515 0.35392 -0.619694
+ txt003
+STRI
+ V0 -2.7169 0.125 1.17205 V1 -2.73125 0 1.15781 V2 -2.88148 0 1.36389
+ N0 -0.700515 0.35392 -0.619694 N1 -0.743581 0 -0.668646 N2 -0.869653 0 -0.493664
+ txt003
+STRI
+ V0 -2.86283 0.125 1.37521 V1 -2.81619 0.2 1.4035 V2 -2.68102 0.2 1.20764
+ N0 -0.807437 0.378466 -0.452558 N1 -0.534196 0.794341 -0.289235 N2 -0.486433 0.770599 -0.411777
+ txt003
+STRI
+ V0 -2.68102 0.2 1.20764 V1 -2.7169 0.125 1.17205 V2 -2.86283 0.125 1.37521
+ N0 -0.486433 0.770599 -0.411777 N1 -0.700515 0.35392 -0.619694 N2 -0.807437 0.378466 -0.452558
+ txt003
+STRI
+ V0 -2.81619 0.2 1.4035 V1 -2.75556 0.225 1.44028 V2 -2.63437 0.225 1.25391
+ N0 -0.534196 0.794341 -0.289235 N1 5.73642e-18 1 -9.4564e-18 N2 1.5603e-17 1 -1.57299e-17
+ txt003
+STRI
+ V0 -2.63437 0.225 1.25391 V1 -2.68102 0.2 1.20764 V2 -2.81619 0.2 1.4035
+ N0 1.5603e-17 1 -1.57299e-17 N1 -0.486433 0.770599 -0.411777 N2 -0.534196 0.794341 -0.289235
+ txt003
+STRI
+ V0 -2.75556 0.225 1.44028 V1 -2.69492 0.2 1.47706 V2 -2.58773 0.2 1.30017
+ N0 5.73642e-18 1 -9.4564e-18 N1 0.548194 0.793356 0.264707 N2 0.515846 0.768155 0.379264
+ txt003
+STRI
+ V0 -2.58773 0.2 1.30017 V1 -2.63437 0.225 1.25391 V2 -2.75556 0.225 1.44028
+ N0 0.515846 0.768155 0.379264 N1 1.5603e-17 1 -1.57299e-17 N2 5.73642e-18 1 -9.4564e-18
+ txt003
+STRI
+ V0 -2.69492 0.2 1.47706 V1 -2.64829 0.125 1.50535 V2 -2.55185 0.125 1.33576
+ N0 0.548194 0.793356 0.264707 N1 0.842942 0.376421 0.38439 N2 0.772293 0.349434 0.530527
+ txt003
+STRI
+ V0 -2.55185 0.125 1.33576 V1 -2.58773 0.2 1.30017 V2 -2.69492 0.2 1.47706
+ N0 0.772293 0.349434 0.530527 N1 0.515846 0.768155 0.379264 N2 0.548194 0.793356 0.264707
+ txt003
+STRI
+ V0 -2.64829 0.125 1.50535 V1 -2.62963 0 1.51667 V2 -2.5375 0 1.35
+ N0 0.842942 0.376421 0.38439 N1 0.913812 1.42786e-15 0.406138 N2 0.83205 1.23168e-15 0.5547
+ txt003
+STRI
+ V0 -2.5375 0 1.35 V1 -2.55185 0.125 1.33576 V2 -2.64829 0.125 1.50535
+ N0 0.83205 1.23168e-15 0.5547 N1 0.772293 0.349434 0.530527 N2 0.842942 0.376421 0.38439
+ txt003
+STRI
+ V0 -2.73125 0 1.15781 V1 -2.7169 0.125 1.17205 V2 -2.51001 0.125 0.977572
+ N0 -0.743581 0 -0.668646 N1 -0.700515 0.35392 -0.619694 N2 -0.589822 0.322549 -0.740319
+ txt003
+STRI
+ V0 -2.51001 0.125 0.977572 V1 -2.51852 0 0.961111 V2 -2.73125 0 1.15781
+ N0 -0.589822 0.322549 -0.740319 N1 -0.617031 0 -0.786939 N2 -0.743581 0 -0.668646
+ txt003
+STRI
+ V0 -2.7169 0.125 1.17205 V1 -2.68102 0.2 1.20764 V2 -2.48875 0.2 1.01872
+ N0 -0.700515 0.35392 -0.619694 N1 -0.486433 0.770599 -0.411777 N2 -0.433172 0.735531 -0.520919
+ txt003
+STRI
+ V0 -2.48875 0.2 1.01872 V1 -2.51001 0.125 0.977572 V2 -2.7169 0.125 1.17205
+ N0 -0.433172 0.735531 -0.520919 N1 -0.589822 0.322549 -0.740319 N2 -0.700515 0.35392 -0.619694
+ txt003
+STRI
+ V0 -2.68102 0.2 1.20764 V1 -2.63437 0.225 1.25391 V2 -2.46111 0.225 1.07222
+ N0 -0.486433 0.770599 -0.411777 N1 1.5603e-17 1 -1.57299e-17 N2 3.17396e-17 1 -1.63988e-17
+ txt003
+STRI
+ V0 -2.46111 0.225 1.07222 V1 -2.48875 0.2 1.01872 V2 -2.68102 0.2 1.20764
+ N0 3.17396e-17 1 -1.63988e-17 N1 -0.433172 0.735531 -0.520919 N2 -0.486433 0.770599 -0.411777
+ txt003
+STRI
+ V0 -2.63437 0.225 1.25391 V1 -2.58773 0.2 1.30017 V2 -2.43347 0.2 1.12572
+ N0 1.5603e-17 1 -1.57299e-17 N1 0.515846 0.768155 0.379264 N2 0.471519 0.729692 0.495195
+ txt003
+STRI
+ V0 -2.43347 0.2 1.12572 V1 -2.46111 0.225 1.07222 V2 -2.63437 0.225 1.25391
+ N0 0.471519 0.729692 0.495195 N1 3.17396e-17 1 -1.63988e-17 N2 1.5603e-17 1 -1.57299e-17
+ txt003
+STRI
+ V0 -2.58773 0.2 1.30017 V1 -2.55185 0.125 1.33576 V2 -2.41221 0.125 1.16687
+ N0 0.515846 0.768155 0.379264 N1 0.772293 0.349434 0.530527 N2 0.676612 0.31353 0.666255
+ txt003
+STRI
+ V0 -2.41221 0.125 1.16687 V1 -2.43347 0.2 1.12572 V2 -2.58773 0.2 1.30017
+ N0 0.676612 0.31353 0.666255 N1 0.471519 0.729692 0.495195 N2 0.515846 0.768155 0.379264
+ txt003
+STRI
+ V0 -2.55185 0.125 1.33576 V1 -2.5375 0 1.35 V2 -2.4037 0 1.18333
+ N0 0.772293 0.349434 0.530527 N1 0.83205 1.23168e-15 0.5547 N2 0.722374 1.2247e-15 0.691503
+ txt003
+STRI
+ V0 -2.4037 0 1.18333 V1 -2.41221 0.125 1.16687 V2 -2.55185 0.125 1.33576
+ N0 0.722374 1.2247e-15 0.691503 N1 0.676612 0.31353 0.666255 N2 0.772293 0.349434 0.530527
+ txt003
+STRI
+ V0 -2.51852 0 0.961111 V1 -2.51001 0.125 0.977572 V2 -2.24068 0.125 0.793666
+ N0 -0.617031 0 -0.786939 N1 -0.589822 0.322549 -0.740319 N2 -0.485318 0.301052 -0.820874
+ txt003
+STRI
+ V0 -2.24068 0.125 0.793666 V1 -2.2419 0 0.774826 V2 -2.51852 0 0.961111
+ N0 -0.485318 0.301052 -0.820874 N1 -0.504836 0 -0.863216 N2 -0.617031 0 -0.786939
+ txt003
+STRI
+ V0 -2.51001 0.125 0.977572 V1 -2.48875 0.2 1.01872 V2 -2.23764 0.2 0.840766
+ N0 -0.589822 0.322549 -0.740319 N1 -0.433172 0.735531 -0.520919 N2 -0.367048 0.708353 -0.60292
+ txt003
+STRI
+ V0 -2.23764 0.2 0.840766 V1 -2.24068 0.125 0.793666 V2 -2.51001 0.125 0.977572
+ N0 -0.367048 0.708353 -0.60292 N1 -0.485318 0.301052 -0.820874 N2 -0.589822 0.322549 -0.740319
+ txt003
+STRI
+ V0 -2.48875 0.2 1.01872 V1 -2.46111 0.225 1.07222 V2 -2.23368 0.225 0.901997
+ N0 -0.433172 0.735531 -0.520919 N1 3.17396e-17 1 -1.63988e-17 N2 5.4409e-17 1 -3.51585e-18
+ txt003
+STRI
+ V0 -2.23368 0.225 0.901997 V1 -2.23764 0.2 0.840766 V2 -2.48875 0.2 1.01872
+ N0 5.4409e-17 1 -3.51585e-18 N1 -0.367048 0.708353 -0.60292 N2 -0.433172 0.735531 -0.520919
+ txt003
+STRI
+ V0 -2.46111 0.225 1.07222 V1 -2.43347 0.2 1.12572 V2 -2.22972 0.2 0.963227
+ N0 3.17396e-17 1 -1.63988e-17 N1 0.471519 0.729692 0.495195 N2 0.396971 0.700023 0.593618
+ txt003
+STRI
+ V0 -2.22972 0.2 0.963227 V1 -2.23368 0.225 0.901997 V2 -2.46111 0.225 1.07222
+ N0 0.396971 0.700023 0.593618 N1 5.4409e-17 1 -3.51585e-18 N2 3.17396e-17 1 -1.63988e-17
+ txt003
+STRI
+ V0 -2.43347 0.2 1.12572 V1 -2.41221 0.125 1.16687 V2 -2.22668 0.125 1.01033
+ N0 0.471519 0.729692 0.495195 N1 0.676612 0.31353 0.666255 N2 0.548733 0.289562 0.784249
+ txt003
+STRI
+ V0 -2.22668 0.125 1.01033 V1 -2.22972 0.2 0.963227 V2 -2.43347 0.2 1.12572
+ N0 0.548733 0.289562 0.784249 N1 0.396971 0.700023 0.593618 N2 0.471519 0.729692 0.495195
+ txt003
+STRI
+ V0 -2.41221 0.125 1.16687 V1 -2.4037 0 1.18333 V2 -2.22546 0 1.02917
+ N0 0.676612 0.31353 0.666255 N1 0.722374 1.2247e-15 0.691503 N2 0.580973 1.1041e-15 0.813923
+ txt003
+STRI
+ V0 -2.22546 0 1.02917 V1 -2.22668 0.125 1.01033 V2 -2.41221 0.125 1.16687
+ N0 0.580973 1.1041e-15 0.813923 N1 0.548733 0.289562 0.784249 N2 0.676612 0.31353 0.666255
+ txt003
+STRI
+ V0 -2.2419 0 0.774826 V1 -2.24068 0.125 0.793666 V2 -1.90741 0.125 0.622222
+ N0 -0.504836 0 -0.863216 N1 -0.485318 0.301052 -0.820874 N2 -0.390503 0.30734 -0.867784
+ txt003
+STRI
+ V0 -1.90741 0.125 0.622222 V1 -1.9 0 0.6 V2 -2.2419 0 0.774826
+ N0 -0.390503 0.30734 -0.867784 N1 -0.410365 0 -0.911922 N2 -0.504836 0 -0.863216
+ txt003
+STRI
+ V0 -2.24068 0.125 0.793666 V1 -2.23764 0.2 0.840766 V2 -1.92593 0.2 0.677778
+ N0 -0.485318 0.301052 -0.820874 N1 -0.367048 0.708353 -0.60292 N2 -0.285351 0.718662 -0.634113
+ txt003
+STRI
+ V0 -1.92593 0.2 0.677778 V1 -1.90741 0.125 0.622222 V2 -2.24068 0.125 0.793666
+ N0 -0.285351 0.718662 -0.634113 N1 -0.390503 0.30734 -0.867784 N2 -0.485318 0.301052 -0.820874
+ txt003
+STRI
+ V0 -2.23764 0.2 0.840766 V1 -2.23368 0.225 0.901997 V2 -1.95 0.225 0.75
+ N0 -0.367048 0.708353 -0.60292 N1 5.4409e-17 1 -3.51585e-18 N2 7.83687e-17 1 2.61229e-17
+ txt003
+STRI
+ V0 -1.95 0.225 0.75 V1 -1.92593 0.2 0.677778 V2 -2.23764 0.2 0.840766
+ N0 7.83687e-17 1 2.61229e-17 N1 -0.285351 0.718662 -0.634113 N2 -0.367048 0.708353 -0.60292
+ txt003
+STRI
+ V0 -2.23368 0.225 0.901997 V1 -2.22972 0.2 0.963227 V2 -1.97407 0.2 0.822222
+ N0 5.4409e-17 1 -3.51585e-18 N1 0.396971 0.700023 0.593618 N2 0.285351 0.718662 0.634113
+ txt003
+STRI
+ V0 -1.97407 0.2 0.822222 V1 -1.95 0.225 0.75 V2 -2.23368 0.225 0.901997
+ N0 0.285351 0.718662 0.634113 N1 7.83687e-17 1 2.61229e-17 N2 5.4409e-17 1 -3.51585e-18
+ txt003
+STRI
+ V0 -2.22972 0.2 0.963227 V1 -2.22668 0.125 1.01033 V2 -1.99259 0.125 0.877778
+ N0 0.396971 0.700023 0.593618 N1 0.548733 0.289562 0.784249 N2 0.390503 0.30734 0.867784
+ txt003
+STRI
+ V0 -1.99259 0.125 0.877778 V1 -1.97407 0.2 0.822222 V2 -2.22972 0.2 0.963227
+ N0 0.390503 0.30734 0.867784 N1 0.285351 0.718662 0.634113 N2 0.396971 0.700023 0.593618
+ txt003
+STRI
+ V0 -2.22668 0.125 1.01033 V1 -2.22546 0 1.02917 V2 -2 0 0.9
+ N0 0.548733 0.289562 0.784249 N1 0.580973 1.1041e-15 0.813923 N2 0.410365 1.30492e-15 0.911922
+ txt003
+STRI
+ V0 -2 0 0.9 V1 -1.99259 0.125 0.877778 V2 -2.22668 0.125 1.01033
+ N0 0.410365 1.30492e-15 0.911922 N1 0.390503 0.30734 0.867784 N2 0.548733 0.289562 0.784249
+ txt003
+STRI
+ V0 1.7 0 1.425 V1 1.7 -0.275 1.36389 V2 2.07238 -0.262346 1.42521
+ N0 -0 0 1 N1 -0.0157732 -0.461877 0.886804 N2 -0.291732 -0.426807 0.855995
+ txt003
+STRI
+ V0 2.07238 -0.262346 1.42521 V1 2.0588 0 1.47639 V2 1.7 0 1.425
+ N0 -0.291732 -0.426807 0.855995 N1 -0.333935 0 0.942596 N2 -0 0 1
+ txt003
+STRI
+ V0 1.7 -0.275 1.36389 V1 1.7 -0.44 1.21111 V2 2.10633 -0.419753 1.29725
+ N0 -0.0157732 -0.461877 0.886804 N1 -0.0291362 -0.857129 0.514277 N2 -0.135104 -0.834377 0.534381
+ txt003
+STRI
+ V0 2.10633 -0.419753 1.29725 V1 2.07238 -0.262346 1.42521 V2 1.7 -0.275 1.36389
+ N0 -0.135104 -0.834377 0.534381 N1 -0.291732 -0.426807 0.855995 N2 -0.0157732 -0.461877 0.886804
+ txt003
+STRI
+ V0 1.7 -0.44 1.21111 V1 1.7 -0.495 1.0125 V2 2.15046 -0.472222 1.1309
+ N0 -0.0291362 -0.857129 0.514277 N1 0 -1 -0 N2 0.110195 -0.99348 0.0292376
+ txt003
+STRI
+ V0 2.15046 -0.472222 1.1309 V1 2.10633 -0.419753 1.29725 V2 1.7 -0.44 1.21111
+ N0 0.110195 -0.99348 0.0292376 N1 -0.135104 -0.834377 0.534381 N2 -0.0291362 -0.857129 0.514277
+ txt003
+STRI
+ V0 1.7 -0.495 1.0125 V1 1.7 -0.44 0.813889 V2 2.1946 -0.419753 0.964558
+ N0 0 -1 -0 N1 0.0673462 -0.855546 -0.513328 N2 0.348602 -0.814337 -0.464038
+ txt003
+STRI
+ V0 2.1946 -0.419753 0.964558 V1 2.15046 -0.472222 1.1309 V2 1.7 -0.495 1.0125
+ N0 0.348602 -0.814337 -0.464038 N1 0.110195 -0.99348 0.0292376 N2 0 -1 -0
+ txt003
+STRI
+ V0 1.7 -0.44 0.813889 V1 1.7 -0.275 0.661111 V2 2.22855 -0.262346 0.8366
+ N0 0.0673462 -0.855546 -0.513328 N1 0.134339 -0.457747 -0.878875 N2 0.492146 -0.41068 -0.767551
+ txt003
+STRI
+ V0 2.22855 -0.262346 0.8366 V1 2.1946 -0.419753 0.964558 V2 1.7 -0.44 0.813889
+ N0 0.492146 -0.41068 -0.767551 N1 0.348602 -0.814337 -0.464038 N2 0.0673462 -0.855546 -0.513328
+ txt003
+STRI
+ V0 1.7 -0.275 0.661111 V1 1.7 0 0.6 V2 2.24213 0 0.785417
+ N0 0.134339 -0.457747 -0.878875 N1 0.158678 9.39168e-16 -0.98733 N2 0.528678 6.47717e-16 -0.848822
+ txt003
+STRI
+ V0 2.24213 0 0.785417 V1 2.22855 -0.262346 0.8366 V2 1.7 -0.275 0.661111
+ N0 0.528678 6.47717e-16 -0.848822 N1 0.492146 -0.41068 -0.767551 N2 0.134339 -0.457747 -0.878875
+ txt003
+STRI
+ V0 2.0588 0 1.47639 V1 2.07238 -0.262346 1.42521 V2 2.29012 -0.23071 1.57202
+ N0 -0.333935 0 0.942596 N1 -0.291732 -0.426807 0.855995 N2 -0.64585 -0.390219 0.656206
+ txt003
+STRI
+ V0 2.29012 -0.23071 1.57202 V1 2.27037 0 1.61111 V2 2.0588 0 1.47639
+ N0 -0.64585 -0.390219 0.656206 N1 -0.731055 0 0.682318 N2 -0.333935 0 0.942596
+ txt003
+STRI
+ V0 2.07238 -0.262346 1.42521 V1 2.10633 -0.419753 1.29725 V2 2.33951 -0.369136 1.47428
+ N0 -0.291732 -0.426807 0.855995 N1 -0.135104 -0.834377 0.534381 N2 -0.312511 -0.816863 0.484842
+ txt003
+STRI
+ V0 2.33951 -0.369136 1.47428 V1 2.29012 -0.23071 1.57202 V2 2.07238 -0.262346 1.42521
+ N0 -0.312511 -0.816863 0.484842 N1 -0.64585 -0.390219 0.656206 N2 -0.291732 -0.426807 0.855995
+ txt003
+STRI
+ V0 2.10633 -0.419753 1.29725 V1 2.15046 -0.472222 1.1309 V2 2.4037 -0.415278 1.34722
+ N0 -0.135104 -0.834377 0.534381 N1 0.110195 -0.99348 0.0292376 N2 0.215359 -0.970454 0.108813
+ txt003
+STRI
+ V0 2.4037 -0.415278 1.34722 V1 2.33951 -0.369136 1.47428 V2 2.10633 -0.419753 1.29725
+ N0 0.215359 -0.970454 0.108813 N1 -0.312511 -0.816863 0.484842 N2 -0.135104 -0.834377 0.534381
+ txt003
+STRI
+ V0 2.15046 -0.472222 1.1309 V1 2.1946 -0.419753 0.964558 V2 2.4679 -0.369136 1.22016
+ N0 0.110195 -0.99348 0.0292376 N1 0.348602 -0.814337 -0.464038 N2 0.627607 -0.733748 -0.260237
+ txt003
+STRI
+ V0 2.4679 -0.369136 1.22016 V1 2.4037 -0.415278 1.34722 V2 2.15046 -0.472222 1.1309
+ N0 0.627607 -0.733748 -0.260237 N1 0.215359 -0.970454 0.108813 N2 0.110195 -0.99348 0.0292376
+ txt003
+STRI
+ V0 2.1946 -0.419753 0.964558 V1 2.22855 -0.262346 0.8366 V2 2.51728 -0.23071 1.12243
+ N0 0.348602 -0.814337 -0.464038 N1 0.492146 -0.41068 -0.767551 N2 0.813963 -0.348056 -0.465103
+ txt003
+STRI
+ V0 2.51728 -0.23071 1.12243 V1 2.4679 -0.369136 1.22016 V2 2.1946 -0.419753 0.964558
+ N0 0.813963 -0.348056 -0.465103 N1 0.627607 -0.733748 -0.260237 N2 0.348602 -0.814337 -0.464038
+ txt003
+STRI
+ V0 2.22855 -0.262346 0.8366 V1 2.24213 0 0.785417 V2 2.53704 0 1.08333
+ N0 0.492146 -0.41068 -0.767551 N1 0.528678 6.47717e-16 -0.848822 N2 0.854063 9.88017e-16 -0.52017
+ txt003
+STRI
+ V0 2.53704 0 1.08333 V1 2.51728 -0.23071 1.12243 V2 2.22855 -0.262346 0.8366
+ N0 0.854063 9.88017e-16 -0.52017 N1 0.813963 -0.348056 -0.465103 N2 0.492146 -0.41068 -0.767551
+ txt003
+STRI
+ V0 2.27037 0 1.61111 V1 2.29012 -0.23071 1.57202 V2 2.40972 -0.189583 1.77361
+ N0 -0.731055 0 0.682318 N1 -0.64585 -0.390219 0.656206 N2 -0.835237 -0.363942 0.412221
+ txt003
+STRI
+ V0 2.40972 -0.189583 1.77361 V1 2.3875 0 1.8 V2 2.27037 0 1.61111
+ N0 -0.835237 -0.363942 0.412221 N1 -0.920582 0 0.39055 N2 -0.731055 0 0.682318
+ txt003
+STRI
+ V0 2.29012 -0.23071 1.57202 V1 2.33951 -0.369136 1.47428 V2 2.46528 -0.303333 1.70764
+ N0 -0.64585 -0.390219 0.656206 N1 -0.312511 -0.816863 0.484842 N2 -0.451323 -0.803033 0.38916
+ txt003
+STRI
+ V0 2.46528 -0.303333 1.70764 V1 2.40972 -0.189583 1.77361 V2 2.29012 -0.23071 1.57202
+ N0 -0.451323 -0.803033 0.38916 N1 -0.835237 -0.363942 0.412221 N2 -0.64585 -0.390219 0.656206
+ txt003
+STRI
+ V0 2.33951 -0.369136 1.47428 V1 2.4037 -0.415278 1.34722 V2 2.5375 -0.34125 1.62187
+ N0 -0.312511 -0.816863 0.484842 N1 0.215359 -0.970454 0.108813 N2 0.214084 -0.960035 0.180281
+ txt003
+STRI
+ V0 2.5375 -0.34125 1.62187 V1 2.46528 -0.303333 1.70764 V2 2.33951 -0.369136 1.47428
+ N0 0.214084 -0.960035 0.180281 N1 -0.451323 -0.803033 0.38916 N2 -0.312511 -0.816863 0.484842
+ txt003
+STRI
+ V0 2.4037 -0.415278 1.34722 V1 2.4679 -0.369136 1.22016 V2 2.60972 -0.303333 1.53611
+ N0 0.215359 -0.970454 0.108813 N1 0.627607 -0.733748 -0.260237 N2 0.705424 -0.704198 -0.0805066
+ txt003
+STRI
+ V0 2.60972 -0.303333 1.53611 V1 2.5375 -0.34125 1.62187 V2 2.4037 -0.415278 1.34722
+ N0 0.705424 -0.704198 -0.0805066 N1 0.214084 -0.960035 0.180281 N2 0.215359 -0.970454 0.108813
+ txt003
+STRI
+ V0 2.4679 -0.369136 1.22016 V1 2.51728 -0.23071 1.12243 V2 2.66528 -0.189583 1.47014
+ N0 0.627607 -0.733748 -0.260237 N1 0.813963 -0.348056 -0.465103 N2 0.913262 -0.329186 -0.239977
+ txt003
+STRI
+ V0 2.66528 -0.189583 1.47014 V1 2.60972 -0.303333 1.53611 V2 2.4679 -0.369136 1.22016
+ N0 0.913262 -0.329186 -0.239977 N1 0.705424 -0.704198 -0.0805066 N2 0.627607 -0.733748 -0.260237
+ txt003
+STRI
+ V0 2.51728 -0.23071 1.12243 V1 2.53704 0 1.08333 V2 2.6875 0 1.44375
+ N0 0.813963 -0.348056 -0.465103 N1 0.854063 9.88017e-16 -0.52017 N2 0.957826 1.83855e-15 -0.287348
+ txt003
+STRI
+ V0 2.6875 0 1.44375 V1 2.66528 -0.189583 1.47014 V2 2.51728 -0.23071 1.12243
+ N0 0.957826 1.83855e-15 -0.287348 N1 0.913262 -0.329186 -0.239977 N2 0.813963 -0.348056 -0.465103
+ txt003
+STRI
+ V0 2.3875 0 1.8 V1 2.40972 -0.189583 1.77361 V2 2.48765 -0.148457 1.99928
+ N0 -0.920582 0 0.39055 N1 -0.835237 -0.363942 0.412221 N2 -0.842821 -0.409176 0.34961
+ txt003
+STRI
+ V0 2.48765 -0.148457 1.99928 V1 2.46296 0 2.01389 V2 2.3875 0 1.8
+ N0 -0.842821 -0.409176 0.34961 N1 -0.948683 0 0.316228 N2 -0.920582 0 0.39055
+ txt003
+STRI
+ V0 2.40972 -0.189583 1.77361 V1 2.46528 -0.303333 1.70764 V2 2.54938 -0.237531 1.96276
+ N0 -0.835237 -0.363942 0.412221 N1 -0.451323 -0.803033 0.38916 N2 -0.452673 -0.821162 0.347535
+ txt003
+STRI
+ V0 2.54938 -0.237531 1.96276 V1 2.48765 -0.148457 1.99928 V2 2.40972 -0.189583 1.77361
+ N0 -0.452673 -0.821162 0.347535 N1 -0.842821 -0.409176 0.34961 N2 -0.835237 -0.363942 0.412221
+ txt003
+STRI
+ V0 2.46528 -0.303333 1.70764 V1 2.5375 -0.34125 1.62187 V2 2.62963 -0.267222 1.91528
+ N0 -0.451323 -0.803033 0.38916 N1 0.214084 -0.960035 0.180281 N2 0.113546 -0.974822 0.191909
+ txt003
+STRI
+ V0 2.62963 -0.267222 1.91528 V1 2.54938 -0.237531 1.96276 V2 2.46528 -0.303333 1.70764
+ N0 0.113546 -0.974822 0.191909 N1 -0.452673 -0.821162 0.347535 N2 -0.451323 -0.803033 0.38916
+ txt003
+STRI
+ V0 2.5375 -0.34125 1.62187 V1 2.60972 -0.303333 1.53611 V2 2.70988 -0.237531 1.8678
+ N0 0.214084 -0.960035 0.180281 N1 0.705424 -0.704198 -0.0805066 N2 0.60461 -0.794635 -0.0547983
+ txt003
+STRI
+ V0 2.70988 -0.237531 1.8678 V1 2.62963 -0.267222 1.91528 V2 2.5375 -0.34125 1.62187
+ N0 0.60461 -0.794635 -0.0547983 N1 0.113546 -0.974822 0.191909 N2 0.214084 -0.960035 0.180281
+ txt003
+STRI
+ V0 2.60972 -0.303333 1.53611 V1 2.66528 -0.189583 1.47014 V2 2.7716 -0.148457 1.83128
+ N0 0.705424 -0.704198 -0.0805066 N1 0.913262 -0.329186 -0.239977 N2 0.880144 -0.401503 -0.253261
+ txt003
+STRI
+ V0 2.7716 -0.148457 1.83128 V1 2.70988 -0.237531 1.8678 V2 2.60972 -0.303333 1.53611
+ N0 0.880144 -0.401503 -0.253261 N1 0.60461 -0.794635 -0.0547983 N2 0.705424 -0.704198 -0.0805066
+ txt003
+STRI
+ V0 2.66528 -0.189583 1.47014 V1 2.6875 0 1.44375 V2 2.7963 0 1.81667
+ N0 0.913262 -0.329186 -0.239977 N1 0.957826 1.83855e-15 -0.287348 N2 0.947588 3.02585e-15 -0.319493
+ txt003
+STRI
+ V0 2.7963 0 1.81667 V1 2.7716 -0.148457 1.83128 V2 2.66528 -0.189583 1.47014
+ N0 0.947588 3.02585e-15 -0.319493 N1 0.880144 -0.401503 -0.253261 N2 0.913262 -0.329186 -0.239977
+ txt003
+STRI
+ V0 2.46296 0 2.01389 V1 2.48765 -0.148457 1.99928 V2 2.5804 -0.116821 2.21831
+ N0 -0.948683 0 0.316228 N1 -0.842821 -0.409176 0.34961 N2 -0.723795 -0.498863 0.476715
+ txt003
+STRI
+ V0 2.5804 -0.116821 2.21831 V1 2.54954 0 2.22361 V2 2.46296 0 2.01389
+ N0 -0.723795 -0.498863 0.476715 N1 -0.874591 0 0.484861 N2 -0.948683 0 0.316228
+ txt003
+STRI
+ V0 2.48765 -0.148457 1.99928 V1 2.54938 -0.237531 1.96276 V2 2.65756 -0.186914 2.20507
+ N0 -0.842821 -0.409176 0.34961 N1 -0.452673 -0.821162 0.347535 N2 -0.365378 -0.851743 0.375544
+ txt003
+STRI
+ V0 2.65756 -0.186914 2.20507 V1 2.5804 -0.116821 2.21831 V2 2.48765 -0.148457 1.99928
+ N0 -0.365378 -0.851743 0.375544 N1 -0.723795 -0.498863 0.476715 N2 -0.842821 -0.409176 0.34961
+ txt003
+STRI
+ V0 2.54938 -0.237531 1.96276 V1 2.62963 -0.267222 1.91528 V2 2.75787 -0.210278 2.18785
+ N0 -0.452673 -0.821162 0.347535 N1 0.113546 -0.974822 0.191909 N2 0.0260102 -0.988113 0.151516
+ txt003
+STRI
+ V0 2.75787 -0.210278 2.18785 V1 2.65756 -0.186914 2.20507 V2 2.54938 -0.237531 1.96276
+ N0 0.0260102 -0.988113 0.151516 N1 -0.365378 -0.851743 0.375544 N2 -0.452673 -0.821162 0.347535
+ txt003
+STRI
+ V0 2.62963 -0.267222 1.91528 V1 2.70988 -0.237531 1.8678 V2 2.85818 -0.186914 2.17063
+ N0 0.113546 -0.974822 0.191909 N1 0.60461 -0.794635 -0.0547983 N2 0.417243 -0.88974 -0.185122
+ txt003
+STRI
+ V0 2.85818 -0.186914 2.17063 V1 2.75787 -0.210278 2.18785 V2 2.62963 -0.267222 1.91528
+ N0 0.417243 -0.88974 -0.185122 N1 0.0260102 -0.988113 0.151516 N2 0.113546 -0.974822 0.191909
+ txt003
+STRI
+ V0 2.70988 -0.237531 1.8678 V1 2.7716 -0.148457 1.83128 V2 2.93534 -0.116821 2.15738
+ N0 0.60461 -0.794635 -0.0547983 N1 0.880144 -0.401503 -0.253261 N2 0.70819 -0.492319 -0.506053
+ txt003
+STRI
+ V0 2.93534 -0.116821 2.15738 V1 2.85818 -0.186914 2.17063 V2 2.70988 -0.237531 1.8678
+ N0 0.70819 -0.492319 -0.506053 N1 0.417243 -0.88974 -0.185122 N2 0.60461 -0.794635 -0.0547983
+ txt003
+STRI
+ V0 2.7716 -0.148457 1.83128 V1 2.7963 0 1.81667 V2 2.9662 0 2.15208
+ N0 0.880144 -0.401503 -0.253261 N1 0.947588 3.02585e-15 -0.319493 N2 0.787582 4.30265e-15 -0.61621
+ txt003
+STRI
+ V0 2.9662 0 2.15208 V1 2.93534 -0.116821 2.15738 V2 2.7716 -0.148457 1.83128
+ N0 0.787582 4.30265e-15 -0.61621 N1 0.70819 -0.492319 -0.506053 N2 0.880144 -0.401503 -0.253261
+ txt003
+STRI
+ V0 2.54954 0 2.22361 V1 2.5804 -0.116821 2.21831 V2 2.74444 -0.104167 2.4
+ N0 -0.874591 0 0.484861 N1 -0.723795 -0.498863 0.476715 N2 -0.497164 -0.497164 0.711095
+ txt003
+STRI
+ V0 2.74444 -0.104167 2.4 V1 2.7 0 2.4 V2 2.54954 0 2.22361
+ N0 -0.497164 -0.497164 0.711095 N1 -0.6 0 0.8 N2 -0.874591 0 0.484861
+ txt003
+STRI
+ V0 2.5804 -0.116821 2.21831 V1 2.65756 -0.186914 2.20507 V2 2.85556 -0.166667 2.4
+ N0 -0.723795 -0.498863 0.476715 N1 -0.365378 -0.851743 0.375544 N2 -0.267368 -0.855576 0.443288
+ txt003
+STRI
+ V0 2.85556 -0.166667 2.4 V1 2.74444 -0.104167 2.4 V2 2.5804 -0.116821 2.21831
+ N0 -0.267368 -0.855576 0.443288 N1 -0.497164 -0.497164 0.711095 N2 -0.723795 -0.498863 0.476715
+ txt003
+STRI
+ V0 2.65756 -0.186914 2.20507 V1 2.75787 -0.210278 2.18785 V2 3 -0.1875 2.4
+ N0 -0.365378 -0.851743 0.375544 N1 0.0260102 -0.988113 0.151516 N2 0 -1 2.19303e-16
+ txt003
+STRI
+ V0 3 -0.1875 2.4 V1 2.85556 -0.166667 2.4 V2 2.65756 -0.186914 2.20507
+ N0 0 -1 2.19303e-16 N1 -0.267368 -0.855576 0.443288 N2 -0.365378 -0.851743 0.375544
+ txt003
+STRI
+ V0 2.75787 -0.210278 2.18785 V1 2.85818 -0.186914 2.17063 V2 3.14444 -0.166667 2.4
+ N0 0.0260102 -0.988113 0.151516 N1 0.417243 -0.88974 -0.185122 N2 0.250514 -0.801644 -0.54278
+ txt003
+STRI
+ V0 3.14444 -0.166667 2.4 V1 3 -0.1875 2.4 V2 2.75787 -0.210278 2.18785
+ N0 0.250514 -0.801644 -0.54278 N1 0 -1 2.19303e-16 N2 0.0260102 -0.988113 0.151516
+ txt003
+STRI
+ V0 2.85818 -0.186914 2.17063 V1 2.93534 -0.116821 2.15738 V2 3.25556 -0.104167 2.4
+ N0 0.417243 -0.88974 -0.185122 N1 0.70819 -0.492319 -0.506053 N2 0.366221 -0.366221 -0.855433
+ txt003
+STRI
+ V0 3.25556 -0.104167 2.4 V1 3.14444 -0.166667 2.4 V2 2.85818 -0.186914 2.17063
+ N0 0.366221 -0.366221 -0.855433 N1 0.250514 -0.801644 -0.54278 N2 0.417243 -0.88974 -0.185122
+ txt003
+STRI
+ V0 2.93534 -0.116821 2.15738 V1 2.9662 0 2.15208 V2 3.3 0 2.4
+ N0 0.70819 -0.492319 -0.506053 N1 0.787582 4.30265e-15 -0.61621 N2 0.384615 6.46776e-15 -0.923077
+ txt003
+STRI
+ V0 3.3 0 2.4 V1 3.25556 -0.104167 2.4 V2 2.93534 -0.116821 2.15738
+ N0 0.384615 6.46776e-15 -0.923077 N1 0.366221 -0.366221 -0.855433 N2 0.70819 -0.492319 -0.506053
+ txt003
+STRI
+ V0 1.7 0 0.6 V1 1.7 0.275 0.661111 V2 2.22855 0.262346 0.8366
+ N0 0.158678 0 -0.98733 N1 0.134339 0.457747 -0.878875 N2 0.492146 0.41068 -0.767551
+ txt003
+STRI
+ V0 2.22855 0.262346 0.8366 V1 2.24213 0 0.785417 V2 1.7 0 0.6
+ N0 0.492146 0.41068 -0.767551 N1 0.528678 0 -0.848822 N2 0.158678 0 -0.98733
+ txt003
+STRI
+ V0 1.7 0.275 0.661111 V1 1.7 0.44 0.813889 V2 2.1946 0.419753 0.964558
+ N0 0.134339 0.457747 -0.878875 N1 0.0673462 0.855546 -0.513328 N2 0.348602 0.814337 -0.464038
+ txt003
+STRI
+ V0 2.1946 0.419753 0.964558 V1 2.22855 0.262346 0.8366 V2 1.7 0.275 0.661111
+ N0 0.348602 0.814337 -0.464038 N1 0.492146 0.41068 -0.767551 N2 0.134339 0.457747 -0.878875
+ txt003
+STRI
+ V0 1.7 0.44 0.813889 V1 1.7 0.495 1.0125 V2 2.15046 0.472222 1.1309
+ N0 0.0673462 0.855546 -0.513328 N1 0 1 -0 N2 0.110195 0.99348 0.0292376
+ txt003
+STRI
+ V0 2.15046 0.472222 1.1309 V1 2.1946 0.419753 0.964558 V2 1.7 0.44 0.813889
+ N0 0.110195 0.99348 0.0292376 N1 0.348602 0.814337 -0.464038 N2 0.0673462 0.855546 -0.513328
+ txt003
+STRI
+ V0 1.7 0.495 1.0125 V1 1.7 0.44 1.21111 V2 2.10633 0.419753 1.29725
+ N0 0 1 -0 N1 -0.0291362 0.857129 0.514277 N2 -0.135104 0.834377 0.534381
+ txt003
+STRI
+ V0 2.10633 0.419753 1.29725 V1 2.15046 0.472222 1.1309 V2 1.7 0.495 1.0125
+ N0 -0.135104 0.834377 0.534381 N1 0.110195 0.99348 0.0292376 N2 0 1 -0
+ txt003
+STRI
+ V0 1.7 0.44 1.21111 V1 1.7 0.275 1.36389 V2 2.07238 0.262346 1.42521
+ N0 -0.0291362 0.857129 0.514277 N1 -0.0157732 0.461877 0.886804 N2 -0.291732 0.426807 0.855995
+ txt003
+STRI
+ V0 2.07238 0.262346 1.42521 V1 2.10633 0.419753 1.29725 V2 1.7 0.44 1.21111
+ N0 -0.291732 0.426807 0.855995 N1 -0.135104 0.834377 0.534381 N2 -0.0291362 0.857129 0.514277
+ txt003
+STRI
+ V0 1.7 0.275 1.36389 V1 1.7 0 1.425 V2 2.0588 0 1.47639
+ N0 -0.0157732 0.461877 0.886804 N1 0 -4.48575e-16 1 N2 -0.333935 -3.25455e-16 0.942596
+ txt003
+STRI
+ V0 2.0588 0 1.47639 V1 2.07238 0.262346 1.42521 V2 1.7 0.275 1.36389
+ N0 -0.333935 -3.25455e-16 0.942596 N1 -0.291732 0.426807 0.855995 N2 -0.0157732 0.461877 0.886804
+ txt003
+STRI
+ V0 2.24213 0 0.785417 V1 2.22855 0.262346 0.8366 V2 2.51728 0.23071 1.12243
+ N0 0.528678 0 -0.848822 N1 0.492146 0.41068 -0.767551 N2 0.813963 0.348056 -0.465103
+ txt003
+STRI
+ V0 2.51728 0.23071 1.12243 V1 2.53704 0 1.08333 V2 2.24213 0 0.785417
+ N0 0.813963 0.348056 -0.465103 N1 0.854063 0 -0.52017 N2 0.528678 0 -0.848822
+ txt003
+STRI
+ V0 2.22855 0.262346 0.8366 V1 2.1946 0.419753 0.964558 V2 2.4679 0.369136 1.22016
+ N0 0.492146 0.41068 -0.767551 N1 0.348602 0.814337 -0.464038 N2 0.627607 0.733748 -0.260237
+ txt003
+STRI
+ V0 2.4679 0.369136 1.22016 V1 2.51728 0.23071 1.12243 V2 2.22855 0.262346 0.8366
+ N0 0.627607 0.733748 -0.260237 N1 0.813963 0.348056 -0.465103 N2 0.492146 0.41068 -0.767551
+ txt003
+STRI
+ V0 2.1946 0.419753 0.964558 V1 2.15046 0.472222 1.1309 V2 2.4037 0.415278 1.34722
+ N0 0.348602 0.814337 -0.464038 N1 0.110195 0.99348 0.0292376 N2 0.215359 0.970454 0.108813
+ txt003
+STRI
+ V0 2.4037 0.415278 1.34722 V1 2.4679 0.369136 1.22016 V2 2.1946 0.419753 0.964558
+ N0 0.215359 0.970454 0.108813 N1 0.627607 0.733748 -0.260237 N2 0.348602 0.814337 -0.464038
+ txt003
+STRI
+ V0 2.15046 0.472222 1.1309 V1 2.10633 0.419753 1.29725 V2 2.33951 0.369136 1.47428
+ N0 0.110195 0.99348 0.0292376 N1 -0.135104 0.834377 0.534381 N2 -0.312511 0.816863 0.484842
+ txt003
+STRI
+ V0 2.33951 0.369136 1.47428 V1 2.4037 0.415278 1.34722 V2 2.15046 0.472222 1.1309
+ N0 -0.312511 0.816863 0.484842 N1 0.215359 0.970454 0.108813 N2 0.110195 0.99348 0.0292376
+ txt003
+STRI
+ V0 2.10633 0.419753 1.29725 V1 2.07238 0.262346 1.42521 V2 2.29012 0.23071 1.57202
+ N0 -0.135104 0.834377 0.534381 N1 -0.291732 0.426807 0.855995 N2 -0.64585 0.390219 0.656206
+ txt003
+STRI
+ V0 2.29012 0.23071 1.57202 V1 2.33951 0.369136 1.47428 V2 2.10633 0.419753 1.29725
+ N0 -0.64585 0.390219 0.656206 N1 -0.312511 0.816863 0.484842 N2 -0.135104 0.834377 0.534381
+ txt003
+STRI
+ V0 2.07238 0.262346 1.42521 V1 2.0588 0 1.47639 V2 2.27037 0 1.61111
+ N0 -0.291732 0.426807 0.855995 N1 -0.333935 -3.25455e-16 0.942596 N2 -0.731055 -1.69385e-16 0.682318
+ txt003
+STRI
+ V0 2.27037 0 1.61111 V1 2.29012 0.23071 1.57202 V2 2.07238 0.262346 1.42521
+ N0 -0.731055 -1.69385e-16 0.682318 N1 -0.64585 0.390219 0.656206 N2 -0.291732 0.426807 0.855995
+ txt003
+STRI
+ V0 2.53704 0 1.08333 V1 2.51728 0.23071 1.12243 V2 2.66528 0.189583 1.47014
+ N0 0.854063 0 -0.52017 N1 0.813963 0.348056 -0.465103 N2 0.913262 0.329186 -0.239977
+ txt003
+STRI
+ V0 2.66528 0.189583 1.47014 V1 2.6875 0 1.44375 V2 2.53704 0 1.08333
+ N0 0.913262 0.329186 -0.239977 N1 0.957826 0 -0.287348 N2 0.854063 0 -0.52017
+ txt003
+STRI
+ V0 2.51728 0.23071 1.12243 V1 2.4679 0.369136 1.22016 V2 2.60972 0.303333 1.53611
+ N0 0.813963 0.348056 -0.465103 N1 0.627607 0.733748 -0.260237 N2 0.705424 0.704198 -0.0805066
+ txt003
+STRI
+ V0 2.60972 0.303333 1.53611 V1 2.66528 0.189583 1.47014 V2 2.51728 0.23071 1.12243
+ N0 0.705424 0.704198 -0.0805066 N1 0.913262 0.329186 -0.239977 N2 0.813963 0.348056 -0.465103
+ txt003
+STRI
+ V0 2.4679 0.369136 1.22016 V1 2.4037 0.415278 1.34722 V2 2.5375 0.34125 1.62188
+ N0 0.627607 0.733748 -0.260237 N1 0.215359 0.970454 0.108813 N2 0.214084 0.960035 0.180281
+ txt003
+STRI
+ V0 2.5375 0.34125 1.62188 V1 2.60972 0.303333 1.53611 V2 2.4679 0.369136 1.22016
+ N0 0.214084 0.960035 0.180281 N1 0.705424 0.704198 -0.0805066 N2 0.627607 0.733748 -0.260237
+ txt003
+STRI
+ V0 2.4037 0.415278 1.34722 V1 2.33951 0.369136 1.47428 V2 2.46528 0.303333 1.70764
+ N0 0.215359 0.970454 0.108813 N1 -0.312511 0.816863 0.484842 N2 -0.451323 0.803033 0.38916
+ txt003
+STRI
+ V0 2.46528 0.303333 1.70764 V1 2.5375 0.34125 1.62188 V2 2.4037 0.415278 1.34722
+ N0 -0.451323 0.803033 0.38916 N1 0.214084 0.960035 0.180281 N2 0.215359 0.970454 0.108813
+ txt003
+STRI
+ V0 2.33951 0.369136 1.47428 V1 2.29012 0.23071 1.57202 V2 2.40972 0.189583 1.77361
+ N0 -0.312511 0.816863 0.484842 N1 -0.64585 0.390219 0.656206 N2 -0.835237 0.363942 0.412221
+ txt003
+STRI
+ V0 2.40972 0.189583 1.77361 V1 2.46528 0.303333 1.70764 V2 2.33951 0.369136 1.47428
+ N0 -0.835237 0.363942 0.412221 N1 -0.451323 0.803033 0.38916 N2 -0.312511 0.816863 0.484842
+ txt003
+STRI
+ V0 2.29012 0.23071 1.57202 V1 2.27037 0 1.61111 V2 2.3875 0 1.8
+ N0 -0.64585 0.390219 0.656206 N1 -0.731055 -1.69385e-16 0.682318 N2 -0.920582 -2.76813e-16 0.39055
+ txt003
+STRI
+ V0 2.3875 0 1.8 V1 2.40972 0.189583 1.77361 V2 2.29012 0.23071 1.57202
+ N0 -0.920582 -2.76813e-16 0.39055 N1 -0.835237 0.363942 0.412221 N2 -0.64585 0.390219 0.656206
+ txt003
+STRI
+ V0 2.6875 0 1.44375 V1 2.66528 0.189583 1.47014 V2 2.7716 0.148457 1.83128
+ N0 0.957826 0 -0.287348 N1 0.913262 0.329186 -0.239977 N2 0.880144 0.401503 -0.253261
+ txt003
+STRI
+ V0 2.7716 0.148457 1.83128 V1 2.7963 0 1.81667 V2 2.6875 0 1.44375
+ N0 0.880144 0.401503 -0.253261 N1 0.947588 0 -0.319493 N2 0.957826 0 -0.287348
+ txt003
+STRI
+ V0 2.66528 0.189583 1.47014 V1 2.60972 0.303333 1.53611 V2 2.70988 0.237531 1.8678
+ N0 0.913262 0.329186 -0.239977 N1 0.705424 0.704198 -0.0805066 N2 0.60461 0.794635 -0.0547983
+ txt003
+STRI
+ V0 2.70988 0.237531 1.8678 V1 2.7716 0.148457 1.83128 V2 2.66528 0.189583 1.47014
+ N0 0.60461 0.794635 -0.0547983 N1 0.880144 0.401503 -0.253261 N2 0.913262 0.329186 -0.239977
+ txt003
+STRI
+ V0 2.60972 0.303333 1.53611 V1 2.5375 0.34125 1.62188 V2 2.62963 0.267222 1.91528
+ N0 0.705424 0.704198 -0.0805066 N1 0.214084 0.960035 0.180281 N2 0.113546 0.974822 0.191909
+ txt003
+STRI
+ V0 2.62963 0.267222 1.91528 V1 2.70988 0.237531 1.8678 V2 2.60972 0.303333 1.53611
+ N0 0.113546 0.974822 0.191909 N1 0.60461 0.794635 -0.0547983 N2 0.705424 0.704198 -0.0805066
+ txt003
+STRI
+ V0 2.5375 0.34125 1.62188 V1 2.46528 0.303333 1.70764 V2 2.54938 0.237531 1.96276
+ N0 0.214084 0.960035 0.180281 N1 -0.451323 0.803033 0.38916 N2 -0.452673 0.821162 0.347535
+ txt003
+STRI
+ V0 2.54938 0.237531 1.96276 V1 2.62963 0.267222 1.91528 V2 2.5375 0.34125 1.62188
+ N0 -0.452673 0.821162 0.347535 N1 0.113546 0.974822 0.191909 N2 0.214084 0.960035 0.180281
+ txt003
+STRI
+ V0 2.46528 0.303333 1.70764 V1 2.40972 0.189583 1.77361 V2 2.48765 0.148457 1.99928
+ N0 -0.451323 0.803033 0.38916 N1 -0.835237 0.363942 0.412221 N2 -0.842821 0.409176 0.34961
+ txt003
+STRI
+ V0 2.48765 0.148457 1.99928 V1 2.54938 0.237531 1.96276 V2 2.46528 0.303333 1.70764
+ N0 -0.842821 0.409176 0.34961 N1 -0.452673 0.821162 0.347535 N2 -0.451323 0.803033 0.38916
+ txt003
+STRI
+ V0 2.40972 0.189583 1.77361 V1 2.3875 0 1.8 V2 2.46296 0 2.01389
+ N0 -0.835237 0.363942 0.412221 N1 -0.920582 -2.76813e-16 0.39055 N2 -0.948683 -4.59839e-16 0.316228
+ txt003
+STRI
+ V0 2.46296 0 2.01389 V1 2.48765 0.148457 1.99928 V2 2.40972 0.189583 1.77361
+ N0 -0.948683 -4.59839e-16 0.316228 N1 -0.842821 0.409176 0.34961 N2 -0.835237 0.363942 0.412221
+ txt003
+STRI
+ V0 2.7963 0 1.81667 V1 2.7716 0.148457 1.83128 V2 2.93534 0.116821 2.15738
+ N0 0.947588 0 -0.319493 N1 0.880144 0.401503 -0.253261 N2 0.70819 0.492319 -0.506053
+ txt003
+STRI
+ V0 2.93534 0.116821 2.15738 V1 2.9662 0 2.15208 V2 2.7963 0 1.81667
+ N0 0.70819 0.492319 -0.506053 N1 0.787582 0 -0.61621 N2 0.947588 0 -0.319493
+ txt003
+STRI
+ V0 2.7716 0.148457 1.83128 V1 2.70988 0.237531 1.8678 V2 2.85818 0.186914 2.17063
+ N0 0.880144 0.401503 -0.253261 N1 0.60461 0.794635 -0.0547983 N2 0.417243 0.88974 -0.185122
+ txt003
+STRI
+ V0 2.85818 0.186914 2.17063 V1 2.93534 0.116821 2.15738 V2 2.7716 0.148457 1.83128
+ N0 0.417243 0.88974 -0.185122 N1 0.70819 0.492319 -0.506053 N2 0.880144 0.401503 -0.253261
+ txt003
+STRI
+ V0 2.70988 0.237531 1.8678 V1 2.62963 0.267222 1.91528 V2 2.75787 0.210278 2.18785
+ N0 0.60461 0.794635 -0.0547983 N1 0.113546 0.974822 0.191909 N2 0.0260102 0.988113 0.151516
+ txt003
+STRI
+ V0 2.75787 0.210278 2.18785 V1 2.85818 0.186914 2.17063 V2 2.70988 0.237531 1.8678
+ N0 0.0260102 0.988113 0.151516 N1 0.417243 0.88974 -0.185122 N2 0.60461 0.794635 -0.0547983
+ txt003
+STRI
+ V0 2.62963 0.267222 1.91528 V1 2.54938 0.237531 1.96276 V2 2.65756 0.186914 2.20507
+ N0 0.113546 0.974822 0.191909 N1 -0.452673 0.821162 0.347535 N2 -0.365378 0.851743 0.375544
+ txt003
+STRI
+ V0 2.65756 0.186914 2.20507 V1 2.75787 0.210278 2.18785 V2 2.62963 0.267222 1.91528
+ N0 -0.365378 0.851743 0.375544 N1 0.0260102 0.988113 0.151516 N2 0.113546 0.974822 0.191909
+ txt003
+STRI
+ V0 2.54938 0.237531 1.96276 V1 2.48765 0.148457 1.99928 V2 2.5804 0.116821 2.21831
+ N0 -0.452673 0.821162 0.347535 N1 -0.842821 0.409176 0.34961 N2 -0.723795 0.498863 0.476715
+ txt003
+STRI
+ V0 2.5804 0.116821 2.21831 V1 2.65756 0.186914 2.20507 V2 2.54938 0.237531 1.96276
+ N0 -0.723795 0.498863 0.476715 N1 -0.365378 0.851743 0.375544 N2 -0.452673 0.821162 0.347535
+ txt003
+STRI
+ V0 2.48765 0.148457 1.99928 V1 2.46296 0 2.01389 V2 2.54954 0 2.22361
+ N0 -0.842821 0.409176 0.34961 N1 -0.948683 -4.59839e-16 0.316228 N2 -0.874591 -1.30753e-15 0.484861
+ txt003
+STRI
+ V0 2.54954 0 2.22361 V1 2.5804 0.116821 2.21831 V2 2.48765 0.148457 1.99928
+ N0 -0.874591 -1.30753e-15 0.484861 N1 -0.723795 0.498863 0.476715 N2 -0.842821 0.409176 0.34961
+ txt003
+STRI
+ V0 2.9662 0 2.15208 V1 2.93534 0.116821 2.15738 V2 3.25556 0.104167 2.4
+ N0 0.787582 0 -0.61621 N1 0.70819 0.492319 -0.506053 N2 0.366221 0.366221 -0.855433
+ txt003
+STRI
+ V0 3.25556 0.104167 2.4 V1 3.3 0 2.4 V2 2.9662 0 2.15208
+ N0 0.366221 0.366221 -0.855433 N1 0.384615 0 -0.923077 N2 0.787582 0 -0.61621
+ txt003
+STRI
+ V0 2.93534 0.116821 2.15738 V1 2.85818 0.186914 2.17063 V2 3.14444 0.166667 2.4
+ N0 0.70819 0.492319 -0.506053 N1 0.417243 0.88974 -0.185122 N2 0.250514 0.801644 -0.54278
+ txt003
+STRI
+ V0 3.14444 0.166667 2.4 V1 3.25556 0.104167 2.4 V2 2.93534 0.116821 2.15738
+ N0 0.250514 0.801644 -0.54278 N1 0.366221 0.366221 -0.855433 N2 0.70819 0.492319 -0.506053
+ txt003
+STRI
+ V0 2.85818 0.186914 2.17063 V1 2.75787 0.210278 2.18785 V2 3 0.1875 2.4
+ N0 0.417243 0.88974 -0.185122 N1 0.0260102 0.988113 0.151516 N2 4.05793e-32 1 2.19303e-16
+ txt003
+STRI
+ V0 3 0.1875 2.4 V1 3.14444 0.166667 2.4 V2 2.85818 0.186914 2.17063
+ N0 4.05793e-32 1 2.19303e-16 N1 0.250514 0.801644 -0.54278 N2 0.417243 0.88974 -0.185122
+ txt003
+STRI
+ V0 2.75787 0.210278 2.18785 V1 2.65756 0.186914 2.20507 V2 2.85556 0.166667 2.4
+ N0 0.0260102 0.988113 0.151516 N1 -0.365378 0.851743 0.375544 N2 -0.267368 0.855576 0.443288
+ txt003
+STRI
+ V0 2.85556 0.166667 2.4 V1 3 0.1875 2.4 V2 2.75787 0.210278 2.18785
+ N0 -0.267368 0.855576 0.443288 N1 4.05793e-32 1 2.19303e-16 N2 0.0260102 0.988113 0.151516
+ txt003
+STRI
+ V0 2.65756 0.186914 2.20507 V1 2.5804 0.116821 2.21831 V2 2.74444 0.104167 2.4
+ N0 -0.365378 0.851743 0.375544 N1 -0.723795 0.498863 0.476715 N2 -0.497164 0.497164 0.711095
+ txt003
+STRI
+ V0 2.74444 0.104167 2.4 V1 2.85556 0.166667 2.4 V2 2.65756 0.186914 2.20507
+ N0 -0.497164 0.497164 0.711095 N1 -0.267368 0.855576 0.443288 N2 -0.365378 0.851743 0.375544
+ txt003
+STRI
+ V0 2.5804 0.116821 2.21831 V1 2.54954 0 2.22361 V2 2.7 0 2.4
+ N0 -0.723795 0.498863 0.476715 N1 -0.874591 -1.30753e-15 0.484861 N2 -0.6 -3.55271e-15 0.8
+ txt003
+STRI
+ V0 2.7 0 2.4 V1 2.74444 0.104167 2.4 V2 2.5804 0.116821 2.21831
+ N0 -0.6 -3.55271e-15 0.8 N1 -0.497164 0.497164 0.711095 N2 -0.723795 0.498863 0.476715
+ txt003
+STRI
+ V0 2.7 0 2.4 V1 2.74444 -0.104167 2.4 V2 2.79641 -0.10108 2.43193
+ N0 -0.6 0 0.8 N1 -0.497164 -0.497164 0.711095 N2 -0.387052 -0.411886 0.824949
+ txt003
+STRI
+ V0 2.79641 -0.10108 2.43193 V1 2.74907 0 2.43125 V2 2.7 0 2.4
+ N0 -0.387052 -0.411886 0.824949 N1 -0.467888 0 0.883788 N2 -0.6 0 0.8
+ txt003
+STRI
+ V0 2.74444 -0.104167 2.4 V1 2.85556 -0.166667 2.4 V2 2.91474 -0.161728 2.43361
+ N0 -0.497164 -0.497164 0.711095 N1 -0.267368 -0.855576 0.443288 N2 -0.215548 -0.724209 0.655027
+ txt003
+STRI
+ V0 2.91474 -0.161728 2.43361 V1 2.79641 -0.10108 2.43193 V2 2.74444 -0.104167 2.4
+ N0 -0.215548 -0.724209 0.655027 N1 -0.387052 -0.411886 0.824949 N2 -0.497164 -0.497164 0.711095
+ txt003
+STRI
+ V0 2.85556 -0.166667 2.4 V1 3 -0.1875 2.4 V2 3.06858 -0.181944 2.43581
+ N0 -0.267368 -0.855576 0.443288 N1 0 -1 0 N2 -0.00489618 -0.939227 0.343261
+ txt003
+STRI
+ V0 3.06858 -0.181944 2.43581 V1 2.91474 -0.161728 2.43361 V2 2.85556 -0.166667 2.4
+ N0 -0.00489618 -0.939227 0.343261 N1 -0.215548 -0.724209 0.655027 N2 -0.267368 -0.855576 0.443288
+ txt003
+STRI
+ V0 3 -0.1875 2.4 V1 3.14444 -0.166667 2.4 V2 3.22241 -0.161728 2.438
+ N0 0 -1 0 N1 0.250514 -0.801644 -0.54278 N2 0.269127 -0.933284 -0.237808
+ txt003
+STRI
+ V0 3.22241 -0.161728 2.438 V1 3.06858 -0.181944 2.43581 V2 3 -0.1875 2.4
+ N0 0.269127 -0.933284 -0.237808 N1 -0.00489618 -0.939227 0.343261 N2 0 -1 0
+ txt003
+STRI
+ V0 3.14444 -0.166667 2.4 V1 3.25556 -0.104167 2.4 V2 3.34075 -0.10108 2.43969
+ N0 0.250514 -0.801644 -0.54278 N1 0.366221 -0.366221 -0.855433 N2 0.442187 -0.473386 -0.761824
+ txt003
+STRI
+ V0 3.34075 -0.10108 2.43969 V1 3.22241 -0.161728 2.438 V2 3.14444 -0.166667 2.4
+ N0 0.442187 -0.473386 -0.761824 N1 0.269127 -0.933284 -0.237808 N2 0.250514 -0.801644 -0.54278
+ txt003
+STRI
+ V0 3.25556 -0.104167 2.4 V1 3.3 0 2.4 V2 3.38808 0 2.44036
+ N0 0.366221 -0.366221 -0.855433 N1 0.384615 -2.55067e-15 -0.923077 N2 0.463425 -2.75328e-15 -0.886136
+ txt003
+STRI
+ V0 3.38808 0 2.44036 V1 3.34075 -0.10108 2.43969 V2 3.25556 -0.104167 2.4
+ N0 0.463425 -2.75328e-15 -0.886136 N1 0.442187 -0.473386 -0.761824 N2 0.366221 -0.366221 -0.855433
+ txt003
+STRI
+ V0 2.74907 0 2.43125 V1 2.79641 -0.10108 2.43193 V2 2.83978 -0.0933642 2.45123
+ N0 -0.467888 0 0.883788 N1 -0.387052 -0.411886 0.824949 N2 -0.253997 -0.272114 0.928138
+ txt003
+STRI
+ V0 2.83978 -0.0933642 2.45123 V1 2.79259 0 2.45 V2 2.74907 0 2.43125
+ N0 -0.253997 -0.272114 0.928138 N1 -0.306009 0 0.952029 N2 -0.467888 0 0.883788
+ txt003
+STRI
+ V0 2.79641 -0.10108 2.43193 V1 2.91474 -0.161728 2.43361 V2 2.95775 -0.149383 2.45432
+ N0 -0.387052 -0.411886 0.824949 N1 -0.215548 -0.724209 0.655027 N2 -0.14959 -0.481391 0.863647
+ txt003
+STRI
+ V0 2.95775 -0.149383 2.45432 V1 2.83978 -0.0933642 2.45123 V2 2.79641 -0.10108 2.43193
+ N0 -0.14959 -0.481391 0.863647 N1 -0.253997 -0.272114 0.928138 N2 -0.387052 -0.411886 0.824949
+ txt003
+STRI
+ V0 2.91474 -0.161728 2.43361 V1 3.06858 -0.181944 2.43581 V2 3.11111 -0.168056 2.45833
+ N0 -0.215548 -0.724209 0.655027 N1 -0.00489618 -0.939227 0.343261 N2 -0.0195232 -0.665415 0.746219
+ txt003
+STRI
+ V0 3.11111 -0.168056 2.45833 V1 2.95775 -0.149383 2.45432 V2 2.91474 -0.161728 2.43361
+ N0 -0.0195232 -0.665415 0.746219 N1 -0.14959 -0.481391 0.863647 N2 -0.215548 -0.724209 0.655027
+ txt003
+STRI
+ V0 3.06858 -0.181944 2.43581 V1 3.22241 -0.161728 2.438 V2 3.26447 -0.149383 2.46235
+ N0 -0.00489618 -0.939227 0.343261 N1 0.269127 -0.933284 -0.237808 N2 0.218115 -0.87054 0.44112
+ txt003
+STRI
+ V0 3.26447 -0.149383 2.46235 V1 3.11111 -0.168056 2.45833 V2 3.06858 -0.181944 2.43581
+ N0 0.218115 -0.87054 0.44112 N1 -0.0195232 -0.665415 0.746219 N2 -0.00489618 -0.939227 0.343261
+ txt003
+STRI
+ V0 3.22241 -0.161728 2.438 V1 3.34075 -0.10108 2.43969 V2 3.38244 -0.0933642 2.46543
+ N0 0.269127 -0.933284 -0.237808 N1 0.442187 -0.473386 -0.761824 N2 0.612385 -0.714958 -0.337372
+ txt003
+STRI
+ V0 3.38244 -0.0933642 2.46543 V1 3.26447 -0.149383 2.46235 V2 3.22241 -0.161728 2.438
+ N0 0.612385 -0.714958 -0.337372 N1 0.218115 -0.87054 0.44112 N2 0.269127 -0.933284 -0.237808
+ txt003
+STRI
+ V0 3.34075 -0.10108 2.43969 V1 3.38808 0 2.44036 V2 3.42963 0 2.46667
+ N0 0.442187 -0.473386 -0.761824 N1 0.463425 -2.75328e-15 -0.886136 N2 0.694136 -3.24605e-15 -0.719844
+ txt003
+STRI
+ V0 3.42963 0 2.46667 V1 3.38244 -0.0933642 2.46543 V2 3.34075 -0.10108 2.43969
+ N0 0.694136 -3.24605e-15 -0.719844 N1 0.612385 -0.714958 -0.337372 N2 0.442187 -0.473386 -0.761824
+ txt003
+STRI
+ V0 2.79259 0 2.45 V1 2.83978 -0.0933642 2.45123 V2 2.86968 -0.0833333 2.45781
+ N0 -0.306009 0 0.952029 N1 -0.253997 -0.272114 0.928138 N2 -0.0182321 0.0210195 0.999613
+ txt003
+STRI
+ V0 2.86968 -0.0833333 2.45781 V1 2.825 0 2.45625 V2 2.79259 0 2.45
+ N0 -0.0182321 0.0210195 0.999613 N1 2.22045e-15 0 1 N2 -0.306009 0 0.952029
+ txt003
+STRI
+ V0 2.83978 -0.0933642 2.45123 V1 2.95775 -0.149383 2.45432 V2 2.98137 -0.133333 2.46172
+ N0 -0.253997 -0.272114 0.928138 N1 -0.14959 -0.481391 0.863647 N2 -0.0369301 -0.00796532 0.999286
+ txt003
+STRI
+ V0 2.98137 -0.133333 2.46172 V1 2.86968 -0.0833333 2.45781 V2 2.83978 -0.0933642 2.45123
+ N0 -0.0369301 -0.00796532 0.999286 N1 -0.0182321 0.0210195 0.999613 N2 -0.253997 -0.272114 0.928138
+ txt003
+STRI
+ V0 2.95775 -0.149383 2.45432 V1 3.11111 -0.168056 2.45833 V2 3.12656 -0.15 2.4668
+ N0 -0.14959 -0.481391 0.863647 N1 -0.0195232 -0.665415 0.746219 N2 -0.0348909 -0.0594438 0.997622
+ txt003
+STRI
+ V0 3.12656 -0.15 2.4668 V1 2.98137 -0.133333 2.46172 V2 2.95775 -0.149383 2.45432
+ N0 -0.0348909 -0.0594438 0.997622 N1 -0.0369301 -0.00796532 0.999286 N2 -0.14959 -0.481391 0.863647
+ txt003
+STRI
+ V0 3.11111 -0.168056 2.45833 V1 3.26447 -0.149383 2.46235 V2 3.27176 -0.133333 2.47187
+ N0 -0.0195232 -0.665415 0.746219 N1 0.218115 -0.87054 0.44112 N2 -0.00787186 -0.108144 0.994104
+ txt003
+STRI
+ V0 3.27176 -0.133333 2.47187 V1 3.12656 -0.15 2.4668 V2 3.11111 -0.168056 2.45833
+ N0 -0.00787186 -0.108144 0.994104 N1 -0.0348909 -0.0594438 0.997622 N2 -0.0195232 -0.665415 0.746219
+ txt003
+STRI
+ V0 3.26447 -0.149383 2.46235 V1 3.38244 -0.0933642 2.46543 V2 3.38345 -0.0833333 2.47578
+ N0 0.218115 -0.87054 0.44112 N1 0.612385 -0.714958 -0.337372 N2 0.0539577 -0.111406 0.992309
+ txt003
+STRI
+ V0 3.38345 -0.0833333 2.47578 V1 3.27176 -0.133333 2.47187 V2 3.26447 -0.149383 2.46235
+ N0 0.0539577 -0.111406 0.992309 N1 -0.00787186 -0.108144 0.994104 N2 0.218115 -0.87054 0.44112
+ txt003
+STRI
+ V0 3.38244 -0.0933642 2.46543 V1 3.42963 0 2.46667 V2 3.42813 0 2.47734
+ N0 0.612385 -0.714958 -0.337372 N1 0.694136 -3.24605e-15 -0.719844 N2 0.106533 1.89241e-15 0.994309
+ txt003
+STRI
+ V0 3.42813 0 2.47734 V1 3.38345 -0.0833333 2.47578 V2 3.38244 -0.0933642 2.46543
+ N0 0.106533 1.89241e-15 0.994309 N1 0.0539577 -0.111406 0.992309 N2 0.612385 -0.714958 -0.337372
+ txt003
+STRI
+ V0 2.825 0 2.45625 V1 2.86968 -0.0833333 2.45781 V2 2.88121 -0.0733025 2.45154
+ N0 2.22045e-15 0 1 N1 -0.0182321 0.0210195 0.999613 N2 0.507715 0.682832 0.525324
+ txt003
+STRI
+ V0 2.88121 -0.0733025 2.45154 V1 2.84074 0 2.45 V2 2.825 0 2.45625
+ N0 0.507715 0.682832 0.525324 N1 0.913812 0 0.406138 N2 2.22045e-15 0 1
+ txt003
+STRI
+ V0 2.86968 -0.0833333 2.45781 V1 2.98137 -0.133333 2.46172 V2 2.98237 -0.117284 2.4554
+ N0 -0.0182321 0.0210195 0.999613 N1 -0.0369301 -0.00796532 0.999286 N2 0.148477 0.721529 0.676277
+ txt003
+STRI
+ V0 2.98237 -0.117284 2.4554 V1 2.88121 -0.0733025 2.45154 V2 2.86968 -0.0833333 2.45781
+ N0 0.148477 0.721529 0.676277 N1 0.507715 0.682832 0.525324 N2 -0.0182321 0.0210195 0.999613
+ txt003
+STRI
+ V0 2.98137 -0.133333 2.46172 V1 3.12656 -0.15 2.4668 V2 3.11389 -0.131944 2.46042
+ N0 -0.0369301 -0.00796532 0.999286 N1 -0.0348909 -0.0594438 0.997622 N2 -0.0300305 0.615625 0.787467
+ txt003
+STRI
+ V0 3.11389 -0.131944 2.46042 V1 2.98237 -0.117284 2.4554 V2 2.98137 -0.133333 2.46172
+ N0 -0.0300305 0.615625 0.787467 N1 0.148477 0.721529 0.676277 N2 -0.0369301 -0.00796532 0.999286
+ txt003
+STRI
+ V0 3.12656 -0.15 2.4668 V1 3.27176 -0.133333 2.47187 V2 3.2454 -0.117284 2.46543
+ N0 -0.0348909 -0.0594438 0.997622 N1 -0.00787186 -0.108144 0.994104 N2 -0.144371 0.459364 0.876437
+ txt003
+STRI
+ V0 3.2454 -0.117284 2.46543 V1 3.11389 -0.131944 2.46042 V2 3.12656 -0.15 2.4668
+ N0 -0.144371 0.459364 0.876437 N1 -0.0300305 0.615625 0.787467 N2 -0.0348909 -0.0594438 0.997622
+ txt003
+STRI
+ V0 3.27176 -0.133333 2.47187 V1 3.38345 -0.0833333 2.47578 V2 3.34657 -0.0733025 2.46929
+ N0 -0.00787186 -0.108144 0.994104 N1 0.0539577 -0.111406 0.992309 N2 -0.223743 0.242919 0.943891
+ txt003
+STRI
+ V0 3.34657 -0.0733025 2.46929 V1 3.2454 -0.117284 2.46543 V2 3.27176 -0.133333 2.47187
+ N0 -0.223743 0.242919 0.943891 N1 -0.144371 0.459364 0.876437 N2 -0.00787186 -0.108144 0.994104
+ txt003
+STRI
+ V0 3.38345 -0.0833333 2.47578 V1 3.42813 0 2.47734 V2 3.38704 0 2.47083
+ N0 0.0539577 -0.111406 0.992309 N1 0.106533 1.89241e-15 0.994309 N2 -0.253109 3.19224e-15 0.967438
+ txt003
+STRI
+ V0 3.38704 0 2.47083 V1 3.34657 -0.0733025 2.46929 V2 3.38345 -0.0833333 2.47578
+ N0 -0.253109 3.19224e-15 0.967438 N1 -0.223743 0.242919 0.943891 N2 0.0539577 -0.111406 0.992309
+ txt003
+STRI
+ V0 2.84074 0 2.45 V1 2.88121 -0.0733025 2.45154 V2 2.86949 -0.0655864 2.43231
+ N0 0.913812 0 0.406138 N1 0.507715 0.682832 0.525324 N2 0.577416 0.711734 -0.400031
+ txt003
+STRI
+ V0 2.86949 -0.0655864 2.43231 V1 2.83426 0 2.43125 V2 2.84074 0 2.45
+ N0 0.577416 0.711734 -0.400031 N1 0.789352 0 -0.613941 N2 0.913812 0 0.406138
+ txt003
+STRI
+ V0 2.88121 -0.0733025 2.45154 V1 2.98237 -0.117284 2.4554 V2 2.95756 -0.104938 2.43496
+ N0 0.507715 0.682832 0.525324 N1 0.148477 0.721529 0.676277 N2 0.241288 0.970358 -0.0136399
+ txt003
+STRI
+ V0 2.95756 -0.104938 2.43496 V1 2.86949 -0.0655864 2.43231 V2 2.88121 -0.0733025 2.45154
+ N0 0.241288 0.970358 -0.0136399 N1 0.577416 0.711734 -0.400031 N2 0.507715 0.682832 0.525324
+ txt003
+STRI
+ V0 2.98237 -0.117284 2.4554 V1 3.11389 -0.131944 2.46042 V2 3.07205 -0.118056 2.43841
+ N0 0.148477 0.721529 0.676277 N1 -0.0300305 0.615625 0.787467 N2 -0.0103804 0.938666 0.344672
+ txt003
+STRI
+ V0 3.07205 -0.118056 2.43841 V1 2.95756 -0.104938 2.43496 V2 2.98237 -0.117284 2.4554
+ N0 -0.0103804 0.938666 0.344672 N1 0.241288 0.970358 -0.0136399 N2 0.148477 0.721529 0.676277
+ txt003
+STRI
+ V0 3.11389 -0.131944 2.46042 V1 3.2454 -0.117284 2.46543 V2 3.18654 -0.104938 2.44186
+ N0 -0.0300305 0.615625 0.787467 N1 -0.144371 0.459364 0.876437 N2 -0.199105 0.721639 0.663019
+ txt003
+STRI
+ V0 3.18654 -0.104938 2.44186 V1 3.07205 -0.118056 2.43841 V2 3.11389 -0.131944 2.46042
+ N0 -0.199105 0.721639 0.663019 N1 -0.0103804 0.938666 0.344672 N2 -0.0300305 0.615625 0.787467
+ txt003
+STRI
+ V0 3.2454 -0.117284 2.46543 V1 3.34657 -0.0733025 2.46929 V2 3.27461 -0.0655864 2.44451
+ N0 -0.144371 0.459364 0.876437 N1 -0.223743 0.242919 0.943891 N2 -0.316294 0.364979 0.875641
+ txt003
+STRI
+ V0 3.27461 -0.0655864 2.44451 V1 3.18654 -0.104938 2.44186 V2 3.2454 -0.117284 2.46543
+ N0 -0.316294 0.364979 0.875641 N1 -0.199105 0.721639 0.663019 N2 -0.144371 0.459364 0.876437
+ txt003
+STRI
+ V0 3.34657 -0.0733025 2.46929 V1 3.38704 0 2.47083 V2 3.30984 0 2.44557
+ N0 -0.223743 0.242919 0.943891 N1 -0.253109 3.19224e-15 0.967438 N2 -0.349987 4.0695e-15 0.936755
+ txt003
+STRI
+ V0 3.30984 0 2.44557 V1 3.27461 -0.0655864 2.44451 V2 3.34657 -0.0733025 2.46929
+ N0 -0.349987 4.0695e-15 0.936755 N1 -0.316294 0.364979 0.875641 N2 -0.223743 0.242919 0.943891
+ txt003
+STRI
+ V0 2.83426 0 2.43125 V1 2.86949 -0.0655864 2.43231 V2 2.82963 -0.0625 2.4
+ N0 0.789352 0 -0.613941 N1 0.577416 0.711734 -0.400031 N2 0.483629 0.537366 -0.690899
+ txt003
+STRI
+ V0 2.82963 -0.0625 2.4 V1 2.8 0 2.4 V2 2.83426 0 2.43125
+ N0 0.483629 0.537366 -0.690899 N1 0.6 0 -0.8 N2 0.789352 0 -0.613941
+ txt003
+STRI
+ V0 2.86949 -0.0655864 2.43231 V1 2.95756 -0.104938 2.43496 V2 2.9037 -0.1 2.4
+ N0 0.577416 0.711734 -0.400031 N1 0.241288 0.970358 -0.0136399 N2 0.247465 0.879877 -0.405681
+ txt003
+STRI
+ V0 2.9037 -0.1 2.4 V1 2.82963 -0.0625 2.4 V2 2.86949 -0.0655864 2.43231
+ N0 0.247465 0.879877 -0.405681 N1 0.483629 0.537366 -0.690899 N2 0.577416 0.711734 -0.400031
+ txt003
+STRI
+ V0 2.95756 -0.104938 2.43496 V1 3.07205 -0.118056 2.43841 V2 3 -0.1125 2.4
+ N0 0.241288 0.970358 -0.0136399 N1 -0.0103804 0.938666 0.344672 N2 0 1 0
+ txt003
+STRI
+ V0 3 -0.1125 2.4 V1 2.9037 -0.1 2.4 V2 2.95756 -0.104938 2.43496
+ N0 0 1 0 N1 0.247465 0.879877 -0.405681 N2 0.241288 0.970358 -0.0136399
+ txt003
+STRI
+ V0 3.07205 -0.118056 2.43841 V1 3.18654 -0.104938 2.44186 V2 3.0963 -0.1 2.4
+ N0 -0.0103804 0.938666 0.344672 N1 -0.199105 0.721639 0.663019 N2 -0.236617 0.841304 0.486024
+ txt003
+STRI
+ V0 3.0963 -0.1 2.4 V1 3 -0.1125 2.4 V2 3.07205 -0.118056 2.43841
+ N0 -0.236617 0.841304 0.486024 N1 0 1 0 N2 -0.0103804 0.938666 0.344672
+ txt003
+STRI
+ V0 3.18654 -0.104938 2.44186 V1 3.27461 -0.0655864 2.44451 V2 3.17037 -0.0625 2.4
+ N0 -0.199105 0.721639 0.663019 N1 -0.316294 0.364979 0.875641 N2 -0.378646 0.420717 0.824393
+ txt003
+STRI
+ V0 3.17037 -0.0625 2.4 V1 3.0963 -0.1 2.4 V2 3.18654 -0.104938 2.44186
+ N0 -0.378646 0.420717 0.824393 N1 -0.236617 0.841304 0.486024 N2 -0.199105 0.721639 0.663019
+ txt003
+STRI
+ V0 3.27461 -0.0655864 2.44451 V1 3.30984 0 2.44557 V2 3.2 0 2.4
+ N0 -0.316294 0.364979 0.875641 N1 -0.349987 4.0695e-15 0.936755 N2 -0.410365 4.31973e-15 0.911922
+ txt003
+STRI
+ V0 3.2 0 2.4 V1 3.17037 -0.0625 2.4 V2 3.27461 -0.0655864 2.44451
+ N0 -0.410365 4.31973e-15 0.911922 N1 -0.378646 0.420717 0.824393 N2 -0.316294 0.364979 0.875641
+ txt003
+STRI
+ V0 3.3 0 2.4 V1 3.25556 0.104167 2.4 V2 3.34075 0.10108 2.43969
+ N0 0.384615 0 -0.923077 N1 0.366221 0.366221 -0.855433 N2 0.442187 0.473386 -0.761824
+ txt003
+STRI
+ V0 3.34075 0.10108 2.43969 V1 3.38808 0 2.44036 V2 3.3 0 2.4
+ N0 0.442187 0.473386 -0.761824 N1 0.463425 0 -0.886136 N2 0.384615 0 -0.923077
+ txt003
+STRI
+ V0 3.25556 0.104167 2.4 V1 3.14444 0.166667 2.4 V2 3.22241 0.161728 2.438
+ N0 0.366221 0.366221 -0.855433 N1 0.250514 0.801644 -0.54278 N2 0.269127 0.933284 -0.237808
+ txt003
+STRI
+ V0 3.22241 0.161728 2.438 V1 3.34075 0.10108 2.43969 V2 3.25556 0.104167 2.4
+ N0 0.269127 0.933284 -0.237808 N1 0.442187 0.473386 -0.761824 N2 0.366221 0.366221 -0.855433
+ txt003
+STRI
+ V0 3.14444 0.166667 2.4 V1 3 0.1875 2.4 V2 3.06858 0.181944 2.43581
+ N0 0.250514 0.801644 -0.54278 N1 0 1 -0 N2 -0.00489618 0.939227 0.343261
+ txt003
+STRI
+ V0 3.06858 0.181944 2.43581 V1 3.22241 0.161728 2.438 V2 3.14444 0.166667 2.4
+ N0 -0.00489618 0.939227 0.343261 N1 0.269127 0.933284 -0.237808 N2 0.250514 0.801644 -0.54278
+ txt003
+STRI
+ V0 3 0.1875 2.4 V1 2.85556 0.166667 2.4 V2 2.91474 0.161728 2.43361
+ N0 0 1 -0 N1 -0.267368 0.855576 0.443288 N2 -0.215548 0.724209 0.655027
+ txt003
+STRI
+ V0 2.91474 0.161728 2.43361 V1 3.06858 0.181944 2.43581 V2 3 0.1875 2.4
+ N0 -0.215548 0.724209 0.655027 N1 -0.00489618 0.939227 0.343261 N2 0 1 -0
+ txt003
+STRI
+ V0 2.85556 0.166667 2.4 V1 2.74444 0.104167 2.4 V2 2.79641 0.10108 2.43193
+ N0 -0.267368 0.855576 0.443288 N1 -0.497164 0.497164 0.711095 N2 -0.387052 0.411886 0.824949
+ txt003
+STRI
+ V0 2.79641 0.10108 2.43193 V1 2.91474 0.161728 2.43361 V2 2.85556 0.166667 2.4
+ N0 -0.387052 0.411886 0.824949 N1 -0.215548 0.724209 0.655027 N2 -0.267368 0.855576 0.443288
+ txt003
+STRI
+ V0 2.74444 0.104167 2.4 V1 2.7 0 2.4 V2 2.74907 0 2.43125
+ N0 -0.497164 0.497164 0.711095 N1 -0.6 2.24387e-29 0.8 N2 -0.467888 -4.75841e-16 0.883788
+ txt003
+STRI
+ V0 2.74907 0 2.43125 V1 2.79641 0.10108 2.43193 V2 2.74444 0.104167 2.4
+ N0 -0.467888 -4.75841e-16 0.883788 N1 -0.387052 0.411886 0.824949 N2 -0.497164 0.497164 0.711095
+ txt003
+STRI
+ V0 3.38808 0 2.44036 V1 3.34075 0.10108 2.43969 V2 3.38244 0.0933642 2.46543
+ N0 0.463425 0 -0.886136 N1 0.442187 0.473386 -0.761824 N2 0.612385 0.714958 -0.337372
+ txt003
+STRI
+ V0 3.38244 0.0933642 2.46543 V1 3.42963 0 2.46667 V2 3.38808 0 2.44036
+ N0 0.612385 0.714958 -0.337372 N1 0.694136 0 -0.719844 N2 0.463425 0 -0.886136
+ txt003
+STRI
+ V0 3.34075 0.10108 2.43969 V1 3.22241 0.161728 2.438 V2 3.26447 0.149383 2.46235
+ N0 0.442187 0.473386 -0.761824 N1 0.269127 0.933284 -0.237808 N2 0.218115 0.87054 0.44112
+ txt003
+STRI
+ V0 3.26447 0.149383 2.46235 V1 3.38244 0.0933642 2.46543 V2 3.34075 0.10108 2.43969
+ N0 0.218115 0.87054 0.44112 N1 0.612385 0.714958 -0.337372 N2 0.442187 0.473386 -0.761824
+ txt003
+STRI
+ V0 3.22241 0.161728 2.438 V1 3.06858 0.181944 2.43581 V2 3.11111 0.168056 2.45833
+ N0 0.269127 0.933284 -0.237808 N1 -0.00489618 0.939227 0.343261 N2 -0.0195232 0.665415 0.746219
+ txt003
+STRI
+ V0 3.11111 0.168056 2.45833 V1 3.26447 0.149383 2.46235 V2 3.22241 0.161728 2.438
+ N0 -0.0195232 0.665415 0.746219 N1 0.218115 0.87054 0.44112 N2 0.269127 0.933284 -0.237808
+ txt003
+STRI
+ V0 3.06858 0.181944 2.43581 V1 2.91474 0.161728 2.43361 V2 2.95775 0.149383 2.45432
+ N0 -0.00489618 0.939227 0.343261 N1 -0.215548 0.724209 0.655027 N2 -0.14959 0.481391 0.863647
+ txt003
+STRI
+ V0 2.95775 0.149383 2.45432 V1 3.11111 0.168056 2.45833 V2 3.06858 0.181944 2.43581
+ N0 -0.14959 0.481391 0.863647 N1 -0.0195232 0.665415 0.746219 N2 -0.00489618 0.939227 0.343261
+ txt003
+STRI
+ V0 2.91474 0.161728 2.43361 V1 2.79641 0.10108 2.43193 V2 2.83978 0.0933642 2.45123
+ N0 -0.215548 0.724209 0.655027 N1 -0.387052 0.411886 0.824949 N2 -0.253997 0.272114 0.928138
+ txt003
+STRI
+ V0 2.83978 0.0933642 2.45123 V1 2.95775 0.149383 2.45432 V2 2.91474 0.161728 2.43361
+ N0 -0.253997 0.272114 0.928138 N1 -0.14959 0.481391 0.863647 N2 -0.215548 0.724209 0.655027
+ txt003
+STRI
+ V0 2.79641 0.10108 2.43193 V1 2.74907 0 2.43125 V2 2.79259 0 2.45
+ N0 -0.387052 0.411886 0.824949 N1 -0.467888 -4.75841e-16 0.883788 N2 -0.306009 -1.09783e-15 0.952029
+ txt003
+STRI
+ V0 2.79259 0 2.45 V1 2.83978 0.0933642 2.45123 V2 2.79641 0.10108 2.43193
+ N0 -0.306009 -1.09783e-15 0.952029 N1 -0.253997 0.272114 0.928138 N2 -0.387052 0.411886 0.824949
+ txt003
+STRI
+ V0 3.42963 0 2.46667 V1 3.38244 0.0933642 2.46543 V2 3.38345 0.0833333 2.47578
+ N0 0.694136 0 -0.719844 N1 0.612385 0.714958 -0.337372 N2 0.0539577 0.111406 0.992309
+ txt003
+STRI
+ V0 3.38345 0.0833333 2.47578 V1 3.42813 0 2.47734 V2 3.42963 0 2.46667
+ N0 0.0539577 0.111406 0.992309 N1 0.106533 -0 0.994309 N2 0.694136 0 -0.719844
+ txt003
+STRI
+ V0 3.38244 0.0933642 2.46543 V1 3.26447 0.149383 2.46235 V2 3.27176 0.133333 2.47188
+ N0 0.612385 0.714958 -0.337372 N1 0.218115 0.87054 0.44112 N2 -0.00787186 0.108144 0.994104
+ txt003
+STRI
+ V0 3.27176 0.133333 2.47188 V1 3.38345 0.0833333 2.47578 V2 3.38244 0.0933642 2.46543
+ N0 -0.00787186 0.108144 0.994104 N1 0.0539577 0.111406 0.992309 N2 0.612385 0.714958 -0.337372
+ txt003
+STRI
+ V0 3.26447 0.149383 2.46235 V1 3.11111 0.168056 2.45833 V2 3.12656 0.15 2.4668
+ N0 0.218115 0.87054 0.44112 N1 -0.0195232 0.665415 0.746219 N2 -0.0348909 0.0594438 0.997622
+ txt003
+STRI
+ V0 3.12656 0.15 2.4668 V1 3.27176 0.133333 2.47188 V2 3.26447 0.149383 2.46235
+ N0 -0.0348909 0.0594438 0.997622 N1 -0.00787186 0.108144 0.994104 N2 0.218115 0.87054 0.44112
+ txt003
+STRI
+ V0 3.11111 0.168056 2.45833 V1 2.95775 0.149383 2.45432 V2 2.98137 0.133333 2.46172
+ N0 -0.0195232 0.665415 0.746219 N1 -0.14959 0.481391 0.863647 N2 -0.0369301 0.00796532 0.999286
+ txt003
+STRI
+ V0 2.98137 0.133333 2.46172 V1 3.12656 0.15 2.4668 V2 3.11111 0.168056 2.45833
+ N0 -0.0369301 0.00796532 0.999286 N1 -0.0348909 0.0594438 0.997622 N2 -0.0195232 0.665415 0.746219
+ txt003
+STRI
+ V0 2.95775 0.149383 2.45432 V1 2.83978 0.0933642 2.45123 V2 2.86968 0.0833333 2.45781
+ N0 -0.14959 0.481391 0.863647 N1 -0.253997 0.272114 0.928138 N2 -0.0182321 -0.0210195 0.999613
+ txt003
+STRI
+ V0 2.86968 0.0833333 2.45781 V1 2.98137 0.133333 2.46172 V2 2.95775 0.149383 2.45432
+ N0 -0.0182321 -0.0210195 0.999613 N1 -0.0369301 0.00796532 0.999286 N2 -0.14959 0.481391 0.863647
+ txt003
+STRI
+ V0 2.83978 0.0933642 2.45123 V1 2.79259 0 2.45 V2 2.825 0 2.45625
+ N0 -0.253997 0.272114 0.928138 N1 -0.306009 -1.09783e-15 0.952029 N2 2.22045e-15 -2.22045e-15 1
+ txt003
+STRI
+ V0 2.825 0 2.45625 V1 2.86968 0.0833333 2.45781 V2 2.83978 0.0933642 2.45123
+ N0 2.22045e-15 -2.22045e-15 1 N1 -0.0182321 -0.0210195 0.999613 N2 -0.253997 0.272114 0.928138
+ txt003
+STRI
+ V0 3.42813 0 2.47734 V1 3.38345 0.0833333 2.47578 V2 3.34657 0.0733025 2.46929
+ N0 0.106533 -0 0.994309 N1 0.0539577 0.111406 0.992309 N2 -0.223743 -0.242919 0.943891
+ txt003
+STRI
+ V0 3.34657 0.0733025 2.46929 V1 3.38704 0 2.47083 V2 3.42813 0 2.47734
+ N0 -0.223743 -0.242919 0.943891 N1 -0.253109 0 0.967438 N2 0.106533 -0 0.994309
+ txt003
+STRI
+ V0 3.38345 0.0833333 2.47578 V1 3.27176 0.133333 2.47188 V2 3.2454 0.117284 2.46543
+ N0 0.0539577 0.111406 0.992309 N1 -0.00787186 0.108144 0.994104 N2 -0.144371 -0.459364 0.876437
+ txt003
+STRI
+ V0 3.2454 0.117284 2.46543 V1 3.34657 0.0733025 2.46929 V2 3.38345 0.0833333 2.47578
+ N0 -0.144371 -0.459364 0.876437 N1 -0.223743 -0.242919 0.943891 N2 0.0539577 0.111406 0.992309
+ txt003
+STRI
+ V0 3.27176 0.133333 2.47188 V1 3.12656 0.15 2.4668 V2 3.11389 0.131944 2.46042
+ N0 -0.00787186 0.108144 0.994104 N1 -0.0348909 0.0594438 0.997622 N2 -0.0300305 -0.615625 0.787467
+ txt003
+STRI
+ V0 3.11389 0.131944 2.46042 V1 3.2454 0.117284 2.46543 V2 3.27176 0.133333 2.47188
+ N0 -0.0300305 -0.615625 0.787467 N1 -0.144371 -0.459364 0.876437 N2 -0.00787186 0.108144 0.994104
+ txt003
+STRI
+ V0 3.12656 0.15 2.4668 V1 2.98137 0.133333 2.46172 V2 2.98237 0.117284 2.4554
+ N0 -0.0348909 0.0594438 0.997622 N1 -0.0369301 0.00796532 0.999286 N2 0.148477 -0.721529 0.676277
+ txt003
+STRI
+ V0 2.98237 0.117284 2.4554 V1 3.11389 0.131944 2.46042 V2 3.12656 0.15 2.4668
+ N0 0.148477 -0.721529 0.676277 N1 -0.0300305 -0.615625 0.787467 N2 -0.0348909 0.0594438 0.997622
+ txt003
+STRI
+ V0 2.98137 0.133333 2.46172 V1 2.86968 0.0833333 2.45781 V2 2.88121 0.0733025 2.45154
+ N0 -0.0369301 0.00796532 0.999286 N1 -0.0182321 -0.0210195 0.999613 N2 0.507715 -0.682832 0.525324
+ txt003
+STRI
+ V0 2.88121 0.0733025 2.45154 V1 2.98237 0.117284 2.4554 V2 2.98137 0.133333 2.46172
+ N0 0.507715 -0.682832 0.525324 N1 0.148477 -0.721529 0.676277 N2 -0.0369301 0.00796532 0.999286
+ txt003
+STRI
+ V0 2.86968 0.0833333 2.45781 V1 2.825 0 2.45625 V2 2.84074 0 2.45
+ N0 -0.0182321 -0.0210195 0.999613 N1 2.22045e-15 -2.22045e-15 1 N2 0.913812 -4.13289e-15 0.406138
+ txt003
+STRI
+ V0 2.84074 0 2.45 V1 2.88121 0.0733025 2.45154 V2 2.86968 0.0833333 2.45781
+ N0 0.913812 -4.13289e-15 0.406138 N1 0.507715 -0.682832 0.525324 N2 -0.0182321 -0.0210195 0.999613
+ txt003
+STRI
+ V0 3.38704 0 2.47083 V1 3.34657 0.0733025 2.46929 V2 3.27461 0.0655864 2.44451
+ N0 -0.253109 0 0.967438 N1 -0.223743 -0.242919 0.943891 N2 -0.316294 -0.364979 0.875641
+ txt003
+STRI
+ V0 3.27461 0.0655864 2.44451 V1 3.30984 0 2.44557 V2 3.38704 0 2.47083
+ N0 -0.316294 -0.364979 0.875641 N1 -0.349987 0 0.936755 N2 -0.253109 0 0.967438
+ txt003
+STRI
+ V0 3.34657 0.0733025 2.46929 V1 3.2454 0.117284 2.46543 V2 3.18654 0.104938 2.44186
+ N0 -0.223743 -0.242919 0.943891 N1 -0.144371 -0.459364 0.876437 N2 -0.199105 -0.721639 0.663019
+ txt003
+STRI
+ V0 3.18654 0.104938 2.44186 V1 3.27461 0.0655864 2.44451 V2 3.34657 0.0733025 2.46929
+ N0 -0.199105 -0.721639 0.663019 N1 -0.316294 -0.364979 0.875641 N2 -0.223743 -0.242919 0.943891
+ txt003
+STRI
+ V0 3.2454 0.117284 2.46543 V1 3.11389 0.131944 2.46042 V2 3.07205 0.118056 2.43841
+ N0 -0.144371 -0.459364 0.876437 N1 -0.0300305 -0.615625 0.787467 N2 -0.0103804 -0.938666 0.344672
+ txt003
+STRI
+ V0 3.07205 0.118056 2.43841 V1 3.18654 0.104938 2.44186 V2 3.2454 0.117284 2.46543
+ N0 -0.0103804 -0.938666 0.344672 N1 -0.199105 -0.721639 0.663019 N2 -0.144371 -0.459364 0.876437
+ txt003
+STRI
+ V0 3.11389 0.131944 2.46042 V1 2.98237 0.117284 2.4554 V2 2.95756 0.104938 2.43496
+ N0 -0.0300305 -0.615625 0.787467 N1 0.148477 -0.721529 0.676277 N2 0.241288 -0.970358 -0.0136399
+ txt003
+STRI
+ V0 2.95756 0.104938 2.43496 V1 3.07205 0.118056 2.43841 V2 3.11389 0.131944 2.46042
+ N0 0.241288 -0.970358 -0.0136399 N1 -0.0103804 -0.938666 0.344672 N2 -0.0300305 -0.615625 0.787467
+ txt003
+STRI
+ V0 2.98237 0.117284 2.4554 V1 2.88121 0.0733025 2.45154 V2 2.86949 0.0655864 2.43231
+ N0 0.148477 -0.721529 0.676277 N1 0.507715 -0.682832 0.525324 N2 0.577416 -0.711734 -0.400031
+ txt003
+STRI
+ V0 2.86949 0.0655864 2.43231 V1 2.95756 0.104938 2.43496 V2 2.98237 0.117284 2.4554
+ N0 0.577416 -0.711734 -0.400031 N1 0.241288 -0.970358 -0.0136399 N2 0.148477 -0.721529 0.676277
+ txt003
+STRI
+ V0 2.88121 0.0733025 2.45154 V1 2.84074 0 2.45 V2 2.83426 0 2.43125
+ N0 0.507715 -0.682832 0.525324 N1 0.913812 -4.13289e-15 0.406138 N2 0.789352 -1.30938e-15 -0.613941
+ txt003
+STRI
+ V0 2.83426 0 2.43125 V1 2.86949 0.0655864 2.43231 V2 2.88121 0.0733025 2.45154
+ N0 0.789352 -1.30938e-15 -0.613941 N1 0.577416 -0.711734 -0.400031 N2 0.507715 -0.682832 0.525324
+ txt003
+STRI
+ V0 3.30984 0 2.44557 V1 3.27461 0.0655864 2.44451 V2 3.17037 0.0625 2.4
+ N0 -0.349987 0 0.936755 N1 -0.316294 -0.364979 0.875641 N2 -0.378646 -0.420717 0.824393
+ txt003
+STRI
+ V0 3.17037 0.0625 2.4 V1 3.2 0 2.4 V2 3.30984 0 2.44557
+ N0 -0.378646 -0.420717 0.824393 N1 -0.410365 0 0.911922 N2 -0.349987 0 0.936755
+ txt003
+STRI
+ V0 3.27461 0.0655864 2.44451 V1 3.18654 0.104938 2.44186 V2 3.0963 0.1 2.4
+ N0 -0.316294 -0.364979 0.875641 N1 -0.199105 -0.721639 0.663019 N2 -0.236617 -0.841304 0.486024
+ txt003
+STRI
+ V0 3.0963 0.1 2.4 V1 3.17037 0.0625 2.4 V2 3.27461 0.0655864 2.44451
+ N0 -0.236617 -0.841304 0.486024 N1 -0.378646 -0.420717 0.824393 N2 -0.316294 -0.364979 0.875641
+ txt003
+STRI
+ V0 3.18654 0.104938 2.44186 V1 3.07205 0.118056 2.43841 V2 3 0.1125 2.4
+ N0 -0.199105 -0.721639 0.663019 N1 -0.0103804 -0.938666 0.344672 N2 0 -1 0
+ txt003
+STRI
+ V0 3 0.1125 2.4 V1 3.0963 0.1 2.4 V2 3.18654 0.104938 2.44186
+ N0 0 -1 0 N1 -0.236617 -0.841304 0.486024 N2 -0.199105 -0.721639 0.663019
+ txt003
+STRI
+ V0 3.07205 0.118056 2.43841 V1 2.95756 0.104938 2.43496 V2 2.9037 0.1 2.4
+ N0 -0.0103804 -0.938666 0.344672 N1 0.241288 -0.970358 -0.0136399 N2 0.247465 -0.879877 -0.405681
+ txt003
+STRI
+ V0 2.9037 0.1 2.4 V1 3 0.1125 2.4 V2 3.07205 0.118056 2.43841
+ N0 0.247465 -0.879877 -0.405681 N1 0 -1 0 N2 -0.0103804 -0.938666 0.344672
+ txt003
+STRI
+ V0 2.95756 0.104938 2.43496 V1 2.86949 0.0655864 2.43231 V2 2.82963 0.0625 2.4
+ N0 0.241288 -0.970358 -0.0136399 N1 0.577416 -0.711734 -0.400031 N2 0.483629 -0.537366 -0.690899
+ txt003
+STRI
+ V0 2.82963 0.0625 2.4 V1 2.9037 0.1 2.4 V2 2.95756 0.104938 2.43496
+ N0 0.483629 -0.537366 -0.690899 N1 0.247465 -0.879877 -0.405681 N2 0.241288 -0.970358 -0.0136399
+ txt003
+STRI
+ V0 2.86949 0.0655864 2.43231 V1 2.83426 0 2.43125 V2 2.8 0 2.4
+ N0 0.577416 -0.711734 -0.400031 N1 0.789352 -1.30938e-15 -0.613941 N2 0.6 -3.73979e-29 -0.8
+ txt003
+STRI
+ V0 2.8 0 2.4 V1 2.82963 0.0625 2.4 V2 2.86949 0.0655864 2.43231
+ N0 0.6 -3.73979e-29 -0.8 N1 0.483629 -0.537366 -0.690899 N2 0.577416 -0.711734 -0.400031
+ txt003
+STRI
+ V0 0.268946 -0.0750782 3.12708 V1 0.278704 0 3.12708 V2 0 0 3.15
+ N0 0.241077 -0.0645609 0.968356 N1 0.249998 0 0.968246 N2 0 0 1
+ txt003
+STRI
+ V0 0.241285 -0.141931 3.12708 V1 0.268946 -0.0750782 3.12708 V2 0 0 3.15
+ N0 0.215548 -0.124615 0.968509 N1 0.241077 -0.0645609 0.968356 N2 0 0 1
+ txt003
+STRI
+ V0 0.19814 -0.19814 3.12708 V1 0.241285 -0.141931 3.12708 V2 0 0 3.15
+ N0 0.175885 -0.175885 0.96857 N1 0.215548 -0.124615 0.968509 N2 0 0 1
+ txt003
+STRI
+ V0 0.141931 -0.241285 3.12708 V1 0.19814 -0.19814 3.12708 V2 0 0 3.15
+ N0 0.124615 -0.215548 0.968509 N1 0.175885 -0.175885 0.96857 N2 0 0 1
+ txt003
+STRI
+ V0 0.0750782 -0.268946 3.12708 V1 0.141931 -0.241285 3.12708 V2 0 0 3.15
+ N0 0.0645609 -0.241077 0.968356 N1 0.124615 -0.215548 0.968509 N2 0 0 1
+ txt003
+STRI
+ V0 0 -0.278704 3.12708 V1 0.0750782 -0.268946 3.12708 V2 0 0 3.15
+ N0 -2.80184e-15 -0.249998 0.968246 N1 0.0645609 -0.241077 0.968356 N2 0 0 1
+ txt003
+STRI
+ V0 0.278704 0 3.12708 V1 0.268946 -0.0750782 3.12708 V2 0.350254 -0.0977709 3.06667
+ N0 0.249998 0 0.968246 N1 0.241077 -0.0645609 0.968356 N2 0.955496 -0.255913 0.146755
+ txt003
+STRI
+ V0 0.350254 -0.0977709 3.06667 V1 0.362963 0 3.06667 V2 0.278704 0 3.12708
+ N0 0.955496 -0.255913 0.146755 N1 0.989203 0 0.146549 N2 0.249998 0 0.968246
+ txt003
+STRI
+ V0 0.268946 -0.0750782 3.12708 V1 0.241285 -0.141931 3.12708 V2 0.314228 -0.184834 3.06667
+ N0 0.241077 -0.0645609 0.968356 N1 0.215548 -0.124615 0.968509 N2 0.856312 -0.495088 0.147029
+ txt003
+STRI
+ V0 0.314228 -0.184834 3.06667 V1 0.350254 -0.0977709 3.06667 V2 0.268946 -0.0750782 3.12708
+ N0 0.856312 -0.495088 0.147029 N1 0.955496 -0.255913 0.146755 N2 0.241077 -0.0645609 0.968356
+ txt003
+STRI
+ V0 0.241285 -0.141931 3.12708 V1 0.19814 -0.19814 3.12708 V2 0.258037 -0.258037 3.06667
+ N0 0.215548 -0.124615 0.968509 N1 0.175885 -0.175885 0.96857 N2 0.699411 -0.699411 0.147135
+ txt003
+STRI
+ V0 0.258037 -0.258037 3.06667 V1 0.314228 -0.184834 3.06667 V2 0.241285 -0.141931 3.12708
+ N0 0.699411 -0.699411 0.147135 N1 0.856312 -0.495088 0.147029 N2 0.215548 -0.124615 0.968509
+ txt003
+STRI
+ V0 0.19814 -0.19814 3.12708 V1 0.141931 -0.241285 3.12708 V2 0.184834 -0.314228 3.06667
+ N0 0.175885 -0.175885 0.96857 N1 0.124615 -0.215548 0.968509 N2 0.495088 -0.856312 0.147029
+ txt003
+STRI
+ V0 0.184834 -0.314228 3.06667 V1 0.258037 -0.258037 3.06667 V2 0.19814 -0.19814 3.12708
+ N0 0.495088 -0.856312 0.147029 N1 0.699411 -0.699411 0.147135 N2 0.175885 -0.175885 0.96857
+ txt003
+STRI
+ V0 0.141931 -0.241285 3.12708 V1 0.0750782 -0.268946 3.12708 V2 0.0977709 -0.350254 3.06667
+ N0 0.124615 -0.215548 0.968509 N1 0.0645609 -0.241077 0.968356 N2 0.255913 -0.955496 0.146755
+ txt003
+STRI
+ V0 0.0977709 -0.350254 3.06667 V1 0.184834 -0.314228 3.06667 V2 0.141931 -0.241285 3.12708
+ N0 0.255913 -0.955496 0.146755 N1 0.495088 -0.856312 0.147029 N2 0.124615 -0.215548 0.968509
+ txt003
+STRI
+ V0 0.0750782 -0.268946 3.12708 V1 0 -0.278704 3.12708 V2 0 -0.362963 3.06667
+ N0 0.0645609 -0.241077 0.968356 N1 -2.80184e-15 -0.249998 0.968246 N2 -4.98112e-16 -0.989203 0.146549
+ txt003
+STRI
+ V0 0 -0.362963 3.06667 V1 0.0977709 -0.350254 3.06667 V2 0.0750782 -0.268946 3.12708
+ N0 -4.98112e-16 -0.989203 0.146549 N1 0.255913 -0.955496 0.146755 N2 0.0645609 -0.241077 0.968356
+ txt003
+STRI
+ V0 0.362963 0 3.06667 V1 0.350254 -0.0977709 3.06667 V2 0.313617 -0.0875289 2.98125
+ N0 0.989203 0 0.146549 N1 0.955496 -0.255913 0.146755 N2 0.753688 -0.201937 -0.625441
+ txt003
+STRI
+ V0 0.313617 -0.0875289 2.98125 V1 0.325 0 2.98125 V2 0.362963 0 3.06667
+ N0 0.753688 -0.201937 -0.625441 N1 0.780869 0 -0.624695 N2 0.989203 0 0.146549
+ txt003
+STRI
+ V0 0.350254 -0.0977709 3.06667 V1 0.314228 -0.184834 3.06667 V2 0.281352 -0.165481 2.98125
+ N0 0.955496 -0.255913 0.146755 N1 0.856312 -0.495088 0.147029 N2 0.674735 -0.390178 -0.626493
+ txt003
+STRI
+ V0 0.281352 -0.165481 2.98125 V1 0.313617 -0.0875289 2.98125 V2 0.350254 -0.0977709 3.06667
+ N0 0.674735 -0.390178 -0.626493 N1 0.753688 -0.201937 -0.625441 N2 0.955496 -0.255913 0.146755
+ txt003
+STRI
+ V0 0.314228 -0.184834 3.06667 V1 0.258037 -0.258037 3.06667 V2 0.231031 -0.231031 2.98125
+ N0 0.856312 -0.495088 0.147029 N1 0.699411 -0.699411 0.147135 N2 0.550896 -0.550896 -0.626919
+ txt003
+STRI
+ V0 0.231031 -0.231031 2.98125 V1 0.281352 -0.165481 2.98125 V2 0.314228 -0.184834 3.06667
+ N0 0.550896 -0.550896 -0.626919 N1 0.674735 -0.390178 -0.626493 N2 0.856312 -0.495088 0.147029
+ txt003
+STRI
+ V0 0.258037 -0.258037 3.06667 V1 0.184834 -0.314228 3.06667 V2 0.165481 -0.281352 2.98125
+ N0 0.699411 -0.699411 0.147135 N1 0.495088 -0.856312 0.147029 N2 0.390178 -0.674735 -0.626493
+ txt003
+STRI
+ V0 0.165481 -0.281352 2.98125 V1 0.231031 -0.231031 2.98125 V2 0.258037 -0.258037 3.06667
+ N0 0.390178 -0.674735 -0.626493 N1 0.550896 -0.550896 -0.626919 N2 0.699411 -0.699411 0.147135
+ txt003
+STRI
+ V0 0.184834 -0.314228 3.06667 V1 0.0977709 -0.350254 3.06667 V2 0.0875289 -0.313617 2.98125
+ N0 0.495088 -0.856312 0.147029 N1 0.255913 -0.955496 0.146755 N2 0.201937 -0.753688 -0.625441
+ txt003
+STRI
+ V0 0.0875289 -0.313617 2.98125 V1 0.165481 -0.281352 2.98125 V2 0.184834 -0.314228 3.06667
+ N0 0.201937 -0.753688 -0.625441 N1 0.390178 -0.674735 -0.626493 N2 0.495088 -0.856312 0.147029
+ txt003
+STRI
+ V0 0.0977709 -0.350254 3.06667 V1 0 -0.362963 3.06667 V2 -1.11022e-16 -0.325 2.98125
+ N0 0.255913 -0.955496 0.146755 N1 -4.98112e-16 -0.989203 0.146549 N2 1.51803e-15 -0.780869 -0.624695
+ txt003
+STRI
+ V0 -1.11022e-16 -0.325 2.98125 V1 0.0875289 -0.313617 2.98125 V2 0.0977709 -0.350254 3.06667
+ N0 1.51803e-15 -0.780869 -0.624695 N1 0.201937 -0.753688 -0.625441 N2 0.255913 -0.955496 0.146755
+ txt003
+STRI
+ V0 0.325 0 2.98125 V1 0.313617 -0.0875289 2.98125 V2 0.228728 -0.0638032 2.88333
+ N0 0.780869 0 -0.624695 N1 0.753688 -0.201937 -0.625441 N2 0.721244 -0.193465 -0.665116
+ txt003
+STRI
+ V0 0.228728 -0.0638032 2.88333 V1 0.237037 0 2.88333 V2 0.325 0 2.98125
+ N0 0.721244 -0.193465 -0.665116 N1 0.747409 0 -0.664364 N2 0.780869 0 -0.624695
+ txt003
+STRI
+ V0 0.313617 -0.0875289 2.98125 V1 0.281352 -0.165481 2.98125 V2 0.20518 -0.120647 2.88333
+ N0 0.753688 -0.201937 -0.625441 N1 0.674735 -0.390178 -0.626493 N2 0.645526 -0.373497 -0.66618
+ txt003
+STRI
+ V0 0.20518 -0.120647 2.88333 V1 0.228728 -0.0638032 2.88333 V2 0.313617 -0.0875289 2.98125
+ N0 0.645526 -0.373497 -0.66618 N1 0.721244 -0.193465 -0.665116 N2 0.753688 -0.201937 -0.625441
+ txt003
+STRI
+ V0 0.281352 -0.165481 2.98125 V1 0.231031 -0.231031 2.98125 V2 0.168463 -0.168463 2.88333
+ N0 0.674735 -0.390178 -0.626493 N1 0.550896 -0.550896 -0.626919 N2 0.527081 -0.527081 -0.666611
+ txt003
+STRI
+ V0 0.168463 -0.168463 2.88333 V1 0.20518 -0.120647 2.88333 V2 0.281352 -0.165481 2.98125
+ N0 0.527081 -0.527081 -0.666611 N1 0.645526 -0.373497 -0.66618 N2 0.674735 -0.390178 -0.626493
+ txt003
+STRI
+ V0 0.231031 -0.231031 2.98125 V1 0.165481 -0.281352 2.98125 V2 0.120647 -0.20518 2.88333
+ N0 0.550896 -0.550896 -0.626919 N1 0.390178 -0.674735 -0.626493 N2 0.373497 -0.645526 -0.66618
+ txt003
+STRI
+ V0 0.120647 -0.20518 2.88333 V1 0.168463 -0.168463 2.88333 V2 0.231031 -0.231031 2.98125
+ N0 0.373497 -0.645526 -0.66618 N1 0.527081 -0.527081 -0.666611 N2 0.550896 -0.550896 -0.626919
+ txt003
+STRI
+ V0 0.165481 -0.281352 2.98125 V1 0.0875289 -0.313617 2.98125 V2 0.0638032 -0.228728 2.88333
+ N0 0.390178 -0.674735 -0.626493 N1 0.201937 -0.753688 -0.625441 N2 0.193465 -0.721244 -0.665116
+ txt003
+STRI
+ V0 0.0638032 -0.228728 2.88333 V1 0.120647 -0.20518 2.88333 V2 0.165481 -0.281352 2.98125
+ N0 0.193465 -0.721244 -0.665116 N1 0.373497 -0.645526 -0.66618 N2 0.390178 -0.674735 -0.626493
+ txt003
+STRI
+ V0 0.0875289 -0.313617 2.98125 V1 -1.11022e-16 -0.325 2.98125 V2 -1.11022e-16 -0.237037 2.88333
+ N0 0.201937 -0.753688 -0.625441 N1 1.51803e-15 -0.780869 -0.624695 N2 2.42292e-15 -0.747409 -0.664364
+ txt003
+STRI
+ V0 -1.11022e-16 -0.237037 2.88333 V1 0.0638032 -0.228728 2.88333 V2 0.0875289 -0.313617 2.98125
+ N0 2.42292e-15 -0.747409 -0.664364 N1 0.193465 -0.721244 -0.665116 N2 0.201937 -0.753688 -0.625441
+ txt003
+STRI
+ V0 0.237037 0 2.88333 V1 0.228728 -0.0638032 2.88333 V2 0.165279 -0.0460445 2.78542
+ N0 0.747409 0 -0.664364 N1 0.721244 -0.193465 -0.665116 N2 0.917897 -0.246906 -0.310647
+ txt003
+STRI
+ V0 0.165279 -0.0460445 2.78542 V1 0.171296 0 2.78542 V2 0.237037 0 2.88333
+ N0 0.917897 -0.246906 -0.310647 N1 0.950775 0 -0.309882 N2 0.747409 0 -0.664364
+ txt003
+STRI
+ V0 0.228728 -0.0638032 2.88333 V1 0.20518 -0.120647 2.88333 V2 0.148234 -0.0871056 2.78542
+ N0 0.721244 -0.193465 -0.665116 N1 0.645526 -0.373497 -0.66618 N2 0.822132 -0.476337 -0.311772
+ txt003
+STRI
+ V0 0.148234 -0.0871056 2.78542 V1 0.165279 -0.0460445 2.78542 V2 0.228728 -0.0638032 2.88333
+ N0 0.822132 -0.476337 -0.311772 N1 0.917897 -0.246906 -0.310647 N2 0.721244 -0.193465 -0.665116
+ txt003
+STRI
+ V0 0.20518 -0.120647 2.88333 V1 0.168463 -0.168463 2.88333 V2 0.121672 -0.121672 2.78542
+ N0 0.645526 -0.373497 -0.66618 N1 0.527081 -0.527081 -0.666611 N2 0.671754 -0.671754 -0.312241
+ txt003
+STRI
+ V0 0.121672 -0.121672 2.78542 V1 0.148234 -0.0871056 2.78542 V2 0.20518 -0.120647 2.88333
+ N0 0.671754 -0.671754 -0.312241 N1 0.822132 -0.476337 -0.311772 N2 0.645526 -0.373497 -0.66618
+ txt003
+STRI
+ V0 0.168463 -0.168463 2.88333 V1 0.120647 -0.20518 2.88333 V2 0.0871056 -0.148234 2.78542
+ N0 0.527081 -0.527081 -0.666611 N1 0.373497 -0.645526 -0.66618 N2 0.476337 -0.822132 -0.311772
+ txt003
+STRI
+ V0 0.0871056 -0.148234 2.78542 V1 0.121672 -0.121672 2.78542 V2 0.168463 -0.168463 2.88333
+ N0 0.476337 -0.822132 -0.311772 N1 0.671754 -0.671754 -0.312241 N2 0.527081 -0.527081 -0.666611
+ txt003
+STRI
+ V0 0.120647 -0.20518 2.88333 V1 0.0638032 -0.228728 2.88333 V2 0.0460445 -0.165279 2.78542
+ N0 0.373497 -0.645526 -0.66618 N1 0.193465 -0.721244 -0.665116 N2 0.246906 -0.917897 -0.310647
+ txt003
+STRI
+ V0 0.0460445 -0.165279 2.78542 V1 0.0871056 -0.148234 2.78542 V2 0.120647 -0.20518 2.88333
+ N0 0.246906 -0.917897 -0.310647 N1 0.476337 -0.822132 -0.311772 N2 0.373497 -0.645526 -0.66618
+ txt003
+STRI
+ V0 0.0638032 -0.228728 2.88333 V1 -1.11022e-16 -0.237037 2.88333 V2 -6.66134e-16 -0.171296 2.78542
+ N0 0.193465 -0.721244 -0.665116 N1 2.42292e-15 -0.747409 -0.664364 N2 2.16507e-15 -0.950775 -0.309882
+ txt003
+STRI
+ V0 -6.66134e-16 -0.171296 2.78542 V1 0.0460445 -0.165279 2.78542 V2 0.0638032 -0.228728 2.88333
+ N0 2.16507e-15 -0.950775 -0.309882 N1 0.246906 -0.917897 -0.310647 N2 0.193465 -0.721244 -0.665116
+ txt003
+STRI
+ V0 0.171296 0 2.78542 V1 0.165279 -0.0460445 2.78542 V2 0.192963 -0.0537037 2.7
+ N0 0.950775 0 -0.309882 N1 0.917897 -0.246906 -0.310647 N2 0.578783 -0.15602 0.800417
+ txt003
+STRI
+ V0 0.192963 -0.0537037 2.7 V1 0.2 0 2.7 V2 0.171296 0 2.78542
+ N0 0.578783 -0.15602 0.800417 N1 0.6 0 0.8 N2 0.950775 0 -0.309882
+ txt003
+STRI
+ V0 0.165279 -0.0460445 2.78542 V1 0.148234 -0.0871056 2.78542 V2 0.173037 -0.10163 2.7
+ N0 0.917897 -0.246906 -0.310647 N1 0.822132 -0.476337 -0.311772 N2 0.517905 -0.300385 0.800964
+ txt003
+STRI
+ V0 0.173037 -0.10163 2.7 V1 0.192963 -0.0537037 2.7 V2 0.165279 -0.0460445 2.78542
+ N0 0.517905 -0.300385 0.800964 N1 0.578783 -0.15602 0.800417 N2 0.917897 -0.246906 -0.310647
+ txt003
+STRI
+ V0 0.148234 -0.0871056 2.78542 V1 0.121672 -0.121672 2.78542 V2 0.142 -0.142 2.7
+ N0 0.822132 -0.476337 -0.311772 N1 0.671754 -0.671754 -0.312241 N2 0.423155 -0.423155 0.801174
+ txt003
+STRI
+ V0 0.142 -0.142 2.7 V1 0.173037 -0.10163 2.7 V2 0.148234 -0.0871056 2.78542
+ N0 0.423155 -0.423155 0.801174 N1 0.517905 -0.300385 0.800964 N2 0.822132 -0.476337 -0.311772
+ txt003
+STRI
+ V0 0.121672 -0.121672 2.78542 V1 0.0871056 -0.148234 2.78542 V2 0.10163 -0.173037 2.7
+ N0 0.671754 -0.671754 -0.312241 N1 0.476337 -0.822132 -0.311772 N2 0.300385 -0.517905 0.800964
+ txt003
+STRI
+ V0 0.10163 -0.173037 2.7 V1 0.142 -0.142 2.7 V2 0.121672 -0.121672 2.78542
+ N0 0.300385 -0.517905 0.800964 N1 0.423155 -0.423155 0.801174 N2 0.671754 -0.671754 -0.312241
+ txt003
+STRI
+ V0 0.0871056 -0.148234 2.78542 V1 0.0460445 -0.165279 2.78542 V2 0.0537037 -0.192963 2.7
+ N0 0.476337 -0.822132 -0.311772 N1 0.246906 -0.917897 -0.310647 N2 0.15602 -0.578783 0.800417
+ txt003
+STRI
+ V0 0.0537037 -0.192963 2.7 V1 0.10163 -0.173037 2.7 V2 0.0871056 -0.148234 2.78542
+ N0 0.15602 -0.578783 0.800417 N1 0.300385 -0.517905 0.800964 N2 0.476337 -0.822132 -0.311772
+ txt003
+STRI
+ V0 0.0460445 -0.165279 2.78542 V1 -6.66134e-16 -0.171296 2.78542 V2 0 -0.2 2.7
+ N0 0.246906 -0.917897 -0.310647 N1 2.16507e-15 -0.950775 -0.309882 N2 -3.17207e-15 -0.6 0.8
+ txt003
+STRI
+ V0 0 -0.2 2.7 V1 0.0537037 -0.192963 2.7 V2 0.0460445 -0.165279 2.78542
+ N0 -3.17207e-15 -0.6 0.8 N1 0.15602 -0.578783 0.800417 N2 0.246906 -0.917897 -0.310647
+ txt003
+STRI
+ V0 -0.0750782 -0.268946 3.12708 V1 0 -0.278704 3.12708 V2 0 0 3.15
+ N0 -0.0645609 -0.241077 0.968356 N1 0 -0.249998 0.968246 N2 0 0 1
+ txt003
+STRI
+ V0 -0.141931 -0.241285 3.12708 V1 -0.0750782 -0.268946 3.12708 V2 0 0 3.15
+ N0 -0.124615 -0.215548 0.968509 N1 -0.0645609 -0.241077 0.968356 N2 0 0 1
+ txt003
+STRI
+ V0 -0.19814 -0.19814 3.12708 V1 -0.141931 -0.241285 3.12708 V2 0 0 3.15
+ N0 -0.175885 -0.175885 0.96857 N1 -0.124615 -0.215548 0.968509 N2 0 0 1
+ txt003
+STRI
+ V0 -0.241285 -0.141931 3.12708 V1 -0.19814 -0.19814 3.12708 V2 0 0 3.15
+ N0 -0.215548 -0.124615 0.968509 N1 -0.175885 -0.175885 0.96857 N2 0 0 1
+ txt003
+STRI
+ V0 -0.268946 -0.0750782 3.12708 V1 -0.241285 -0.141931 3.12708 V2 0 0 3.15
+ N0 -0.241077 -0.0645609 0.968356 N1 -0.215548 -0.124615 0.968509 N2 0 0 1
+ txt003
+STRI
+ V0 -0.278704 0 3.12708 V1 -0.268946 -0.0750782 3.12708 V2 0 0 3.15
+ N0 -0.249998 2.80184e-15 0.968246 N1 -0.241077 -0.0645609 0.968356 N2 0 0 1
+ txt003
+STRI
+ V0 0 -0.278704 3.12708 V1 -0.0750782 -0.268946 3.12708 V2 -0.0977709 -0.350254 3.06667
+ N0 0 -0.249998 0.968246 N1 -0.0645609 -0.241077 0.968356 N2 -0.255913 -0.955496 0.146755
+ txt003
+STRI
+ V0 -0.0977709 -0.350254 3.06667 V1 0 -0.362963 3.06667 V2 0 -0.278704 3.12708
+ N0 -0.255913 -0.955496 0.146755 N1 0 -0.989203 0.146549 N2 0 -0.249998 0.968246
+ txt003
+STRI
+ V0 -0.0750782 -0.268946 3.12708 V1 -0.141931 -0.241285 3.12708 V2 -0.184834 -0.314228 3.06667
+ N0 -0.0645609 -0.241077 0.968356 N1 -0.124615 -0.215548 0.968509 N2 -0.495088 -0.856312 0.147029
+ txt003
+STRI
+ V0 -0.184834 -0.314228 3.06667 V1 -0.0977709 -0.350254 3.06667 V2 -0.0750782 -0.268946 3.12708
+ N0 -0.495088 -0.856312 0.147029 N1 -0.255913 -0.955496 0.146755 N2 -0.0645609 -0.241077 0.968356
+ txt003
+STRI
+ V0 -0.141931 -0.241285 3.12708 V1 -0.19814 -0.19814 3.12708 V2 -0.258037 -0.258037 3.06667
+ N0 -0.124615 -0.215548 0.968509 N1 -0.175885 -0.175885 0.96857 N2 -0.699411 -0.699411 0.147135
+ txt003
+STRI
+ V0 -0.258037 -0.258037 3.06667 V1 -0.184834 -0.314228 3.06667 V2 -0.141931 -0.241285 3.12708
+ N0 -0.699411 -0.699411 0.147135 N1 -0.495088 -0.856312 0.147029 N2 -0.124615 -0.215548 0.968509
+ txt003
+STRI
+ V0 -0.19814 -0.19814 3.12708 V1 -0.241285 -0.141931 3.12708 V2 -0.314228 -0.184834 3.06667
+ N0 -0.175885 -0.175885 0.96857 N1 -0.215548 -0.124615 0.968509 N2 -0.856312 -0.495088 0.147029
+ txt003
+STRI
+ V0 -0.314228 -0.184834 3.06667 V1 -0.258037 -0.258037 3.06667 V2 -0.19814 -0.19814 3.12708
+ N0 -0.856312 -0.495088 0.147029 N1 -0.699411 -0.699411 0.147135 N2 -0.175885 -0.175885 0.96857
+ txt003
+STRI
+ V0 -0.241285 -0.141931 3.12708 V1 -0.268946 -0.0750782 3.12708 V2 -0.350254 -0.0977709 3.06667
+ N0 -0.215548 -0.124615 0.968509 N1 -0.241077 -0.0645609 0.968356 N2 -0.955496 -0.255913 0.146755
+ txt003
+STRI
+ V0 -0.350254 -0.0977709 3.06667 V1 -0.314228 -0.184834 3.06667 V2 -0.241285 -0.141931 3.12708
+ N0 -0.955496 -0.255913 0.146755 N1 -0.856312 -0.495088 0.147029 N2 -0.215548 -0.124615 0.968509
+ txt003
+STRI
+ V0 -0.268946 -0.0750782 3.12708 V1 -0.278704 0 3.12708 V2 -0.362963 0 3.06667
+ N0 -0.241077 -0.0645609 0.968356 N1 -0.249998 2.80184e-15 0.968246 N2 -0.989203 4.98112e-16 0.146549
+ txt003
+STRI
+ V0 -0.362963 0 3.06667 V1 -0.350254 -0.0977709 3.06667 V2 -0.268946 -0.0750782 3.12708
+ N0 -0.989203 4.98112e-16 0.146549 N1 -0.955496 -0.255913 0.146755 N2 -0.241077 -0.0645609 0.968356
+ txt003
+STRI
+ V0 0 -0.362963 3.06667 V1 -0.0977709 -0.350254 3.06667 V2 -0.0875289 -0.313617 2.98125
+ N0 0 -0.989203 0.146549 N1 -0.255913 -0.955496 0.146755 N2 -0.201937 -0.753688 -0.625441
+ txt003
+STRI
+ V0 -0.0875289 -0.313617 2.98125 V1 0 -0.325 2.98125 V2 0 -0.362963 3.06667
+ N0 -0.201937 -0.753688 -0.625441 N1 -0 -0.780869 -0.624695 N2 0 -0.989203 0.146549
+ txt003
+STRI
+ V0 -0.0977709 -0.350254 3.06667 V1 -0.184834 -0.314228 3.06667 V2 -0.165481 -0.281352 2.98125
+ N0 -0.255913 -0.955496 0.146755 N1 -0.495088 -0.856312 0.147029 N2 -0.390178 -0.674735 -0.626493
+ txt003
+STRI
+ V0 -0.165481 -0.281352 2.98125 V1 -0.0875289 -0.313617 2.98125 V2 -0.0977709 -0.350254 3.06667
+ N0 -0.390178 -0.674735 -0.626493 N1 -0.201937 -0.753688 -0.625441 N2 -0.255913 -0.955496 0.146755
+ txt003
+STRI
+ V0 -0.184834 -0.314228 3.06667 V1 -0.258037 -0.258037 3.06667 V2 -0.231031 -0.231031 2.98125
+ N0 -0.495088 -0.856312 0.147029 N1 -0.699411 -0.699411 0.147135 N2 -0.550896 -0.550896 -0.626919
+ txt003
+STRI
+ V0 -0.231031 -0.231031 2.98125 V1 -0.165481 -0.281352 2.98125 V2 -0.184834 -0.314228 3.06667
+ N0 -0.550896 -0.550896 -0.626919 N1 -0.390178 -0.674735 -0.626493 N2 -0.495088 -0.856312 0.147029
+ txt003
+STRI
+ V0 -0.258037 -0.258037 3.06667 V1 -0.314228 -0.184834 3.06667 V2 -0.281352 -0.165481 2.98125
+ N0 -0.699411 -0.699411 0.147135 N1 -0.856312 -0.495088 0.147029 N2 -0.674735 -0.390178 -0.626493
+ txt003
+STRI
+ V0 -0.281352 -0.165481 2.98125 V1 -0.231031 -0.231031 2.98125 V2 -0.258037 -0.258037 3.06667
+ N0 -0.674735 -0.390178 -0.626493 N1 -0.550896 -0.550896 -0.626919 N2 -0.699411 -0.699411 0.147135
+ txt003
+STRI
+ V0 -0.314228 -0.184834 3.06667 V1 -0.350254 -0.0977709 3.06667 V2 -0.313617 -0.0875289 2.98125
+ N0 -0.856312 -0.495088 0.147029 N1 -0.955496 -0.255913 0.146755 N2 -0.753688 -0.201937 -0.625441
+ txt003
+STRI
+ V0 -0.313617 -0.0875289 2.98125 V1 -0.281352 -0.165481 2.98125 V2 -0.314228 -0.184834 3.06667
+ N0 -0.753688 -0.201937 -0.625441 N1 -0.674735 -0.390178 -0.626493 N2 -0.856312 -0.495088 0.147029
+ txt003
+STRI
+ V0 -0.350254 -0.0977709 3.06667 V1 -0.362963 0 3.06667 V2 -0.325 1.11022e-16 2.98125
+ N0 -0.955496 -0.255913 0.146755 N1 -0.989203 4.98112e-16 0.146549 N2 -0.780869 -1.51803e-15 -0.624695
+ txt003
+STRI
+ V0 -0.325 1.11022e-16 2.98125 V1 -0.313617 -0.0875289 2.98125 V2 -0.350254 -0.0977709 3.06667
+ N0 -0.780869 -1.51803e-15 -0.624695 N1 -0.753688 -0.201937 -0.625441 N2 -0.955496 -0.255913 0.146755
+ txt003
+STRI
+ V0 0 -0.325 2.98125 V1 -0.0875289 -0.313617 2.98125 V2 -0.0638032 -0.228728 2.88333
+ N0 -0 -0.780869 -0.624695 N1 -0.201937 -0.753688 -0.625441 N2 -0.193465 -0.721244 -0.665116
+ txt003
+STRI
+ V0 -0.0638032 -0.228728 2.88333 V1 0 -0.237037 2.88333 V2 0 -0.325 2.98125
+ N0 -0.193465 -0.721244 -0.665116 N1 -0 -0.747409 -0.664364 N2 -0 -0.780869 -0.624695
+ txt003
+STRI
+ V0 -0.0875289 -0.313617 2.98125 V1 -0.165481 -0.281352 2.98125 V2 -0.120647 -0.20518 2.88333
+ N0 -0.201937 -0.753688 -0.625441 N1 -0.390178 -0.674735 -0.626493 N2 -0.373497 -0.645526 -0.66618
+ txt003
+STRI
+ V0 -0.120647 -0.20518 2.88333 V1 -0.0638032 -0.228728 2.88333 V2 -0.0875289 -0.313617 2.98125
+ N0 -0.373497 -0.645526 -0.66618 N1 -0.193465 -0.721244 -0.665116 N2 -0.201937 -0.753688 -0.625441
+ txt003
+STRI
+ V0 -0.165481 -0.281352 2.98125 V1 -0.231031 -0.231031 2.98125 V2 -0.168463 -0.168463 2.88333
+ N0 -0.390178 -0.674735 -0.626493 N1 -0.550896 -0.550896 -0.626919 N2 -0.527081 -0.527081 -0.666611
+ txt003
+STRI
+ V0 -0.168463 -0.168463 2.88333 V1 -0.120647 -0.20518 2.88333 V2 -0.165481 -0.281352 2.98125
+ N0 -0.527081 -0.527081 -0.666611 N1 -0.373497 -0.645526 -0.66618 N2 -0.390178 -0.674735 -0.626493
+ txt003
+STRI
+ V0 -0.231031 -0.231031 2.98125 V1 -0.281352 -0.165481 2.98125 V2 -0.20518 -0.120647 2.88333
+ N0 -0.550896 -0.550896 -0.626919 N1 -0.674735 -0.390178 -0.626493 N2 -0.645526 -0.373497 -0.66618
+ txt003
+STRI
+ V0 -0.20518 -0.120647 2.88333 V1 -0.168463 -0.168463 2.88333 V2 -0.231031 -0.231031 2.98125
+ N0 -0.645526 -0.373497 -0.66618 N1 -0.527081 -0.527081 -0.666611 N2 -0.550896 -0.550896 -0.626919
+ txt003
+STRI
+ V0 -0.281352 -0.165481 2.98125 V1 -0.313617 -0.0875289 2.98125 V2 -0.228728 -0.0638032 2.88333
+ N0 -0.674735 -0.390178 -0.626493 N1 -0.753688 -0.201937 -0.625441 N2 -0.721244 -0.193465 -0.665116
+ txt003
+STRI
+ V0 -0.228728 -0.0638032 2.88333 V1 -0.20518 -0.120647 2.88333 V2 -0.281352 -0.165481 2.98125
+ N0 -0.721244 -0.193465 -0.665116 N1 -0.645526 -0.373497 -0.66618 N2 -0.674735 -0.390178 -0.626493
+ txt003
+STRI
+ V0 -0.313617 -0.0875289 2.98125 V1 -0.325 1.11022e-16 2.98125 V2 -0.237037 1.11022e-16 2.88333
+ N0 -0.753688 -0.201937 -0.625441 N1 -0.780869 -1.51803e-15 -0.624695 N2 -0.747409 -2.42292e-15 -0.664364
+ txt003
+STRI
+ V0 -0.237037 1.11022e-16 2.88333 V1 -0.228728 -0.0638032 2.88333 V2 -0.313617 -0.0875289 2.98125
+ N0 -0.747409 -2.42292e-15 -0.664364 N1 -0.721244 -0.193465 -0.665116 N2 -0.753688 -0.201937 -0.625441
+ txt003
+STRI
+ V0 0 -0.237037 2.88333 V1 -0.0638032 -0.228728 2.88333 V2 -0.0460445 -0.165279 2.78542
+ N0 -0 -0.747409 -0.664364 N1 -0.193465 -0.721244 -0.665116 N2 -0.246906 -0.917897 -0.310647
+ txt003
+STRI
+ V0 -0.0460445 -0.165279 2.78542 V1 0 -0.171296 2.78542 V2 0 -0.237037 2.88333
+ N0 -0.246906 -0.917897 -0.310647 N1 -0 -0.950775 -0.309882 N2 -0 -0.747409 -0.664364
+ txt003
+STRI
+ V0 -0.0638032 -0.228728 2.88333 V1 -0.120647 -0.20518 2.88333 V2 -0.0871056 -0.148234 2.78542
+ N0 -0.193465 -0.721244 -0.665116 N1 -0.373497 -0.645526 -0.66618 N2 -0.476337 -0.822132 -0.311772
+ txt003
+STRI
+ V0 -0.0871056 -0.148234 2.78542 V1 -0.0460445 -0.165279 2.78542 V2 -0.0638032 -0.228728 2.88333
+ N0 -0.476337 -0.822132 -0.311772 N1 -0.246906 -0.917897 -0.310647 N2 -0.193465 -0.721244 -0.665116
+ txt003
+STRI
+ V0 -0.120647 -0.20518 2.88333 V1 -0.168463 -0.168463 2.88333 V2 -0.121672 -0.121672 2.78542
+ N0 -0.373497 -0.645526 -0.66618 N1 -0.527081 -0.527081 -0.666611 N2 -0.671754 -0.671754 -0.312241
+ txt003
+STRI
+ V0 -0.121672 -0.121672 2.78542 V1 -0.0871056 -0.148234 2.78542 V2 -0.120647 -0.20518 2.88333
+ N0 -0.671754 -0.671754 -0.312241 N1 -0.476337 -0.822132 -0.311772 N2 -0.373497 -0.645526 -0.66618
+ txt003
+STRI
+ V0 -0.168463 -0.168463 2.88333 V1 -0.20518 -0.120647 2.88333 V2 -0.148234 -0.0871056 2.78542
+ N0 -0.527081 -0.527081 -0.666611 N1 -0.645526 -0.373497 -0.66618 N2 -0.822132 -0.476337 -0.311772
+ txt003
+STRI
+ V0 -0.148234 -0.0871056 2.78542 V1 -0.121672 -0.121672 2.78542 V2 -0.168463 -0.168463 2.88333
+ N0 -0.822132 -0.476337 -0.311772 N1 -0.671754 -0.671754 -0.312241 N2 -0.527081 -0.527081 -0.666611
+ txt003
+STRI
+ V0 -0.20518 -0.120647 2.88333 V1 -0.228728 -0.0638032 2.88333 V2 -0.165279 -0.0460445 2.78542
+ N0 -0.645526 -0.373497 -0.66618 N1 -0.721244 -0.193465 -0.665116 N2 -0.917897 -0.246906 -0.310647
+ txt003
+STRI
+ V0 -0.165279 -0.0460445 2.78542 V1 -0.148234 -0.0871056 2.78542 V2 -0.20518 -0.120647 2.88333
+ N0 -0.917897 -0.246906 -0.310647 N1 -0.822132 -0.476337 -0.311772 N2 -0.645526 -0.373497 -0.66618
+ txt003
+STRI
+ V0 -0.228728 -0.0638032 2.88333 V1 -0.237037 1.11022e-16 2.88333 V2 -0.171296 6.66134e-16 2.78542
+ N0 -0.721244 -0.193465 -0.665116 N1 -0.747409 -2.42292e-15 -0.664364 N2 -0.950775 -2.16507e-15 -0.309882
+ txt003
+STRI
+ V0 -0.171296 6.66134e-16 2.78542 V1 -0.165279 -0.0460445 2.78542 V2 -0.228728 -0.0638032 2.88333
+ N0 -0.950775 -2.16507e-15 -0.309882 N1 -0.917897 -0.246906 -0.310647 N2 -0.721244 -0.193465 -0.665116
+ txt003
+STRI
+ V0 0 -0.171296 2.78542 V1 -0.0460445 -0.165279 2.78542 V2 -0.0537037 -0.192963 2.7
+ N0 -0 -0.950775 -0.309882 N1 -0.246906 -0.917897 -0.310647 N2 -0.15602 -0.578783 0.800417
+ txt003
+STRI
+ V0 -0.0537037 -0.192963 2.7 V1 0 -0.2 2.7 V2 0 -0.171296 2.78542
+ N0 -0.15602 -0.578783 0.800417 N1 0 -0.6 0.8 N2 -0 -0.950775 -0.309882
+ txt003
+STRI
+ V0 -0.0460445 -0.165279 2.78542 V1 -0.0871056 -0.148234 2.78542 V2 -0.10163 -0.173037 2.7
+ N0 -0.246906 -0.917897 -0.310647 N1 -0.476337 -0.822132 -0.311772 N2 -0.300385 -0.517905 0.800964
+ txt003
+STRI
+ V0 -0.10163 -0.173037 2.7 V1 -0.0537037 -0.192963 2.7 V2 -0.0460445 -0.165279 2.78542
+ N0 -0.300385 -0.517905 0.800964 N1 -0.15602 -0.578783 0.800417 N2 -0.246906 -0.917897 -0.310647
+ txt003
+STRI
+ V0 -0.0871056 -0.148234 2.78542 V1 -0.121672 -0.121672 2.78542 V2 -0.142 -0.142 2.7
+ N0 -0.476337 -0.822132 -0.311772 N1 -0.671754 -0.671754 -0.312241 N2 -0.423155 -0.423155 0.801174
+ txt003
+STRI
+ V0 -0.142 -0.142 2.7 V1 -0.10163 -0.173037 2.7 V2 -0.0871056 -0.148234 2.78542
+ N0 -0.423155 -0.423155 0.801174 N1 -0.300385 -0.517905 0.800964 N2 -0.476337 -0.822132 -0.311772
+ txt003
+STRI
+ V0 -0.121672 -0.121672 2.78542 V1 -0.148234 -0.0871056 2.78542 V2 -0.173037 -0.10163 2.7
+ N0 -0.671754 -0.671754 -0.312241 N1 -0.822132 -0.476337 -0.311772 N2 -0.517905 -0.300385 0.800964
+ txt003
+STRI
+ V0 -0.173037 -0.10163 2.7 V1 -0.142 -0.142 2.7 V2 -0.121672 -0.121672 2.78542
+ N0 -0.517905 -0.300385 0.800964 N1 -0.423155 -0.423155 0.801174 N2 -0.671754 -0.671754 -0.312241
+ txt003
+STRI
+ V0 -0.148234 -0.0871056 2.78542 V1 -0.165279 -0.0460445 2.78542 V2 -0.192963 -0.0537037 2.7
+ N0 -0.822132 -0.476337 -0.311772 N1 -0.917897 -0.246906 -0.310647 N2 -0.578783 -0.15602 0.800417
+ txt003
+STRI
+ V0 -0.192963 -0.0537037 2.7 V1 -0.173037 -0.10163 2.7 V2 -0.148234 -0.0871056 2.78542
+ N0 -0.578783 -0.15602 0.800417 N1 -0.517905 -0.300385 0.800964 N2 -0.822132 -0.476337 -0.311772
+ txt003
+STRI
+ V0 -0.165279 -0.0460445 2.78542 V1 -0.171296 6.66134e-16 2.78542 V2 -0.2 0 2.7
+ N0 -0.917897 -0.246906 -0.310647 N1 -0.950775 -2.16507e-15 -0.309882 N2 -0.6 3.17207e-15 0.8
+ txt003
+STRI
+ V0 -0.2 0 2.7 V1 -0.192963 -0.0537037 2.7 V2 -0.165279 -0.0460445 2.78542
+ N0 -0.6 3.17207e-15 0.8 N1 -0.578783 -0.15602 0.800417 N2 -0.917897 -0.246906 -0.310647
+ txt003
+STRI
+ V0 -0.268946 0.0750782 3.12708 V1 -0.278704 0 3.12708 V2 0 0 3.15
+ N0 -0.241077 0.0645609 0.968356 N1 -0.249998 0 0.968246 N2 0 0 1
+ txt003
+STRI
+ V0 -0.241285 0.141931 3.12708 V1 -0.268946 0.0750782 3.12708 V2 0 0 3.15
+ N0 -0.215548 0.124615 0.968509 N1 -0.241077 0.0645609 0.968356 N2 0 0 1
+ txt003
+STRI
+ V0 -0.19814 0.19814 3.12708 V1 -0.241285 0.141931 3.12708 V2 0 0 3.15
+ N0 -0.175885 0.175885 0.96857 N1 -0.215548 0.124615 0.968509 N2 0 0 1
+ txt003
+STRI
+ V0 -0.141931 0.241285 3.12708 V1 -0.19814 0.19814 3.12708 V2 0 0 3.15
+ N0 -0.124615 0.215548 0.968509 N1 -0.175885 0.175885 0.96857 N2 0 0 1
+ txt003
+STRI
+ V0 -0.0750782 0.268946 3.12708 V1 -0.141931 0.241285 3.12708 V2 0 0 3.15
+ N0 -0.0645609 0.241077 0.968356 N1 -0.124615 0.215548 0.968509 N2 0 0 1
+ txt003
+STRI
+ V0 0 0.278704 3.12708 V1 -0.0750782 0.268946 3.12708 V2 0 0 3.15
+ N0 2.80184e-15 0.249998 0.968246 N1 -0.0645609 0.241077 0.968356 N2 0 0 1
+ txt003
+STRI
+ V0 -0.278704 0 3.12708 V1 -0.268946 0.0750782 3.12708 V2 -0.350254 0.0977709 3.06667
+ N0 -0.249998 0 0.968246 N1 -0.241077 0.0645609 0.968356 N2 -0.955496 0.255913 0.146755
+ txt003
+STRI
+ V0 -0.350254 0.0977709 3.06667 V1 -0.362963 0 3.06667 V2 -0.278704 0 3.12708
+ N0 -0.955496 0.255913 0.146755 N1 -0.989203 0 0.146549 N2 -0.249998 0 0.968246
+ txt003
+STRI
+ V0 -0.268946 0.0750782 3.12708 V1 -0.241285 0.141931 3.12708 V2 -0.314228 0.184834 3.06667
+ N0 -0.241077 0.0645609 0.968356 N1 -0.215548 0.124615 0.968509 N2 -0.856312 0.495088 0.147029
+ txt003
+STRI
+ V0 -0.314228 0.184834 3.06667 V1 -0.350254 0.0977709 3.06667 V2 -0.268946 0.0750782 3.12708
+ N0 -0.856312 0.495088 0.147029 N1 -0.955496 0.255913 0.146755 N2 -0.241077 0.0645609 0.968356
+ txt003
+STRI
+ V0 -0.241285 0.141931 3.12708 V1 -0.19814 0.19814 3.12708 V2 -0.258037 0.258037 3.06667
+ N0 -0.215548 0.124615 0.968509 N1 -0.175885 0.175885 0.96857 N2 -0.699411 0.699411 0.147135
+ txt003
+STRI
+ V0 -0.258037 0.258037 3.06667 V1 -0.314228 0.184834 3.06667 V2 -0.241285 0.141931 3.12708
+ N0 -0.699411 0.699411 0.147135 N1 -0.856312 0.495088 0.147029 N2 -0.215548 0.124615 0.968509
+ txt003
+STRI
+ V0 -0.19814 0.19814 3.12708 V1 -0.141931 0.241285 3.12708 V2 -0.184834 0.314228 3.06667
+ N0 -0.175885 0.175885 0.96857 N1 -0.124615 0.215548 0.968509 N2 -0.495088 0.856312 0.147029
+ txt003
+STRI
+ V0 -0.184834 0.314228 3.06667 V1 -0.258037 0.258037 3.06667 V2 -0.19814 0.19814 3.12708
+ N0 -0.495088 0.856312 0.147029 N1 -0.699411 0.699411 0.147135 N2 -0.175885 0.175885 0.96857
+ txt003
+STRI
+ V0 -0.141931 0.241285 3.12708 V1 -0.0750782 0.268946 3.12708 V2 -0.0977709 0.350254 3.06667
+ N0 -0.124615 0.215548 0.968509 N1 -0.0645609 0.241077 0.968356 N2 -0.255913 0.955496 0.146755
+ txt003
+STRI
+ V0 -0.0977709 0.350254 3.06667 V1 -0.184834 0.314228 3.06667 V2 -0.141931 0.241285 3.12708
+ N0 -0.255913 0.955496 0.146755 N1 -0.495088 0.856312 0.147029 N2 -0.124615 0.215548 0.968509
+ txt003
+STRI
+ V0 -0.0750782 0.268946 3.12708 V1 0 0.278704 3.12708 V2 0 0.362963 3.06667
+ N0 -0.0645609 0.241077 0.968356 N1 2.80184e-15 0.249998 0.968246 N2 4.98112e-16 0.989203 0.146549
+ txt003
+STRI
+ V0 0 0.362963 3.06667 V1 -0.0977709 0.350254 3.06667 V2 -0.0750782 0.268946 3.12708
+ N0 4.98112e-16 0.989203 0.146549 N1 -0.255913 0.955496 0.146755 N2 -0.0645609 0.241077 0.968356
+ txt003
+STRI
+ V0 -0.362963 0 3.06667 V1 -0.350254 0.0977709 3.06667 V2 -0.313617 0.0875289 2.98125
+ N0 -0.989203 0 0.146549 N1 -0.955496 0.255913 0.146755 N2 -0.753688 0.201937 -0.625441
+ txt003
+STRI
+ V0 -0.313617 0.0875289 2.98125 V1 -0.325 0 2.98125 V2 -0.362963 0 3.06667
+ N0 -0.753688 0.201937 -0.625441 N1 -0.780869 0 -0.624695 N2 -0.989203 0 0.146549
+ txt003
+STRI
+ V0 -0.350254 0.0977709 3.06667 V1 -0.314228 0.184834 3.06667 V2 -0.281352 0.165481 2.98125
+ N0 -0.955496 0.255913 0.146755 N1 -0.856312 0.495088 0.147029 N2 -0.674735 0.390178 -0.626493
+ txt003
+STRI
+ V0 -0.281352 0.165481 2.98125 V1 -0.313617 0.0875289 2.98125 V2 -0.350254 0.0977709 3.06667
+ N0 -0.674735 0.390178 -0.626493 N1 -0.753688 0.201937 -0.625441 N2 -0.955496 0.255913 0.146755
+ txt003
+STRI
+ V0 -0.314228 0.184834 3.06667 V1 -0.258037 0.258037 3.06667 V2 -0.231031 0.231031 2.98125
+ N0 -0.856312 0.495088 0.147029 N1 -0.699411 0.699411 0.147135 N2 -0.550896 0.550896 -0.626919
+ txt003
+STRI
+ V0 -0.231031 0.231031 2.98125 V1 -0.281352 0.165481 2.98125 V2 -0.314228 0.184834 3.06667
+ N0 -0.550896 0.550896 -0.626919 N1 -0.674735 0.390178 -0.626493 N2 -0.856312 0.495088 0.147029
+ txt003
+STRI
+ V0 -0.258037 0.258037 3.06667 V1 -0.184834 0.314228 3.06667 V2 -0.165481 0.281352 2.98125
+ N0 -0.699411 0.699411 0.147135 N1 -0.495088 0.856312 0.147029 N2 -0.390178 0.674735 -0.626493
+ txt003
+STRI
+ V0 -0.165481 0.281352 2.98125 V1 -0.231031 0.231031 2.98125 V2 -0.258037 0.258037 3.06667
+ N0 -0.390178 0.674735 -0.626493 N1 -0.550896 0.550896 -0.626919 N2 -0.699411 0.699411 0.147135
+ txt003
+STRI
+ V0 -0.184834 0.314228 3.06667 V1 -0.0977709 0.350254 3.06667 V2 -0.0875289 0.313617 2.98125
+ N0 -0.495088 0.856312 0.147029 N1 -0.255913 0.955496 0.146755 N2 -0.201937 0.753688 -0.625441
+ txt003
+STRI
+ V0 -0.0875289 0.313617 2.98125 V1 -0.165481 0.281352 2.98125 V2 -0.184834 0.314228 3.06667
+ N0 -0.201937 0.753688 -0.625441 N1 -0.390178 0.674735 -0.626493 N2 -0.495088 0.856312 0.147029
+ txt003
+STRI
+ V0 -0.0977709 0.350254 3.06667 V1 0 0.362963 3.06667 V2 1.11022e-16 0.325 2.98125
+ N0 -0.255913 0.955496 0.146755 N1 4.98112e-16 0.989203 0.146549 N2 -1.51803e-15 0.780869 -0.624695
+ txt003
+STRI
+ V0 1.11022e-16 0.325 2.98125 V1 -0.0875289 0.313617 2.98125 V2 -0.0977709 0.350254 3.06667
+ N0 -1.51803e-15 0.780869 -0.624695 N1 -0.201937 0.753688 -0.625441 N2 -0.255913 0.955496 0.146755
+ txt003
+STRI
+ V0 -0.325 0 2.98125 V1 -0.313617 0.0875289 2.98125 V2 -0.228728 0.0638032 2.88333
+ N0 -0.780869 0 -0.624695 N1 -0.753688 0.201937 -0.625441 N2 -0.721244 0.193465 -0.665116
+ txt003
+STRI
+ V0 -0.228728 0.0638032 2.88333 V1 -0.237037 0 2.88333 V2 -0.325 0 2.98125
+ N0 -0.721244 0.193465 -0.665116 N1 -0.747409 0 -0.664364 N2 -0.780869 0 -0.624695
+ txt003
+STRI
+ V0 -0.313617 0.0875289 2.98125 V1 -0.281352 0.165481 2.98125 V2 -0.20518 0.120647 2.88333
+ N0 -0.753688 0.201937 -0.625441 N1 -0.674735 0.390178 -0.626493 N2 -0.645526 0.373497 -0.66618
+ txt003
+STRI
+ V0 -0.20518 0.120647 2.88333 V1 -0.228728 0.0638032 2.88333 V2 -0.313617 0.0875289 2.98125
+ N0 -0.645526 0.373497 -0.66618 N1 -0.721244 0.193465 -0.665116 N2 -0.753688 0.201937 -0.625441
+ txt003
+STRI
+ V0 -0.281352 0.165481 2.98125 V1 -0.231031 0.231031 2.98125 V2 -0.168463 0.168463 2.88333
+ N0 -0.674735 0.390178 -0.626493 N1 -0.550896 0.550896 -0.626919 N2 -0.527081 0.527081 -0.666611
+ txt003
+STRI
+ V0 -0.168463 0.168463 2.88333 V1 -0.20518 0.120647 2.88333 V2 -0.281352 0.165481 2.98125
+ N0 -0.527081 0.527081 -0.666611 N1 -0.645526 0.373497 -0.66618 N2 -0.674735 0.390178 -0.626493
+ txt003
+STRI
+ V0 -0.231031 0.231031 2.98125 V1 -0.165481 0.281352 2.98125 V2 -0.120647 0.20518 2.88333
+ N0 -0.550896 0.550896 -0.626919 N1 -0.390178 0.674735 -0.626493 N2 -0.373497 0.645526 -0.66618
+ txt003
+STRI
+ V0 -0.120647 0.20518 2.88333 V1 -0.168463 0.168463 2.88333 V2 -0.231031 0.231031 2.98125
+ N0 -0.373497 0.645526 -0.66618 N1 -0.527081 0.527081 -0.666611 N2 -0.550896 0.550896 -0.626919
+ txt003
+STRI
+ V0 -0.165481 0.281352 2.98125 V1 -0.0875289 0.313617 2.98125 V2 -0.0638032 0.228728 2.88333
+ N0 -0.390178 0.674735 -0.626493 N1 -0.201937 0.753688 -0.625441 N2 -0.193465 0.721244 -0.665116
+ txt003
+STRI
+ V0 -0.0638032 0.228728 2.88333 V1 -0.120647 0.20518 2.88333 V2 -0.165481 0.281352 2.98125
+ N0 -0.193465 0.721244 -0.665116 N1 -0.373497 0.645526 -0.66618 N2 -0.390178 0.674735 -0.626493
+ txt003
+STRI
+ V0 -0.0875289 0.313617 2.98125 V1 1.11022e-16 0.325 2.98125 V2 1.11022e-16 0.237037 2.88333
+ N0 -0.201937 0.753688 -0.625441 N1 -1.51803e-15 0.780869 -0.624695 N2 -2.42292e-15 0.747409 -0.664364
+ txt003
+STRI
+ V0 1.11022e-16 0.237037 2.88333 V1 -0.0638032 0.228728 2.88333 V2 -0.0875289 0.313617 2.98125
+ N0 -2.42292e-15 0.747409 -0.664364 N1 -0.193465 0.721244 -0.665116 N2 -0.201937 0.753688 -0.625441
+ txt003
+STRI
+ V0 -0.237037 0 2.88333 V1 -0.228728 0.0638032 2.88333 V2 -0.165279 0.0460445 2.78542
+ N0 -0.747409 0 -0.664364 N1 -0.721244 0.193465 -0.665116 N2 -0.917897 0.246906 -0.310647
+ txt003
+STRI
+ V0 -0.165279 0.0460445 2.78542 V1 -0.171296 0 2.78542 V2 -0.237037 0 2.88333
+ N0 -0.917897 0.246906 -0.310647 N1 -0.950775 0 -0.309882 N2 -0.747409 0 -0.664364
+ txt003
+STRI
+ V0 -0.228728 0.0638032 2.88333 V1 -0.20518 0.120647 2.88333 V2 -0.148234 0.0871056 2.78542
+ N0 -0.721244 0.193465 -0.665116 N1 -0.645526 0.373497 -0.66618 N2 -0.822132 0.476337 -0.311772
+ txt003
+STRI
+ V0 -0.148234 0.0871056 2.78542 V1 -0.165279 0.0460445 2.78542 V2 -0.228728 0.0638032 2.88333
+ N0 -0.822132 0.476337 -0.311772 N1 -0.917897 0.246906 -0.310647 N2 -0.721244 0.193465 -0.665116
+ txt003
+STRI
+ V0 -0.20518 0.120647 2.88333 V1 -0.168463 0.168463 2.88333 V2 -0.121672 0.121672 2.78542
+ N0 -0.645526 0.373497 -0.66618 N1 -0.527081 0.527081 -0.666611 N2 -0.671754 0.671754 -0.312241
+ txt003
+STRI
+ V0 -0.121672 0.121672 2.78542 V1 -0.148234 0.0871056 2.78542 V2 -0.20518 0.120647 2.88333
+ N0 -0.671754 0.671754 -0.312241 N1 -0.822132 0.476337 -0.311772 N2 -0.645526 0.373497 -0.66618
+ txt003
+STRI
+ V0 -0.168463 0.168463 2.88333 V1 -0.120647 0.20518 2.88333 V2 -0.0871056 0.148234 2.78542
+ N0 -0.527081 0.527081 -0.666611 N1 -0.373497 0.645526 -0.66618 N2 -0.476337 0.822132 -0.311772
+ txt003
+STRI
+ V0 -0.0871056 0.148234 2.78542 V1 -0.121672 0.121672 2.78542 V2 -0.168463 0.168463 2.88333
+ N0 -0.476337 0.822132 -0.311772 N1 -0.671754 0.671754 -0.312241 N2 -0.527081 0.527081 -0.666611
+ txt003
+STRI
+ V0 -0.120647 0.20518 2.88333 V1 -0.0638032 0.228728 2.88333 V2 -0.0460445 0.165279 2.78542
+ N0 -0.373497 0.645526 -0.66618 N1 -0.193465 0.721244 -0.665116 N2 -0.246906 0.917897 -0.310647
+ txt003
+STRI
+ V0 -0.0460445 0.165279 2.78542 V1 -0.0871056 0.148234 2.78542 V2 -0.120647 0.20518 2.88333
+ N0 -0.246906 0.917897 -0.310647 N1 -0.476337 0.822132 -0.311772 N2 -0.373497 0.645526 -0.66618
+ txt003
+STRI
+ V0 -0.0638032 0.228728 2.88333 V1 1.11022e-16 0.237037 2.88333 V2 6.66134e-16 0.171296 2.78542
+ N0 -0.193465 0.721244 -0.665116 N1 -2.42292e-15 0.747409 -0.664364 N2 -2.16507e-15 0.950775 -0.309882
+ txt003
+STRI
+ V0 6.66134e-16 0.171296 2.78542 V1 -0.0460445 0.165279 2.78542 V2 -0.0638032 0.228728 2.88333
+ N0 -2.16507e-15 0.950775 -0.309882 N1 -0.246906 0.917897 -0.310647 N2 -0.193465 0.721244 -0.665116
+ txt003
+STRI
+ V0 -0.171296 0 2.78542 V1 -0.165279 0.0460445 2.78542 V2 -0.192963 0.0537037 2.7
+ N0 -0.950775 0 -0.309882 N1 -0.917897 0.246906 -0.310647 N2 -0.578783 0.15602 0.800417
+ txt003
+STRI
+ V0 -0.192963 0.0537037 2.7 V1 -0.2 0 2.7 V2 -0.171296 0 2.78542
+ N0 -0.578783 0.15602 0.800417 N1 -0.6 0 0.8 N2 -0.950775 0 -0.309882
+ txt003
+STRI
+ V0 -0.165279 0.0460445 2.78542 V1 -0.148234 0.0871056 2.78542 V2 -0.173037 0.10163 2.7
+ N0 -0.917897 0.246906 -0.310647 N1 -0.822132 0.476337 -0.311772 N2 -0.517905 0.300385 0.800964
+ txt003
+STRI
+ V0 -0.173037 0.10163 2.7 V1 -0.192963 0.0537037 2.7 V2 -0.165279 0.0460445 2.78542
+ N0 -0.517905 0.300385 0.800964 N1 -0.578783 0.15602 0.800417 N2 -0.917897 0.246906 -0.310647
+ txt003
+STRI
+ V0 -0.148234 0.0871056 2.78542 V1 -0.121672 0.121672 2.78542 V2 -0.142 0.142 2.7
+ N0 -0.822132 0.476337 -0.311772 N1 -0.671754 0.671754 -0.312241 N2 -0.423155 0.423155 0.801174
+ txt003
+STRI
+ V0 -0.142 0.142 2.7 V1 -0.173037 0.10163 2.7 V2 -0.148234 0.0871056 2.78542
+ N0 -0.423155 0.423155 0.801174 N1 -0.517905 0.300385 0.800964 N2 -0.822132 0.476337 -0.311772
+ txt003
+STRI
+ V0 -0.121672 0.121672 2.78542 V1 -0.0871056 0.148234 2.78542 V2 -0.10163 0.173037 2.7
+ N0 -0.671754 0.671754 -0.312241 N1 -0.476337 0.822132 -0.311772 N2 -0.300385 0.517905 0.800964
+ txt003
+STRI
+ V0 -0.10163 0.173037 2.7 V1 -0.142 0.142 2.7 V2 -0.121672 0.121672 2.78542
+ N0 -0.300385 0.517905 0.800964 N1 -0.423155 0.423155 0.801174 N2 -0.671754 0.671754 -0.312241
+ txt003
+STRI
+ V0 -0.0871056 0.148234 2.78542 V1 -0.0460445 0.165279 2.78542 V2 -0.0537037 0.192963 2.7
+ N0 -0.476337 0.822132 -0.311772 N1 -0.246906 0.917897 -0.310647 N2 -0.15602 0.578783 0.800417
+ txt003
+STRI
+ V0 -0.0537037 0.192963 2.7 V1 -0.10163 0.173037 2.7 V2 -0.0871056 0.148234 2.78542
+ N0 -0.15602 0.578783 0.800417 N1 -0.300385 0.517905 0.800964 N2 -0.476337 0.822132 -0.311772
+ txt003
+STRI
+ V0 -0.0460445 0.165279 2.78542 V1 6.66134e-16 0.171296 2.78542 V2 0 0.2 2.7
+ N0 -0.246906 0.917897 -0.310647 N1 -2.16507e-15 0.950775 -0.309882 N2 3.17207e-15 0.6 0.8
+ txt003
+STRI
+ V0 0 0.2 2.7 V1 -0.0537037 0.192963 2.7 V2 -0.0460445 0.165279 2.78542
+ N0 3.17207e-15 0.6 0.8 N1 -0.15602 0.578783 0.800417 N2 -0.246906 0.917897 -0.310647
+ txt003
+STRI
+ V0 0.0750782 0.268946 3.12708 V1 0 0.278704 3.12708 V2 0 0 3.15
+ N0 0.0645609 0.241077 0.968356 N1 -0 0.249998 0.968246 N2 0 0 1
+ txt003
+STRI
+ V0 0.141931 0.241285 3.12708 V1 0.0750782 0.268946 3.12708 V2 0 0 3.15
+ N0 0.124615 0.215548 0.968509 N1 0.0645609 0.241077 0.968356 N2 0 0 1
+ txt003
+STRI
+ V0 0.19814 0.19814 3.12708 V1 0.141931 0.241285 3.12708 V2 0 0 3.15
+ N0 0.175885 0.175885 0.96857 N1 0.124615 0.215548 0.968509 N2 0 0 1
+ txt003
+STRI
+ V0 0.241285 0.141931 3.12708 V1 0.19814 0.19814 3.12708 V2 0 0 3.15
+ N0 0.215548 0.124615 0.968509 N1 0.175885 0.175885 0.96857 N2 0 0 1
+ txt003
+STRI
+ V0 0.268946 0.0750782 3.12708 V1 0.241285 0.141931 3.12708 V2 0 0 3.15
+ N0 0.241077 0.0645609 0.968356 N1 0.215548 0.124615 0.968509 N2 0 0 1
+ txt003
+STRI
+ V0 0.278704 0 3.12708 V1 0.268946 0.0750782 3.12708 V2 0 0 3.15
+ N0 0.249998 -2.80184e-15 0.968246 N1 0.241077 0.0645609 0.968356 N2 0 0 1
+ txt003
+STRI
+ V0 0 0.278704 3.12708 V1 0.0750782 0.268946 3.12708 V2 0.0977709 0.350254 3.06667
+ N0 -0 0.249998 0.968246 N1 0.0645609 0.241077 0.968356 N2 0.255913 0.955496 0.146755
+ txt003
+STRI
+ V0 0.0977709 0.350254 3.06667 V1 0 0.362963 3.06667 V2 0 0.278704 3.12708
+ N0 0.255913 0.955496 0.146755 N1 -0 0.989203 0.146549 N2 -0 0.249998 0.968246
+ txt003
+STRI
+ V0 0.0750782 0.268946 3.12708 V1 0.141931 0.241285 3.12708 V2 0.184834 0.314228 3.06667
+ N0 0.0645609 0.241077 0.968356 N1 0.124615 0.215548 0.968509 N2 0.495088 0.856312 0.147029
+ txt003
+STRI
+ V0 0.184834 0.314228 3.06667 V1 0.0977709 0.350254 3.06667 V2 0.0750782 0.268946 3.12708
+ N0 0.495088 0.856312 0.147029 N1 0.255913 0.955496 0.146755 N2 0.0645609 0.241077 0.968356
+ txt003
+STRI
+ V0 0.141931 0.241285 3.12708 V1 0.19814 0.19814 3.12708 V2 0.258037 0.258037 3.06667
+ N0 0.124615 0.215548 0.968509 N1 0.175885 0.175885 0.96857 N2 0.699411 0.699411 0.147135
+ txt003
+STRI
+ V0 0.258037 0.258037 3.06667 V1 0.184834 0.314228 3.06667 V2 0.141931 0.241285 3.12708
+ N0 0.699411 0.699411 0.147135 N1 0.495088 0.856312 0.147029 N2 0.124615 0.215548 0.968509
+ txt003
+STRI
+ V0 0.19814 0.19814 3.12708 V1 0.241285 0.141931 3.12708 V2 0.314228 0.184834 3.06667
+ N0 0.175885 0.175885 0.96857 N1 0.215548 0.124615 0.968509 N2 0.856312 0.495088 0.147029
+ txt003
+STRI
+ V0 0.314228 0.184834 3.06667 V1 0.258037 0.258037 3.06667 V2 0.19814 0.19814 3.12708
+ N0 0.856312 0.495088 0.147029 N1 0.699411 0.699411 0.147135 N2 0.175885 0.175885 0.96857
+ txt003
+STRI
+ V0 0.241285 0.141931 3.12708 V1 0.268946 0.0750782 3.12708 V2 0.350254 0.0977709 3.06667
+ N0 0.215548 0.124615 0.968509 N1 0.241077 0.0645609 0.968356 N2 0.955496 0.255913 0.146755
+ txt003
+STRI
+ V0 0.350254 0.0977709 3.06667 V1 0.314228 0.184834 3.06667 V2 0.241285 0.141931 3.12708
+ N0 0.955496 0.255913 0.146755 N1 0.856312 0.495088 0.147029 N2 0.215548 0.124615 0.968509
+ txt003
+STRI
+ V0 0.268946 0.0750782 3.12708 V1 0.278704 0 3.12708 V2 0.362963 0 3.06667
+ N0 0.241077 0.0645609 0.968356 N1 0.249998 -2.80184e-15 0.968246 N2 0.989203 -4.98112e-16 0.146549
+ txt003
+STRI
+ V0 0.362963 0 3.06667 V1 0.350254 0.0977709 3.06667 V2 0.268946 0.0750782 3.12708
+ N0 0.989203 -4.98112e-16 0.146549 N1 0.955496 0.255913 0.146755 N2 0.241077 0.0645609 0.968356
+ txt003
+STRI
+ V0 0 0.362963 3.06667 V1 0.0977709 0.350254 3.06667 V2 0.0875289 0.313617 2.98125
+ N0 -0 0.989203 0.146549 N1 0.255913 0.955496 0.146755 N2 0.201937 0.753688 -0.625441
+ txt003
+STRI
+ V0 0.0875289 0.313617 2.98125 V1 0 0.325 2.98125 V2 0 0.362963 3.06667
+ N0 0.201937 0.753688 -0.625441 N1 0 0.780869 -0.624695 N2 -0 0.989203 0.146549
+ txt003
+STRI
+ V0 0.0977709 0.350254 3.06667 V1 0.184834 0.314228 3.06667 V2 0.165481 0.281352 2.98125
+ N0 0.255913 0.955496 0.146755 N1 0.495088 0.856312 0.147029 N2 0.390178 0.674735 -0.626493
+ txt003
+STRI
+ V0 0.165481 0.281352 2.98125 V1 0.0875289 0.313617 2.98125 V2 0.0977709 0.350254 3.06667
+ N0 0.390178 0.674735 -0.626493 N1 0.201937 0.753688 -0.625441 N2 0.255913 0.955496 0.146755
+ txt003
+STRI
+ V0 0.184834 0.314228 3.06667 V1 0.258037 0.258037 3.06667 V2 0.231031 0.231031 2.98125
+ N0 0.495088 0.856312 0.147029 N1 0.699411 0.699411 0.147135 N2 0.550896 0.550896 -0.626919
+ txt003
+STRI
+ V0 0.231031 0.231031 2.98125 V1 0.165481 0.281352 2.98125 V2 0.184834 0.314228 3.06667
+ N0 0.550896 0.550896 -0.626919 N1 0.390178 0.674735 -0.626493 N2 0.495088 0.856312 0.147029
+ txt003
+STRI
+ V0 0.258037 0.258037 3.06667 V1 0.314228 0.184834 3.06667 V2 0.281352 0.165481 2.98125
+ N0 0.699411 0.699411 0.147135 N1 0.856312 0.495088 0.147029 N2 0.674735 0.390178 -0.626493
+ txt003
+STRI
+ V0 0.281352 0.165481 2.98125 V1 0.231031 0.231031 2.98125 V2 0.258037 0.258037 3.06667
+ N0 0.674735 0.390178 -0.626493 N1 0.550896 0.550896 -0.626919 N2 0.699411 0.699411 0.147135
+ txt003
+STRI
+ V0 0.314228 0.184834 3.06667 V1 0.350254 0.0977709 3.06667 V2 0.313617 0.0875289 2.98125
+ N0 0.856312 0.495088 0.147029 N1 0.955496 0.255913 0.146755 N2 0.753688 0.201937 -0.625441
+ txt003
+STRI
+ V0 0.313617 0.0875289 2.98125 V1 0.281352 0.165481 2.98125 V2 0.314228 0.184834 3.06667
+ N0 0.753688 0.201937 -0.625441 N1 0.674735 0.390178 -0.626493 N2 0.856312 0.495088 0.147029
+ txt003
+STRI
+ V0 0.350254 0.0977709 3.06667 V1 0.362963 0 3.06667 V2 0.325 -1.11022e-16 2.98125
+ N0 0.955496 0.255913 0.146755 N1 0.989203 -4.98112e-16 0.146549 N2 0.780869 1.51803e-15 -0.624695
+ txt003
+STRI
+ V0 0.325 -1.11022e-16 2.98125 V1 0.313617 0.0875289 2.98125 V2 0.350254 0.0977709 3.06667
+ N0 0.780869 1.51803e-15 -0.624695 N1 0.753688 0.201937 -0.625441 N2 0.955496 0.255913 0.146755
+ txt003
+STRI
+ V0 0 0.325 2.98125 V1 0.0875289 0.313617 2.98125 V2 0.0638032 0.228728 2.88333
+ N0 0 0.780869 -0.624695 N1 0.201937 0.753688 -0.625441 N2 0.193465 0.721244 -0.665116
+ txt003
+STRI
+ V0 0.0638032 0.228728 2.88333 V1 0 0.237037 2.88333 V2 0 0.325 2.98125
+ N0 0.193465 0.721244 -0.665116 N1 0 0.747409 -0.664364 N2 0 0.780869 -0.624695
+ txt003
+STRI
+ V0 0.0875289 0.313617 2.98125 V1 0.165481 0.281352 2.98125 V2 0.120647 0.20518 2.88333
+ N0 0.201937 0.753688 -0.625441 N1 0.390178 0.674735 -0.626493 N2 0.373497 0.645526 -0.66618
+ txt003
+STRI
+ V0 0.120647 0.20518 2.88333 V1 0.0638032 0.228728 2.88333 V2 0.0875289 0.313617 2.98125
+ N0 0.373497 0.645526 -0.66618 N1 0.193465 0.721244 -0.665116 N2 0.201937 0.753688 -0.625441
+ txt003
+STRI
+ V0 0.165481 0.281352 2.98125 V1 0.231031 0.231031 2.98125 V2 0.168463 0.168463 2.88333
+ N0 0.390178 0.674735 -0.626493 N1 0.550896 0.550896 -0.626919 N2 0.527081 0.527081 -0.666611
+ txt003
+STRI
+ V0 0.168463 0.168463 2.88333 V1 0.120647 0.20518 2.88333 V2 0.165481 0.281352 2.98125
+ N0 0.527081 0.527081 -0.666611 N1 0.373497 0.645526 -0.66618 N2 0.390178 0.674735 -0.626493
+ txt003
+STRI
+ V0 0.231031 0.231031 2.98125 V1 0.281352 0.165481 2.98125 V2 0.20518 0.120647 2.88333
+ N0 0.550896 0.550896 -0.626919 N1 0.674735 0.390178 -0.626493 N2 0.645526 0.373497 -0.66618
+ txt003
+STRI
+ V0 0.20518 0.120647 2.88333 V1 0.168463 0.168463 2.88333 V2 0.231031 0.231031 2.98125
+ N0 0.645526 0.373497 -0.66618 N1 0.527081 0.527081 -0.666611 N2 0.550896 0.550896 -0.626919
+ txt003
+STRI
+ V0 0.281352 0.165481 2.98125 V1 0.313617 0.0875289 2.98125 V2 0.228728 0.0638032 2.88333
+ N0 0.674735 0.390178 -0.626493 N1 0.753688 0.201937 -0.625441 N2 0.721244 0.193465 -0.665116
+ txt003
+STRI
+ V0 0.228728 0.0638032 2.88333 V1 0.20518 0.120647 2.88333 V2 0.281352 0.165481 2.98125
+ N0 0.721244 0.193465 -0.665116 N1 0.645526 0.373497 -0.66618 N2 0.674735 0.390178 -0.626493
+ txt003
+STRI
+ V0 0.313617 0.0875289 2.98125 V1 0.325 -1.11022e-16 2.98125 V2 0.237037 -1.11022e-16 2.88333
+ N0 0.753688 0.201937 -0.625441 N1 0.780869 1.51803e-15 -0.624695 N2 0.747409 2.42292e-15 -0.664364
+ txt003
+STRI
+ V0 0.237037 -1.11022e-16 2.88333 V1 0.228728 0.0638032 2.88333 V2 0.313617 0.0875289 2.98125
+ N0 0.747409 2.42292e-15 -0.664364 N1 0.721244 0.193465 -0.665116 N2 0.753688 0.201937 -0.625441
+ txt003
+STRI
+ V0 0 0.237037 2.88333 V1 0.0638032 0.228728 2.88333 V2 0.0460445 0.165279 2.78542
+ N0 0 0.747409 -0.664364 N1 0.193465 0.721244 -0.665116 N2 0.246906 0.917897 -0.310647
+ txt003
+STRI
+ V0 0.0460445 0.165279 2.78542 V1 0 0.171296 2.78542 V2 0 0.237037 2.88333
+ N0 0.246906 0.917897 -0.310647 N1 0 0.950775 -0.309882 N2 0 0.747409 -0.664364
+ txt003
+STRI
+ V0 0.0638032 0.228728 2.88333 V1 0.120647 0.20518 2.88333 V2 0.0871056 0.148234 2.78542
+ N0 0.193465 0.721244 -0.665116 N1 0.373497 0.645526 -0.66618 N2 0.476337 0.822132 -0.311772
+ txt003
+STRI
+ V0 0.0871056 0.148234 2.78542 V1 0.0460445 0.165279 2.78542 V2 0.0638032 0.228728 2.88333
+ N0 0.476337 0.822132 -0.311772 N1 0.246906 0.917897 -0.310647 N2 0.193465 0.721244 -0.665116
+ txt003
+STRI
+ V0 0.120647 0.20518 2.88333 V1 0.168463 0.168463 2.88333 V2 0.121672 0.121672 2.78542
+ N0 0.373497 0.645526 -0.66618 N1 0.527081 0.527081 -0.666611 N2 0.671754 0.671754 -0.312241
+ txt003
+STRI
+ V0 0.121672 0.121672 2.78542 V1 0.0871056 0.148234 2.78542 V2 0.120647 0.20518 2.88333
+ N0 0.671754 0.671754 -0.312241 N1 0.476337 0.822132 -0.311772 N2 0.373497 0.645526 -0.66618
+ txt003
+STRI
+ V0 0.168463 0.168463 2.88333 V1 0.20518 0.120647 2.88333 V2 0.148234 0.0871056 2.78542
+ N0 0.527081 0.527081 -0.666611 N1 0.645526 0.373497 -0.66618 N2 0.822132 0.476337 -0.311772
+ txt003
+STRI
+ V0 0.148234 0.0871056 2.78542 V1 0.121672 0.121672 2.78542 V2 0.168463 0.168463 2.88333
+ N0 0.822132 0.476337 -0.311772 N1 0.671754 0.671754 -0.312241 N2 0.527081 0.527081 -0.666611
+ txt003
+STRI
+ V0 0.20518 0.120647 2.88333 V1 0.228728 0.0638032 2.88333 V2 0.165279 0.0460445 2.78542
+ N0 0.645526 0.373497 -0.66618 N1 0.721244 0.193465 -0.665116 N2 0.917897 0.246906 -0.310647
+ txt003
+STRI
+ V0 0.165279 0.0460445 2.78542 V1 0.148234 0.0871056 2.78542 V2 0.20518 0.120647 2.88333
+ N0 0.917897 0.246906 -0.310647 N1 0.822132 0.476337 -0.311772 N2 0.645526 0.373497 -0.66618
+ txt003
+STRI
+ V0 0.228728 0.0638032 2.88333 V1 0.237037 -1.11022e-16 2.88333 V2 0.171296 -6.66134e-16 2.78542
+ N0 0.721244 0.193465 -0.665116 N1 0.747409 2.42292e-15 -0.664364 N2 0.950775 2.16507e-15 -0.309882
+ txt003
+STRI
+ V0 0.171296 -6.66134e-16 2.78542 V1 0.165279 0.0460445 2.78542 V2 0.228728 0.0638032 2.88333
+ N0 0.950775 2.16507e-15 -0.309882 N1 0.917897 0.246906 -0.310647 N2 0.721244 0.193465 -0.665116
+ txt003
+STRI
+ V0 0 0.171296 2.78542 V1 0.0460445 0.165279 2.78542 V2 0.0537037 0.192963 2.7
+ N0 0 0.950775 -0.309882 N1 0.246906 0.917897 -0.310647 N2 0.15602 0.578783 0.800417
+ txt003
+STRI
+ V0 0.0537037 0.192963 2.7 V1 0 0.2 2.7 V2 0 0.171296 2.78542
+ N0 0.15602 0.578783 0.800417 N1 -0 0.6 0.8 N2 0 0.950775 -0.309882
+ txt003
+STRI
+ V0 0.0460445 0.165279 2.78542 V1 0.0871056 0.148234 2.78542 V2 0.10163 0.173037 2.7
+ N0 0.246906 0.917897 -0.310647 N1 0.476337 0.822132 -0.311772 N2 0.300385 0.517905 0.800964
+ txt003
+STRI
+ V0 0.10163 0.173037 2.7 V1 0.0537037 0.192963 2.7 V2 0.0460445 0.165279 2.78542
+ N0 0.300385 0.517905 0.800964 N1 0.15602 0.578783 0.800417 N2 0.246906 0.917897 -0.310647
+ txt003
+STRI
+ V0 0.0871056 0.148234 2.78542 V1 0.121672 0.121672 2.78542 V2 0.142 0.142 2.7
+ N0 0.476337 0.822132 -0.311772 N1 0.671754 0.671754 -0.312241 N2 0.423155 0.423155 0.801174
+ txt003
+STRI
+ V0 0.142 0.142 2.7 V1 0.10163 0.173037 2.7 V2 0.0871056 0.148234 2.78542
+ N0 0.423155 0.423155 0.801174 N1 0.300385 0.517905 0.800964 N2 0.476337 0.822132 -0.311772
+ txt003
+STRI
+ V0 0.121672 0.121672 2.78542 V1 0.148234 0.0871056 2.78542 V2 0.173037 0.10163 2.7
+ N0 0.671754 0.671754 -0.312241 N1 0.822132 0.476337 -0.311772 N2 0.517905 0.300385 0.800964
+ txt003
+STRI
+ V0 0.173037 0.10163 2.7 V1 0.142 0.142 2.7 V2 0.121672 0.121672 2.78542
+ N0 0.517905 0.300385 0.800964 N1 0.423155 0.423155 0.801174 N2 0.671754 0.671754 -0.312241
+ txt003
+STRI
+ V0 0.148234 0.0871056 2.78542 V1 0.165279 0.0460445 2.78542 V2 0.192963 0.0537037 2.7
+ N0 0.822132 0.476337 -0.311772 N1 0.917897 0.246906 -0.310647 N2 0.578783 0.15602 0.800417
+ txt003
+STRI
+ V0 0.192963 0.0537037 2.7 V1 0.173037 0.10163 2.7 V2 0.148234 0.0871056 2.78542
+ N0 0.578783 0.15602 0.800417 N1 0.517905 0.300385 0.800964 N2 0.822132 0.476337 -0.311772
+ txt003
+STRI
+ V0 0.165279 0.0460445 2.78542 V1 0.171296 -6.66134e-16 2.78542 V2 0.2 0 2.7
+ N0 0.917897 0.246906 -0.310647 N1 0.950775 2.16507e-15 -0.309882 N2 0.6 -3.17207e-15 0.8
+ txt003
+STRI
+ V0 0.2 0 2.7 V1 0.192963 0.0537037 2.7 V2 0.165279 0.0460445 2.78542
+ N0 0.6 -3.17207e-15 0.8 N1 0.578783 0.15602 0.800417 N2 0.917897 0.246906 -0.310647
+ txt003
+STRI
+ V0 0.2 0 2.7 V1 0.192963 -0.0537037 2.7 V2 0.338579 -0.0942301 2.63611
+ N0 0.6 0 0.8 N1 0.578783 -0.15602 0.800417 N2 0.258756 -0.0697517 0.963421
+ txt003
+STRI
+ V0 0.338579 -0.0942301 2.63611 V1 0.350926 0 2.63611 V2 0.2 0 2.7
+ N0 0.258756 -0.0697517 0.963421 N1 0.268354 0 0.96332 N2 0.6 0 0.8
+ txt003
+STRI
+ V0 0.192963 -0.0537037 2.7 V1 0.173037 -0.10163 2.7 V2 0.303616 -0.178322 2.63611
+ N0 0.578783 -0.15602 0.800417 N1 0.517905 -0.300385 0.800964 N2 0.231413 -0.134219 0.963552
+ txt003
+STRI
+ V0 0.303616 -0.178322 2.63611 V1 0.338579 -0.0942301 2.63611 V2 0.192963 -0.0537037 2.7
+ N0 0.231413 -0.134219 0.963552 N1 0.258756 -0.0697517 0.963421 N2 0.578783 -0.15602 0.800417
+ txt003
+STRI
+ V0 0.173037 -0.10163 2.7 V1 0.142 -0.142 2.7 V2 0.249157 -0.249157 2.63611
+ N0 0.517905 -0.300385 0.800964 N1 0.423155 -0.423155 0.801174 N2 0.189037 -0.189037 0.963603
+ txt003
+STRI
+ V0 0.249157 -0.249157 2.63611 V1 0.303616 -0.178322 2.63611 V2 0.173037 -0.10163 2.7
+ N0 0.189037 -0.189037 0.963603 N1 0.231413 -0.134219 0.963552 N2 0.517905 -0.300385 0.800964
+ txt003
+STRI
+ V0 0.142 -0.142 2.7 V1 0.10163 -0.173037 2.7 V2 0.178322 -0.303616 2.63611
+ N0 0.423155 -0.423155 0.801174 N1 0.300385 -0.517905 0.800964 N2 0.134219 -0.231413 0.963552
+ txt003
+STRI
+ V0 0.178322 -0.303616 2.63611 V1 0.249157 -0.249157 2.63611 V2 0.142 -0.142 2.7
+ N0 0.134219 -0.231413 0.963552 N1 0.189037 -0.189037 0.963603 N2 0.423155 -0.423155 0.801174
+ txt003
+STRI
+ V0 0.10163 -0.173037 2.7 V1 0.0537037 -0.192963 2.7 V2 0.0942301 -0.338579 2.63611
+ N0 0.300385 -0.517905 0.800964 N1 0.15602 -0.578783 0.800417 N2 0.0697517 -0.258756 0.963421
+ txt003
+STRI
+ V0 0.0942301 -0.338579 2.63611 V1 0.178322 -0.303616 2.63611 V2 0.10163 -0.173037 2.7
+ N0 0.0697517 -0.258756 0.963421 N1 0.134219 -0.231413 0.963552 N2 0.300385 -0.517905 0.800964
+ txt003
+STRI
+ V0 0.0537037 -0.192963 2.7 V1 0 -0.2 2.7 V2 5.55112e-17 -0.350926 2.63611
+ N0 0.15602 -0.578783 0.800417 N1 -9.91271e-17 -0.6 0.8 N2 0 -0.268354 0.96332
+ txt003
+STRI
+ V0 5.55112e-17 -0.350926 2.63611 V1 0.0942301 -0.338579 2.63611 V2 0.0537037 -0.192963 2.7
+ N0 0 -0.268354 0.96332 N1 0.0697517 -0.258756 0.963421 N2 0.15602 -0.578783 0.800417
+ txt003
+STRI
+ V0 0.350926 0 2.63611 V1 0.338579 -0.0942301 2.63611 V2 0.553875 -0.15415 2.58889
+ N0 0.268354 0 0.96332 N1 0.258756 -0.0697517 0.963421 N2 0.162011 -0.0436726 0.985822
+ txt003
+STRI
+ V0 0.553875 -0.15415 2.58889 V1 0.574074 0 2.58889 V2 0.350926 0 2.63611
+ N0 0.162011 -0.0436726 0.985822 N1 0.168031 0 0.985782 N2 0.268354 0 0.96332
+ txt003
+STRI
+ V0 0.338579 -0.0942301 2.63611 V1 0.303616 -0.178322 2.63611 V2 0.49668 -0.291715 2.58889
+ N0 0.258756 -0.0697517 0.963421 N1 0.231413 -0.134219 0.963552 N2 0.144879 -0.0840299 0.985875
+ txt003
+STRI
+ V0 0.49668 -0.291715 2.58889 V1 0.553875 -0.15415 2.58889 V2 0.338579 -0.0942301 2.63611
+ N0 0.144879 -0.0840299 0.985875 N1 0.162011 -0.0436726 0.985822 N2 0.258756 -0.0697517 0.963421
+ txt003
+STRI
+ V0 0.303616 -0.178322 2.63611 V1 0.249157 -0.249157 2.63611 V2 0.407593 -0.407593 2.58889
+ N0 0.231413 -0.134219 0.963552 N1 0.189037 -0.189037 0.963603 N2 0.118345 -0.118345 0.985895
+ txt003
+STRI
+ V0 0.407593 -0.407593 2.58889 V1 0.49668 -0.291715 2.58889 V2 0.303616 -0.178322 2.63611
+ N0 0.118345 -0.118345 0.985895 N1 0.144879 -0.0840299 0.985875 N2 0.231413 -0.134219 0.963552
+ txt003
+STRI
+ V0 0.249157 -0.249157 2.63611 V1 0.178322 -0.303616 2.63611 V2 0.291715 -0.49668 2.58889
+ N0 0.189037 -0.189037 0.963603 N1 0.134219 -0.231413 0.963552 N2 0.0840299 -0.144879 0.985875
+ txt003
+STRI
+ V0 0.291715 -0.49668 2.58889 V1 0.407593 -0.407593 2.58889 V2 0.249157 -0.249157 2.63611
+ N0 0.0840299 -0.144879 0.985875 N1 0.118345 -0.118345 0.985895 N2 0.189037 -0.189037 0.963603
+ txt003
+STRI
+ V0 0.178322 -0.303616 2.63611 V1 0.0942301 -0.338579 2.63611 V2 0.15415 -0.553875 2.58889
+ N0 0.134219 -0.231413 0.963552 N1 0.0697517 -0.258756 0.963421 N2 0.0436726 -0.162011 0.985822
+ txt003
+STRI
+ V0 0.15415 -0.553875 2.58889 V1 0.291715 -0.49668 2.58889 V2 0.178322 -0.303616 2.63611
+ N0 0.0436726 -0.162011 0.985822 N1 0.0840299 -0.144879 0.985875 N2 0.134219 -0.231413 0.963552
+ txt003
+STRI
+ V0 0.0942301 -0.338579 2.63611 V1 5.55112e-17 -0.350926 2.63611 V2 2.22045e-16 -0.574074 2.58889
+ N0 0.0697517 -0.258756 0.963421 N1 0 -0.268354 0.96332 N2 -1.93429e-17 -0.168031 0.985782
+ txt003
+STRI
+ V0 2.22045e-16 -0.574074 2.58889 V1 0.15415 -0.553875 2.58889 V2 0.0942301 -0.338579 2.63611
+ N0 -1.93429e-17 -0.168031 0.985782 N1 0.0436726 -0.162011 0.985822 N2 0.0697517 -0.258756 0.963421
+ txt003
+STRI
+ V0 0.574074 0 2.58889 V1 0.553875 -0.15415 2.58889 V2 0.795972 -0.221528 2.55
+ N0 0.168031 0 0.985782 N1 0.162011 -0.0436726 0.985822 N2 0.143025 -0.0385545 0.988968
+ txt003
+STRI
+ V0 0.795972 -0.221528 2.55 V1 0.825 0 2.55 V2 0.574074 0 2.58889
+ N0 0.143025 -0.0385545 0.988968 N1 0.14834 0 0.988936 N2 0.168031 0 0.985782
+ txt003
+STRI
+ V0 0.553875 -0.15415 2.58889 V1 0.49668 -0.291715 2.58889 V2 0.713778 -0.419222 2.55
+ N0 0.162011 -0.0436726 0.985822 N1 0.144879 -0.0840299 0.985875 N2 0.127899 -0.0741814 0.989009
+ txt003
+STRI
+ V0 0.713778 -0.419222 2.55 V1 0.795972 -0.221528 2.55 V2 0.553875 -0.15415 2.58889
+ N0 0.127899 -0.0741814 0.989009 N1 0.143025 -0.0385545 0.988968 N2 0.162011 -0.0436726 0.985822
+ txt003
+STRI
+ V0 0.49668 -0.291715 2.58889 V1 0.407593 -0.407593 2.58889 V2 0.58575 -0.58575 2.55
+ N0 0.144879 -0.0840299 0.985875 N1 0.118345 -0.118345 0.985895 N2 0.104474 -0.104474 0.989025
+ txt003
+STRI
+ V0 0.58575 -0.58575 2.55 V1 0.713778 -0.419222 2.55 V2 0.49668 -0.291715 2.58889
+ N0 0.104474 -0.104474 0.989025 N1 0.127899 -0.0741814 0.989009 N2 0.144879 -0.0840299 0.985875
+ txt003
+STRI
+ V0 0.407593 -0.407593 2.58889 V1 0.291715 -0.49668 2.58889 V2 0.419222 -0.713778 2.55
+ N0 0.118345 -0.118345 0.985895 N1 0.0840299 -0.144879 0.985875 N2 0.0741814 -0.127899 0.989009
+ txt003
+STRI
+ V0 0.419222 -0.713778 2.55 V1 0.58575 -0.58575 2.55 V2 0.407593 -0.407593 2.58889
+ N0 0.0741814 -0.127899 0.989009 N1 0.104474 -0.104474 0.989025 N2 0.118345 -0.118345 0.985895
+ txt003
+STRI
+ V0 0.291715 -0.49668 2.58889 V1 0.15415 -0.553875 2.58889 V2 0.221528 -0.795972 2.55
+ N0 0.0840299 -0.144879 0.985875 N1 0.0436726 -0.162011 0.985822 N2 0.0385545 -0.143025 0.988968
+ txt003
+STRI
+ V0 0.221528 -0.795972 2.55 V1 0.419222 -0.713778 2.55 V2 0.291715 -0.49668 2.58889
+ N0 0.0385545 -0.143025 0.988968 N1 0.0741814 -0.127899 0.989009 N2 0.0840299 -0.144879 0.985875
+ txt003
+STRI
+ V0 0.15415 -0.553875 2.58889 V1 2.22045e-16 -0.574074 2.58889 V2 1.11022e-16 -0.825 2.55
+ N0 0.0436726 -0.162011 0.985822 N1 -1.93429e-17 -0.168031 0.985782 N2 -2.37649e-17 -0.14834 0.988936
+ txt003
+STRI
+ V0 1.11022e-16 -0.825 2.55 V1 0.221528 -0.795972 2.55 V2 0.15415 -0.553875 2.58889
+ N0 -2.37649e-17 -0.14834 0.988936 N1 0.0385545 -0.143025 0.988968 N2 0.0436726 -0.162011 0.985822
+ txt003
+STRI
+ V0 0.825 0 2.55 V1 0.795972 -0.221528 2.55 V2 1.02199 -0.284431 2.51111
+ N0 0.14834 0 0.988936 N1 0.143025 -0.0385545 0.988968 N2 0.186699 -0.0503275 0.981127
+ txt003
+STRI
+ V0 1.02199 -0.284431 2.51111 V1 1.05926 0 2.51111 V2 0.825 0 2.55
+ N0 0.186699 -0.0503275 0.981127 N1 0.193633 0 0.981074 N2 0.14834 0 0.988936
+ txt003
+STRI
+ V0 0.795972 -0.221528 2.55 V1 0.713778 -0.419222 2.55 V2 0.916455 -0.538261 2.51111
+ N0 0.143025 -0.0385545 0.988968 N1 0.127899 -0.0741814 0.989009 N2 0.166959 -0.0968361 0.981197
+ txt003
+STRI
+ V0 0.916455 -0.538261 2.51111 V1 1.02199 -0.284431 2.51111 V2 0.795972 -0.221528 2.55
+ N0 0.166959 -0.0968361 0.981197 N1 0.186699 -0.0503275 0.981127 N2 0.143025 -0.0385545 0.988968
+ txt003
+STRI
+ V0 0.713778 -0.419222 2.55 V1 0.58575 -0.58575 2.55 V2 0.752074 -0.752074 2.51111
+ N0 0.127899 -0.0741814 0.989009 N1 0.104474 -0.104474 0.989025 N2 0.136382 -0.136382 0.981224
+ txt003
+STRI
+ V0 0.752074 -0.752074 2.51111 V1 0.916455 -0.538261 2.51111 V2 0.713778 -0.419222 2.55
+ N0 0.136382 -0.136382 0.981224 N1 0.166959 -0.0968361 0.981197 N2 0.127899 -0.0741814 0.989009
+ txt003
+STRI
+ V0 0.58575 -0.58575 2.55 V1 0.419222 -0.713778 2.55 V2 0.538261 -0.916455 2.51111
+ N0 0.104474 -0.104474 0.989025 N1 0.0741814 -0.127899 0.989009 N2 0.0968361 -0.166959 0.981197
+ txt003
+STRI
+ V0 0.538261 -0.916455 2.51111 V1 0.752074 -0.752074 2.51111 V2 0.58575 -0.58575 2.55
+ N0 0.0968361 -0.166959 0.981197 N1 0.136382 -0.136382 0.981224 N2 0.104474 -0.104474 0.989025
+ txt003
+STRI
+ V0 0.419222 -0.713778 2.55 V1 0.221528 -0.795972 2.55 V2 0.284431 -1.02199 2.51111
+ N0 0.0741814 -0.127899 0.989009 N1 0.0385545 -0.143025 0.988968 N2 0.0503275 -0.186699 0.981127
+ txt003
+STRI
+ V0 0.284431 -1.02199 2.51111 V1 0.538261 -0.916455 2.51111 V2 0.419222 -0.713778 2.55
+ N0 0.0503275 -0.186699 0.981127 N1 0.0968361 -0.166959 0.981197 N2 0.0741814 -0.127899 0.989009
+ txt003
+STRI
+ V0 0.221528 -0.795972 2.55 V1 1.11022e-16 -0.825 2.55 V2 4.44089e-16 -1.05926 2.51111
+ N0 0.0385545 -0.143025 0.988968 N1 -2.37649e-17 -0.14834 0.988936 N2 -7.24819e-17 -0.193633 0.981074
+ txt003
+STRI
+ V0 4.44089e-16 -1.05926 2.51111 V1 0.284431 -1.02199 2.51111 V2 0.221528 -0.795972 2.55
+ N0 -7.24819e-17 -0.193633 0.981074 N1 0.0503275 -0.186699 0.981127 N2 0.0385545 -0.143025 0.988968
+ txt003
+STRI
+ V0 1.05926 0 2.51111 V1 1.02199 -0.284431 2.51111 V2 1.18904 -0.330924 2.46389
+ N0 0.193633 0 0.981074 N1 0.186699 -0.0503275 0.981127 N2 0.376378 -0.101459 0.920894
+ txt003
+STRI
+ V0 1.18904 -0.330924 2.46389 V1 1.23241 0 2.46389 V2 1.05926 0 2.51111
+ N0 0.376378 -0.101459 0.920894 N1 0.390293 0 0.920691 N2 0.193633 0 0.981074
+ txt003
+STRI
+ V0 1.02199 -0.284431 2.51111 V1 0.916455 -0.538261 2.51111 V2 1.06626 -0.626246 2.46389
+ N0 0.186699 -0.0503275 0.981127 N1 0.166959 -0.0968361 0.981197 N2 0.336657 -0.195261 0.92116
+ txt003
+STRI
+ V0 1.06626 -0.626246 2.46389 V1 1.18904 -0.330924 2.46389 V2 1.02199 -0.284431 2.51111
+ N0 0.336657 -0.195261 0.92116 N1 0.376378 -0.101459 0.920894 N2 0.186699 -0.0503275 0.981127
+ txt003
+STRI
+ V0 0.916455 -0.538261 2.51111 V1 0.752074 -0.752074 2.51111 V2 0.875009 -0.875009 2.46389
+ N0 0.166959 -0.0968361 0.981197 N1 0.136382 -0.136382 0.981224 N2 0.275025 -0.275025 0.921262
+ txt003
+STRI
+ V0 0.875009 -0.875009 2.46389 V1 1.06626 -0.626246 2.46389 V2 0.916455 -0.538261 2.51111
+ N0 0.275025 -0.275025 0.921262 N1 0.336657 -0.195261 0.92116 N2 0.166959 -0.0968361 0.981197
+ txt003
+STRI
+ V0 0.752074 -0.752074 2.51111 V1 0.538261 -0.916455 2.51111 V2 0.626246 -1.06626 2.46389
+ N0 0.136382 -0.136382 0.981224 N1 0.0968361 -0.166959 0.981197 N2 0.195261 -0.336657 0.92116
+ txt003
+STRI
+ V0 0.626246 -1.06626 2.46389 V1 0.875009 -0.875009 2.46389 V2 0.752074 -0.752074 2.51111
+ N0 0.195261 -0.336657 0.92116 N1 0.275025 -0.275025 0.921262 N2 0.136382 -0.136382 0.981224
+ txt003
+STRI
+ V0 0.538261 -0.916455 2.51111 V1 0.284431 -1.02199 2.51111 V2 0.330924 -1.18904 2.46389
+ N0 0.0968361 -0.166959 0.981197 N1 0.0503275 -0.186699 0.981127 N2 0.101459 -0.376378 0.920894
+ txt003
+STRI
+ V0 0.330924 -1.18904 2.46389 V1 0.626246 -1.06626 2.46389 V2 0.538261 -0.916455 2.51111
+ N0 0.101459 -0.376378 0.920894 N1 0.195261 -0.336657 0.92116 N2 0.0968361 -0.166959 0.981197
+ txt003
+STRI
+ V0 0.284431 -1.02199 2.51111 V1 4.44089e-16 -1.05926 2.51111 V2 4.44089e-16 -1.23241 2.46389
+ N0 0.0503275 -0.186699 0.981127 N1 -7.24819e-17 -0.193633 0.981074 N2 -8.37138e-17 -0.390293 0.920691
+ txt003
+STRI
+ V0 4.44089e-16 -1.23241 2.46389 V1 0.330924 -1.18904 2.46389 V2 0.284431 -1.02199 2.51111
+ N0 -8.37138e-17 -0.390293 0.920691 N1 0.101459 -0.376378 0.920894 N2 0.0503275 -0.186699 0.981127
+ txt003
+STRI
+ V0 1.23241 0 2.46389 V1 1.18904 -0.330924 2.46389 V2 1.25426 -0.349074 2.4
+ N0 0.390293 0 0.920691 N1 0.376378 -0.101459 0.920894 N2 0.965535 -0.260275 -1.02004e-15
+ txt003
+STRI
+ V0 1.25426 -0.349074 2.4 V1 1.3 0 2.4 V2 1.23241 0 2.46389
+ N0 0.965535 -0.260275 -1.02004e-15 N1 1 0 -9.86865e-16 N2 0.390293 0 0.920691
+ txt003
+STRI
+ V0 1.18904 -0.330924 2.46389 V1 1.06626 -0.626246 2.46389 V2 1.12474 -0.660593 2.4
+ N0 0.376378 -0.101459 0.920894 N1 0.336657 -0.195261 0.92116 N2 0.865031 -0.501718 -9.69705e-16
+ txt003
+STRI
+ V0 1.12474 -0.660593 2.4 V1 1.25426 -0.349074 2.4 V2 1.18904 -0.330924 2.46389
+ N0 0.865031 -0.501718 -9.69705e-16 N1 0.965535 -0.260275 -1.02004e-15 N2 0.376378 -0.101459 0.920894
+ txt003
+STRI
+ V0 1.06626 -0.626246 2.46389 V1 0.875009 -0.875009 2.46389 V2 0.923 -0.923 2.4
+ N0 0.336657 -0.195261 0.92116 N1 0.275025 -0.275025 0.921262 N2 0.707107 -0.707107 -7.41433e-16
+ txt003
+STRI
+ V0 0.923 -0.923 2.4 V1 1.12474 -0.660593 2.4 V2 1.06626 -0.626246 2.46389
+ N0 0.707107 -0.707107 -7.41433e-16 N1 0.865031 -0.501718 -9.69705e-16 N2 0.336657 -0.195261 0.92116
+ txt003
+STRI
+ V0 0.875009 -0.875009 2.46389 V1 0.626246 -1.06626 2.46389 V2 0.660593 -1.12474 2.4
+ N0 0.275025 -0.275025 0.921262 N1 0.195261 -0.336657 0.92116 N2 0.501718 -0.865031 -4.67305e-16
+ txt003
+STRI
+ V0 0.660593 -1.12474 2.4 V1 0.923 -0.923 2.4 V2 0.875009 -0.875009 2.46389
+ N0 0.501718 -0.865031 -4.67305e-16 N1 0.707107 -0.707107 -7.41433e-16 N2 0.275025 -0.275025 0.921262
+ txt003
+STRI
+ V0 0.626246 -1.06626 2.46389 V1 0.330924 -1.18904 2.46389 V2 0.349074 -1.25426 2.4
+ N0 0.195261 -0.336657 0.92116 N1 0.101459 -0.376378 0.920894 N2 0.260275 -0.965535 -5.24893e-16
+ txt003
+STRI
+ V0 0.349074 -1.25426 2.4 V1 0.660593 -1.12474 2.4 V2 0.626246 -1.06626 2.46389
+ N0 0.260275 -0.965535 -5.24893e-16 N1 0.501718 -0.865031 -4.67305e-16 N2 0.195261 -0.336657 0.92116
+ txt003
+STRI
+ V0 0.330924 -1.18904 2.46389 V1 4.44089e-16 -1.23241 2.46389 V2 6.66134e-16 -1.3 2.4
+ N0 0.101459 -0.376378 0.920894 N1 -8.37138e-17 -0.390293 0.920691 N2 -4.06675e-16 -1 -1.4803e-15
+ txt003
+STRI
+ V0 6.66134e-16 -1.3 2.4 V1 0.349074 -1.25426 2.4 V2 0.330924 -1.18904 2.46389
+ N0 -4.06675e-16 -1 -1.4803e-15 N1 0.260275 -0.965535 -5.24893e-16 N2 0.101459 -0.376378 0.920894
+ txt003
+STRI
+ V0 0 -0.2 2.7 V1 -0.0537037 -0.192963 2.7 V2 -0.0942301 -0.338579 2.63611
+ N0 0 -0.6 0.8 N1 -0.15602 -0.578783 0.800417 N2 -0.0697517 -0.258756 0.963421
+ txt003
+STRI
+ V0 -0.0942301 -0.338579 2.63611 V1 0 -0.350926 2.63611 V2 0 -0.2 2.7
+ N0 -0.0697517 -0.258756 0.963421 N1 0 -0.268354 0.96332 N2 0 -0.6 0.8
+ txt003
+STRI
+ V0 -0.0537037 -0.192963 2.7 V1 -0.10163 -0.173037 2.7 V2 -0.178322 -0.303616 2.63611
+ N0 -0.15602 -0.578783 0.800417 N1 -0.300385 -0.517905 0.800964 N2 -0.134219 -0.231413 0.963552
+ txt003
+STRI
+ V0 -0.178322 -0.303616 2.63611 V1 -0.0942301 -0.338579 2.63611 V2 -0.0537037 -0.192963 2.7
+ N0 -0.134219 -0.231413 0.963552 N1 -0.0697517 -0.258756 0.963421 N2 -0.15602 -0.578783 0.800417
+ txt003
+STRI
+ V0 -0.10163 -0.173037 2.7 V1 -0.142 -0.142 2.7 V2 -0.249157 -0.249157 2.63611
+ N0 -0.300385 -0.517905 0.800964 N1 -0.423155 -0.423155 0.801174 N2 -0.189037 -0.189037 0.963603
+ txt003
+STRI
+ V0 -0.249157 -0.249157 2.63611 V1 -0.178322 -0.303616 2.63611 V2 -0.10163 -0.173037 2.7
+ N0 -0.189037 -0.189037 0.963603 N1 -0.134219 -0.231413 0.963552 N2 -0.300385 -0.517905 0.800964
+ txt003
+STRI
+ V0 -0.142 -0.142 2.7 V1 -0.173037 -0.10163 2.7 V2 -0.303616 -0.178322 2.63611
+ N0 -0.423155 -0.423155 0.801174 N1 -0.517905 -0.300385 0.800964 N2 -0.231413 -0.134219 0.963552
+ txt003
+STRI
+ V0 -0.303616 -0.178322 2.63611 V1 -0.249157 -0.249157 2.63611 V2 -0.142 -0.142 2.7
+ N0 -0.231413 -0.134219 0.963552 N1 -0.189037 -0.189037 0.963603 N2 -0.423155 -0.423155 0.801174
+ txt003
+STRI
+ V0 -0.173037 -0.10163 2.7 V1 -0.192963 -0.0537037 2.7 V2 -0.338579 -0.0942301 2.63611
+ N0 -0.517905 -0.300385 0.800964 N1 -0.578783 -0.15602 0.800417 N2 -0.258756 -0.0697517 0.963421
+ txt003
+STRI
+ V0 -0.338579 -0.0942301 2.63611 V1 -0.303616 -0.178322 2.63611 V2 -0.173037 -0.10163 2.7
+ N0 -0.258756 -0.0697517 0.963421 N1 -0.231413 -0.134219 0.963552 N2 -0.517905 -0.300385 0.800964
+ txt003
+STRI
+ V0 -0.192963 -0.0537037 2.7 V1 -0.2 0 2.7 V2 -0.350926 -5.55112e-17 2.63611
+ N0 -0.578783 -0.15602 0.800417 N1 -0.6 9.91271e-17 0.8 N2 -0.268354 0 0.96332
+ txt003
+STRI
+ V0 -0.350926 -5.55112e-17 2.63611 V1 -0.338579 -0.0942301 2.63611 V2 -0.192963 -0.0537037 2.7
+ N0 -0.268354 0 0.96332 N1 -0.258756 -0.0697517 0.963421 N2 -0.578783 -0.15602 0.800417
+ txt003
+STRI
+ V0 0 -0.350926 2.63611 V1 -0.0942301 -0.338579 2.63611 V2 -0.15415 -0.553875 2.58889
+ N0 0 -0.268354 0.96332 N1 -0.0697517 -0.258756 0.963421 N2 -0.0436726 -0.162011 0.985822
+ txt003
+STRI
+ V0 -0.15415 -0.553875 2.58889 V1 0 -0.574074 2.58889 V2 0 -0.350926 2.63611
+ N0 -0.0436726 -0.162011 0.985822 N1 0 -0.168031 0.985782 N2 0 -0.268354 0.96332
+ txt003
+STRI
+ V0 -0.0942301 -0.338579 2.63611 V1 -0.178322 -0.303616 2.63611 V2 -0.291715 -0.49668 2.58889
+ N0 -0.0697517 -0.258756 0.963421 N1 -0.134219 -0.231413 0.963552 N2 -0.0840299 -0.144879 0.985875
+ txt003
+STRI
+ V0 -0.291715 -0.49668 2.58889 V1 -0.15415 -0.553875 2.58889 V2 -0.0942301 -0.338579 2.63611
+ N0 -0.0840299 -0.144879 0.985875 N1 -0.0436726 -0.162011 0.985822 N2 -0.0697517 -0.258756 0.963421
+ txt003
+STRI
+ V0 -0.178322 -0.303616 2.63611 V1 -0.249157 -0.249157 2.63611 V2 -0.407593 -0.407593 2.58889
+ N0 -0.134219 -0.231413 0.963552 N1 -0.189037 -0.189037 0.963603 N2 -0.118345 -0.118345 0.985895
+ txt003
+STRI
+ V0 -0.407593 -0.407593 2.58889 V1 -0.291715 -0.49668 2.58889 V2 -0.178322 -0.303616 2.63611
+ N0 -0.118345 -0.118345 0.985895 N1 -0.0840299 -0.144879 0.985875 N2 -0.134219 -0.231413 0.963552
+ txt003
+STRI
+ V0 -0.249157 -0.249157 2.63611 V1 -0.303616 -0.178322 2.63611 V2 -0.49668 -0.291715 2.58889
+ N0 -0.189037 -0.189037 0.963603 N1 -0.231413 -0.134219 0.963552 N2 -0.144879 -0.0840299 0.985875
+ txt003
+STRI
+ V0 -0.49668 -0.291715 2.58889 V1 -0.407593 -0.407593 2.58889 V2 -0.249157 -0.249157 2.63611
+ N0 -0.144879 -0.0840299 0.985875 N1 -0.118345 -0.118345 0.985895 N2 -0.189037 -0.189037 0.963603
+ txt003
+STRI
+ V0 -0.303616 -0.178322 2.63611 V1 -0.338579 -0.0942301 2.63611 V2 -0.553875 -0.15415 2.58889
+ N0 -0.231413 -0.134219 0.963552 N1 -0.258756 -0.0697517 0.963421 N2 -0.162011 -0.0436726 0.985822
+ txt003
+STRI
+ V0 -0.553875 -0.15415 2.58889 V1 -0.49668 -0.291715 2.58889 V2 -0.303616 -0.178322 2.63611
+ N0 -0.162011 -0.0436726 0.985822 N1 -0.144879 -0.0840299 0.985875 N2 -0.231413 -0.134219 0.963552
+ txt003
+STRI
+ V0 -0.338579 -0.0942301 2.63611 V1 -0.350926 -5.55112e-17 2.63611 V2 -0.574074 -2.22045e-16 2.58889
+ N0 -0.258756 -0.0697517 0.963421 N1 -0.268354 0 0.96332 N2 -0.168031 1.93429e-17 0.985782
+ txt003
+STRI
+ V0 -0.574074 -2.22045e-16 2.58889 V1 -0.553875 -0.15415 2.58889 V2 -0.338579 -0.0942301 2.63611
+ N0 -0.168031 1.93429e-17 0.985782 N1 -0.162011 -0.0436726 0.985822 N2 -0.258756 -0.0697517 0.963421
+ txt003
+STRI
+ V0 0 -0.574074 2.58889 V1 -0.15415 -0.553875 2.58889 V2 -0.221528 -0.795972 2.55
+ N0 0 -0.168031 0.985782 N1 -0.0436726 -0.162011 0.985822 N2 -0.0385545 -0.143025 0.988968
+ txt003
+STRI
+ V0 -0.221528 -0.795972 2.55 V1 0 -0.825 2.55 V2 0 -0.574074 2.58889
+ N0 -0.0385545 -0.143025 0.988968 N1 0 -0.14834 0.988936 N2 0 -0.168031 0.985782
+ txt003
+STRI
+ V0 -0.15415 -0.553875 2.58889 V1 -0.291715 -0.49668 2.58889 V2 -0.419222 -0.713778 2.55
+ N0 -0.0436726 -0.162011 0.985822 N1 -0.0840299 -0.144879 0.985875 N2 -0.0741814 -0.127899 0.989009
+ txt003
+STRI
+ V0 -0.419222 -0.713778 2.55 V1 -0.221528 -0.795972 2.55 V2 -0.15415 -0.553875 2.58889
+ N0 -0.0741814 -0.127899 0.989009 N1 -0.0385545 -0.143025 0.988968 N2 -0.0436726 -0.162011 0.985822
+ txt003
+STRI
+ V0 -0.291715 -0.49668 2.58889 V1 -0.407593 -0.407593 2.58889 V2 -0.58575 -0.58575 2.55
+ N0 -0.0840299 -0.144879 0.985875 N1 -0.118345 -0.118345 0.985895 N2 -0.104474 -0.104474 0.989025
+ txt003
+STRI
+ V0 -0.58575 -0.58575 2.55 V1 -0.419222 -0.713778 2.55 V2 -0.291715 -0.49668 2.58889
+ N0 -0.104474 -0.104474 0.989025 N1 -0.0741814 -0.127899 0.989009 N2 -0.0840299 -0.144879 0.985875
+ txt003
+STRI
+ V0 -0.407593 -0.407593 2.58889 V1 -0.49668 -0.291715 2.58889 V2 -0.713778 -0.419222 2.55
+ N0 -0.118345 -0.118345 0.985895 N1 -0.144879 -0.0840299 0.985875 N2 -0.127899 -0.0741814 0.989009
+ txt003
+STRI
+ V0 -0.713778 -0.419222 2.55 V1 -0.58575 -0.58575 2.55 V2 -0.407593 -0.407593 2.58889
+ N0 -0.127899 -0.0741814 0.989009 N1 -0.104474 -0.104474 0.989025 N2 -0.118345 -0.118345 0.985895
+ txt003
+STRI
+ V0 -0.49668 -0.291715 2.58889 V1 -0.553875 -0.15415 2.58889 V2 -0.795972 -0.221528 2.55
+ N0 -0.144879 -0.0840299 0.985875 N1 -0.162011 -0.0436726 0.985822 N2 -0.143025 -0.0385545 0.988968
+ txt003
+STRI
+ V0 -0.795972 -0.221528 2.55 V1 -0.713778 -0.419222 2.55 V2 -0.49668 -0.291715 2.58889
+ N0 -0.143025 -0.0385545 0.988968 N1 -0.127899 -0.0741814 0.989009 N2 -0.144879 -0.0840299 0.985875
+ txt003
+STRI
+ V0 -0.553875 -0.15415 2.58889 V1 -0.574074 -2.22045e-16 2.58889 V2 -0.825 -1.11022e-16 2.55
+ N0 -0.162011 -0.0436726 0.985822 N1 -0.168031 1.93429e-17 0.985782 N2 -0.14834 2.37649e-17 0.988936
+ txt003
+STRI
+ V0 -0.825 -1.11022e-16 2.55 V1 -0.795972 -0.221528 2.55 V2 -0.553875 -0.15415 2.58889
+ N0 -0.14834 2.37649e-17 0.988936 N1 -0.143025 -0.0385545 0.988968 N2 -0.162011 -0.0436726 0.985822
+ txt003
+STRI
+ V0 0 -0.825 2.55 V1 -0.221528 -0.795972 2.55 V2 -0.284431 -1.02199 2.51111
+ N0 0 -0.14834 0.988936 N1 -0.0385545 -0.143025 0.988968 N2 -0.0503275 -0.186699 0.981127
+ txt003
+STRI
+ V0 -0.284431 -1.02199 2.51111 V1 0 -1.05926 2.51111 V2 0 -0.825 2.55
+ N0 -0.0503275 -0.186699 0.981127 N1 0 -0.193633 0.981074 N2 0 -0.14834 0.988936
+ txt003
+STRI
+ V0 -0.221528 -0.795972 2.55 V1 -0.419222 -0.713778 2.55 V2 -0.538261 -0.916455 2.51111
+ N0 -0.0385545 -0.143025 0.988968 N1 -0.0741814 -0.127899 0.989009 N2 -0.0968361 -0.166959 0.981197
+ txt003
+STRI
+ V0 -0.538261 -0.916455 2.51111 V1 -0.284431 -1.02199 2.51111 V2 -0.221528 -0.795972 2.55
+ N0 -0.0968361 -0.166959 0.981197 N1 -0.0503275 -0.186699 0.981127 N2 -0.0385545 -0.143025 0.988968
+ txt003
+STRI
+ V0 -0.419222 -0.713778 2.55 V1 -0.58575 -0.58575 2.55 V2 -0.752074 -0.752074 2.51111
+ N0 -0.0741814 -0.127899 0.989009 N1 -0.104474 -0.104474 0.989025 N2 -0.136382 -0.136382 0.981224
+ txt003
+STRI
+ V0 -0.752074 -0.752074 2.51111 V1 -0.538261 -0.916455 2.51111 V2 -0.419222 -0.713778 2.55
+ N0 -0.136382 -0.136382 0.981224 N1 -0.0968361 -0.166959 0.981197 N2 -0.0741814 -0.127899 0.989009
+ txt003
+STRI
+ V0 -0.58575 -0.58575 2.55 V1 -0.713778 -0.419222 2.55 V2 -0.916455 -0.538261 2.51111
+ N0 -0.104474 -0.104474 0.989025 N1 -0.127899 -0.0741814 0.989009 N2 -0.166959 -0.0968361 0.981197
+ txt003
+STRI
+ V0 -0.916455 -0.538261 2.51111 V1 -0.752074 -0.752074 2.51111 V2 -0.58575 -0.58575 2.55
+ N0 -0.166959 -0.0968361 0.981197 N1 -0.136382 -0.136382 0.981224 N2 -0.104474 -0.104474 0.989025
+ txt003
+STRI
+ V0 -0.713778 -0.419222 2.55 V1 -0.795972 -0.221528 2.55 V2 -1.02199 -0.284431 2.51111
+ N0 -0.127899 -0.0741814 0.989009 N1 -0.143025 -0.0385545 0.988968 N2 -0.186699 -0.0503275 0.981127
+ txt003
+STRI
+ V0 -1.02199 -0.284431 2.51111 V1 -0.916455 -0.538261 2.51111 V2 -0.713778 -0.419222 2.55
+ N0 -0.186699 -0.0503275 0.981127 N1 -0.166959 -0.0968361 0.981197 N2 -0.127899 -0.0741814 0.989009
+ txt003
+STRI
+ V0 -0.795972 -0.221528 2.55 V1 -0.825 -1.11022e-16 2.55 V2 -1.05926 -4.44089e-16 2.51111
+ N0 -0.143025 -0.0385545 0.988968 N1 -0.14834 2.37649e-17 0.988936 N2 -0.193633 7.24819e-17 0.981074
+ txt003
+STRI
+ V0 -1.05926 -4.44089e-16 2.51111 V1 -1.02199 -0.284431 2.51111 V2 -0.795972 -0.221528 2.55
+ N0 -0.193633 7.24819e-17 0.981074 N1 -0.186699 -0.0503275 0.981127 N2 -0.143025 -0.0385545 0.988968
+ txt003
+STRI
+ V0 0 -1.05926 2.51111 V1 -0.284431 -1.02199 2.51111 V2 -0.330924 -1.18904 2.46389
+ N0 0 -0.193633 0.981074 N1 -0.0503275 -0.186699 0.981127 N2 -0.101459 -0.376378 0.920894
+ txt003
+STRI
+ V0 -0.330924 -1.18904 2.46389 V1 0 -1.23241 2.46389 V2 0 -1.05926 2.51111
+ N0 -0.101459 -0.376378 0.920894 N1 0 -0.390293 0.920691 N2 0 -0.193633 0.981074
+ txt003
+STRI
+ V0 -0.284431 -1.02199 2.51111 V1 -0.538261 -0.916455 2.51111 V2 -0.626246 -1.06626 2.46389
+ N0 -0.0503275 -0.186699 0.981127 N1 -0.0968361 -0.166959 0.981197 N2 -0.195261 -0.336657 0.92116
+ txt003
+STRI
+ V0 -0.626246 -1.06626 2.46389 V1 -0.330924 -1.18904 2.46389 V2 -0.284431 -1.02199 2.51111
+ N0 -0.195261 -0.336657 0.92116 N1 -0.101459 -0.376378 0.920894 N2 -0.0503275 -0.186699 0.981127
+ txt003
+STRI
+ V0 -0.538261 -0.916455 2.51111 V1 -0.752074 -0.752074 2.51111 V2 -0.875009 -0.875009 2.46389
+ N0 -0.0968361 -0.166959 0.981197 N1 -0.136382 -0.136382 0.981224 N2 -0.275025 -0.275025 0.921262
+ txt003
+STRI
+ V0 -0.875009 -0.875009 2.46389 V1 -0.626246 -1.06626 2.46389 V2 -0.538261 -0.916455 2.51111
+ N0 -0.275025 -0.275025 0.921262 N1 -0.195261 -0.336657 0.92116 N2 -0.0968361 -0.166959 0.981197
+ txt003
+STRI
+ V0 -0.752074 -0.752074 2.51111 V1 -0.916455 -0.538261 2.51111 V2 -1.06626 -0.626246 2.46389
+ N0 -0.136382 -0.136382 0.981224 N1 -0.166959 -0.0968361 0.981197 N2 -0.336657 -0.195261 0.92116
+ txt003
+STRI
+ V0 -1.06626 -0.626246 2.46389 V1 -0.875009 -0.875009 2.46389 V2 -0.752074 -0.752074 2.51111
+ N0 -0.336657 -0.195261 0.92116 N1 -0.275025 -0.275025 0.921262 N2 -0.136382 -0.136382 0.981224
+ txt003
+STRI
+ V0 -0.916455 -0.538261 2.51111 V1 -1.02199 -0.284431 2.51111 V2 -1.18904 -0.330924 2.46389
+ N0 -0.166959 -0.0968361 0.981197 N1 -0.186699 -0.0503275 0.981127 N2 -0.376378 -0.101459 0.920894
+ txt003
+STRI
+ V0 -1.18904 -0.330924 2.46389 V1 -1.06626 -0.626246 2.46389 V2 -0.916455 -0.538261 2.51111
+ N0 -0.376378 -0.101459 0.920894 N1 -0.336657 -0.195261 0.92116 N2 -0.166959 -0.0968361 0.981197
+ txt003
+STRI
+ V0 -1.02199 -0.284431 2.51111 V1 -1.05926 -4.44089e-16 2.51111 V2 -1.23241 -4.44089e-16 2.46389
+ N0 -0.186699 -0.0503275 0.981127 N1 -0.193633 7.24819e-17 0.981074 N2 -0.390293 8.37138e-17 0.920691
+ txt003
+STRI
+ V0 -1.23241 -4.44089e-16 2.46389 V1 -1.18904 -0.330924 2.46389 V2 -1.02199 -0.284431 2.51111
+ N0 -0.390293 8.37138e-17 0.920691 N1 -0.376378 -0.101459 0.920894 N2 -0.186699 -0.0503275 0.981127
+ txt003
+STRI
+ V0 0 -1.23241 2.46389 V1 -0.330924 -1.18904 2.46389 V2 -0.349074 -1.25426 2.4
+ N0 0 -0.390293 0.920691 N1 -0.101459 -0.376378 0.920894 N2 -0.260275 -0.965535 -1.02004e-15
+ txt003
+STRI
+ V0 -0.349074 -1.25426 2.4 V1 0 -1.3 2.4 V2 0 -1.23241 2.46389
+ N0 -0.260275 -0.965535 -1.02004e-15 N1 -0 -1 -9.86865e-16 N2 0 -0.390293 0.920691
+ txt003
+STRI
+ V0 -0.330924 -1.18904 2.46389 V1 -0.626246 -1.06626 2.46389 V2 -0.660593 -1.12474 2.4
+ N0 -0.101459 -0.376378 0.920894 N1 -0.195261 -0.336657 0.92116 N2 -0.501718 -0.865031 -9.69705e-16
+ txt003
+STRI
+ V0 -0.660593 -1.12474 2.4 V1 -0.349074 -1.25426 2.4 V2 -0.330924 -1.18904 2.46389
+ N0 -0.501718 -0.865031 -9.69705e-16 N1 -0.260275 -0.965535 -1.02004e-15 N2 -0.101459 -0.376378 0.920894
+ txt003
+STRI
+ V0 -0.626246 -1.06626 2.46389 V1 -0.875009 -0.875009 2.46389 V2 -0.923 -0.923 2.4
+ N0 -0.195261 -0.336657 0.92116 N1 -0.275025 -0.275025 0.921262 N2 -0.707107 -0.707107 -7.41433e-16
+ txt003
+STRI
+ V0 -0.923 -0.923 2.4 V1 -0.660593 -1.12474 2.4 V2 -0.626246 -1.06626 2.46389
+ N0 -0.707107 -0.707107 -7.41433e-16 N1 -0.501718 -0.865031 -9.69705e-16 N2 -0.195261 -0.336657 0.92116
+ txt003
+STRI
+ V0 -0.875009 -0.875009 2.46389 V1 -1.06626 -0.626246 2.46389 V2 -1.12474 -0.660593 2.4
+ N0 -0.275025 -0.275025 0.921262 N1 -0.336657 -0.195261 0.92116 N2 -0.865031 -0.501718 -4.67305e-16
+ txt003
+STRI
+ V0 -1.12474 -0.660593 2.4 V1 -0.923 -0.923 2.4 V2 -0.875009 -0.875009 2.46389
+ N0 -0.865031 -0.501718 -4.67305e-16 N1 -0.707107 -0.707107 -7.41433e-16 N2 -0.275025 -0.275025 0.921262
+ txt003
+STRI
+ V0 -1.06626 -0.626246 2.46389 V1 -1.18904 -0.330924 2.46389 V2 -1.25426 -0.349074 2.4
+ N0 -0.336657 -0.195261 0.92116 N1 -0.376378 -0.101459 0.920894 N2 -0.965535 -0.260275 -5.24893e-16
+ txt003
+STRI
+ V0 -1.25426 -0.349074 2.4 V1 -1.12474 -0.660593 2.4 V2 -1.06626 -0.626246 2.46389
+ N0 -0.965535 -0.260275 -5.24893e-16 N1 -0.865031 -0.501718 -4.67305e-16 N2 -0.336657 -0.195261 0.92116
+ txt003
+STRI
+ V0 -1.18904 -0.330924 2.46389 V1 -1.23241 -4.44089e-16 2.46389 V2 -1.3 -6.66134e-16 2.4
+ N0 -0.376378 -0.101459 0.920894 N1 -0.390293 8.37138e-17 0.920691 N2 -1 4.06675e-16 -1.4803e-15
+ txt003
+STRI
+ V0 -1.3 -6.66134e-16 2.4 V1 -1.25426 -0.349074 2.4 V2 -1.18904 -0.330924 2.46389
+ N0 -1 4.06675e-16 -1.4803e-15 N1 -0.965535 -0.260275 -5.24893e-16 N2 -0.376378 -0.101459 0.920894
+ txt003
+STRI
+ V0 -0.2 0 2.7 V1 -0.192963 0.0537037 2.7 V2 -0.338579 0.0942301 2.63611
+ N0 -0.6 0 0.8 N1 -0.578783 0.15602 0.800417 N2 -0.258756 0.0697517 0.963421
+ txt003
+STRI
+ V0 -0.338579 0.0942301 2.63611 V1 -0.350926 0 2.63611 V2 -0.2 0 2.7
+ N0 -0.258756 0.0697517 0.963421 N1 -0.268354 0 0.96332 N2 -0.6 0 0.8
+ txt003
+STRI
+ V0 -0.192963 0.0537037 2.7 V1 -0.173037 0.10163 2.7 V2 -0.303616 0.178322 2.63611
+ N0 -0.578783 0.15602 0.800417 N1 -0.517905 0.300385 0.800964 N2 -0.231413 0.134219 0.963552
+ txt003
+STRI
+ V0 -0.303616 0.178322 2.63611 V1 -0.338579 0.0942301 2.63611 V2 -0.192963 0.0537037 2.7
+ N0 -0.231413 0.134219 0.963552 N1 -0.258756 0.0697517 0.963421 N2 -0.578783 0.15602 0.800417
+ txt003
+STRI
+ V0 -0.173037 0.10163 2.7 V1 -0.142 0.142 2.7 V2 -0.249157 0.249157 2.63611
+ N0 -0.517905 0.300385 0.800964 N1 -0.423155 0.423155 0.801174 N2 -0.189037 0.189037 0.963603
+ txt003
+STRI
+ V0 -0.249157 0.249157 2.63611 V1 -0.303616 0.178322 2.63611 V2 -0.173037 0.10163 2.7
+ N0 -0.189037 0.189037 0.963603 N1 -0.231413 0.134219 0.963552 N2 -0.517905 0.300385 0.800964
+ txt003
+STRI
+ V0 -0.142 0.142 2.7 V1 -0.10163 0.173037 2.7 V2 -0.178322 0.303616 2.63611
+ N0 -0.423155 0.423155 0.801174 N1 -0.300385 0.517905 0.800964 N2 -0.134219 0.231413 0.963552
+ txt003
+STRI
+ V0 -0.178322 0.303616 2.63611 V1 -0.249157 0.249157 2.63611 V2 -0.142 0.142 2.7
+ N0 -0.134219 0.231413 0.963552 N1 -0.189037 0.189037 0.963603 N2 -0.423155 0.423155 0.801174
+ txt003
+STRI
+ V0 -0.10163 0.173037 2.7 V1 -0.0537037 0.192963 2.7 V2 -0.0942301 0.338579 2.63611
+ N0 -0.300385 0.517905 0.800964 N1 -0.15602 0.578783 0.800417 N2 -0.0697517 0.258756 0.963421
+ txt003
+STRI
+ V0 -0.0942301 0.338579 2.63611 V1 -0.178322 0.303616 2.63611 V2 -0.10163 0.173037 2.7
+ N0 -0.0697517 0.258756 0.963421 N1 -0.134219 0.231413 0.963552 N2 -0.300385 0.517905 0.800964
+ txt003
+STRI
+ V0 -0.0537037 0.192963 2.7 V1 0 0.2 2.7 V2 -5.55112e-17 0.350926 2.63611
+ N0 -0.15602 0.578783 0.800417 N1 9.91271e-17 0.6 0.8 N2 -0 0.268354 0.96332
+ txt003
+STRI
+ V0 -5.55112e-17 0.350926 2.63611 V1 -0.0942301 0.338579 2.63611 V2 -0.0537037 0.192963 2.7
+ N0 -0 0.268354 0.96332 N1 -0.0697517 0.258756 0.963421 N2 -0.15602 0.578783 0.800417
+ txt003
+STRI
+ V0 -0.350926 0 2.63611 V1 -0.338579 0.0942301 2.63611 V2 -0.553875 0.15415 2.58889
+ N0 -0.268354 0 0.96332 N1 -0.258756 0.0697517 0.963421 N2 -0.162011 0.0436726 0.985822
+ txt003
+STRI
+ V0 -0.553875 0.15415 2.58889 V1 -0.574074 0 2.58889 V2 -0.350926 0 2.63611
+ N0 -0.162011 0.0436726 0.985822 N1 -0.168031 0 0.985782 N2 -0.268354 0 0.96332
+ txt003
+STRI
+ V0 -0.338579 0.0942301 2.63611 V1 -0.303616 0.178322 2.63611 V2 -0.49668 0.291715 2.58889
+ N0 -0.258756 0.0697517 0.963421 N1 -0.231413 0.134219 0.963552 N2 -0.144879 0.0840299 0.985875
+ txt003
+STRI
+ V0 -0.49668 0.291715 2.58889 V1 -0.553875 0.15415 2.58889 V2 -0.338579 0.0942301 2.63611
+ N0 -0.144879 0.0840299 0.985875 N1 -0.162011 0.0436726 0.985822 N2 -0.258756 0.0697517 0.963421
+ txt003
+STRI
+ V0 -0.303616 0.178322 2.63611 V1 -0.249157 0.249157 2.63611 V2 -0.407593 0.407593 2.58889
+ N0 -0.231413 0.134219 0.963552 N1 -0.189037 0.189037 0.963603 N2 -0.118345 0.118345 0.985895
+ txt003
+STRI
+ V0 -0.407593 0.407593 2.58889 V1 -0.49668 0.291715 2.58889 V2 -0.303616 0.178322 2.63611
+ N0 -0.118345 0.118345 0.985895 N1 -0.144879 0.0840299 0.985875 N2 -0.231413 0.134219 0.963552
+ txt003
+STRI
+ V0 -0.249157 0.249157 2.63611 V1 -0.178322 0.303616 2.63611 V2 -0.291715 0.49668 2.58889
+ N0 -0.189037 0.189037 0.963603 N1 -0.134219 0.231413 0.963552 N2 -0.0840299 0.144879 0.985875
+ txt003
+STRI
+ V0 -0.291715 0.49668 2.58889 V1 -0.407593 0.407593 2.58889 V2 -0.249157 0.249157 2.63611
+ N0 -0.0840299 0.144879 0.985875 N1 -0.118345 0.118345 0.985895 N2 -0.189037 0.189037 0.963603
+ txt003
+STRI
+ V0 -0.178322 0.303616 2.63611 V1 -0.0942301 0.338579 2.63611 V2 -0.15415 0.553875 2.58889
+ N0 -0.134219 0.231413 0.963552 N1 -0.0697517 0.258756 0.963421 N2 -0.0436726 0.162011 0.985822
+ txt003
+STRI
+ V0 -0.15415 0.553875 2.58889 V1 -0.291715 0.49668 2.58889 V2 -0.178322 0.303616 2.63611
+ N0 -0.0436726 0.162011 0.985822 N1 -0.0840299 0.144879 0.985875 N2 -0.134219 0.231413 0.963552
+ txt003
+STRI
+ V0 -0.0942301 0.338579 2.63611 V1 -5.55112e-17 0.350926 2.63611 V2 -2.22045e-16 0.574074 2.58889
+ N0 -0.0697517 0.258756 0.963421 N1 -0 0.268354 0.96332 N2 1.93429e-17 0.168031 0.985782
+ txt003
+STRI
+ V0 -2.22045e-16 0.574074 2.58889 V1 -0.15415 0.553875 2.58889 V2 -0.0942301 0.338579 2.63611
+ N0 1.93429e-17 0.168031 0.985782 N1 -0.0436726 0.162011 0.985822 N2 -0.0697517 0.258756 0.963421
+ txt003
+STRI
+ V0 -0.574074 0 2.58889 V1 -0.553875 0.15415 2.58889 V2 -0.795972 0.221528 2.55
+ N0 -0.168031 0 0.985782 N1 -0.162011 0.0436726 0.985822 N2 -0.143025 0.0385545 0.988968
+ txt003
+STRI
+ V0 -0.795972 0.221528 2.55 V1 -0.825 0 2.55 V2 -0.574074 0 2.58889
+ N0 -0.143025 0.0385545 0.988968 N1 -0.14834 0 0.988936 N2 -0.168031 0 0.985782
+ txt003
+STRI
+ V0 -0.553875 0.15415 2.58889 V1 -0.49668 0.291715 2.58889 V2 -0.713778 0.419222 2.55
+ N0 -0.162011 0.0436726 0.985822 N1 -0.144879 0.0840299 0.985875 N2 -0.127899 0.0741814 0.989009
+ txt003
+STRI
+ V0 -0.713778 0.419222 2.55 V1 -0.795972 0.221528 2.55 V2 -0.553875 0.15415 2.58889
+ N0 -0.127899 0.0741814 0.989009 N1 -0.143025 0.0385545 0.988968 N2 -0.162011 0.0436726 0.985822
+ txt003
+STRI
+ V0 -0.49668 0.291715 2.58889 V1 -0.407593 0.407593 2.58889 V2 -0.58575 0.58575 2.55
+ N0 -0.144879 0.0840299 0.985875 N1 -0.118345 0.118345 0.985895 N2 -0.104474 0.104474 0.989025
+ txt003
+STRI
+ V0 -0.58575 0.58575 2.55 V1 -0.713778 0.419222 2.55 V2 -0.49668 0.291715 2.58889
+ N0 -0.104474 0.104474 0.989025 N1 -0.127899 0.0741814 0.989009 N2 -0.144879 0.0840299 0.985875
+ txt003
+STRI
+ V0 -0.407593 0.407593 2.58889 V1 -0.291715 0.49668 2.58889 V2 -0.419222 0.713778 2.55
+ N0 -0.118345 0.118345 0.985895 N1 -0.0840299 0.144879 0.985875 N2 -0.0741814 0.127899 0.989009
+ txt003
+STRI
+ V0 -0.419222 0.713778 2.55 V1 -0.58575 0.58575 2.55 V2 -0.407593 0.407593 2.58889
+ N0 -0.0741814 0.127899 0.989009 N1 -0.104474 0.104474 0.989025 N2 -0.118345 0.118345 0.985895
+ txt003
+STRI
+ V0 -0.291715 0.49668 2.58889 V1 -0.15415 0.553875 2.58889 V2 -0.221528 0.795972 2.55
+ N0 -0.0840299 0.144879 0.985875 N1 -0.0436726 0.162011 0.985822 N2 -0.0385545 0.143025 0.988968
+ txt003
+STRI
+ V0 -0.221528 0.795972 2.55 V1 -0.419222 0.713778 2.55 V2 -0.291715 0.49668 2.58889
+ N0 -0.0385545 0.143025 0.988968 N1 -0.0741814 0.127899 0.989009 N2 -0.0840299 0.144879 0.985875
+ txt003
+STRI
+ V0 -0.15415 0.553875 2.58889 V1 -2.22045e-16 0.574074 2.58889 V2 -1.11022e-16 0.825 2.55
+ N0 -0.0436726 0.162011 0.985822 N1 1.93429e-17 0.168031 0.985782 N2 2.37649e-17 0.14834 0.988936
+ txt003
+STRI
+ V0 -1.11022e-16 0.825 2.55 V1 -0.221528 0.795972 2.55 V2 -0.15415 0.553875 2.58889
+ N0 2.37649e-17 0.14834 0.988936 N1 -0.0385545 0.143025 0.988968 N2 -0.0436726 0.162011 0.985822
+ txt003
+STRI
+ V0 -0.825 0 2.55 V1 -0.795972 0.221528 2.55 V2 -1.02199 0.284431 2.51111
+ N0 -0.14834 0 0.988936 N1 -0.143025 0.0385545 0.988968 N2 -0.186699 0.0503275 0.981127
+ txt003
+STRI
+ V0 -1.02199 0.284431 2.51111 V1 -1.05926 0 2.51111 V2 -0.825 0 2.55
+ N0 -0.186699 0.0503275 0.981127 N1 -0.193633 0 0.981074 N2 -0.14834 0 0.988936
+ txt003
+STRI
+ V0 -0.795972 0.221528 2.55 V1 -0.713778 0.419222 2.55 V2 -0.916455 0.538261 2.51111
+ N0 -0.143025 0.0385545 0.988968 N1 -0.127899 0.0741814 0.989009 N2 -0.166959 0.0968361 0.981197
+ txt003
+STRI
+ V0 -0.916455 0.538261 2.51111 V1 -1.02199 0.284431 2.51111 V2 -0.795972 0.221528 2.55
+ N0 -0.166959 0.0968361 0.981197 N1 -0.186699 0.0503275 0.981127 N2 -0.143025 0.0385545 0.988968
+ txt003
+STRI
+ V0 -0.713778 0.419222 2.55 V1 -0.58575 0.58575 2.55 V2 -0.752074 0.752074 2.51111
+ N0 -0.127899 0.0741814 0.989009 N1 -0.104474 0.104474 0.989025 N2 -0.136382 0.136382 0.981224
+ txt003
+STRI
+ V0 -0.752074 0.752074 2.51111 V1 -0.916455 0.538261 2.51111 V2 -0.713778 0.419222 2.55
+ N0 -0.136382 0.136382 0.981224 N1 -0.166959 0.0968361 0.981197 N2 -0.127899 0.0741814 0.989009
+ txt003
+STRI
+ V0 -0.58575 0.58575 2.55 V1 -0.419222 0.713778 2.55 V2 -0.538261 0.916455 2.51111
+ N0 -0.104474 0.104474 0.989025 N1 -0.0741814 0.127899 0.989009 N2 -0.0968361 0.166959 0.981197
+ txt003
+STRI
+ V0 -0.538261 0.916455 2.51111 V1 -0.752074 0.752074 2.51111 V2 -0.58575 0.58575 2.55
+ N0 -0.0968361 0.166959 0.981197 N1 -0.136382 0.136382 0.981224 N2 -0.104474 0.104474 0.989025
+ txt003
+STRI
+ V0 -0.419222 0.713778 2.55 V1 -0.221528 0.795972 2.55 V2 -0.284431 1.02199 2.51111
+ N0 -0.0741814 0.127899 0.989009 N1 -0.0385545 0.143025 0.988968 N2 -0.0503275 0.186699 0.981127
+ txt003
+STRI
+ V0 -0.284431 1.02199 2.51111 V1 -0.538261 0.916455 2.51111 V2 -0.419222 0.713778 2.55
+ N0 -0.0503275 0.186699 0.981127 N1 -0.0968361 0.166959 0.981197 N2 -0.0741814 0.127899 0.989009
+ txt003
+STRI
+ V0 -0.221528 0.795972 2.55 V1 -1.11022e-16 0.825 2.55 V2 -4.44089e-16 1.05926 2.51111
+ N0 -0.0385545 0.143025 0.988968 N1 2.37649e-17 0.14834 0.988936 N2 7.24819e-17 0.193633 0.981074
+ txt003
+STRI
+ V0 -4.44089e-16 1.05926 2.51111 V1 -0.284431 1.02199 2.51111 V2 -0.221528 0.795972 2.55
+ N0 7.24819e-17 0.193633 0.981074 N1 -0.0503275 0.186699 0.981127 N2 -0.0385545 0.143025 0.988968
+ txt003
+STRI
+ V0 -1.05926 0 2.51111 V1 -1.02199 0.284431 2.51111 V2 -1.18904 0.330924 2.46389
+ N0 -0.193633 0 0.981074 N1 -0.186699 0.0503275 0.981127 N2 -0.376378 0.101459 0.920894
+ txt003
+STRI
+ V0 -1.18904 0.330924 2.46389 V1 -1.23241 0 2.46389 V2 -1.05926 0 2.51111
+ N0 -0.376378 0.101459 0.920894 N1 -0.390293 0 0.920691 N2 -0.193633 0 0.981074
+ txt003
+STRI
+ V0 -1.02199 0.284431 2.51111 V1 -0.916455 0.538261 2.51111 V2 -1.06626 0.626246 2.46389
+ N0 -0.186699 0.0503275 0.981127 N1 -0.166959 0.0968361 0.981197 N2 -0.336657 0.195261 0.92116
+ txt003
+STRI
+ V0 -1.06626 0.626246 2.46389 V1 -1.18904 0.330924 2.46389 V2 -1.02199 0.284431 2.51111
+ N0 -0.336657 0.195261 0.92116 N1 -0.376378 0.101459 0.920894 N2 -0.186699 0.0503275 0.981127
+ txt003
+STRI
+ V0 -0.916455 0.538261 2.51111 V1 -0.752074 0.752074 2.51111 V2 -0.875009 0.875009 2.46389
+ N0 -0.166959 0.0968361 0.981197 N1 -0.136382 0.136382 0.981224 N2 -0.275025 0.275025 0.921262
+ txt003
+STRI
+ V0 -0.875009 0.875009 2.46389 V1 -1.06626 0.626246 2.46389 V2 -0.916455 0.538261 2.51111
+ N0 -0.275025 0.275025 0.921262 N1 -0.336657 0.195261 0.92116 N2 -0.166959 0.0968361 0.981197
+ txt003
+STRI
+ V0 -0.752074 0.752074 2.51111 V1 -0.538261 0.916455 2.51111 V2 -0.626246 1.06626 2.46389
+ N0 -0.136382 0.136382 0.981224 N1 -0.0968361 0.166959 0.981197 N2 -0.195261 0.336657 0.92116
+ txt003
+STRI
+ V0 -0.626246 1.06626 2.46389 V1 -0.875009 0.875009 2.46389 V2 -0.752074 0.752074 2.51111
+ N0 -0.195261 0.336657 0.92116 N1 -0.275025 0.275025 0.921262 N2 -0.136382 0.136382 0.981224
+ txt003
+STRI
+ V0 -0.538261 0.916455 2.51111 V1 -0.284431 1.02199 2.51111 V2 -0.330924 1.18904 2.46389
+ N0 -0.0968361 0.166959 0.981197 N1 -0.0503275 0.186699 0.981127 N2 -0.101459 0.376378 0.920894
+ txt003
+STRI
+ V0 -0.330924 1.18904 2.46389 V1 -0.626246 1.06626 2.46389 V2 -0.538261 0.916455 2.51111
+ N0 -0.101459 0.376378 0.920894 N1 -0.195261 0.336657 0.92116 N2 -0.0968361 0.166959 0.981197
+ txt003
+STRI
+ V0 -0.284431 1.02199 2.51111 V1 -4.44089e-16 1.05926 2.51111 V2 -4.44089e-16 1.23241 2.46389
+ N0 -0.0503275 0.186699 0.981127 N1 7.24819e-17 0.193633 0.981074 N2 8.37138e-17 0.390293 0.920691
+ txt003
+STRI
+ V0 -4.44089e-16 1.23241 2.46389 V1 -0.330924 1.18904 2.46389 V2 -0.284431 1.02199 2.51111
+ N0 8.37138e-17 0.390293 0.920691 N1 -0.101459 0.376378 0.920894 N2 -0.0503275 0.186699 0.981127
+ txt003
+STRI
+ V0 -1.23241 0 2.46389 V1 -1.18904 0.330924 2.46389 V2 -1.25426 0.349074 2.4
+ N0 -0.390293 0 0.920691 N1 -0.376378 0.101459 0.920894 N2 -0.965535 0.260275 -1.02004e-15
+ txt003
+STRI
+ V0 -1.25426 0.349074 2.4 V1 -1.3 0 2.4 V2 -1.23241 0 2.46389
+ N0 -0.965535 0.260275 -1.02004e-15 N1 -1 0 -9.86865e-16 N2 -0.390293 0 0.920691
+ txt003
+STRI
+ V0 -1.18904 0.330924 2.46389 V1 -1.06626 0.626246 2.46389 V2 -1.12474 0.660593 2.4
+ N0 -0.376378 0.101459 0.920894 N1 -0.336657 0.195261 0.92116 N2 -0.865031 0.501718 -9.69705e-16
+ txt003
+STRI
+ V0 -1.12474 0.660593 2.4 V1 -1.25426 0.349074 2.4 V2 -1.18904 0.330924 2.46389
+ N0 -0.865031 0.501718 -9.69705e-16 N1 -0.965535 0.260275 -1.02004e-15 N2 -0.376378 0.101459 0.920894
+ txt003
+STRI
+ V0 -1.06626 0.626246 2.46389 V1 -0.875009 0.875009 2.46389 V2 -0.923 0.923 2.4
+ N0 -0.336657 0.195261 0.92116 N1 -0.275025 0.275025 0.921262 N2 -0.707107 0.707107 -7.41433e-16
+ txt003
+STRI
+ V0 -0.923 0.923 2.4 V1 -1.12474 0.660593 2.4 V2 -1.06626 0.626246 2.46389
+ N0 -0.707107 0.707107 -7.41433e-16 N1 -0.865031 0.501718 -9.69705e-16 N2 -0.336657 0.195261 0.92116
+ txt003
+STRI
+ V0 -0.875009 0.875009 2.46389 V1 -0.626246 1.06626 2.46389 V2 -0.660593 1.12474 2.4
+ N0 -0.275025 0.275025 0.921262 N1 -0.195261 0.336657 0.92116 N2 -0.501718 0.865031 -4.67305e-16
+ txt003
+STRI
+ V0 -0.660593 1.12474 2.4 V1 -0.923 0.923 2.4 V2 -0.875009 0.875009 2.46389
+ N0 -0.501718 0.865031 -4.67305e-16 N1 -0.707107 0.707107 -7.41433e-16 N2 -0.275025 0.275025 0.921262
+ txt003
+STRI
+ V0 -0.626246 1.06626 2.46389 V1 -0.330924 1.18904 2.46389 V2 -0.349074 1.25426 2.4
+ N0 -0.195261 0.336657 0.92116 N1 -0.101459 0.376378 0.920894 N2 -0.260275 0.965535 -5.24893e-16
+ txt003
+STRI
+ V0 -0.349074 1.25426 2.4 V1 -0.660593 1.12474 2.4 V2 -0.626246 1.06626 2.46389
+ N0 -0.260275 0.965535 -5.24893e-16 N1 -0.501718 0.865031 -4.67305e-16 N2 -0.195261 0.336657 0.92116
+ txt003
+STRI
+ V0 -0.330924 1.18904 2.46389 V1 -4.44089e-16 1.23241 2.46389 V2 -6.66134e-16 1.3 2.4
+ N0 -0.101459 0.376378 0.920894 N1 8.37138e-17 0.390293 0.920691 N2 4.06675e-16 1 -1.4803e-15
+ txt003
+STRI
+ V0 -6.66134e-16 1.3 2.4 V1 -0.349074 1.25426 2.4 V2 -0.330924 1.18904 2.46389
+ N0 4.06675e-16 1 -1.4803e-15 N1 -0.260275 0.965535 -5.24893e-16 N2 -0.101459 0.376378 0.920894
+ txt003
+STRI
+ V0 0 0.2 2.7 V1 0.0537037 0.192963 2.7 V2 0.0942301 0.338579 2.63611
+ N0 -0 0.6 0.8 N1 0.15602 0.578783 0.800417 N2 0.0697517 0.258756 0.963421
+ txt003
+STRI
+ V0 0.0942301 0.338579 2.63611 V1 0 0.350926 2.63611 V2 0 0.2 2.7
+ N0 0.0697517 0.258756 0.963421 N1 -0 0.268354 0.96332 N2 -0 0.6 0.8
+ txt003
+STRI
+ V0 0.0537037 0.192963 2.7 V1 0.10163 0.173037 2.7 V2 0.178322 0.303616 2.63611
+ N0 0.15602 0.578783 0.800417 N1 0.300385 0.517905 0.800964 N2 0.134219 0.231413 0.963552
+ txt003
+STRI
+ V0 0.178322 0.303616 2.63611 V1 0.0942301 0.338579 2.63611 V2 0.0537037 0.192963 2.7
+ N0 0.134219 0.231413 0.963552 N1 0.0697517 0.258756 0.963421 N2 0.15602 0.578783 0.800417
+ txt003
+STRI
+ V0 0.10163 0.173037 2.7 V1 0.142 0.142 2.7 V2 0.249157 0.249157 2.63611
+ N0 0.300385 0.517905 0.800964 N1 0.423155 0.423155 0.801174 N2 0.189037 0.189037 0.963603
+ txt003
+STRI
+ V0 0.249157 0.249157 2.63611 V1 0.178322 0.303616 2.63611 V2 0.10163 0.173037 2.7
+ N0 0.189037 0.189037 0.963603 N1 0.134219 0.231413 0.963552 N2 0.300385 0.517905 0.800964
+ txt003
+STRI
+ V0 0.142 0.142 2.7 V1 0.173037 0.10163 2.7 V2 0.303616 0.178322 2.63611
+ N0 0.423155 0.423155 0.801174 N1 0.517905 0.300385 0.800964 N2 0.231413 0.134219 0.963552
+ txt003
+STRI
+ V0 0.303616 0.178322 2.63611 V1 0.249157 0.249157 2.63611 V2 0.142 0.142 2.7
+ N0 0.231413 0.134219 0.963552 N1 0.189037 0.189037 0.963603 N2 0.423155 0.423155 0.801174
+ txt003
+STRI
+ V0 0.173037 0.10163 2.7 V1 0.192963 0.0537037 2.7 V2 0.338579 0.0942301 2.63611
+ N0 0.517905 0.300385 0.800964 N1 0.578783 0.15602 0.800417 N2 0.258756 0.0697517 0.963421
+ txt003
+STRI
+ V0 0.338579 0.0942301 2.63611 V1 0.303616 0.178322 2.63611 V2 0.173037 0.10163 2.7
+ N0 0.258756 0.0697517 0.963421 N1 0.231413 0.134219 0.963552 N2 0.517905 0.300385 0.800964
+ txt003
+STRI
+ V0 0.192963 0.0537037 2.7 V1 0.2 0 2.7 V2 0.350926 5.55112e-17 2.63611
+ N0 0.578783 0.15602 0.800417 N1 0.6 -9.91271e-17 0.8 N2 0.268354 0 0.96332
+ txt003
+STRI
+ V0 0.350926 5.55112e-17 2.63611 V1 0.338579 0.0942301 2.63611 V2 0.192963 0.0537037 2.7
+ N0 0.268354 0 0.96332 N1 0.258756 0.0697517 0.963421 N2 0.578783 0.15602 0.800417
+ txt003
+STRI
+ V0 0 0.350926 2.63611 V1 0.0942301 0.338579 2.63611 V2 0.15415 0.553875 2.58889
+ N0 -0 0.268354 0.96332 N1 0.0697517 0.258756 0.963421 N2 0.0436726 0.162011 0.985822
+ txt003
+STRI
+ V0 0.15415 0.553875 2.58889 V1 0 0.574074 2.58889 V2 0 0.350926 2.63611
+ N0 0.0436726 0.162011 0.985822 N1 -0 0.168031 0.985782 N2 -0 0.268354 0.96332
+ txt003
+STRI
+ V0 0.0942301 0.338579 2.63611 V1 0.178322 0.303616 2.63611 V2 0.291715 0.49668 2.58889
+ N0 0.0697517 0.258756 0.963421 N1 0.134219 0.231413 0.963552 N2 0.0840299 0.144879 0.985875
+ txt003
+STRI
+ V0 0.291715 0.49668 2.58889 V1 0.15415 0.553875 2.58889 V2 0.0942301 0.338579 2.63611
+ N0 0.0840299 0.144879 0.985875 N1 0.0436726 0.162011 0.985822 N2 0.0697517 0.258756 0.963421
+ txt003
+STRI
+ V0 0.178322 0.303616 2.63611 V1 0.249157 0.249157 2.63611 V2 0.407593 0.407593 2.58889
+ N0 0.134219 0.231413 0.963552 N1 0.189037 0.189037 0.963603 N2 0.118345 0.118345 0.985895
+ txt003
+STRI
+ V0 0.407593 0.407593 2.58889 V1 0.291715 0.49668 2.58889 V2 0.178322 0.303616 2.63611
+ N0 0.118345 0.118345 0.985895 N1 0.0840299 0.144879 0.985875 N2 0.134219 0.231413 0.963552
+ txt003
+STRI
+ V0 0.249157 0.249157 2.63611 V1 0.303616 0.178322 2.63611 V2 0.49668 0.291715 2.58889
+ N0 0.189037 0.189037 0.963603 N1 0.231413 0.134219 0.963552 N2 0.144879 0.0840299 0.985875
+ txt003
+STRI
+ V0 0.49668 0.291715 2.58889 V1 0.407593 0.407593 2.58889 V2 0.249157 0.249157 2.63611
+ N0 0.144879 0.0840299 0.985875 N1 0.118345 0.118345 0.985895 N2 0.189037 0.189037 0.963603
+ txt003
+STRI
+ V0 0.303616 0.178322 2.63611 V1 0.338579 0.0942301 2.63611 V2 0.553875 0.15415 2.58889
+ N0 0.231413 0.134219 0.963552 N1 0.258756 0.0697517 0.963421 N2 0.162011 0.0436726 0.985822
+ txt003
+STRI
+ V0 0.553875 0.15415 2.58889 V1 0.49668 0.291715 2.58889 V2 0.303616 0.178322 2.63611
+ N0 0.162011 0.0436726 0.985822 N1 0.144879 0.0840299 0.985875 N2 0.231413 0.134219 0.963552
+ txt003
+STRI
+ V0 0.338579 0.0942301 2.63611 V1 0.350926 5.55112e-17 2.63611 V2 0.574074 2.22045e-16 2.58889
+ N0 0.258756 0.0697517 0.963421 N1 0.268354 0 0.96332 N2 0.168031 -1.93429e-17 0.985782
+ txt003
+STRI
+ V0 0.574074 2.22045e-16 2.58889 V1 0.553875 0.15415 2.58889 V2 0.338579 0.0942301 2.63611
+ N0 0.168031 -1.93429e-17 0.985782 N1 0.162011 0.0436726 0.985822 N2 0.258756 0.0697517 0.963421
+ txt003
+STRI
+ V0 0 0.574074 2.58889 V1 0.15415 0.553875 2.58889 V2 0.221528 0.795972 2.55
+ N0 -0 0.168031 0.985782 N1 0.0436726 0.162011 0.985822 N2 0.0385545 0.143025 0.988968
+ txt003
+STRI
+ V0 0.221528 0.795972 2.55 V1 0 0.825 2.55 V2 0 0.574074 2.58889
+ N0 0.0385545 0.143025 0.988968 N1 -0 0.14834 0.988936 N2 -0 0.168031 0.985782
+ txt003
+STRI
+ V0 0.15415 0.553875 2.58889 V1 0.291715 0.49668 2.58889 V2 0.419222 0.713778 2.55
+ N0 0.0436726 0.162011 0.985822 N1 0.0840299 0.144879 0.985875 N2 0.0741814 0.127899 0.989009
+ txt003
+STRI
+ V0 0.419222 0.713778 2.55 V1 0.221528 0.795972 2.55 V2 0.15415 0.553875 2.58889
+ N0 0.0741814 0.127899 0.989009 N1 0.0385545 0.143025 0.988968 N2 0.0436726 0.162011 0.985822
+ txt003
+STRI
+ V0 0.291715 0.49668 2.58889 V1 0.407593 0.407593 2.58889 V2 0.58575 0.58575 2.55
+ N0 0.0840299 0.144879 0.985875 N1 0.118345 0.118345 0.985895 N2 0.104474 0.104474 0.989025
+ txt003
+STRI
+ V0 0.58575 0.58575 2.55 V1 0.419222 0.713778 2.55 V2 0.291715 0.49668 2.58889
+ N0 0.104474 0.104474 0.989025 N1 0.0741814 0.127899 0.989009 N2 0.0840299 0.144879 0.985875
+ txt003
+STRI
+ V0 0.407593 0.407593 2.58889 V1 0.49668 0.291715 2.58889 V2 0.713778 0.419222 2.55
+ N0 0.118345 0.118345 0.985895 N1 0.144879 0.0840299 0.985875 N2 0.127899 0.0741814 0.989009
+ txt003
+STRI
+ V0 0.713778 0.419222 2.55 V1 0.58575 0.58575 2.55 V2 0.407593 0.407593 2.58889
+ N0 0.127899 0.0741814 0.989009 N1 0.104474 0.104474 0.989025 N2 0.118345 0.118345 0.985895
+ txt003
+STRI
+ V0 0.49668 0.291715 2.58889 V1 0.553875 0.15415 2.58889 V2 0.795972 0.221528 2.55
+ N0 0.144879 0.0840299 0.985875 N1 0.162011 0.0436726 0.985822 N2 0.143025 0.0385545 0.988968
+ txt003
+STRI
+ V0 0.795972 0.221528 2.55 V1 0.713778 0.419222 2.55 V2 0.49668 0.291715 2.58889
+ N0 0.143025 0.0385545 0.988968 N1 0.127899 0.0741814 0.989009 N2 0.144879 0.0840299 0.985875
+ txt003
+STRI
+ V0 0.553875 0.15415 2.58889 V1 0.574074 2.22045e-16 2.58889 V2 0.825 1.11022e-16 2.55
+ N0 0.162011 0.0436726 0.985822 N1 0.168031 -1.93429e-17 0.985782 N2 0.14834 -2.37649e-17 0.988936
+ txt003
+STRI
+ V0 0.825 1.11022e-16 2.55 V1 0.795972 0.221528 2.55 V2 0.553875 0.15415 2.58889
+ N0 0.14834 -2.37649e-17 0.988936 N1 0.143025 0.0385545 0.988968 N2 0.162011 0.0436726 0.985822
+ txt003
+STRI
+ V0 0 0.825 2.55 V1 0.221528 0.795972 2.55 V2 0.284431 1.02199 2.51111
+ N0 -0 0.14834 0.988936 N1 0.0385545 0.143025 0.988968 N2 0.0503275 0.186699 0.981127
+ txt003
+STRI
+ V0 0.284431 1.02199 2.51111 V1 0 1.05926 2.51111 V2 0 0.825 2.55
+ N0 0.0503275 0.186699 0.981127 N1 -0 0.193633 0.981074 N2 -0 0.14834 0.988936
+ txt003
+STRI
+ V0 0.221528 0.795972 2.55 V1 0.419222 0.713778 2.55 V2 0.538261 0.916455 2.51111
+ N0 0.0385545 0.143025 0.988968 N1 0.0741814 0.127899 0.989009 N2 0.0968361 0.166959 0.981197
+ txt003
+STRI
+ V0 0.538261 0.916455 2.51111 V1 0.284431 1.02199 2.51111 V2 0.221528 0.795972 2.55
+ N0 0.0968361 0.166959 0.981197 N1 0.0503275 0.186699 0.981127 N2 0.0385545 0.143025 0.988968
+ txt003
+STRI
+ V0 0.419222 0.713778 2.55 V1 0.58575 0.58575 2.55 V2 0.752074 0.752074 2.51111
+ N0 0.0741814 0.127899 0.989009 N1 0.104474 0.104474 0.989025 N2 0.136382 0.136382 0.981224
+ txt003
+STRI
+ V0 0.752074 0.752074 2.51111 V1 0.538261 0.916455 2.51111 V2 0.419222 0.713778 2.55
+ N0 0.136382 0.136382 0.981224 N1 0.0968361 0.166959 0.981197 N2 0.0741814 0.127899 0.989009
+ txt003
+STRI
+ V0 0.58575 0.58575 2.55 V1 0.713778 0.419222 2.55 V2 0.916455 0.538261 2.51111
+ N0 0.104474 0.104474 0.989025 N1 0.127899 0.0741814 0.989009 N2 0.166959 0.0968361 0.981197
+ txt003
+STRI
+ V0 0.916455 0.538261 2.51111 V1 0.752074 0.752074 2.51111 V2 0.58575 0.58575 2.55
+ N0 0.166959 0.0968361 0.981197 N1 0.136382 0.136382 0.981224 N2 0.104474 0.104474 0.989025
+ txt003
+STRI
+ V0 0.713778 0.419222 2.55 V1 0.795972 0.221528 2.55 V2 1.02199 0.284431 2.51111
+ N0 0.127899 0.0741814 0.989009 N1 0.143025 0.0385545 0.988968 N2 0.186699 0.0503275 0.981127
+ txt003
+STRI
+ V0 1.02199 0.284431 2.51111 V1 0.916455 0.538261 2.51111 V2 0.713778 0.419222 2.55
+ N0 0.186699 0.0503275 0.981127 N1 0.166959 0.0968361 0.981197 N2 0.127899 0.0741814 0.989009
+ txt003
+STRI
+ V0 0.795972 0.221528 2.55 V1 0.825 1.11022e-16 2.55 V2 1.05926 4.44089e-16 2.51111
+ N0 0.143025 0.0385545 0.988968 N1 0.14834 -2.37649e-17 0.988936 N2 0.193633 -7.24819e-17 0.981074
+ txt003
+STRI
+ V0 1.05926 4.44089e-16 2.51111 V1 1.02199 0.284431 2.51111 V2 0.795972 0.221528 2.55
+ N0 0.193633 -7.24819e-17 0.981074 N1 0.186699 0.0503275 0.981127 N2 0.143025 0.0385545 0.988968
+ txt003
+STRI
+ V0 0 1.05926 2.51111 V1 0.284431 1.02199 2.51111 V2 0.330924 1.18904 2.46389
+ N0 -0 0.193633 0.981074 N1 0.0503275 0.186699 0.981127 N2 0.101459 0.376378 0.920894
+ txt003
+STRI
+ V0 0.330924 1.18904 2.46389 V1 0 1.23241 2.46389 V2 0 1.05926 2.51111
+ N0 0.101459 0.376378 0.920894 N1 -0 0.390293 0.920691 N2 -0 0.193633 0.981074
+ txt003
+STRI
+ V0 0.284431 1.02199 2.51111 V1 0.538261 0.916455 2.51111 V2 0.626246 1.06626 2.46389
+ N0 0.0503275 0.186699 0.981127 N1 0.0968361 0.166959 0.981197 N2 0.195261 0.336657 0.92116
+ txt003
+STRI
+ V0 0.626246 1.06626 2.46389 V1 0.330924 1.18904 2.46389 V2 0.284431 1.02199 2.51111
+ N0 0.195261 0.336657 0.92116 N1 0.101459 0.376378 0.920894 N2 0.0503275 0.186699 0.981127
+ txt003
+STRI
+ V0 0.538261 0.916455 2.51111 V1 0.752074 0.752074 2.51111 V2 0.875009 0.875009 2.46389
+ N0 0.0968361 0.166959 0.981197 N1 0.136382 0.136382 0.981224 N2 0.275025 0.275025 0.921262
+ txt003
+STRI
+ V0 0.875009 0.875009 2.46389 V1 0.626246 1.06626 2.46389 V2 0.538261 0.916455 2.51111
+ N0 0.275025 0.275025 0.921262 N1 0.195261 0.336657 0.92116 N2 0.0968361 0.166959 0.981197
+ txt003
+STRI
+ V0 0.752074 0.752074 2.51111 V1 0.916455 0.538261 2.51111 V2 1.06626 0.626246 2.46389
+ N0 0.136382 0.136382 0.981224 N1 0.166959 0.0968361 0.981197 N2 0.336657 0.195261 0.92116
+ txt003
+STRI
+ V0 1.06626 0.626246 2.46389 V1 0.875009 0.875009 2.46389 V2 0.752074 0.752074 2.51111
+ N0 0.336657 0.195261 0.92116 N1 0.275025 0.275025 0.921262 N2 0.136382 0.136382 0.981224
+ txt003
+STRI
+ V0 0.916455 0.538261 2.51111 V1 1.02199 0.284431 2.51111 V2 1.18904 0.330924 2.46389
+ N0 0.166959 0.0968361 0.981197 N1 0.186699 0.0503275 0.981127 N2 0.376378 0.101459 0.920894
+ txt003
+STRI
+ V0 1.18904 0.330924 2.46389 V1 1.06626 0.626246 2.46389 V2 0.916455 0.538261 2.51111
+ N0 0.376378 0.101459 0.920894 N1 0.336657 0.195261 0.92116 N2 0.166959 0.0968361 0.981197
+ txt003
+STRI
+ V0 1.02199 0.284431 2.51111 V1 1.05926 4.44089e-16 2.51111 V2 1.23241 4.44089e-16 2.46389
+ N0 0.186699 0.0503275 0.981127 N1 0.193633 -7.24819e-17 0.981074 N2 0.390293 -8.37138e-17 0.920691
+ txt003
+STRI
+ V0 1.23241 4.44089e-16 2.46389 V1 1.18904 0.330924 2.46389 V2 1.02199 0.284431 2.51111
+ N0 0.390293 -8.37138e-17 0.920691 N1 0.376378 0.101459 0.920894 N2 0.186699 0.0503275 0.981127
+ txt003
+STRI
+ V0 0 1.23241 2.46389 V1 0.330924 1.18904 2.46389 V2 0.349074 1.25426 2.4
+ N0 -0 0.390293 0.920691 N1 0.101459 0.376378 0.920894 N2 0.260275 0.965535 -1.02004e-15
+ txt003
+STRI
+ V0 0.349074 1.25426 2.4 V1 0 1.3 2.4 V2 0 1.23241 2.46389
+ N0 0.260275 0.965535 -1.02004e-15 N1 0 1 -9.86865e-16 N2 -0 0.390293 0.920691
+ txt003
+STRI
+ V0 0.330924 1.18904 2.46389 V1 0.626246 1.06626 2.46389 V2 0.660593 1.12474 2.4
+ N0 0.101459 0.376378 0.920894 N1 0.195261 0.336657 0.92116 N2 0.501718 0.865031 -9.69705e-16
+ txt003
+STRI
+ V0 0.660593 1.12474 2.4 V1 0.349074 1.25426 2.4 V2 0.330924 1.18904 2.46389
+ N0 0.501718 0.865031 -9.69705e-16 N1 0.260275 0.965535 -1.02004e-15 N2 0.101459 0.376378 0.920894
+ txt003
+STRI
+ V0 0.626246 1.06626 2.46389 V1 0.875009 0.875009 2.46389 V2 0.923 0.923 2.4
+ N0 0.195261 0.336657 0.92116 N1 0.275025 0.275025 0.921262 N2 0.707107 0.707107 -7.41433e-16
+ txt003
+STRI
+ V0 0.923 0.923 2.4 V1 0.660593 1.12474 2.4 V2 0.626246 1.06626 2.46389
+ N0 0.707107 0.707107 -7.41433e-16 N1 0.501718 0.865031 -9.69705e-16 N2 0.195261 0.336657 0.92116
+ txt003
+STRI
+ V0 0.875009 0.875009 2.46389 V1 1.06626 0.626246 2.46389 V2 1.12474 0.660593 2.4
+ N0 0.275025 0.275025 0.921262 N1 0.336657 0.195261 0.92116 N2 0.865031 0.501718 -4.67305e-16
+ txt003
+STRI
+ V0 1.12474 0.660593 2.4 V1 0.923 0.923 2.4 V2 0.875009 0.875009 2.46389
+ N0 0.865031 0.501718 -4.67305e-16 N1 0.707107 0.707107 -7.41433e-16 N2 0.275025 0.275025 0.921262
+ txt003
+STRI
+ V0 1.06626 0.626246 2.46389 V1 1.18904 0.330924 2.46389 V2 1.25426 0.349074 2.4
+ N0 0.336657 0.195261 0.92116 N1 0.376378 0.101459 0.920894 N2 0.965535 0.260275 -5.24893e-16
+ txt003
+STRI
+ V0 1.25426 0.349074 2.4 V1 1.12474 0.660593 2.4 V2 1.06626 0.626246 2.46389
+ N0 0.965535 0.260275 -5.24893e-16 N1 0.865031 0.501718 -4.67305e-16 N2 0.336657 0.195261 0.92116
+ txt003
+STRI
+ V0 1.18904 0.330924 2.46389 V1 1.23241 4.44089e-16 2.46389 V2 1.3 6.66134e-16 2.4
+ N0 0.376378 0.101459 0.920894 N1 0.390293 -8.37138e-17 0.920691 N2 1 -4.06675e-16 -1.4803e-15
+ txt003
+STRI
+ V0 1.3 6.66134e-16 2.4 V1 1.25426 0.349074 2.4 V2 1.18904 0.330924 2.46389
+ N0 1 -4.06675e-16 -1.4803e-15 N1 0.965535 0.260275 -5.24893e-16 N2 0.376378 0.101459 0.920894
+ txt003
+STRI
+ V0 0.584584 0.162696 0.00590278 V1 0.605903 0 0.00590278 V2 0 0 0
+ N0 0.0218614 0.00589307 -0.999744 N1 0.0226746 0 -0.999743 N2 0 0 -1
+ txt003
+STRI
+ V0 0.524218 0.307888 0.00590278 V1 0.584584 0.162696 0.00590278 V2 0 0 0
+ N0 0.0195486 0.0113382 -0.999745 N1 0.0218614 0.00589307 -0.999744 N2 0 0 -1
+ txt003
+STRI
+ V0 0.430191 0.430191 0.00590278 V1 0.524218 0.307888 0.00590278 V2 0 0 0
+ N0 0.015968 0.015968 -0.999745 N1 0.0195486 0.0113382 -0.999745 N2 0 0 -1
+ txt003
+STRI
+ V0 0.307888 0.524218 0.00590278 V1 0.430191 0.430191 0.00590278 V2 0 0 0
+ N0 0.0113382 0.0195486 -0.999745 N1 0.015968 0.015968 -0.999745 N2 0 0 -1
+ txt003
+STRI
+ V0 0.162696 0.584584 0.00590278 V1 0.307888 0.524218 0.00590278 V2 0 0 0
+ N0 0.00589307 0.0218614 -0.999744 N1 0.0113382 0.0195486 -0.999745 N2 0 0 -1
+ txt003
+STRI
+ V0 0 0.605903 0.00590278 V1 0.162696 0.584584 0.00590278 V2 0 0 0
+ N0 4.94615e-18 0.0226746 -0.999743 N1 0.00589307 0.0218614 -0.999744 N2 0 0 -1
+ txt003
+STRI
+ V0 0.605903 0 0.00590278 V1 0.584584 0.162696 0.00590278 V2 0.986255 0.274486 0.0222222
+ N0 0.0226746 0 -0.999743 N1 0.0218614 0.00589307 -0.999744 N2 0.0601415 0.0162121 -0.998058
+ txt003
+STRI
+ V0 0.986255 0.274486 0.0222222 V1 1.02222 0 0.0222222 V2 0.605903 0 0.00590278
+ N0 0.0601415 0.0162121 -0.998058 N1 0.0623783 0 -0.998053 N2 0.0226746 0 -0.999743
+ txt003
+STRI
+ V0 0.584584 0.162696 0.00590278 V1 0.524218 0.307888 0.00590278 V2 0.884412 0.51944 0.0222222
+ N0 0.0218614 0.00589307 -0.999744 N1 0.0195486 0.0113382 -0.999745 N2 0.0537792 0.0311919 -0.998066
+ txt003
+STRI
+ V0 0.884412 0.51944 0.0222222 V1 0.986255 0.274486 0.0222222 V2 0.584584 0.162696 0.00590278
+ N0 0.0537792 0.0311919 -0.998066 N1 0.0601415 0.0162121 -0.998058 N2 0.0218614 0.00589307 -0.999744
+ txt003
+STRI
+ V0 0.524218 0.307888 0.00590278 V1 0.430191 0.430191 0.00590278 V2 0.725778 0.725778 0.0222222
+ N0 0.0195486 0.0113382 -0.999745 N1 0.015968 0.015968 -0.999745 N2 0.0439291 0.0439291 -0.998068
+ txt003
+STRI
+ V0 0.725778 0.725778 0.0222222 V1 0.884412 0.51944 0.0222222 V2 0.524218 0.307888 0.00590278
+ N0 0.0439291 0.0439291 -0.998068 N1 0.0537792 0.0311919 -0.998066 N2 0.0195486 0.0113382 -0.999745
+ txt003
+STRI
+ V0 0.430191 0.430191 0.00590278 V1 0.307888 0.524218 0.00590278 V2 0.51944 0.884412 0.0222222
+ N0 0.015968 0.015968 -0.999745 N1 0.0113382 0.0195486 -0.999745 N2 0.0311919 0.0537792 -0.998066
+ txt003
+STRI
+ V0 0.51944 0.884412 0.0222222 V1 0.725778 0.725778 0.0222222 V2 0.430191 0.430191 0.00590278
+ N0 0.0311919 0.0537792 -0.998066 N1 0.0439291 0.0439291 -0.998068 N2 0.015968 0.015968 -0.999745
+ txt003
+STRI
+ V0 0.307888 0.524218 0.00590278 V1 0.162696 0.584584 0.00590278 V2 0.274486 0.986255 0.0222222
+ N0 0.0113382 0.0195486 -0.999745 N1 0.00589307 0.0218614 -0.999744 N2 0.0162121 0.0601415 -0.998058
+ txt003
+STRI
+ V0 0.274486 0.986255 0.0222222 V1 0.51944 0.884412 0.0222222 V2 0.307888 0.524218 0.00590278
+ N0 0.0162121 0.0601415 -0.998058 N1 0.0311919 0.0537792 -0.998066 N2 0.0113382 0.0195486 -0.999745
+ txt003
+STRI
+ V0 0.162696 0.584584 0.00590278 V1 0 0.605903 0.00590278 V2 -2.22045e-16 1.02222 0.0222222
+ N0 0.00589307 0.0218614 -0.999744 N1 4.94615e-18 0.0226746 -0.999743 N2 0 0.0623783 -0.998053
+ txt003
+STRI
+ V0 -2.22045e-16 1.02222 0.0222222 V1 0.274486 0.986255 0.0222222 V2 0.162696 0.584584 0.00590278
+ N0 0 0.0623783 -0.998053 N1 0.0162121 0.0601415 -0.998058 N2 0.00589307 0.0218614 -0.999744
+ txt003
+STRI
+ V0 1.02222 0 0.0222222 V1 0.986255 0.274486 0.0222222 V2 1.23918 0.344878 0.046875
+ N0 0.0623783 0 -0.998053 N1 0.0601415 0.0162121 -0.998058 N2 0.136353 0.0367561 -0.989978
+ txt003
+STRI
+ V0 1.23918 0.344878 0.046875 V1 1.28438 0 0.046875 V2 1.02222 0 0.0222222
+ N0 0.136353 0.0367561 -0.989978 N1 0.141421 0 -0.989949 N2 0.0623783 0 -0.998053
+ txt003
+STRI
+ V0 0.986255 0.274486 0.0222222 V1 0.884412 0.51944 0.0222222 V2 1.11122 0.652653 0.046875
+ N0 0.0601415 0.0162121 -0.998058 N1 0.0537792 0.0311919 -0.998066 N2 0.121932 0.0707208 -0.990016
+ txt003
+STRI
+ V0 1.11122 0.652653 0.046875 V1 1.23918 0.344878 0.046875 V2 0.986255 0.274486 0.0222222
+ N0 0.121932 0.0707208 -0.990016 N1 0.136353 0.0367561 -0.989978 N2 0.0601415 0.0162121 -0.998058
+ txt003
+STRI
+ V0 0.884412 0.51944 0.0222222 V1 0.725778 0.725778 0.0222222 V2 0.911906 0.911906 0.046875
+ N0 0.0537792 0.0311919 -0.998066 N1 0.0439291 0.0439291 -0.998068 N2 0.0996006 0.0996006 -0.99003
+ txt003
+STRI
+ V0 0.911906 0.911906 0.046875 V1 1.11122 0.652653 0.046875 V2 0.884412 0.51944 0.0222222
+ N0 0.0996006 0.0996006 -0.99003 N1 0.121932 0.0707208 -0.990016 N2 0.0537792 0.0311919 -0.998066
+ txt003
+STRI
+ V0 0.725778 0.725778 0.0222222 V1 0.51944 0.884412 0.0222222 V2 0.652653 1.11122 0.046875
+ N0 0.0439291 0.0439291 -0.998068 N1 0.0311919 0.0537792 -0.998066 N2 0.0707208 0.121932 -0.990016
+ txt003
+STRI
+ V0 0.652653 1.11122 0.046875 V1 0.911906 0.911906 0.046875 V2 0.725778 0.725778 0.0222222
+ N0 0.0707208 0.121932 -0.990016 N1 0.0996006 0.0996006 -0.99003 N2 0.0439291 0.0439291 -0.998068
+ txt003
+STRI
+ V0 0.51944 0.884412 0.0222222 V1 0.274486 0.986255 0.0222222 V2 0.344878 1.23918 0.046875
+ N0 0.0311919 0.0537792 -0.998066 N1 0.0162121 0.0601415 -0.998058 N2 0.0367561 0.136353 -0.989978
+ txt003
+STRI
+ V0 0.344878 1.23918 0.046875 V1 0.652653 1.11122 0.046875 V2 0.51944 0.884412 0.0222222
+ N0 0.0367561 0.136353 -0.989978 N1 0.0707208 0.121932 -0.990016 N2 0.0311919 0.0537792 -0.998066
+ txt003
+STRI
+ V0 0.274486 0.986255 0.0222222 V1 -2.22045e-16 1.02222 0.0222222 V2 2.22045e-16 1.28437 0.046875
+ N0 0.0162121 0.0601415 -0.998058 N1 0 0.0623783 -0.998053 N2 0 0.141421 -0.989949
+ txt003
+STRI
+ V0 2.22045e-16 1.28437 0.046875 V1 0.344878 1.23918 0.046875 V2 0.274486 0.986255 0.0222222
+ N0 0 0.141421 -0.989949 N1 0.0367561 0.136353 -0.989978 N2 0.0162121 0.0601415 -0.998058
+ txt003
+STRI
+ V0 1.28438 0 0.046875 V1 1.23918 0.344878 0.046875 V2 1.37754 0.383385 0.0777778
+ N0 0.141421 0 -0.989949 N1 0.136353 0.0367561 -0.989978 N2 0.316788 0.085395 -0.944644
+ txt003
+STRI
+ V0 1.37754 0.383385 0.0777778 V1 1.42778 0 0.0777778 V2 1.28438 0 0.046875
+ N0 0.316788 0.085395 -0.944644 N1 0.328521 0 -0.944497 N2 0.141421 0 -0.989949
+ txt003
+STRI
+ V0 1.23918 0.344878 0.046875 V1 1.11122 0.652653 0.046875 V2 1.23529 0.725523 0.0777778
+ N0 0.136353 0.0367561 -0.989978 N1 0.121932 0.0707208 -0.990016 N2 0.283331 0.164332 -0.944838
+ txt003
+STRI
+ V0 1.23529 0.725523 0.0777778 V1 1.37754 0.383385 0.0777778 V2 1.23918 0.344878 0.046875
+ N0 0.283331 0.164332 -0.944838 N1 0.316788 0.085395 -0.944644 N2 0.136353 0.0367561 -0.989978
+ txt003
+STRI
+ V0 1.11122 0.652653 0.046875 V1 0.911906 0.911906 0.046875 V2 1.01372 1.01372 0.0777778
+ N0 0.121932 0.0707208 -0.990016 N1 0.0996006 0.0996006 -0.99003 N2 0.231454 0.231454 -0.944912
+ txt003
+STRI
+ V0 1.01372 1.01372 0.0777778 V1 1.23529 0.725523 0.0777778 V2 1.11122 0.652653 0.046875
+ N0 0.231454 0.231454 -0.944912 N1 0.283331 0.164332 -0.944838 N2 0.121932 0.0707208 -0.990016
+ txt003
+STRI
+ V0 0.911906 0.911906 0.046875 V1 0.652653 1.11122 0.046875 V2 0.725523 1.23529 0.0777778
+ N0 0.0996006 0.0996006 -0.99003 N1 0.0707208 0.121932 -0.990016 N2 0.164332 0.283331 -0.944838
+ txt003
+STRI
+ V0 0.725523 1.23529 0.0777778 V1 1.01372 1.01372 0.0777778 V2 0.911906 0.911906 0.046875
+ N0 0.164332 0.283331 -0.944838 N1 0.231454 0.231454 -0.944912 N2 0.0996006 0.0996006 -0.99003
+ txt003
+STRI
+ V0 0.652653 1.11122 0.046875 V1 0.344878 1.23918 0.046875 V2 0.383385 1.37754 0.0777778
+ N0 0.0707208 0.121932 -0.990016 N1 0.0367561 0.136353 -0.989978 N2 0.085395 0.316788 -0.944644
+ txt003
+STRI
+ V0 0.383385 1.37754 0.0777778 V1 0.725523 1.23529 0.0777778 V2 0.652653 1.11122 0.046875
+ N0 0.085395 0.316788 -0.944644 N1 0.164332 0.283331 -0.944838 N2 0.0707208 0.121932 -0.990016
+ txt003
+STRI
+ V0 0.344878 1.23918 0.046875 V1 2.22045e-16 1.28437 0.046875 V2 -2.22045e-16 1.42778 0.0777778
+ N0 0.0367561 0.136353 -0.989978 N1 0 0.141421 -0.989949 N2 6.08223e-17 0.328521 -0.944497
+ txt003
+STRI
+ V0 -2.22045e-16 1.42778 0.0777778 V1 0.383385 1.37754 0.0777778 V2 0.344878 1.23918 0.046875
+ N0 6.08223e-17 0.328521 -0.944497 N1 0.085395 0.316788 -0.944644 N2 0.0367561 0.136353 -0.989978
+ txt003
+STRI
+ V0 1.42778 0 0.0777778 V1 1.37754 0.383385 0.0777778 V2 1.4355 0.399515 0.112847
+ N0 0.328521 0 -0.944497 N1 0.316788 0.085395 -0.944644 N2 0.743044 0.200299 -0.638566
+ txt003
+STRI
+ V0 1.4355 0.399515 0.112847 V1 1.48785 0 0.112847 V2 1.42778 0 0.0777778
+ N0 0.743044 0.200299 -0.638566 N1 0.770022 0 -0.638018 N2 0.328521 0 -0.944497
+ txt003
+STRI
+ V0 1.37754 0.383385 0.0777778 V1 1.23529 0.725523 0.0777778 V2 1.28726 0.756047 0.112847
+ N0 0.316788 0.085395 -0.944644 N1 0.283331 0.164332 -0.944838 N2 0.665182 0.385806 -0.639286
+ txt003
+STRI
+ V0 1.28726 0.756047 0.112847 V1 1.4355 0.399515 0.112847 V2 1.37754 0.383385 0.0777778
+ N0 0.665182 0.385806 -0.639286 N1 0.743044 0.200299 -0.638566 N2 0.316788 0.085395 -0.944644
+ txt003
+STRI
+ V0 1.23529 0.725523 0.0777778 V1 1.01372 1.01372 0.0777778 V2 1.05637 1.05637 0.112847
+ N0 0.283331 0.164332 -0.944838 N1 0.231454 0.231454 -0.944912 N2 0.543581 0.543581 -0.639562
+ txt003
+STRI
+ V0 1.05637 1.05637 0.112847 V1 1.28726 0.756047 0.112847 V2 1.23529 0.725523 0.0777778
+ N0 0.543581 0.543581 -0.639562 N1 0.665182 0.385806 -0.639286 N2 0.283331 0.164332 -0.944838
+ txt003
+STRI
+ V0 1.01372 1.01372 0.0777778 V1 0.725523 1.23529 0.0777778 V2 0.756047 1.28726 0.112847
+ N0 0.231454 0.231454 -0.944912 N1 0.164332 0.283331 -0.944838 N2 0.385806 0.665182 -0.639286
+ txt003
+STRI
+ V0 0.756047 1.28726 0.112847 V1 1.05637 1.05637 0.112847 V2 1.01372 1.01372 0.0777778
+ N0 0.385806 0.665182 -0.639286 N1 0.543581 0.543581 -0.639562 N2 0.231454 0.231454 -0.944912
+ txt003
+STRI
+ V0 0.725523 1.23529 0.0777778 V1 0.383385 1.37754 0.0777778 V2 0.399515 1.4355 0.112847
+ N0 0.164332 0.283331 -0.944838 N1 0.085395 0.316788 -0.944644 N2 0.200299 0.743044 -0.638566
+ txt003
+STRI
+ V0 0.399515 1.4355 0.112847 V1 0.756047 1.28726 0.112847 V2 0.725523 1.23529 0.0777778
+ N0 0.200299 0.743044 -0.638566 N1 0.385806 0.665182 -0.639286 N2 0.164332 0.283331 -0.944838
+ txt003
+STRI
+ V0 0.383385 1.37754 0.0777778 V1 -2.22045e-16 1.42778 0.0777778 V2 0 1.48785 0.112847
+ N0 0.085395 0.316788 -0.944644 N1 6.08223e-17 0.328521 -0.944497 N2 1.36806e-16 0.770022 -0.638018
+ txt003
+STRI
+ V0 0 1.48785 0.112847 V1 0.399515 1.4355 0.112847 V2 0.383385 1.37754 0.0777778
+ N0 1.36806e-16 0.770022 -0.638018 N1 0.200299 0.743044 -0.638566 N2 0.085395 0.316788 -0.944644
+ txt003
+STRI
+ V0 1.48785 0 0.112847 V1 1.4355 0.399515 0.112847 V2 1.44722 0.402778 0.15
+ N0 0.770022 0 -0.638018 N1 0.743044 0.200299 -0.638566 N2 0.965535 0.260275 -2.07142e-16
+ txt003
+STRI
+ V0 1.44722 0.402778 0.15 V1 1.5 0 0.15 V2 1.48785 0 0.112847
+ N0 0.965535 0.260275 -2.07142e-16 N1 1 0 0 N2 0.770022 0 -0.638018
+ txt003
+STRI
+ V0 1.4355 0.399515 0.112847 V1 1.28726 0.756047 0.112847 V2 1.29778 0.762222 0.15
+ N0 0.743044 0.200299 -0.638566 N1 0.665182 0.385806 -0.639286 N2 0.865031 0.501718 -5.46348e-16
+ txt003
+STRI
+ V0 1.29778 0.762222 0.15 V1 1.44722 0.402778 0.15 V2 1.4355 0.399515 0.112847
+ N0 0.865031 0.501718 -5.46348e-16 N1 0.965535 0.260275 -2.07142e-16 N2 0.743044 0.200299 -0.638566
+ txt003
+STRI
+ V0 1.28726 0.756047 0.112847 V1 1.05637 1.05637 0.112847 V2 1.065 1.065 0.15
+ N0 0.665182 0.385806 -0.639286 N1 0.543581 0.543581 -0.639562 N2 0.707107 0.707107 -6.97819e-16
+ txt003
+STRI
+ V0 1.065 1.065 0.15 V1 1.29778 0.762222 0.15 V2 1.28726 0.756047 0.112847
+ N0 0.707107 0.707107 -6.97819e-16 N1 0.865031 0.501718 -5.46348e-16 N2 0.665182 0.385806 -0.639286
+ txt003
+STRI
+ V0 1.05637 1.05637 0.112847 V1 0.756047 1.28726 0.112847 V2 0.762222 1.29778 0.15
+ N0 0.543581 0.543581 -0.639562 N1 0.385806 0.665182 -0.639286 N2 0.501718 0.865031 -5.46348e-16
+ txt003
+STRI
+ V0 0.762222 1.29778 0.15 V1 1.065 1.065 0.15 V2 1.05637 1.05637 0.112847
+ N0 0.501718 0.865031 -5.46348e-16 N1 0.707107 0.707107 -6.97819e-16 N2 0.543581 0.543581 -0.639562
+ txt003
+STRI
+ V0 0.756047 1.28726 0.112847 V1 0.399515 1.4355 0.112847 V2 0.402778 1.44722 0.15
+ N0 0.385806 0.665182 -0.639286 N1 0.200299 0.743044 -0.638566 N2 0.260275 0.965535 -2.07142e-16
+ txt003
+STRI
+ V0 0.402778 1.44722 0.15 V1 0.762222 1.29778 0.15 V2 0.756047 1.28726 0.112847
+ N0 0.260275 0.965535 -2.07142e-16 N1 0.501718 0.865031 -5.46348e-16 N2 0.385806 0.665182 -0.639286
+ txt003
+STRI
+ V0 0.399515 1.4355 0.112847 V1 0 1.48785 0.112847 V2 0 1.5 0.15
+ N0 0.200299 0.743044 -0.638566 N1 1.36806e-16 0.770022 -0.638018 N2 0 1 -0
+ txt003
+STRI
+ V0 0 1.5 0.15 V1 0.402778 1.44722 0.15 V2 0.399515 1.4355 0.112847
+ N0 0 1 -0 N1 0.260275 0.965535 -2.07142e-16 N2 0.200299 0.743044 -0.638566
+ txt003
+STRI
+ V0 -0.162696 0.584584 0.00590278 V1 0 0.605903 0.00590278 V2 0 0 0
+ N0 -0.00589307 0.0218614 -0.999744 N1 0 0.0226746 -0.999743 N2 0 0 -1
+ txt003
+STRI
+ V0 -0.307888 0.524218 0.00590278 V1 -0.162696 0.584584 0.00590278 V2 0 0 0
+ N0 -0.0113382 0.0195486 -0.999745 N1 -0.00589307 0.0218614 -0.999744 N2 0 0 -1
+ txt003
+STRI
+ V0 -0.430191 0.430191 0.00590278 V1 -0.307888 0.524218 0.00590278 V2 0 0 0
+ N0 -0.015968 0.015968 -0.999745 N1 -0.0113382 0.0195486 -0.999745 N2 0 0 -1
+ txt003
+STRI
+ V0 -0.524218 0.307888 0.00590278 V1 -0.430191 0.430191 0.00590278 V2 0 0 0
+ N0 -0.0195486 0.0113382 -0.999745 N1 -0.015968 0.015968 -0.999745 N2 0 0 -1
+ txt003
+STRI
+ V0 -0.584584 0.162696 0.00590278 V1 -0.524218 0.307888 0.00590278 V2 0 0 0
+ N0 -0.0218614 0.00589307 -0.999744 N1 -0.0195486 0.0113382 -0.999745 N2 0 0 -1
+ txt003
+STRI
+ V0 -0.605903 0 0.00590278 V1 -0.584584 0.162696 0.00590278 V2 0 0 0
+ N0 -0.0226746 4.94615e-18 -0.999743 N1 -0.0218614 0.00589307 -0.999744 N2 0 0 -1
+ txt003
+STRI
+ V0 0 0.605903 0.00590278 V1 -0.162696 0.584584 0.00590278 V2 -0.274486 0.986255 0.0222222
+ N0 0 0.0226746 -0.999743 N1 -0.00589307 0.0218614 -0.999744 N2 -0.0162121 0.0601415 -0.998058
+ txt003
+STRI
+ V0 -0.274486 0.986255 0.0222222 V1 0 1.02222 0.0222222 V2 0 0.605903 0.00590278
+ N0 -0.0162121 0.0601415 -0.998058 N1 0 0.0623783 -0.998053 N2 0 0.0226746 -0.999743
+ txt003
+STRI
+ V0 -0.162696 0.584584 0.00590278 V1 -0.307888 0.524218 0.00590278 V2 -0.51944 0.884412 0.0222222
+ N0 -0.00589307 0.0218614 -0.999744 N1 -0.0113382 0.0195486 -0.999745 N2 -0.0311919 0.0537792 -0.998066
+ txt003
+STRI
+ V0 -0.51944 0.884412 0.0222222 V1 -0.274486 0.986255 0.0222222 V2 -0.162696 0.584584 0.00590278
+ N0 -0.0311919 0.0537792 -0.998066 N1 -0.0162121 0.0601415 -0.998058 N2 -0.00589307 0.0218614 -0.999744
+ txt003
+STRI
+ V0 -0.307888 0.524218 0.00590278 V1 -0.430191 0.430191 0.00590278 V2 -0.725778 0.725778 0.0222222
+ N0 -0.0113382 0.0195486 -0.999745 N1 -0.015968 0.015968 -0.999745 N2 -0.0439291 0.0439291 -0.998068
+ txt003
+STRI
+ V0 -0.725778 0.725778 0.0222222 V1 -0.51944 0.884412 0.0222222 V2 -0.307888 0.524218 0.00590278
+ N0 -0.0439291 0.0439291 -0.998068 N1 -0.0311919 0.0537792 -0.998066 N2 -0.0113382 0.0195486 -0.999745
+ txt003
+STRI
+ V0 -0.430191 0.430191 0.00590278 V1 -0.524218 0.307888 0.00590278 V2 -0.884412 0.51944 0.0222222
+ N0 -0.015968 0.015968 -0.999745 N1 -0.0195486 0.0113382 -0.999745 N2 -0.0537792 0.0311919 -0.998066
+ txt003
+STRI
+ V0 -0.884412 0.51944 0.0222222 V1 -0.725778 0.725778 0.0222222 V2 -0.430191 0.430191 0.00590278
+ N0 -0.0537792 0.0311919 -0.998066 N1 -0.0439291 0.0439291 -0.998068 N2 -0.015968 0.015968 -0.999745
+ txt003
+STRI
+ V0 -0.524218 0.307888 0.00590278 V1 -0.584584 0.162696 0.00590278 V2 -0.986255 0.274486 0.0222222
+ N0 -0.0195486 0.0113382 -0.999745 N1 -0.0218614 0.00589307 -0.999744 N2 -0.0601415 0.0162121 -0.998058
+ txt003
+STRI
+ V0 -0.986255 0.274486 0.0222222 V1 -0.884412 0.51944 0.0222222 V2 -0.524218 0.307888 0.00590278
+ N0 -0.0601415 0.0162121 -0.998058 N1 -0.0537792 0.0311919 -0.998066 N2 -0.0195486 0.0113382 -0.999745
+ txt003
+STRI
+ V0 -0.584584 0.162696 0.00590278 V1 -0.605903 0 0.00590278 V2 -1.02222 -2.22045e-16 0.0222222
+ N0 -0.0218614 0.00589307 -0.999744 N1 -0.0226746 4.94615e-18 -0.999743 N2 -0.0623783 -0 -0.998053
+ txt003
+STRI
+ V0 -1.02222 -2.22045e-16 0.0222222 V1 -0.986255 0.274486 0.0222222 V2 -0.584584 0.162696 0.00590278
+ N0 -0.0623783 -0 -0.998053 N1 -0.0601415 0.0162121 -0.998058 N2 -0.0218614 0.00589307 -0.999744
+ txt003
+STRI
+ V0 0 1.02222 0.0222222 V1 -0.274486 0.986255 0.0222222 V2 -0.344878 1.23918 0.046875
+ N0 0 0.0623783 -0.998053 N1 -0.0162121 0.0601415 -0.998058 N2 -0.0367561 0.136353 -0.989978
+ txt003
+STRI
+ V0 -0.344878 1.23918 0.046875 V1 0 1.28438 0.046875 V2 0 1.02222 0.0222222
+ N0 -0.0367561 0.136353 -0.989978 N1 0 0.141421 -0.989949 N2 0 0.0623783 -0.998053
+ txt003
+STRI
+ V0 -0.274486 0.986255 0.0222222 V1 -0.51944 0.884412 0.0222222 V2 -0.652653 1.11122 0.046875
+ N0 -0.0162121 0.0601415 -0.998058 N1 -0.0311919 0.0537792 -0.998066 N2 -0.0707208 0.121932 -0.990016
+ txt003
+STRI
+ V0 -0.652653 1.11122 0.046875 V1 -0.344878 1.23918 0.046875 V2 -0.274486 0.986255 0.0222222
+ N0 -0.0707208 0.121932 -0.990016 N1 -0.0367561 0.136353 -0.989978 N2 -0.0162121 0.0601415 -0.998058
+ txt003
+STRI
+ V0 -0.51944 0.884412 0.0222222 V1 -0.725778 0.725778 0.0222222 V2 -0.911906 0.911906 0.046875
+ N0 -0.0311919 0.0537792 -0.998066 N1 -0.0439291 0.0439291 -0.998068 N2 -0.0996006 0.0996006 -0.99003
+ txt003
+STRI
+ V0 -0.911906 0.911906 0.046875 V1 -0.652653 1.11122 0.046875 V2 -0.51944 0.884412 0.0222222
+ N0 -0.0996006 0.0996006 -0.99003 N1 -0.0707208 0.121932 -0.990016 N2 -0.0311919 0.0537792 -0.998066
+ txt003
+STRI
+ V0 -0.725778 0.725778 0.0222222 V1 -0.884412 0.51944 0.0222222 V2 -1.11122 0.652653 0.046875
+ N0 -0.0439291 0.0439291 -0.998068 N1 -0.0537792 0.0311919 -0.998066 N2 -0.121932 0.0707208 -0.990016
+ txt003
+STRI
+ V0 -1.11122 0.652653 0.046875 V1 -0.911906 0.911906 0.046875 V2 -0.725778 0.725778 0.0222222
+ N0 -0.121932 0.0707208 -0.990016 N1 -0.0996006 0.0996006 -0.99003 N2 -0.0439291 0.0439291 -0.998068
+ txt003
+STRI
+ V0 -0.884412 0.51944 0.0222222 V1 -0.986255 0.274486 0.0222222 V2 -1.23918 0.344878 0.046875
+ N0 -0.0537792 0.0311919 -0.998066 N1 -0.0601415 0.0162121 -0.998058 N2 -0.136353 0.0367561 -0.989978
+ txt003
+STRI
+ V0 -1.23918 0.344878 0.046875 V1 -1.11122 0.652653 0.046875 V2 -0.884412 0.51944 0.0222222
+ N0 -0.136353 0.0367561 -0.989978 N1 -0.121932 0.0707208 -0.990016 N2 -0.0537792 0.0311919 -0.998066
+ txt003
+STRI
+ V0 -0.986255 0.274486 0.0222222 V1 -1.02222 -2.22045e-16 0.0222222 V2 -1.28437 2.22045e-16 0.046875
+ N0 -0.0601415 0.0162121 -0.998058 N1 -0.0623783 -0 -0.998053 N2 -0.141421 -0 -0.989949
+ txt003
+STRI
+ V0 -1.28437 2.22045e-16 0.046875 V1 -1.23918 0.344878 0.046875 V2 -0.986255 0.274486 0.0222222
+ N0 -0.141421 -0 -0.989949 N1 -0.136353 0.0367561 -0.989978 N2 -0.0601415 0.0162121 -0.998058
+ txt003
+STRI
+ V0 0 1.28438 0.046875 V1 -0.344878 1.23918 0.046875 V2 -0.383385 1.37754 0.0777778
+ N0 0 0.141421 -0.989949 N1 -0.0367561 0.136353 -0.989978 N2 -0.085395 0.316788 -0.944644
+ txt003
+STRI
+ V0 -0.383385 1.37754 0.0777778 V1 0 1.42778 0.0777778 V2 0 1.28438 0.046875
+ N0 -0.085395 0.316788 -0.944644 N1 0 0.328521 -0.944497 N2 0 0.141421 -0.989949
+ txt003
+STRI
+ V0 -0.344878 1.23918 0.046875 V1 -0.652653 1.11122 0.046875 V2 -0.725523 1.23529 0.0777778
+ N0 -0.0367561 0.136353 -0.989978 N1 -0.0707208 0.121932 -0.990016 N2 -0.164332 0.283331 -0.944838
+ txt003
+STRI
+ V0 -0.725523 1.23529 0.0777778 V1 -0.383385 1.37754 0.0777778 V2 -0.344878 1.23918 0.046875
+ N0 -0.164332 0.283331 -0.944838 N1 -0.085395 0.316788 -0.944644 N2 -0.0367561 0.136353 -0.989978
+ txt003
+STRI
+ V0 -0.652653 1.11122 0.046875 V1 -0.911906 0.911906 0.046875 V2 -1.01372 1.01372 0.0777778
+ N0 -0.0707208 0.121932 -0.990016 N1 -0.0996006 0.0996006 -0.99003 N2 -0.231454 0.231454 -0.944912
+ txt003
+STRI
+ V0 -1.01372 1.01372 0.0777778 V1 -0.725523 1.23529 0.0777778 V2 -0.652653 1.11122 0.046875
+ N0 -0.231454 0.231454 -0.944912 N1 -0.164332 0.283331 -0.944838 N2 -0.0707208 0.121932 -0.990016
+ txt003
+STRI
+ V0 -0.911906 0.911906 0.046875 V1 -1.11122 0.652653 0.046875 V2 -1.23529 0.725523 0.0777778
+ N0 -0.0996006 0.0996006 -0.99003 N1 -0.121932 0.0707208 -0.990016 N2 -0.283331 0.164332 -0.944838
+ txt003
+STRI
+ V0 -1.23529 0.725523 0.0777778 V1 -1.01372 1.01372 0.0777778 V2 -0.911906 0.911906 0.046875
+ N0 -0.283331 0.164332 -0.944838 N1 -0.231454 0.231454 -0.944912 N2 -0.0996006 0.0996006 -0.99003
+ txt003
+STRI
+ V0 -1.11122 0.652653 0.046875 V1 -1.23918 0.344878 0.046875 V2 -1.37754 0.383385 0.0777778
+ N0 -0.121932 0.0707208 -0.990016 N1 -0.136353 0.0367561 -0.989978 N2 -0.316788 0.085395 -0.944644
+ txt003
+STRI
+ V0 -1.37754 0.383385 0.0777778 V1 -1.23529 0.725523 0.0777778 V2 -1.11122 0.652653 0.046875
+ N0 -0.316788 0.085395 -0.944644 N1 -0.283331 0.164332 -0.944838 N2 -0.121932 0.0707208 -0.990016
+ txt003
+STRI
+ V0 -1.23918 0.344878 0.046875 V1 -1.28437 2.22045e-16 0.046875 V2 -1.42778 -2.22045e-16 0.0777778
+ N0 -0.136353 0.0367561 -0.989978 N1 -0.141421 -0 -0.989949 N2 -0.328521 6.08223e-17 -0.944497
+ txt003
+STRI
+ V0 -1.42778 -2.22045e-16 0.0777778 V1 -1.37754 0.383385 0.0777778 V2 -1.23918 0.344878 0.046875
+ N0 -0.328521 6.08223e-17 -0.944497 N1 -0.316788 0.085395 -0.944644 N2 -0.136353 0.0367561 -0.989978
+ txt003
+STRI
+ V0 0 1.42778 0.0777778 V1 -0.383385 1.37754 0.0777778 V2 -0.399515 1.4355 0.112847
+ N0 0 0.328521 -0.944497 N1 -0.085395 0.316788 -0.944644 N2 -0.200299 0.743044 -0.638566
+ txt003
+STRI
+ V0 -0.399515 1.4355 0.112847 V1 0 1.48785 0.112847 V2 0 1.42778 0.0777778
+ N0 -0.200299 0.743044 -0.638566 N1 0 0.770022 -0.638018 N2 0 0.328521 -0.944497
+ txt003
+STRI
+ V0 -0.383385 1.37754 0.0777778 V1 -0.725523 1.23529 0.0777778 V2 -0.756047 1.28726 0.112847
+ N0 -0.085395 0.316788 -0.944644 N1 -0.164332 0.283331 -0.944838 N2 -0.385806 0.665182 -0.639286
+ txt003
+STRI
+ V0 -0.756047 1.28726 0.112847 V1 -0.399515 1.4355 0.112847 V2 -0.383385 1.37754 0.0777778
+ N0 -0.385806 0.665182 -0.639286 N1 -0.200299 0.743044 -0.638566 N2 -0.085395 0.316788 -0.944644
+ txt003
+STRI
+ V0 -0.725523 1.23529 0.0777778 V1 -1.01372 1.01372 0.0777778 V2 -1.05637 1.05637 0.112847
+ N0 -0.164332 0.283331 -0.944838 N1 -0.231454 0.231454 -0.944912 N2 -0.543581 0.543581 -0.639562
+ txt003
+STRI
+ V0 -1.05637 1.05637 0.112847 V1 -0.756047 1.28726 0.112847 V2 -0.725523 1.23529 0.0777778
+ N0 -0.543581 0.543581 -0.639562 N1 -0.385806 0.665182 -0.639286 N2 -0.164332 0.283331 -0.944838
+ txt003
+STRI
+ V0 -1.01372 1.01372 0.0777778 V1 -1.23529 0.725523 0.0777778 V2 -1.28726 0.756047 0.112847
+ N0 -0.231454 0.231454 -0.944912 N1 -0.283331 0.164332 -0.944838 N2 -0.665182 0.385806 -0.639286
+ txt003
+STRI
+ V0 -1.28726 0.756047 0.112847 V1 -1.05637 1.05637 0.112847 V2 -1.01372 1.01372 0.0777778
+ N0 -0.665182 0.385806 -0.639286 N1 -0.543581 0.543581 -0.639562 N2 -0.231454 0.231454 -0.944912
+ txt003
+STRI
+ V0 -1.23529 0.725523 0.0777778 V1 -1.37754 0.383385 0.0777778 V2 -1.4355 0.399515 0.112847
+ N0 -0.283331 0.164332 -0.944838 N1 -0.316788 0.085395 -0.944644 N2 -0.743044 0.200299 -0.638566
+ txt003
+STRI
+ V0 -1.4355 0.399515 0.112847 V1 -1.28726 0.756047 0.112847 V2 -1.23529 0.725523 0.0777778
+ N0 -0.743044 0.200299 -0.638566 N1 -0.665182 0.385806 -0.639286 N2 -0.283331 0.164332 -0.944838
+ txt003
+STRI
+ V0 -1.37754 0.383385 0.0777778 V1 -1.42778 -2.22045e-16 0.0777778 V2 -1.48785 0 0.112847
+ N0 -0.316788 0.085395 -0.944644 N1 -0.328521 6.08223e-17 -0.944497 N2 -0.770022 1.36806e-16 -0.638018
+ txt003
+STRI
+ V0 -1.48785 0 0.112847 V1 -1.4355 0.399515 0.112847 V2 -1.37754 0.383385 0.0777778
+ N0 -0.770022 1.36806e-16 -0.638018 N1 -0.743044 0.200299 -0.638566 N2 -0.316788 0.085395 -0.944644
+ txt003
+STRI
+ V0 0 1.48785 0.112847 V1 -0.399515 1.4355 0.112847 V2 -0.402778 1.44722 0.15
+ N0 0 0.770022 -0.638018 N1 -0.200299 0.743044 -0.638566 N2 -0.260275 0.965535 -2.07142e-16
+ txt003
+STRI
+ V0 -0.402778 1.44722 0.15 V1 0 1.5 0.15 V2 0 1.48785 0.112847
+ N0 -0.260275 0.965535 -2.07142e-16 N1 0 1 -0 N2 0 0.770022 -0.638018
+ txt003
+STRI
+ V0 -0.399515 1.4355 0.112847 V1 -0.756047 1.28726 0.112847 V2 -0.762222 1.29778 0.15
+ N0 -0.200299 0.743044 -0.638566 N1 -0.385806 0.665182 -0.639286 N2 -0.501718 0.865031 -5.46348e-16
+ txt003
+STRI
+ V0 -0.762222 1.29778 0.15 V1 -0.402778 1.44722 0.15 V2 -0.399515 1.4355 0.112847
+ N0 -0.501718 0.865031 -5.46348e-16 N1 -0.260275 0.965535 -2.07142e-16 N2 -0.200299 0.743044 -0.638566
+ txt003
+STRI
+ V0 -0.756047 1.28726 0.112847 V1 -1.05637 1.05637 0.112847 V2 -1.065 1.065 0.15
+ N0 -0.385806 0.665182 -0.639286 N1 -0.543581 0.543581 -0.639562 N2 -0.707107 0.707107 -6.97819e-16
+ txt003
+STRI
+ V0 -1.065 1.065 0.15 V1 -0.762222 1.29778 0.15 V2 -0.756047 1.28726 0.112847
+ N0 -0.707107 0.707107 -6.97819e-16 N1 -0.501718 0.865031 -5.46348e-16 N2 -0.385806 0.665182 -0.639286
+ txt003
+STRI
+ V0 -1.05637 1.05637 0.112847 V1 -1.28726 0.756047 0.112847 V2 -1.29778 0.762222 0.15
+ N0 -0.543581 0.543581 -0.639562 N1 -0.665182 0.385806 -0.639286 N2 -0.865031 0.501718 -5.46348e-16
+ txt003
+STRI
+ V0 -1.29778 0.762222 0.15 V1 -1.065 1.065 0.15 V2 -1.05637 1.05637 0.112847
+ N0 -0.865031 0.501718 -5.46348e-16 N1 -0.707107 0.707107 -6.97819e-16 N2 -0.543581 0.543581 -0.639562
+ txt003
+STRI
+ V0 -1.28726 0.756047 0.112847 V1 -1.4355 0.399515 0.112847 V2 -1.44722 0.402778 0.15
+ N0 -0.665182 0.385806 -0.639286 N1 -0.743044 0.200299 -0.638566 N2 -0.965535 0.260275 -2.07142e-16
+ txt003
+STRI
+ V0 -1.44722 0.402778 0.15 V1 -1.29778 0.762222 0.15 V2 -1.28726 0.756047 0.112847
+ N0 -0.965535 0.260275 -2.07142e-16 N1 -0.865031 0.501718 -5.46348e-16 N2 -0.665182 0.385806 -0.639286
+ txt003
+STRI
+ V0 -1.4355 0.399515 0.112847 V1 -1.48785 0 0.112847 V2 -1.5 0 0.15
+ N0 -0.743044 0.200299 -0.638566 N1 -0.770022 1.36806e-16 -0.638018 N2 -1 0 0
+ txt003
+STRI
+ V0 -1.5 0 0.15 V1 -1.44722 0.402778 0.15 V2 -1.4355 0.399515 0.112847
+ N0 -1 0 0 N1 -0.965535 0.260275 -2.07142e-16 N2 -0.743044 0.200299 -0.638566
+ txt003
+STRI
+ V0 -0.584584 -0.162696 0.00590278 V1 -0.605903 0 0.00590278 V2 0 0 0
+ N0 -0.0218614 -0.00589307 -0.999744 N1 -0.0226746 -0 -0.999743 N2 0 0 -1
+ txt003
+STRI
+ V0 -0.524218 -0.307888 0.00590278 V1 -0.584584 -0.162696 0.00590278 V2 0 0 0
+ N0 -0.0195486 -0.0113382 -0.999745 N1 -0.0218614 -0.00589307 -0.999744 N2 0 0 -1
+ txt003
+STRI
+ V0 -0.430191 -0.430191 0.00590278 V1 -0.524218 -0.307888 0.00590278 V2 0 0 0
+ N0 -0.015968 -0.015968 -0.999745 N1 -0.0195486 -0.0113382 -0.999745 N2 0 0 -1
+ txt003
+STRI
+ V0 -0.307888 -0.524218 0.00590278 V1 -0.430191 -0.430191 0.00590278 V2 0 0 0
+ N0 -0.0113382 -0.0195486 -0.999745 N1 -0.015968 -0.015968 -0.999745 N2 0 0 -1
+ txt003
+STRI
+ V0 -0.162696 -0.584584 0.00590278 V1 -0.307888 -0.524218 0.00590278 V2 0 0 0
+ N0 -0.00589307 -0.0218614 -0.999744 N1 -0.0113382 -0.0195486 -0.999745 N2 0 0 -1
+ txt003
+STRI
+ V0 0 -0.605903 0.00590278 V1 -0.162696 -0.584584 0.00590278 V2 0 0 0
+ N0 -4.94615e-18 -0.0226746 -0.999743 N1 -0.00589307 -0.0218614 -0.999744 N2 0 0 -1
+ txt003
+STRI
+ V0 -0.605903 0 0.00590278 V1 -0.584584 -0.162696 0.00590278 V2 -0.986255 -0.274486 0.0222222
+ N0 -0.0226746 -0 -0.999743 N1 -0.0218614 -0.00589307 -0.999744 N2 -0.0601415 -0.0162121 -0.998058
+ txt003
+STRI
+ V0 -0.986255 -0.274486 0.0222222 V1 -1.02222 0 0.0222222 V2 -0.605903 0 0.00590278
+ N0 -0.0601415 -0.0162121 -0.998058 N1 -0.0623783 -0 -0.998053 N2 -0.0226746 -0 -0.999743
+ txt003
+STRI
+ V0 -0.584584 -0.162696 0.00590278 V1 -0.524218 -0.307888 0.00590278 V2 -0.884412 -0.51944 0.0222222
+ N0 -0.0218614 -0.00589307 -0.999744 N1 -0.0195486 -0.0113382 -0.999745 N2 -0.0537792 -0.0311919 -0.998066
+ txt003
+STRI
+ V0 -0.884412 -0.51944 0.0222222 V1 -0.986255 -0.274486 0.0222222 V2 -0.584584 -0.162696 0.00590278
+ N0 -0.0537792 -0.0311919 -0.998066 N1 -0.0601415 -0.0162121 -0.998058 N2 -0.0218614 -0.00589307 -0.999744
+ txt003
+STRI
+ V0 -0.524218 -0.307888 0.00590278 V1 -0.430191 -0.430191 0.00590278 V2 -0.725778 -0.725778 0.0222222
+ N0 -0.0195486 -0.0113382 -0.999745 N1 -0.015968 -0.015968 -0.999745 N2 -0.0439291 -0.0439291 -0.998068
+ txt003
+STRI
+ V0 -0.725778 -0.725778 0.0222222 V1 -0.884412 -0.51944 0.0222222 V2 -0.524218 -0.307888 0.00590278
+ N0 -0.0439291 -0.0439291 -0.998068 N1 -0.0537792 -0.0311919 -0.998066 N2 -0.0195486 -0.0113382 -0.999745
+ txt003
+STRI
+ V0 -0.430191 -0.430191 0.00590278 V1 -0.307888 -0.524218 0.00590278 V2 -0.51944 -0.884412 0.0222222
+ N0 -0.015968 -0.015968 -0.999745 N1 -0.0113382 -0.0195486 -0.999745 N2 -0.0311919 -0.0537792 -0.998066
+ txt003
+STRI
+ V0 -0.51944 -0.884412 0.0222222 V1 -0.725778 -0.725778 0.0222222 V2 -0.430191 -0.430191 0.00590278
+ N0 -0.0311919 -0.0537792 -0.998066 N1 -0.0439291 -0.0439291 -0.998068 N2 -0.015968 -0.015968 -0.999745
+ txt003
+STRI
+ V0 -0.307888 -0.524218 0.00590278 V1 -0.162696 -0.584584 0.00590278 V2 -0.274486 -0.986255 0.0222222
+ N0 -0.0113382 -0.0195486 -0.999745 N1 -0.00589307 -0.0218614 -0.999744 N2 -0.0162121 -0.0601415 -0.998058
+ txt003
+STRI
+ V0 -0.274486 -0.986255 0.0222222 V1 -0.51944 -0.884412 0.0222222 V2 -0.307888 -0.524218 0.00590278
+ N0 -0.0162121 -0.0601415 -0.998058 N1 -0.0311919 -0.0537792 -0.998066 N2 -0.0113382 -0.0195486 -0.999745
+ txt003
+STRI
+ V0 -0.162696 -0.584584 0.00590278 V1 0 -0.605903 0.00590278 V2 2.22045e-16 -1.02222 0.0222222
+ N0 -0.00589307 -0.0218614 -0.999744 N1 -4.94615e-18 -0.0226746 -0.999743 N2 0 -0.0623783 -0.998053
+ txt003
+STRI
+ V0 2.22045e-16 -1.02222 0.0222222 V1 -0.274486 -0.986255 0.0222222 V2 -0.162696 -0.584584 0.00590278
+ N0 0 -0.0623783 -0.998053 N1 -0.0162121 -0.0601415 -0.998058 N2 -0.00589307 -0.0218614 -0.999744
+ txt003
+STRI
+ V0 -1.02222 0 0.0222222 V1 -0.986255 -0.274486 0.0222222 V2 -1.23918 -0.344878 0.046875
+ N0 -0.0623783 -0 -0.998053 N1 -0.0601415 -0.0162121 -0.998058 N2 -0.136353 -0.0367561 -0.989978
+ txt003
+STRI
+ V0 -1.23918 -0.344878 0.046875 V1 -1.28438 0 0.046875 V2 -1.02222 0 0.0222222
+ N0 -0.136353 -0.0367561 -0.989978 N1 -0.141421 -0 -0.989949 N2 -0.0623783 -0 -0.998053
+ txt003
+STRI
+ V0 -0.986255 -0.274486 0.0222222 V1 -0.884412 -0.51944 0.0222222 V2 -1.11122 -0.652653 0.046875
+ N0 -0.0601415 -0.0162121 -0.998058 N1 -0.0537792 -0.0311919 -0.998066 N2 -0.121932 -0.0707208 -0.990016
+ txt003
+STRI
+ V0 -1.11122 -0.652653 0.046875 V1 -1.23918 -0.344878 0.046875 V2 -0.986255 -0.274486 0.0222222
+ N0 -0.121932 -0.0707208 -0.990016 N1 -0.136353 -0.0367561 -0.989978 N2 -0.0601415 -0.0162121 -0.998058
+ txt003
+STRI
+ V0 -0.884412 -0.51944 0.0222222 V1 -0.725778 -0.725778 0.0222222 V2 -0.911906 -0.911906 0.046875
+ N0 -0.0537792 -0.0311919 -0.998066 N1 -0.0439291 -0.0439291 -0.998068 N2 -0.0996006 -0.0996006 -0.99003
+ txt003
+STRI
+ V0 -0.911906 -0.911906 0.046875 V1 -1.11122 -0.652653 0.046875 V2 -0.884412 -0.51944 0.0222222
+ N0 -0.0996006 -0.0996006 -0.99003 N1 -0.121932 -0.0707208 -0.990016 N2 -0.0537792 -0.0311919 -0.998066
+ txt003
+STRI
+ V0 -0.725778 -0.725778 0.0222222 V1 -0.51944 -0.884412 0.0222222 V2 -0.652653 -1.11122 0.046875
+ N0 -0.0439291 -0.0439291 -0.998068 N1 -0.0311919 -0.0537792 -0.998066 N2 -0.0707208 -0.121932 -0.990016
+ txt003
+STRI
+ V0 -0.652653 -1.11122 0.046875 V1 -0.911906 -0.911906 0.046875 V2 -0.725778 -0.725778 0.0222222
+ N0 -0.0707208 -0.121932 -0.990016 N1 -0.0996006 -0.0996006 -0.99003 N2 -0.0439291 -0.0439291 -0.998068
+ txt003
+STRI
+ V0 -0.51944 -0.884412 0.0222222 V1 -0.274486 -0.986255 0.0222222 V2 -0.344878 -1.23918 0.046875
+ N0 -0.0311919 -0.0537792 -0.998066 N1 -0.0162121 -0.0601415 -0.998058 N2 -0.0367561 -0.136353 -0.989978
+ txt003
+STRI
+ V0 -0.344878 -1.23918 0.046875 V1 -0.652653 -1.11122 0.046875 V2 -0.51944 -0.884412 0.0222222
+ N0 -0.0367561 -0.136353 -0.989978 N1 -0.0707208 -0.121932 -0.990016 N2 -0.0311919 -0.0537792 -0.998066
+ txt003
+STRI
+ V0 -0.274486 -0.986255 0.0222222 V1 2.22045e-16 -1.02222 0.0222222 V2 -2.22045e-16 -1.28437 0.046875
+ N0 -0.0162121 -0.0601415 -0.998058 N1 0 -0.0623783 -0.998053 N2 0 -0.141421 -0.989949
+ txt003
+STRI
+ V0 -2.22045e-16 -1.28437 0.046875 V1 -0.344878 -1.23918 0.046875 V2 -0.274486 -0.986255 0.0222222
+ N0 0 -0.141421 -0.989949 N1 -0.0367561 -0.136353 -0.989978 N2 -0.0162121 -0.0601415 -0.998058
+ txt003
+STRI
+ V0 -1.28438 0 0.046875 V1 -1.23918 -0.344878 0.046875 V2 -1.37754 -0.383385 0.0777778
+ N0 -0.141421 -0 -0.989949 N1 -0.136353 -0.0367561 -0.989978 N2 -0.316788 -0.085395 -0.944644
+ txt003
+STRI
+ V0 -1.37754 -0.383385 0.0777778 V1 -1.42778 0 0.0777778 V2 -1.28438 0 0.046875
+ N0 -0.316788 -0.085395 -0.944644 N1 -0.328521 -0 -0.944497 N2 -0.141421 -0 -0.989949
+ txt003
+STRI
+ V0 -1.23918 -0.344878 0.046875 V1 -1.11122 -0.652653 0.046875 V2 -1.23529 -0.725523 0.0777778
+ N0 -0.136353 -0.0367561 -0.989978 N1 -0.121932 -0.0707208 -0.990016 N2 -0.283331 -0.164332 -0.944838
+ txt003
+STRI
+ V0 -1.23529 -0.725523 0.0777778 V1 -1.37754 -0.383385 0.0777778 V2 -1.23918 -0.344878 0.046875
+ N0 -0.283331 -0.164332 -0.944838 N1 -0.316788 -0.085395 -0.944644 N2 -0.136353 -0.0367561 -0.989978
+ txt003
+STRI
+ V0 -1.11122 -0.652653 0.046875 V1 -0.911906 -0.911906 0.046875 V2 -1.01372 -1.01372 0.0777778
+ N0 -0.121932 -0.0707208 -0.990016 N1 -0.0996006 -0.0996006 -0.99003 N2 -0.231454 -0.231454 -0.944912
+ txt003
+STRI
+ V0 -1.01372 -1.01372 0.0777778 V1 -1.23529 -0.725523 0.0777778 V2 -1.11122 -0.652653 0.046875
+ N0 -0.231454 -0.231454 -0.944912 N1 -0.283331 -0.164332 -0.944838 N2 -0.121932 -0.0707208 -0.990016
+ txt003
+STRI
+ V0 -0.911906 -0.911906 0.046875 V1 -0.652653 -1.11122 0.046875 V2 -0.725523 -1.23529 0.0777778
+ N0 -0.0996006 -0.0996006 -0.99003 N1 -0.0707208 -0.121932 -0.990016 N2 -0.164332 -0.283331 -0.944838
+ txt003
+STRI
+ V0 -0.725523 -1.23529 0.0777778 V1 -1.01372 -1.01372 0.0777778 V2 -0.911906 -0.911906 0.046875
+ N0 -0.164332 -0.283331 -0.944838 N1 -0.231454 -0.231454 -0.944912 N2 -0.0996006 -0.0996006 -0.99003
+ txt003
+STRI
+ V0 -0.652653 -1.11122 0.046875 V1 -0.344878 -1.23918 0.046875 V2 -0.383385 -1.37754 0.0777778
+ N0 -0.0707208 -0.121932 -0.990016 N1 -0.0367561 -0.136353 -0.989978 N2 -0.085395 -0.316788 -0.944644
+ txt003
+STRI
+ V0 -0.383385 -1.37754 0.0777778 V1 -0.725523 -1.23529 0.0777778 V2 -0.652653 -1.11122 0.046875
+ N0 -0.085395 -0.316788 -0.944644 N1 -0.164332 -0.283331 -0.944838 N2 -0.0707208 -0.121932 -0.990016
+ txt003
+STRI
+ V0 -0.344878 -1.23918 0.046875 V1 -2.22045e-16 -1.28437 0.046875 V2 2.22045e-16 -1.42778 0.0777778
+ N0 -0.0367561 -0.136353 -0.989978 N1 0 -0.141421 -0.989949 N2 -6.08223e-17 -0.328521 -0.944497
+ txt003
+STRI
+ V0 2.22045e-16 -1.42778 0.0777778 V1 -0.383385 -1.37754 0.0777778 V2 -0.344878 -1.23918 0.046875
+ N0 -6.08223e-17 -0.328521 -0.944497 N1 -0.085395 -0.316788 -0.944644 N2 -0.0367561 -0.136353 -0.989978
+ txt003
+STRI
+ V0 -1.42778 0 0.0777778 V1 -1.37754 -0.383385 0.0777778 V2 -1.4355 -0.399515 0.112847
+ N0 -0.328521 -0 -0.944497 N1 -0.316788 -0.085395 -0.944644 N2 -0.743044 -0.200299 -0.638566
+ txt003
+STRI
+ V0 -1.4355 -0.399515 0.112847 V1 -1.48785 0 0.112847 V2 -1.42778 0 0.0777778
+ N0 -0.743044 -0.200299 -0.638566 N1 -0.770022 -0 -0.638018 N2 -0.328521 -0 -0.944497
+ txt003
+STRI
+ V0 -1.37754 -0.383385 0.0777778 V1 -1.23529 -0.725523 0.0777778 V2 -1.28726 -0.756047 0.112847
+ N0 -0.316788 -0.085395 -0.944644 N1 -0.283331 -0.164332 -0.944838 N2 -0.665182 -0.385806 -0.639286
+ txt003
+STRI
+ V0 -1.28726 -0.756047 0.112847 V1 -1.4355 -0.399515 0.112847 V2 -1.37754 -0.383385 0.0777778
+ N0 -0.665182 -0.385806 -0.639286 N1 -0.743044 -0.200299 -0.638566 N2 -0.316788 -0.085395 -0.944644
+ txt003
+STRI
+ V0 -1.23529 -0.725523 0.0777778 V1 -1.01372 -1.01372 0.0777778 V2 -1.05637 -1.05637 0.112847
+ N0 -0.283331 -0.164332 -0.944838 N1 -0.231454 -0.231454 -0.944912 N2 -0.543581 -0.543581 -0.639562
+ txt003
+STRI
+ V0 -1.05637 -1.05637 0.112847 V1 -1.28726 -0.756047 0.112847 V2 -1.23529 -0.725523 0.0777778
+ N0 -0.543581 -0.543581 -0.639562 N1 -0.665182 -0.385806 -0.639286 N2 -0.283331 -0.164332 -0.944838
+ txt003
+STRI
+ V0 -1.01372 -1.01372 0.0777778 V1 -0.725523 -1.23529 0.0777778 V2 -0.756047 -1.28726 0.112847
+ N0 -0.231454 -0.231454 -0.944912 N1 -0.164332 -0.283331 -0.944838 N2 -0.385806 -0.665182 -0.639286
+ txt003
+STRI
+ V0 -0.756047 -1.28726 0.112847 V1 -1.05637 -1.05637 0.112847 V2 -1.01372 -1.01372 0.0777778
+ N0 -0.385806 -0.665182 -0.639286 N1 -0.543581 -0.543581 -0.639562 N2 -0.231454 -0.231454 -0.944912
+ txt003
+STRI
+ V0 -0.725523 -1.23529 0.0777778 V1 -0.383385 -1.37754 0.0777778 V2 -0.399515 -1.4355 0.112847
+ N0 -0.164332 -0.283331 -0.944838 N1 -0.085395 -0.316788 -0.944644 N2 -0.200299 -0.743044 -0.638566
+ txt003
+STRI
+ V0 -0.399515 -1.4355 0.112847 V1 -0.756047 -1.28726 0.112847 V2 -0.725523 -1.23529 0.0777778
+ N0 -0.200299 -0.743044 -0.638566 N1 -0.385806 -0.665182 -0.639286 N2 -0.164332 -0.283331 -0.944838
+ txt003
+STRI
+ V0 -0.383385 -1.37754 0.0777778 V1 2.22045e-16 -1.42778 0.0777778 V2 0 -1.48785 0.112847
+ N0 -0.085395 -0.316788 -0.944644 N1 -6.08223e-17 -0.328521 -0.944497 N2 -1.36806e-16 -0.770022 -0.638018
+ txt003
+STRI
+ V0 0 -1.48785 0.112847 V1 -0.399515 -1.4355 0.112847 V2 -0.383385 -1.37754 0.0777778
+ N0 -1.36806e-16 -0.770022 -0.638018 N1 -0.200299 -0.743044 -0.638566 N2 -0.085395 -0.316788 -0.944644
+ txt003
+STRI
+ V0 -1.48785 0 0.112847 V1 -1.4355 -0.399515 0.112847 V2 -1.44722 -0.402778 0.15
+ N0 -0.770022 -0 -0.638018 N1 -0.743044 -0.200299 -0.638566 N2 -0.965535 -0.260275 -2.07142e-16
+ txt003
+STRI
+ V0 -1.44722 -0.402778 0.15 V1 -1.5 0 0.15 V2 -1.48785 0 0.112847
+ N0 -0.965535 -0.260275 -2.07142e-16 N1 -1 0 0 N2 -0.770022 -0 -0.638018
+ txt003
+STRI
+ V0 -1.4355 -0.399515 0.112847 V1 -1.28726 -0.756047 0.112847 V2 -1.29778 -0.762222 0.15
+ N0 -0.743044 -0.200299 -0.638566 N1 -0.665182 -0.385806 -0.639286 N2 -0.865031 -0.501718 -5.46348e-16
+ txt003
+STRI
+ V0 -1.29778 -0.762222 0.15 V1 -1.44722 -0.402778 0.15 V2 -1.4355 -0.399515 0.112847
+ N0 -0.865031 -0.501718 -5.46348e-16 N1 -0.965535 -0.260275 -2.07142e-16 N2 -0.743044 -0.200299 -0.638566
+ txt003
+STRI
+ V0 -1.28726 -0.756047 0.112847 V1 -1.05637 -1.05637 0.112847 V2 -1.065 -1.065 0.15
+ N0 -0.665182 -0.385806 -0.639286 N1 -0.543581 -0.543581 -0.639562 N2 -0.707107 -0.707107 -6.97819e-16
+ txt003
+STRI
+ V0 -1.065 -1.065 0.15 V1 -1.29778 -0.762222 0.15 V2 -1.28726 -0.756047 0.112847
+ N0 -0.707107 -0.707107 -6.97819e-16 N1 -0.865031 -0.501718 -5.46348e-16 N2 -0.665182 -0.385806 -0.639286
+ txt003
+STRI
+ V0 -1.05637 -1.05637 0.112847 V1 -0.756047 -1.28726 0.112847 V2 -0.762222 -1.29778 0.15
+ N0 -0.543581 -0.543581 -0.639562 N1 -0.385806 -0.665182 -0.639286 N2 -0.501718 -0.865031 -5.46348e-16
+ txt003
+STRI
+ V0 -0.762222 -1.29778 0.15 V1 -1.065 -1.065 0.15 V2 -1.05637 -1.05637 0.112847
+ N0 -0.501718 -0.865031 -5.46348e-16 N1 -0.707107 -0.707107 -6.97819e-16 N2 -0.543581 -0.543581 -0.639562
+ txt003
+STRI
+ V0 -0.756047 -1.28726 0.112847 V1 -0.399515 -1.4355 0.112847 V2 -0.402778 -1.44722 0.15
+ N0 -0.385806 -0.665182 -0.639286 N1 -0.200299 -0.743044 -0.638566 N2 -0.260275 -0.965535 -2.07142e-16
+ txt003
+STRI
+ V0 -0.402778 -1.44722 0.15 V1 -0.762222 -1.29778 0.15 V2 -0.756047 -1.28726 0.112847
+ N0 -0.260275 -0.965535 -2.07142e-16 N1 -0.501718 -0.865031 -5.46348e-16 N2 -0.385806 -0.665182 -0.639286
+ txt003
+STRI
+ V0 -0.399515 -1.4355 0.112847 V1 0 -1.48785 0.112847 V2 0 -1.5 0.15
+ N0 -0.200299 -0.743044 -0.638566 N1 -1.36806e-16 -0.770022 -0.638018 N2 0 -1 0
+ txt003
+STRI
+ V0 0 -1.5 0.15 V1 -0.402778 -1.44722 0.15 V2 -0.399515 -1.4355 0.112847
+ N0 0 -1 0 N1 -0.260275 -0.965535 -2.07142e-16 N2 -0.200299 -0.743044 -0.638566
+ txt003
+STRI
+ V0 0.162696 -0.584584 0.00590278 V1 0 -0.605903 0.00590278 V2 0 0 0
+ N0 0.00589307 -0.0218614 -0.999744 N1 0 -0.0226746 -0.999743 N2 0 0 -1
+ txt003
+STRI
+ V0 0.307888 -0.524218 0.00590278 V1 0.162696 -0.584584 0.00590278 V2 0 0 0
+ N0 0.0113382 -0.0195486 -0.999745 N1 0.00589307 -0.0218614 -0.999744 N2 0 0 -1
+ txt003
+STRI
+ V0 0.430191 -0.430191 0.00590278 V1 0.307888 -0.524218 0.00590278 V2 0 0 0
+ N0 0.015968 -0.015968 -0.999745 N1 0.0113382 -0.0195486 -0.999745 N2 0 0 -1
+ txt003
+STRI
+ V0 0.524218 -0.307888 0.00590278 V1 0.430191 -0.430191 0.00590278 V2 0 0 0
+ N0 0.0195486 -0.0113382 -0.999745 N1 0.015968 -0.015968 -0.999745 N2 0 0 -1
+ txt003
+STRI
+ V0 0.584584 -0.162696 0.00590278 V1 0.524218 -0.307888 0.00590278 V2 0 0 0
+ N0 0.0218614 -0.00589307 -0.999744 N1 0.0195486 -0.0113382 -0.999745 N2 0 0 -1
+ txt003
+STRI
+ V0 0.605903 0 0.00590278 V1 0.584584 -0.162696 0.00590278 V2 0 0 0
+ N0 0.0226746 -4.94615e-18 -0.999743 N1 0.0218614 -0.00589307 -0.999744 N2 0 0 -1
+ txt003
+STRI
+ V0 0 -0.605903 0.00590278 V1 0.162696 -0.584584 0.00590278 V2 0.274486 -0.986255 0.0222222
+ N0 0 -0.0226746 -0.999743 N1 0.00589307 -0.0218614 -0.999744 N2 0.0162121 -0.0601415 -0.998058
+ txt003
+STRI
+ V0 0.274486 -0.986255 0.0222222 V1 0 -1.02222 0.0222222 V2 0 -0.605903 0.00590278
+ N0 0.0162121 -0.0601415 -0.998058 N1 0 -0.0623783 -0.998053 N2 0 -0.0226746 -0.999743
+ txt003
+STRI
+ V0 0.162696 -0.584584 0.00590278 V1 0.307888 -0.524218 0.00590278 V2 0.51944 -0.884412 0.0222222
+ N0 0.00589307 -0.0218614 -0.999744 N1 0.0113382 -0.0195486 -0.999745 N2 0.0311919 -0.0537792 -0.998066
+ txt003
+STRI
+ V0 0.51944 -0.884412 0.0222222 V1 0.274486 -0.986255 0.0222222 V2 0.162696 -0.584584 0.00590278
+ N0 0.0311919 -0.0537792 -0.998066 N1 0.0162121 -0.0601415 -0.998058 N2 0.00589307 -0.0218614 -0.999744
+ txt003
+STRI
+ V0 0.307888 -0.524218 0.00590278 V1 0.430191 -0.430191 0.00590278 V2 0.725778 -0.725778 0.0222222
+ N0 0.0113382 -0.0195486 -0.999745 N1 0.015968 -0.015968 -0.999745 N2 0.0439291 -0.0439291 -0.998068
+ txt003
+STRI
+ V0 0.725778 -0.725778 0.0222222 V1 0.51944 -0.884412 0.0222222 V2 0.307888 -0.524218 0.00590278
+ N0 0.0439291 -0.0439291 -0.998068 N1 0.0311919 -0.0537792 -0.998066 N2 0.0113382 -0.0195486 -0.999745
+ txt003
+STRI
+ V0 0.430191 -0.430191 0.00590278 V1 0.524218 -0.307888 0.00590278 V2 0.884412 -0.51944 0.0222222
+ N0 0.015968 -0.015968 -0.999745 N1 0.0195486 -0.0113382 -0.999745 N2 0.0537792 -0.0311919 -0.998066
+ txt003
+STRI
+ V0 0.884412 -0.51944 0.0222222 V1 0.725778 -0.725778 0.0222222 V2 0.430191 -0.430191 0.00590278
+ N0 0.0537792 -0.0311919 -0.998066 N1 0.0439291 -0.0439291 -0.998068 N2 0.015968 -0.015968 -0.999745
+ txt003
+STRI
+ V0 0.524218 -0.307888 0.00590278 V1 0.584584 -0.162696 0.00590278 V2 0.986255 -0.274486 0.0222222
+ N0 0.0195486 -0.0113382 -0.999745 N1 0.0218614 -0.00589307 -0.999744 N2 0.0601415 -0.0162121 -0.998058
+ txt003
+STRI
+ V0 0.986255 -0.274486 0.0222222 V1 0.884412 -0.51944 0.0222222 V2 0.524218 -0.307888 0.00590278
+ N0 0.0601415 -0.0162121 -0.998058 N1 0.0537792 -0.0311919 -0.998066 N2 0.0195486 -0.0113382 -0.999745
+ txt003
+STRI
+ V0 0.584584 -0.162696 0.00590278 V1 0.605903 0 0.00590278 V2 1.02222 2.22045e-16 0.0222222
+ N0 0.0218614 -0.00589307 -0.999744 N1 0.0226746 -4.94615e-18 -0.999743 N2 0.0623783 0 -0.998053
+ txt003
+STRI
+ V0 1.02222 2.22045e-16 0.0222222 V1 0.986255 -0.274486 0.0222222 V2 0.584584 -0.162696 0.00590278
+ N0 0.0623783 0 -0.998053 N1 0.0601415 -0.0162121 -0.998058 N2 0.0218614 -0.00589307 -0.999744
+ txt003
+STRI
+ V0 0 -1.02222 0.0222222 V1 0.274486 -0.986255 0.0222222 V2 0.344878 -1.23918 0.046875
+ N0 0 -0.0623783 -0.998053 N1 0.0162121 -0.0601415 -0.998058 N2 0.0367561 -0.136353 -0.989978
+ txt003
+STRI
+ V0 0.344878 -1.23918 0.046875 V1 0 -1.28438 0.046875 V2 0 -1.02222 0.0222222
+ N0 0.0367561 -0.136353 -0.989978 N1 0 -0.141421 -0.989949 N2 0 -0.0623783 -0.998053
+ txt003
+STRI
+ V0 0.274486 -0.986255 0.0222222 V1 0.51944 -0.884412 0.0222222 V2 0.652653 -1.11122 0.046875
+ N0 0.0162121 -0.0601415 -0.998058 N1 0.0311919 -0.0537792 -0.998066 N2 0.0707208 -0.121932 -0.990016
+ txt003
+STRI
+ V0 0.652653 -1.11122 0.046875 V1 0.344878 -1.23918 0.046875 V2 0.274486 -0.986255 0.0222222
+ N0 0.0707208 -0.121932 -0.990016 N1 0.0367561 -0.136353 -0.989978 N2 0.0162121 -0.0601415 -0.998058
+ txt003
+STRI
+ V0 0.51944 -0.884412 0.0222222 V1 0.725778 -0.725778 0.0222222 V2 0.911906 -0.911906 0.046875
+ N0 0.0311919 -0.0537792 -0.998066 N1 0.0439291 -0.0439291 -0.998068 N2 0.0996006 -0.0996006 -0.99003
+ txt003
+STRI
+ V0 0.911906 -0.911906 0.046875 V1 0.652653 -1.11122 0.046875 V2 0.51944 -0.884412 0.0222222
+ N0 0.0996006 -0.0996006 -0.99003 N1 0.0707208 -0.121932 -0.990016 N2 0.0311919 -0.0537792 -0.998066
+ txt003
+STRI
+ V0 0.725778 -0.725778 0.0222222 V1 0.884412 -0.51944 0.0222222 V2 1.11122 -0.652653 0.046875
+ N0 0.0439291 -0.0439291 -0.998068 N1 0.0537792 -0.0311919 -0.998066 N2 0.121932 -0.0707208 -0.990016
+ txt003
+STRI
+ V0 1.11122 -0.652653 0.046875 V1 0.911906 -0.911906 0.046875 V2 0.725778 -0.725778 0.0222222
+ N0 0.121932 -0.0707208 -0.990016 N1 0.0996006 -0.0996006 -0.99003 N2 0.0439291 -0.0439291 -0.998068
+ txt003
+STRI
+ V0 0.884412 -0.51944 0.0222222 V1 0.986255 -0.274486 0.0222222 V2 1.23918 -0.344878 0.046875
+ N0 0.0537792 -0.0311919 -0.998066 N1 0.0601415 -0.0162121 -0.998058 N2 0.136353 -0.0367561 -0.989978
+ txt003
+STRI
+ V0 1.23918 -0.344878 0.046875 V1 1.11122 -0.652653 0.046875 V2 0.884412 -0.51944 0.0222222
+ N0 0.136353 -0.0367561 -0.989978 N1 0.121932 -0.0707208 -0.990016 N2 0.0537792 -0.0311919 -0.998066
+ txt003
+STRI
+ V0 0.986255 -0.274486 0.0222222 V1 1.02222 2.22045e-16 0.0222222 V2 1.28437 -2.22045e-16 0.046875
+ N0 0.0601415 -0.0162121 -0.998058 N1 0.0623783 0 -0.998053 N2 0.141421 0 -0.989949
+ txt003
+STRI
+ V0 1.28437 -2.22045e-16 0.046875 V1 1.23918 -0.344878 0.046875 V2 0.986255 -0.274486 0.0222222
+ N0 0.141421 0 -0.989949 N1 0.136353 -0.0367561 -0.989978 N2 0.0601415 -0.0162121 -0.998058
+ txt003
+STRI
+ V0 0 -1.28438 0.046875 V1 0.344878 -1.23918 0.046875 V2 0.383385 -1.37754 0.0777778
+ N0 0 -0.141421 -0.989949 N1 0.0367561 -0.136353 -0.989978 N2 0.085395 -0.316788 -0.944644
+ txt003
+STRI
+ V0 0.383385 -1.37754 0.0777778 V1 0 -1.42778 0.0777778 V2 0 -1.28438 0.046875
+ N0 0.085395 -0.316788 -0.944644 N1 0 -0.328521 -0.944497 N2 0 -0.141421 -0.989949
+ txt003
+STRI
+ V0 0.344878 -1.23918 0.046875 V1 0.652653 -1.11122 0.046875 V2 0.725523 -1.23529 0.0777778
+ N0 0.0367561 -0.136353 -0.989978 N1 0.0707208 -0.121932 -0.990016 N2 0.164332 -0.283331 -0.944838
+ txt003
+STRI
+ V0 0.725523 -1.23529 0.0777778 V1 0.383385 -1.37754 0.0777778 V2 0.344878 -1.23918 0.046875
+ N0 0.164332 -0.283331 -0.944838 N1 0.085395 -0.316788 -0.944644 N2 0.0367561 -0.136353 -0.989978
+ txt003
+STRI
+ V0 0.652653 -1.11122 0.046875 V1 0.911906 -0.911906 0.046875 V2 1.01372 -1.01372 0.0777778
+ N0 0.0707208 -0.121932 -0.990016 N1 0.0996006 -0.0996006 -0.99003 N2 0.231454 -0.231454 -0.944912
+ txt003
+STRI
+ V0 1.01372 -1.01372 0.0777778 V1 0.725523 -1.23529 0.0777778 V2 0.652653 -1.11122 0.046875
+ N0 0.231454 -0.231454 -0.944912 N1 0.164332 -0.283331 -0.944838 N2 0.0707208 -0.121932 -0.990016
+ txt003
+STRI
+ V0 0.911906 -0.911906 0.046875 V1 1.11122 -0.652653 0.046875 V2 1.23529 -0.725523 0.0777778
+ N0 0.0996006 -0.0996006 -0.99003 N1 0.121932 -0.0707208 -0.990016 N2 0.283331 -0.164332 -0.944838
+ txt003
+STRI
+ V0 1.23529 -0.725523 0.0777778 V1 1.01372 -1.01372 0.0777778 V2 0.911906 -0.911906 0.046875
+ N0 0.283331 -0.164332 -0.944838 N1 0.231454 -0.231454 -0.944912 N2 0.0996006 -0.0996006 -0.99003
+ txt003
+STRI
+ V0 1.11122 -0.652653 0.046875 V1 1.23918 -0.344878 0.046875 V2 1.37754 -0.383385 0.0777778
+ N0 0.121932 -0.0707208 -0.990016 N1 0.136353 -0.0367561 -0.989978 N2 0.316788 -0.085395 -0.944644
+ txt003
+STRI
+ V0 1.37754 -0.383385 0.0777778 V1 1.23529 -0.725523 0.0777778 V2 1.11122 -0.652653 0.046875
+ N0 0.316788 -0.085395 -0.944644 N1 0.283331 -0.164332 -0.944838 N2 0.121932 -0.0707208 -0.990016
+ txt003
+STRI
+ V0 1.23918 -0.344878 0.046875 V1 1.28437 -2.22045e-16 0.046875 V2 1.42778 2.22045e-16 0.0777778
+ N0 0.136353 -0.0367561 -0.989978 N1 0.141421 0 -0.989949 N2 0.328521 -6.08223e-17 -0.944497
+ txt003
+STRI
+ V0 1.42778 2.22045e-16 0.0777778 V1 1.37754 -0.383385 0.0777778 V2 1.23918 -0.344878 0.046875
+ N0 0.328521 -6.08223e-17 -0.944497 N1 0.316788 -0.085395 -0.944644 N2 0.136353 -0.0367561 -0.989978
+ txt003
+STRI
+ V0 0 -1.42778 0.0777778 V1 0.383385 -1.37754 0.0777778 V2 0.399515 -1.4355 0.112847
+ N0 0 -0.328521 -0.944497 N1 0.085395 -0.316788 -0.944644 N2 0.200299 -0.743044 -0.638566
+ txt003
+STRI
+ V0 0.399515 -1.4355 0.112847 V1 0 -1.48785 0.112847 V2 0 -1.42778 0.0777778
+ N0 0.200299 -0.743044 -0.638566 N1 0 -0.770022 -0.638018 N2 0 -0.328521 -0.944497
+ txt003
+STRI
+ V0 0.383385 -1.37754 0.0777778 V1 0.725523 -1.23529 0.0777778 V2 0.756047 -1.28726 0.112847
+ N0 0.085395 -0.316788 -0.944644 N1 0.164332 -0.283331 -0.944838 N2 0.385806 -0.665182 -0.639286
+ txt003
+STRI
+ V0 0.756047 -1.28726 0.112847 V1 0.399515 -1.4355 0.112847 V2 0.383385 -1.37754 0.0777778
+ N0 0.385806 -0.665182 -0.639286 N1 0.200299 -0.743044 -0.638566 N2 0.085395 -0.316788 -0.944644
+ txt003
+STRI
+ V0 0.725523 -1.23529 0.0777778 V1 1.01372 -1.01372 0.0777778 V2 1.05637 -1.05637 0.112847
+ N0 0.164332 -0.283331 -0.944838 N1 0.231454 -0.231454 -0.944912 N2 0.543581 -0.543581 -0.639562
+ txt003
+STRI
+ V0 1.05637 -1.05637 0.112847 V1 0.756047 -1.28726 0.112847 V2 0.725523 -1.23529 0.0777778
+ N0 0.543581 -0.543581 -0.639562 N1 0.385806 -0.665182 -0.639286 N2 0.164332 -0.283331 -0.944838
+ txt003
+STRI
+ V0 1.01372 -1.01372 0.0777778 V1 1.23529 -0.725523 0.0777778 V2 1.28726 -0.756047 0.112847
+ N0 0.231454 -0.231454 -0.944912 N1 0.283331 -0.164332 -0.944838 N2 0.665182 -0.385806 -0.639286
+ txt003
+STRI
+ V0 1.28726 -0.756047 0.112847 V1 1.05637 -1.05637 0.112847 V2 1.01372 -1.01372 0.0777778
+ N0 0.665182 -0.385806 -0.639286 N1 0.543581 -0.543581 -0.639562 N2 0.231454 -0.231454 -0.944912
+ txt003
+STRI
+ V0 1.23529 -0.725523 0.0777778 V1 1.37754 -0.383385 0.0777778 V2 1.4355 -0.399515 0.112847
+ N0 0.283331 -0.164332 -0.944838 N1 0.316788 -0.085395 -0.944644 N2 0.743044 -0.200299 -0.638566
+ txt003
+STRI
+ V0 1.4355 -0.399515 0.112847 V1 1.28726 -0.756047 0.112847 V2 1.23529 -0.725523 0.0777778
+ N0 0.743044 -0.200299 -0.638566 N1 0.665182 -0.385806 -0.639286 N2 0.283331 -0.164332 -0.944838
+ txt003
+STRI
+ V0 1.37754 -0.383385 0.0777778 V1 1.42778 2.22045e-16 0.0777778 V2 1.48785 0 0.112847
+ N0 0.316788 -0.085395 -0.944644 N1 0.328521 -6.08223e-17 -0.944497 N2 0.770022 -1.36806e-16 -0.638018
+ txt003
+STRI
+ V0 1.48785 0 0.112847 V1 1.4355 -0.399515 0.112847 V2 1.37754 -0.383385 0.0777778
+ N0 0.770022 -1.36806e-16 -0.638018 N1 0.743044 -0.200299 -0.638566 N2 0.316788 -0.085395 -0.944644
+ txt003
+STRI
+ V0 0 -1.48785 0.112847 V1 0.399515 -1.4355 0.112847 V2 0.402778 -1.44722 0.15
+ N0 0 -0.770022 -0.638018 N1 0.200299 -0.743044 -0.638566 N2 0.260275 -0.965535 -2.07142e-16
+ txt003
+STRI
+ V0 0.402778 -1.44722 0.15 V1 0 -1.5 0.15 V2 0 -1.48785 0.112847
+ N0 0.260275 -0.965535 -2.07142e-16 N1 0 -1 0 N2 0 -0.770022 -0.638018
+ txt003
+STRI
+ V0 0.399515 -1.4355 0.112847 V1 0.756047 -1.28726 0.112847 V2 0.762222 -1.29778 0.15
+ N0 0.200299 -0.743044 -0.638566 N1 0.385806 -0.665182 -0.639286 N2 0.501718 -0.865031 -5.46348e-16
+ txt003
+STRI
+ V0 0.762222 -1.29778 0.15 V1 0.402778 -1.44722 0.15 V2 0.399515 -1.4355 0.112847
+ N0 0.501718 -0.865031 -5.46348e-16 N1 0.260275 -0.965535 -2.07142e-16 N2 0.200299 -0.743044 -0.638566
+ txt003
+STRI
+ V0 0.756047 -1.28726 0.112847 V1 1.05637 -1.05637 0.112847 V2 1.065 -1.065 0.15
+ N0 0.385806 -0.665182 -0.639286 N1 0.543581 -0.543581 -0.639562 N2 0.707107 -0.707107 -6.97819e-16
+ txt003
+STRI
+ V0 1.065 -1.065 0.15 V1 0.762222 -1.29778 0.15 V2 0.756047 -1.28726 0.112847
+ N0 0.707107 -0.707107 -6.97819e-16 N1 0.501718 -0.865031 -5.46348e-16 N2 0.385806 -0.665182 -0.639286
+ txt003
+STRI
+ V0 1.05637 -1.05637 0.112847 V1 1.28726 -0.756047 0.112847 V2 1.29778 -0.762222 0.15
+ N0 0.543581 -0.543581 -0.639562 N1 0.665182 -0.385806 -0.639286 N2 0.865031 -0.501718 -5.46348e-16
+ txt003
+STRI
+ V0 1.29778 -0.762222 0.15 V1 1.065 -1.065 0.15 V2 1.05637 -1.05637 0.112847
+ N0 0.865031 -0.501718 -5.46348e-16 N1 0.707107 -0.707107 -6.97819e-16 N2 0.543581 -0.543581 -0.639562
+ txt003
+STRI
+ V0 1.28726 -0.756047 0.112847 V1 1.4355 -0.399515 0.112847 V2 1.44722 -0.402778 0.15
+ N0 0.665182 -0.385806 -0.639286 N1 0.743044 -0.200299 -0.638566 N2 0.965535 -0.260275 -2.07142e-16
+ txt003
+STRI
+ V0 1.44722 -0.402778 0.15 V1 1.29778 -0.762222 0.15 V2 1.28726 -0.756047 0.112847
+ N0 0.965535 -0.260275 -2.07142e-16 N1 0.865031 -0.501718 -5.46348e-16 N2 0.665182 -0.385806 -0.639286
+ txt003
+STRI
+ V0 1.4355 -0.399515 0.112847 V1 1.48785 0 0.112847 V2 1.5 0 0.15
+ N0 0.743044 -0.200299 -0.638566 N1 0.770022 -1.36806e-16 -0.638018 N2 1 0 0
+ txt003
+STRI
+ V0 1.5 0 0.15 V1 1.44722 -0.402778 0.15 V2 1.4355 -0.399515 0.112847
+ N0 1 0 0 N1 0.965535 -0.260275 -2.07142e-16 N2 0.743044 -0.200299 -0.638566
+ txt003
+
+END_SCENE
diff --git a/examples/parallel_for/tacheon/dat/trypsin4pti.dat b/examples/parallel_for/tacheon/dat/trypsin4pti.dat
new file mode 100644
index 0000000..7d547f2
--- /dev/null
+++ b/examples/parallel_for/tacheon/dat/trypsin4pti.dat
@@ -0,0 +1,538 @@
+BEGIN_SCENE
+ OUTFILE /dev/null
+ RESOLUTION 768 768
+ VERBOSE 0
+
+CAMERA
+ ZOOM 1.0
+ ASPECTRATIO 1.0
+ ANTIALIASING 0
+ RAYDEPTH 4
+ CENTER 15.0 20.0 -50.0
+ VIEWDIR 0.0 0.0 1.0
+ UPDIR 0.0 1.0 0.0
+END_CAMERA
+
+
+LIGHT
+ CENTER 40.0 50.0 -40.0
+ RAD 0.2
+ COLOR 0.5 0.5 0.5
+
+LIGHT
+ CENTER -40.0 20.0 -40.0
+ RAD 0.2
+ COLOR 0.5 0.5 0.5
+
+
+TEXDEF O AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0
+ PHONG PLASTIC 0.5 PHONG_SIZE 24.8
+ COLOR 1.0 0.0 0.0 TEXFUNC 0
+TEXALIAS OH O
+TEXALIAS OD1 O
+TEXALIAS OD2 O
+TEXALIAS OE1 O
+TEXALIAS OE2 O
+TEXALIAS OG O
+TEXALIAS OG1 O
+TEXALIAS OG2 O
+TEXALIAS OXT O
+
+TEXDEF C AMBIENT 0.1 DIFFUSE 0.5 SPECULAR 0.0 OPACITY 1.0
+ PHONG PLASTIC 0.5 PHONG_SIZE 24.8
+ COLOR 0.5 0.5 0.5 TEXFUNC 0
+TEXALIAS CA C
+TEXALIAS CB C
+TEXALIAS CD C
+TEXALIAS CD1 C
+TEXALIAS CD2 C
+TEXALIAS CE C
+TEXALIAS CE1 C
+TEXALIAS CE2 C
+TEXALIAS CG C
+TEXALIAS CG1 C
+TEXALIAS CG2 C
+TEXALIAS CZ C
+
+TEXDEF N AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0
+ PHONG PLASTIC 0.5 PHONG_SIZE 24.8
+ COLOR 0.5 0.5 1.0 TEXFUNC 0
+TEXALIAS ND2 N
+TEXALIAS NH1 N
+TEXALIAS NH2 N
+TEXALIAS NE N
+TEXALIAS NE2 N
+TEXALIAS NZ N
+
+TEXDEF SD AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0
+ PHONG METAL 0.5 PHONG_SIZE 24.8
+ COLOR 1.0 1.0 1.0 TEXFUNC 0
+
+TEXDEF SG AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0
+ PHONG PLASTIC 0.5 PHONG_SIZE 24.8
+ COLOR 1.0 1.0 1.0 TEXFUNC 0
+
+SPHERE CENTER 26.465000 27.452000 -2.490000 RAD 1.0 N
+SPHERE CENTER 25.497000 26.862000 -1.573000 RAD 1.0 CA
+SPHERE CENTER 26.193001 26.179001 -0.437000 RAD 1.0 C
+SPHERE CENTER 27.270000 25.549000 -0.624000 RAD 1.0 O
+SPHERE CENTER 24.583000 25.804001 -2.239000 RAD 1.0 CB
+SPHERE CENTER 25.091000 24.375000 -2.409000 RAD 1.0 CG
+SPHERE CENTER 24.018999 23.427999 -2.996000 RAD 1.0 CD
+SPHERE CENTER 23.591000 24.028000 -4.287000 RAD 1.0 NE
+SPHERE CENTER 24.299000 23.972000 -5.389000 RAD 1.0 CZ
+SPHERE CENTER 25.431999 23.261000 -5.440000 RAD 1.0 NH1
+SPHERE CENTER 23.721001 24.372999 -6.467000 RAD 1.0 NH2
+SPHERE CENTER 25.667000 26.396000 0.708000 RAD 1.0 N
+SPHERE CENTER 26.222000 25.760000 1.891000 RAD 1.0 CA
+SPHERE CENTER 26.207001 24.242001 1.830000 RAD 1.0 C
+SPHERE CENTER 25.400000 23.576000 1.139000 RAD 1.0 O
+SPHERE CENTER 25.260000 26.207001 3.033000 RAD 1.0 CB
+SPHERE CENTER 24.511999 27.427999 2.493000 RAD 1.0 CG
+SPHERE CENTER 24.606001 27.382000 0.978000 RAD 1.0 CD
+SPHERE CENTER 27.170000 23.634001 2.462000 RAD 1.0 N
+SPHERE CENTER 27.284000 22.163000 2.498000 RAD 1.0 CA
+SPHERE CENTER 26.042999 21.506001 3.085000 RAD 1.0 C
+SPHERE CENTER 25.752001 20.350000 2.705000 RAD 1.0 O
+SPHERE CENTER 28.424999 21.747000 3.461000 RAD 1.0 CB
+SPHERE CENTER 29.791000 21.886000 2.787000 RAD 1.0 CG
+SPHERE CENTER 29.875000 22.104000 1.543000 RAD 1.0 OD1
+SPHERE CENTER 30.806000 21.500999 3.431000 RAD 1.0 OD2
+SPHERE CENTER 25.393999 22.184000 4.041000 RAD 1.0 N
+SPHERE CENTER 24.172001 21.584999 4.618000 RAD 1.0 CA
+SPHERE CENTER 23.009001 21.375000 3.624000 RAD 1.0 C
+SPHERE CENTER 22.082001 20.603001 3.921000 RAD 1.0 O
+SPHERE CENTER 23.691999 22.330999 5.862000 RAD 1.0 CB
+SPHERE CENTER 23.191999 23.778999 5.639000 RAD 1.0 CG
+SPHERE CENTER 21.961000 24.002001 5.060000 RAD 1.0 CD1
+SPHERE CENTER 23.951000 24.841000 6.050000 RAD 1.0 CD2
+SPHERE CENTER 21.497000 25.281000 4.869000 RAD 1.0 CE1
+SPHERE CENTER 23.510000 26.124001 5.854000 RAD 1.0 CE2
+SPHERE CENTER 22.277000 26.363001 5.249000 RAD 1.0 CZ
+SPHERE CENTER 23.094999 22.004000 2.522000 RAD 1.0 N
+SPHERE CENTER 22.106001 21.863001 1.467000 RAD 1.0 CA
+SPHERE CENTER 22.191999 20.518000 0.830000 RAD 1.0 C
+SPHERE CENTER 21.230000 20.068001 0.167000 RAD 1.0 O
+SPHERE CENTER 22.358000 22.903999 0.371000 RAD 1.0 CB
+SPHERE CENTER 22.145000 24.591999 0.888000 RAD 1.0 SG
+SPHERE CENTER 23.326000 19.826000 1.008000 RAD 1.0 N
+SPHERE CENTER 23.436001 18.459999 0.459000 RAD 1.0 CA
+SPHERE CENTER 22.958000 17.365000 1.407000 RAD 1.0 C
+SPHERE CENTER 22.938000 16.180000 0.999000 RAD 1.0 O
+SPHERE CENTER 24.898001 18.084000 0.131000 RAD 1.0 CB
+SPHERE CENTER 25.572001 19.129000 -0.776000 RAD 1.0 CG
+SPHERE CENTER 27.037001 18.695000 -1.116000 RAD 1.0 CD1
+SPHERE CENTER 24.791000 19.488001 -2.049000 RAD 1.0 CD2
+SPHERE CENTER 22.545000 17.716000 2.628000 RAD 1.0 N
+SPHERE CENTER 22.039000 16.646000 3.528000 RAD 1.0 CA
+SPHERE CENTER 20.615999 16.285000 3.113000 RAD 1.0 C
+SPHERE CENTER 19.860001 17.136000 2.576000 RAD 1.0 O
+SPHERE CENTER 21.764000 17.216999 4.920000 RAD 1.0 CB
+SPHERE CENTER 22.813999 18.035000 5.647000 RAD 1.0 CG
+SPHERE CENTER 22.152000 18.707001 6.870000 RAD 1.0 CD
+SPHERE CENTER 22.980000 19.100000 7.718000 RAD 1.0 OE1
+SPHERE CENTER 21.086000 19.403999 6.779000 RAD 1.0 OE2
+SPHERE CENTER 20.254000 15.031000 3.334000 RAD 1.0 N
+SPHERE CENTER 18.892000 14.554000 3.034000 RAD 1.0 CA
+SPHERE CENTER 17.954000 15.160000 4.079000 RAD 1.0 C
+SPHERE CENTER 18.443001 15.606000 5.146000 RAD 1.0 O
+SPHERE CENTER 18.910000 13.045000 3.274000 RAD 1.0 CB
+SPHERE CENTER 20.226000 12.742000 4.021000 RAD 1.0 CG
+SPHERE CENTER 21.107000 14.009000 3.934000 RAD 1.0 CD
+SPHERE CENTER 16.681999 15.232000 3.767000 RAD 1.0 N
+SPHERE CENTER 15.690000 15.852000 4.661000 RAD 1.0 CA
+SPHERE CENTER 15.550000 15.006000 5.916000 RAD 1.0 C
+SPHERE CENTER 15.693000 13.769000 5.836000 RAD 1.0 O
+SPHERE CENTER 14.367000 15.707000 3.867000 RAD 1.0 CB
+SPHERE CENTER 14.571000 14.716000 2.710000 RAD 1.0 CG
+SPHERE CENTER 16.090000 14.597000 2.574000 RAD 1.0 CD
+SPHERE CENTER 15.365000 15.630000 7.042000 RAD 1.0 N
+SPHERE CENTER 15.310000 14.908000 8.298000 RAD 1.0 CA
+SPHERE CENTER 13.953000 15.177000 8.952000 RAD 1.0 C
+SPHERE CENTER 13.699000 16.320000 9.382000 RAD 1.0 O
+SPHERE CENTER 16.532000 15.383000 9.122000 RAD 1.0 CB
+SPHERE CENTER 16.608000 14.781000 10.525000 RAD 1.0 CG
+SPHERE CENTER 17.132000 13.535000 10.707000 RAD 1.0 CD1
+SPHERE CENTER 16.155001 15.523000 11.588000 RAD 1.0 CD2
+SPHERE CENTER 17.216000 12.999000 11.982000 RAD 1.0 CE1
+SPHERE CENTER 16.266001 14.985000 12.862000 RAD 1.0 CE2
+SPHERE CENTER 16.808001 13.746000 13.047000 RAD 1.0 CZ
+SPHERE CENTER 16.878000 13.192000 14.372000 RAD 1.0 OH
+SPHERE CENTER 13.161000 14.146000 9.088000 RAD 1.0 N
+SPHERE CENTER 11.802000 14.321000 9.642000 RAD 1.0 CA
+SPHERE CENTER 11.855000 14.484000 11.146000 RAD 1.0 C
+SPHERE CENTER 11.105000 15.314000 11.759000 RAD 1.0 O
+SPHERE CENTER 10.963000 13.105000 9.273000 RAD 1.0 CB
+SPHERE CENTER 10.706000 13.192000 7.854000 RAD 1.0 OG1
+SPHERE CENTER 9.611000 13.152000 10.045000 RAD 1.0 CG2
+SPHERE CENTER 12.789000 13.760000 11.726000 RAD 1.0 N
+SPHERE CENTER 13.002000 13.922000 13.198000 RAD 1.0 CA
+SPHERE CENTER 12.107000 12.944000 13.909000 RAD 1.0 C
+SPHERE CENTER 11.333000 12.212000 13.239000 RAD 1.0 O
+SPHERE CENTER 12.235000 12.905000 15.210000 RAD 1.0 N
+SPHERE CENTER 11.516000 11.958000 16.066999 RAD 1.0 CA
+SPHERE CENTER 10.094000 12.319000 16.468000 RAD 1.0 C
+SPHERE CENTER 9.440000 11.442000 17.052000 RAD 1.0 O
+SPHERE CENTER 12.272000 11.936000 17.370001 RAD 1.0 CB
+SPHERE CENTER 13.164000 13.172000 17.399000 RAD 1.0 CG
+SPHERE CENTER 13.281000 13.627000 15.925000 RAD 1.0 CD
+SPHERE CENTER 9.629000 13.519000 16.214001 RAD 1.0 N
+SPHERE CENTER 8.290000 13.980000 16.615999 RAD 1.0 CA
+SPHERE CENTER 7.268000 13.720000 15.515000 RAD 1.0 C
+SPHERE CENTER 7.672000 13.397000 14.387000 RAD 1.0 O
+SPHERE CENTER 8.279000 15.441000 16.966999 RAD 1.0 CB
+SPHERE CENTER 9.221000 15.735000 18.490000 RAD 1.0 SG
+SPHERE CENTER 6.027000 13.680000 15.869000 RAD 1.0 N
+SPHERE CENTER 5.005000 13.220000 14.945000 RAD 1.0 CA
+SPHERE CENTER 3.964000 14.283000 14.630000 RAD 1.0 C
+SPHERE CENTER 2.777000 13.949000 14.377000 RAD 1.0 O
+SPHERE CENTER 4.310000 11.998000 15.592000 RAD 1.0 CB
+SPHERE CENTER 5.273000 10.848000 15.913000 RAD 1.0 CG
+SPHERE CENTER 5.781000 10.034000 14.702000 RAD 1.0 CD
+SPHERE CENTER 6.855000 9.016000 15.126000 RAD 1.0 CE
+SPHERE CENTER 7.357000 8.291000 13.953000 RAD 1.0 NZ
+SPHERE CENTER 4.325000 15.549000 14.618000 RAD 1.0 N
+SPHERE CENTER 3.513000 16.639999 14.122000 RAD 1.0 CA
+SPHERE CENTER 3.561000 16.615000 12.586000 RAD 1.0 C
+SPHERE CENTER 4.270000 15.752000 12.023000 RAD 1.0 O
+SPHERE CENTER 3.984000 17.995001 14.670000 RAD 1.0 CB
+SPHERE CENTER 2.781000 17.424999 11.943000 RAD 1.0 N
+SPHERE CENTER 2.700000 17.355000 10.457000 RAD 1.0 CA
+SPHERE CENTER 2.875000 18.731001 9.887000 RAD 1.0 C
+SPHERE CENTER 1.878000 19.469999 9.653000 RAD 1.0 O
+SPHERE CENTER 1.320000 16.787001 9.970000 RAD 1.0 CB
+SPHERE CENTER 1.186000 15.339000 10.395000 RAD 1.0 CG
+SPHERE CENTER -0.170000 14.751000 9.963000 RAD 1.0 CD
+SPHERE CENTER -1.132000 15.455000 10.801000 RAD 1.0 NE
+SPHERE CENTER -1.531000 14.913000 11.939000 RAD 1.0 CZ
+SPHERE CENTER -1.172000 13.658000 12.165000 RAD 1.0 NH1
+SPHERE CENTER -2.202000 15.647000 12.795000 RAD 1.0 NH2
+SPHERE CENTER 4.154000 19.110001 9.817000 RAD 1.0 N
+SPHERE CENTER 4.595000 20.444000 9.391000 RAD 1.0 CA
+SPHERE CENTER 5.249000 20.388000 8.012000 RAD 1.0 C
+SPHERE CENTER 6.193000 19.612000 7.834000 RAD 1.0 O
+SPHERE CENTER 5.590000 20.988001 10.452000 RAD 1.0 CB
+SPHERE CENTER 4.792000 21.062000 11.815000 RAD 1.0 CG1
+SPHERE CENTER 5.985000 22.451000 10.085000 RAD 1.0 CG2
+SPHERE CENTER 5.689000 21.535999 12.955000 RAD 1.0 CD1
+SPHERE CENTER 4.586000 20.955999 7.035000 RAD 1.0 N
+SPHERE CENTER 5.154000 20.879000 5.697000 RAD 1.0 CA
+SPHERE CENTER 6.286000 21.912001 5.572000 RAD 1.0 C
+SPHERE CENTER 6.156000 23.146000 5.785000 RAD 1.0 O
+SPHERE CENTER 4.095000 21.205000 4.648000 RAD 1.0 CB
+SPHERE CENTER 2.836000 20.316999 4.886000 RAD 1.0 CG1
+SPHERE CENTER 4.655000 20.930000 3.250000 RAD 1.0 CG2
+SPHERE CENTER 3.122000 18.813999 4.850000 RAD 1.0 CD1
+SPHERE CENTER 7.451000 21.372000 5.297000 RAD 1.0 N
+SPHERE CENTER 8.602000 22.257000 5.060000 RAD 1.0 CA
+SPHERE CENTER 9.150000 21.950001 3.673000 RAD 1.0 C
+SPHERE CENTER 8.840000 20.896000 3.088000 RAD 1.0 O
+SPHERE CENTER 9.698000 21.896999 6.092000 RAD 1.0 CB
+SPHERE CENTER 9.226000 22.299999 7.493000 RAD 1.0 CG
+SPHERE CENTER 9.248000 23.850000 7.622000 RAD 1.0 CD
+SPHERE CENTER 8.810000 24.311001 8.962000 RAD 1.0 NE
+SPHERE CENTER 9.575000 24.336000 10.075000 RAD 1.0 CZ
+SPHERE CENTER 10.888000 24.077000 10.044000 RAD 1.0 NH1
+SPHERE CENTER 9.050000 24.893000 11.170000 RAD 1.0 NH2
+SPHERE CENTER 10.178000 22.695000 3.318000 RAD 1.0 N
+SPHERE CENTER 10.959000 22.444000 2.085000 RAD 1.0 CA
+SPHERE CENTER 12.407000 22.010000 2.386000 RAD 1.0 C
+SPHERE CENTER 12.987000 22.511999 3.378000 RAD 1.0 O
+SPHERE CENTER 10.997000 23.770000 1.282000 RAD 1.0 CB
+SPHERE CENTER 9.641000 24.038000 0.627000 RAD 1.0 CG
+SPHERE CENTER 8.639000 24.591999 1.399000 RAD 1.0 CD1
+SPHERE CENTER 9.451000 23.725000 -0.691000 RAD 1.0 CD2
+SPHERE CENTER 7.403000 24.861000 0.831000 RAD 1.0 CE1
+SPHERE CENTER 8.213000 23.993000 -1.249000 RAD 1.0 CE2
+SPHERE CENTER 7.215000 24.576000 -0.494000 RAD 1.0 CZ
+SPHERE CENTER 5.879000 24.768999 -1.060000 RAD 1.0 OH
+SPHERE CENTER 12.977000 21.141001 1.535000 RAD 1.0 N
+SPHERE CENTER 14.449000 20.892000 1.626000 RAD 1.0 CA
+SPHERE CENTER 15.018000 21.045000 0.237000 RAD 1.0 C
+SPHERE CENTER 14.250000 20.837000 -0.740000 RAD 1.0 O
+SPHERE CENTER 14.664000 19.434999 2.142000 RAD 1.0 CB
+SPHERE CENTER 14.283000 18.275999 1.191000 RAD 1.0 CG
+SPHERE CENTER 15.290000 17.639000 0.506000 RAD 1.0 CD1
+SPHERE CENTER 12.962000 17.907000 0.976000 RAD 1.0 CD2
+SPHERE CENTER 14.981000 16.632000 -0.392000 RAD 1.0 CE1
+SPHERE CENTER 12.638000 16.909000 0.061000 RAD 1.0 CE2
+SPHERE CENTER 13.673000 16.261999 -0.626000 RAD 1.0 CZ
+SPHERE CENTER 16.336000 21.281000 0.152000 RAD 1.0 N
+SPHERE CENTER 16.948000 21.292000 -1.153000 RAD 1.0 CA
+SPHERE CENTER 17.365000 19.888000 -1.542000 RAD 1.0 C
+SPHERE CENTER 18.009001 19.184000 -0.744000 RAD 1.0 O
+SPHERE CENTER 18.188000 22.194000 -1.071000 RAD 1.0 CB
+SPHERE CENTER 18.906000 22.263000 -2.442000 RAD 1.0 CG
+SPHERE CENTER 20.089001 21.621000 -2.663000 RAD 1.0 CD1
+SPHERE CENTER 18.361000 23.033001 -3.436000 RAD 1.0 CD2
+SPHERE CENTER 20.733000 21.778999 -3.896000 RAD 1.0 CE1
+SPHERE CENTER 18.990999 23.184999 -4.662000 RAD 1.0 CE2
+SPHERE CENTER 20.184999 22.562000 -4.864000 RAD 1.0 CZ
+SPHERE CENTER 20.826000 22.768000 -6.115000 RAD 1.0 OH
+SPHERE CENTER 16.913000 19.452999 -2.726000 RAD 1.0 N
+SPHERE CENTER 17.295000 18.160000 -3.291000 RAD 1.0 CA
+SPHERE CENTER 18.406000 18.332001 -4.341000 RAD 1.0 C
+SPHERE CENTER 18.166000 18.843000 -5.464000 RAD 1.0 O
+SPHERE CENTER 16.052000 17.558001 -3.946000 RAD 1.0 CB
+SPHERE CENTER 16.354000 16.226999 -4.626000 RAD 1.0 CG
+SPHERE CENTER 17.531000 15.754000 -4.725000 RAD 1.0 OD1
+SPHERE CENTER 15.234000 15.549000 -4.870000 RAD 1.0 ND2
+SPHERE CENTER 19.655001 18.124001 -3.871000 RAD 1.0 N
+SPHERE CENTER 20.851000 18.420000 -4.681000 RAD 1.0 CA
+SPHERE CENTER 20.920000 17.650000 -6.010000 RAD 1.0 C
+SPHERE CENTER 21.385000 18.257000 -6.997000 RAD 1.0 O
+SPHERE CENTER 22.112000 18.070999 -3.866000 RAD 1.0 CB
+SPHERE CENTER 20.333000 16.480000 -6.081000 RAD 1.0 N
+SPHERE CENTER 20.243999 15.784000 -7.383000 RAD 1.0 CA
+SPHERE CENTER 19.287001 16.482000 -8.327000 RAD 1.0 C
+SPHERE CENTER 19.478001 16.368999 -9.556000 RAD 1.0 O
+SPHERE CENTER 19.732000 14.353000 -7.259000 RAD 1.0 CB
+SPHERE CENTER 20.799999 13.485000 -6.626000 RAD 1.0 CG
+SPHERE CENTER 20.299000 12.037000 -6.533000 RAD 1.0 CD
+SPHERE CENTER 21.386999 11.067000 -6.033000 RAD 1.0 CE
+SPHERE CENTER 21.820999 11.437000 -4.681000 RAD 1.0 NZ
+SPHERE CENTER 18.212999 17.041000 -7.772000 RAD 1.0 N
+SPHERE CENTER 17.181999 17.617001 -8.631000 RAD 1.0 CA
+SPHERE CENTER 17.468000 19.070000 -8.921000 RAD 1.0 C
+SPHERE CENTER 16.909000 19.707001 -9.863000 RAD 1.0 O
+SPHERE CENTER 15.833000 17.423000 -7.901000 RAD 1.0 CB
+SPHERE CENTER 18.299000 19.622000 -8.061000 RAD 1.0 N
+SPHERE CENTER 18.625999 21.035999 -8.237000 RAD 1.0 CA
+SPHERE CENTER 17.587999 22.051001 -7.738000 RAD 1.0 C
+SPHERE CENTER 17.702000 23.257999 -8.056000 RAD 1.0 O
+SPHERE CENTER 16.632000 21.566000 -6.970000 RAD 1.0 N
+SPHERE CENTER 15.576000 22.431999 -6.478000 RAD 1.0 CA
+SPHERE CENTER 14.947000 21.879999 -5.199000 RAD 1.0 C
+SPHERE CENTER 15.304000 20.784000 -4.719000 RAD 1.0 O
+SPHERE CENTER 14.553000 22.764999 -7.568000 RAD 1.0 CB
+SPHERE CENTER 14.018000 21.514000 -8.283000 RAD 1.0 CG
+SPHERE CENTER 13.211000 20.593000 -7.394000 RAD 1.0 CD1
+SPHERE CENTER 13.189000 21.898001 -9.518000 RAD 1.0 CD2
+SPHERE CENTER 14.114000 22.691999 -4.605000 RAD 1.0 N
+SPHERE CENTER 13.591000 22.299999 -3.306000 RAD 1.0 CA
+SPHERE CENTER 12.246000 21.612000 -3.398000 RAD 1.0 C
+SPHERE CENTER 11.508000 21.862000 -4.381000 RAD 1.0 O
+SPHERE CENTER 13.406000 23.628000 -2.540000 RAD 1.0 CB
+SPHERE CENTER 14.977000 24.433001 -2.196000 RAD 1.0 SG
+SPHERE CENTER 12.005000 20.672001 -2.530000 RAD 1.0 N
+SPHERE CENTER 10.813000 19.820999 -2.569000 RAD 1.0 CA
+SPHERE CENTER 10.208000 19.822001 -1.167000 RAD 1.0 C
+SPHERE CENTER 10.918000 20.218000 -0.210000 RAD 1.0 O
+SPHERE CENTER 11.110000 18.377001 -3.007000 RAD 1.0 CB
+SPHERE CENTER 11.604000 18.464001 -4.496000 RAD 1.0 CG
+SPHERE CENTER 12.041000 17.093000 -4.992000 RAD 1.0 CD
+SPHERE CENTER 12.104000 16.884001 -6.223000 RAD 1.0 OE1
+SPHERE CENTER 12.461000 16.246000 -4.115000 RAD 1.0 NE2
+SPHERE CENTER 8.983000 19.459000 -1.072000 RAD 1.0 N
+SPHERE CENTER 8.377000 19.427999 0.280000 RAD 1.0 CA
+SPHERE CENTER 8.573000 18.100000 0.950000 RAD 1.0 C
+SPHERE CENTER 8.785000 17.013000 0.347000 RAD 1.0 O
+SPHERE CENTER 6.844000 19.700001 0.273000 RAD 1.0 CB
+SPHERE CENTER 6.304000 18.825001 -0.706000 RAD 1.0 OG1
+SPHERE CENTER 6.585000 21.149000 -0.177000 RAD 1.0 CG2
+SPHERE CENTER 8.526000 18.187000 2.280000 RAD 1.0 N
+SPHERE CENTER 8.582000 16.999001 3.087000 RAD 1.0 CA
+SPHERE CENTER 7.801000 17.273001 4.382000 RAD 1.0 C
+SPHERE CENTER 7.554000 18.469000 4.665000 RAD 1.0 O
+SPHERE CENTER 10.066000 16.503000 3.399000 RAD 1.0 CB
+SPHERE CENTER 10.840000 17.323999 4.462000 RAD 1.0 CG
+SPHERE CENTER 11.188000 16.711000 5.670000 RAD 1.0 CD1
+SPHERE CENTER 11.224000 18.618999 4.188000 RAD 1.0 CD2
+SPHERE CENTER 11.912000 17.452999 6.617000 RAD 1.0 CE1
+SPHERE CENTER 11.948000 19.333000 5.129000 RAD 1.0 CE2
+SPHERE CENTER 12.277000 18.763000 6.344000 RAD 1.0 CZ
+SPHERE CENTER 7.455000 16.219999 5.116000 RAD 1.0 N
+SPHERE CENTER 6.756000 16.414000 6.390000 RAD 1.0 CA
+SPHERE CENTER 7.798000 16.358999 7.491000 RAD 1.0 C
+SPHERE CENTER 8.422000 15.296000 7.692000 RAD 1.0 O
+SPHERE CENTER 5.716000 15.281000 6.557000 RAD 1.0 CB
+SPHERE CENTER 4.973000 15.432000 7.882000 RAD 1.0 CG1
+SPHERE CENTER 4.667000 15.326000 5.371000 RAD 1.0 CG2
+SPHERE CENTER 7.953000 17.509001 8.095000 RAD 1.0 N
+SPHERE CENTER 8.816000 17.659000 9.286000 RAD 1.0 CA
+SPHERE CENTER 7.941000 17.294001 10.498000 RAD 1.0 C
+SPHERE CENTER 6.818000 17.832001 10.661000 RAD 1.0 O
+SPHERE CENTER 9.260000 19.136000 9.274000 RAD 1.0 CB
+SPHERE CENTER 10.066000 19.506001 10.540000 RAD 1.0 CG
+SPHERE CENTER 11.058000 18.667999 11.032000 RAD 1.0 CD1
+SPHERE CENTER 9.728000 20.677999 11.181000 RAD 1.0 CD2
+SPHERE CENTER 11.713000 19.021999 12.217000 RAD 1.0 CE1
+SPHERE CENTER 10.401000 21.042000 12.346000 RAD 1.0 CE2
+SPHERE CENTER 11.371000 20.211000 12.851000 RAD 1.0 CZ
+SPHERE CENTER 12.040000 20.579000 14.049000 RAD 1.0 OH
+SPHERE CENTER 8.505000 16.504999 11.400000 RAD 1.0 N
+SPHERE CENTER 7.774000 16.076000 12.622000 RAD 1.0 CA
+SPHERE CENTER 7.696000 17.099001 13.728000 RAD 1.0 C
+SPHERE CENTER 6.978000 16.834999 14.718000 RAD 1.0 O
+SPHERE CENTER 8.385000 18.202000 13.646000 RAD 1.0 N
+SPHERE CENTER 8.275000 19.365999 14.533000 RAD 1.0 CA
+SPHERE CENTER 9.338000 19.430000 15.620000 RAD 1.0 C
+SPHERE CENTER 9.309000 20.379999 16.415001 RAD 1.0 O
+SPHERE CENTER 10.317000 18.555000 15.610000 RAD 1.0 N
+SPHERE CENTER 11.453000 18.707001 16.541000 RAD 1.0 CA
+SPHERE CENTER 12.763000 18.232000 15.950000 RAD 1.0 C
+SPHERE CENTER 12.753000 17.224001 15.201000 RAD 1.0 O
+SPHERE CENTER 11.179000 18.055000 17.937000 RAD 1.0 CB
+SPHERE CENTER 11.154000 16.283001 17.922001 RAD 1.0 SG
+SPHERE CENTER 13.828000 18.788000 16.528999 RAD 1.0 N
+SPHERE CENTER 15.222000 18.386999 16.261999 RAD 1.0 CA
+SPHERE CENTER 15.644000 18.605000 14.798000 RAD 1.0 C
+SPHERE CENTER 16.306000 17.708000 14.224000 RAD 1.0 O
+SPHERE CENTER 15.486000 16.941000 16.719000 RAD 1.0 CB
+SPHERE CENTER 14.949000 16.624001 18.146999 RAD 1.0 CG
+SPHERE CENTER 15.484000 17.593000 19.195000 RAD 1.0 CD
+SPHERE CENTER 15.081000 17.068001 20.497000 RAD 1.0 NE
+SPHERE CENTER 15.268000 17.830999 21.573999 RAD 1.0 CZ
+SPHERE CENTER 15.870000 19.020000 21.452999 RAD 1.0 NH1
+SPHERE CENTER 14.930000 17.320999 22.753000 RAD 1.0 NH2
+SPHERE CENTER 15.154000 19.670000 14.180000 RAD 1.0 N
+SPHERE CENTER 15.461000 19.893999 12.733000 RAD 1.0 CA
+SPHERE CENTER 16.969000 19.924000 12.482000 RAD 1.0 C
+SPHERE CENTER 17.752001 20.431000 13.327000 RAD 1.0 O
+SPHERE CENTER 14.918000 21.275000 12.366000 RAD 1.0 CB
+SPHERE CENTER 17.282000 19.622000 11.271000 RAD 1.0 N
+SPHERE CENTER 18.584999 19.886999 10.687000 RAD 1.0 CA
+SPHERE CENTER 18.461000 21.087000 9.753000 RAD 1.0 C
+SPHERE CENTER 17.371000 21.708000 9.790000 RAD 1.0 O
+SPHERE CENTER 18.961000 18.612000 9.934000 RAD 1.0 CB
+SPHERE CENTER 19.486000 17.514999 10.843000 RAD 1.0 CG
+SPHERE CENTER 20.042999 16.424999 9.926000 RAD 1.0 CD
+SPHERE CENTER 20.782000 15.386000 10.779000 RAD 1.0 CE
+SPHERE CENTER 20.985001 14.137000 10.021000 RAD 1.0 NZ
+SPHERE CENTER 19.577000 21.643999 9.215000 RAD 1.0 N
+SPHERE CENTER 19.570999 22.903000 8.543000 RAD 1.0 CA
+SPHERE CENTER 18.898001 22.847000 7.144000 RAD 1.0 C
+SPHERE CENTER 18.476000 23.930000 6.690000 RAD 1.0 O
+SPHERE CENTER 20.981001 23.469999 8.429000 RAD 1.0 CB
+SPHERE CENTER 21.461000 24.047001 9.786000 RAD 1.0 CG
+SPHERE CENTER 22.614000 25.047001 9.608000 RAD 1.0 CD
+SPHERE CENTER 22.118999 26.403999 9.384000 RAD 1.0 NE
+SPHERE CENTER 22.948000 27.426001 9.370000 RAD 1.0 CZ
+SPHERE CENTER 24.253000 27.187000 9.415000 RAD 1.0 NH1
+SPHERE CENTER 22.472000 28.634001 9.297000 RAD 1.0 NH2
+SPHERE CENTER 18.870001 21.715000 6.474000 RAD 1.0 N
+SPHERE CENTER 18.209999 21.712999 5.169000 RAD 1.0 CA
+SPHERE CENTER 16.671000 21.559000 5.372000 RAD 1.0 C
+SPHERE CENTER 16.068001 20.466000 5.197000 RAD 1.0 O
+SPHERE CENTER 18.745001 20.506001 4.379000 RAD 1.0 CB
+SPHERE CENTER 18.295000 20.591999 2.909000 RAD 1.0 CG
+SPHERE CENTER 17.721001 21.629000 2.499000 RAD 1.0 OD1
+SPHERE CENTER 18.664000 19.563999 2.134000 RAD 1.0 ND2
+SPHERE CENTER 16.097000 22.643000 5.820000 RAD 1.0 N
+SPHERE CENTER 14.676000 22.662001 6.349000 RAD 1.0 CA
+SPHERE CENTER 14.157000 24.101999 6.384000 RAD 1.0 C
+SPHERE CENTER 14.715000 24.959000 7.120000 RAD 1.0 O
+SPHERE CENTER 14.577000 21.951000 7.736000 RAD 1.0 CB
+SPHERE CENTER 13.128000 21.861000 8.301000 RAD 1.0 CG
+SPHERE CENTER 12.432000 22.889000 8.208000 RAD 1.0 OD1
+SPHERE CENTER 12.975000 21.035000 9.288000 RAD 1.0 ND2
+SPHERE CENTER 13.324000 24.438000 5.381000 RAD 1.0 N
+SPHERE CENTER 12.918000 25.816999 5.120000 RAD 1.0 CA
+SPHERE CENTER 11.388000 25.961000 5.164000 RAD 1.0 C
+SPHERE CENTER 10.669000 24.966000 4.915000 RAD 1.0 O
+SPHERE CENTER 13.372000 26.372999 3.741000 RAD 1.0 CB
+SPHERE CENTER 14.913000 26.191999 3.701000 RAD 1.0 CG
+SPHERE CENTER 15.492000 25.002001 3.268000 RAD 1.0 CD1
+SPHERE CENTER 15.705000 27.252001 4.053000 RAD 1.0 CD2
+SPHERE CENTER 16.877001 24.881001 3.132000 RAD 1.0 CE1
+SPHERE CENTER 17.108999 27.125999 3.941000 RAD 1.0 CE2
+SPHERE CENTER 17.659000 25.957001 3.487000 RAD 1.0 CZ
+SPHERE CENTER 10.949000 27.146999 5.460000 RAD 1.0 N
+SPHERE CENTER 9.480000 27.343000 5.498000 RAD 1.0 CA
+SPHERE CENTER 8.875000 27.670000 4.157000 RAD 1.0 C
+SPHERE CENTER 7.634000 27.622999 4.057000 RAD 1.0 O
+SPHERE CENTER 9.045000 28.475000 6.433000 RAD 1.0 CB
+SPHERE CENTER 9.258000 27.945999 7.875000 RAD 1.0 CG
+SPHERE CENTER 9.119000 29.052000 8.948000 RAD 1.0 CD
+SPHERE CENTER 10.025000 28.736000 10.167000 RAD 1.0 CE
+SPHERE CENTER 9.826000 29.728001 11.231000 RAD 1.0 NZ
+SPHERE CENTER 9.687000 27.909000 3.152000 RAD 1.0 N
+SPHERE CENTER 9.124000 28.167999 1.840000 RAD 1.0 CA
+SPHERE CENTER 10.108000 27.719000 0.765000 RAD 1.0 C
+SPHERE CENTER 11.332000 27.660000 1.047000 RAD 1.0 O
+SPHERE CENTER 8.778000 29.648001 1.642000 RAD 1.0 CB
+SPHERE CENTER 10.000000 30.391001 1.484000 RAD 1.0 OG
+SPHERE CENTER 9.604000 27.471001 -0.422000 RAD 1.0 N
+SPHERE CENTER 10.526000 27.160999 -1.512000 RAD 1.0 CA
+SPHERE CENTER 11.423000 28.346001 -1.863000 RAD 1.0 C
+SPHERE CENTER 12.634000 28.115000 -2.136000 RAD 1.0 O
+SPHERE CENTER 9.782000 26.679001 -2.783000 RAD 1.0 CB
+SPHERE CENTER 10.966000 29.570000 -1.682000 RAD 1.0 N
+SPHERE CENTER 11.751000 30.764000 -1.998000 RAD 1.0 CA
+SPHERE CENTER 12.900000 30.964001 -1.040000 RAD 1.0 C
+SPHERE CENTER 14.032000 31.282000 -1.463000 RAD 1.0 O
+SPHERE CENTER 10.871000 32.021999 -2.024000 RAD 1.0 CB
+SPHERE CENTER 9.868000 32.069000 -3.200000 RAD 1.0 CG
+SPHERE CENTER 8.525000 31.417000 -2.847000 RAD 1.0 CD
+SPHERE CENTER 7.573000 31.562000 -3.638000 RAD 1.0 OE1
+SPHERE CENTER 8.368000 30.636999 -1.865000 RAD 1.0 OE2
+SPHERE CENTER 12.658000 30.686001 0.225000 RAD 1.0 N
+SPHERE CENTER 13.804000 30.775000 1.163000 RAD 1.0 CA
+SPHERE CENTER 14.824000 29.667000 0.941000 RAD 1.0 C
+SPHERE CENTER 16.058001 29.903999 1.049000 RAD 1.0 O
+SPHERE CENTER 13.347000 30.500000 2.601000 RAD 1.0 CB
+SPHERE CENTER 12.813000 31.775999 3.236000 RAD 1.0 CG
+SPHERE CENTER 12.716000 32.875000 2.613000 RAD 1.0 OD1
+SPHERE CENTER 12.096000 31.598000 4.247000 RAD 1.0 OD2
+SPHERE CENTER 14.305000 28.478001 0.644000 RAD 1.0 N
+SPHERE CENTER 15.128000 27.301001 0.379000 RAD 1.0 CA
+SPHERE CENTER 16.006001 27.523001 -0.852000 RAD 1.0 C
+SPHERE CENTER 17.247999 27.267000 -0.809000 RAD 1.0 O
+SPHERE CENTER 14.238000 26.045000 0.259000 RAD 1.0 CB
+SPHERE CENTER 15.047000 24.530001 -0.176000 RAD 1.0 SG
+SPHERE CENTER 15.384000 28.062000 -1.870000 RAD 1.0 N
+SPHERE CENTER 16.191999 28.302000 -3.048000 RAD 1.0 CA
+SPHERE CENTER 17.171000 29.452999 -2.841000 RAD 1.0 C
+SPHERE CENTER 18.246000 29.474001 -3.490000 RAD 1.0 O
+SPHERE CENTER 15.267000 28.570999 -4.266000 RAD 1.0 CB
+SPHERE CENTER 14.634000 27.261000 -4.708000 RAD 1.0 CG
+SPHERE CENTER 15.759000 25.962000 -5.253000 RAD 1.0 SD
+SPHERE CENTER 16.306999 26.625000 -6.805000 RAD 1.0 CE
+SPHERE CENTER 16.775999 30.469999 -2.099000 RAD 1.0 N
+SPHERE CENTER 17.652000 31.617001 -1.869000 RAD 1.0 CA
+SPHERE CENTER 18.910000 31.125999 -1.141000 RAD 1.0 C
+SPHERE CENTER 20.049999 31.469999 -1.556000 RAD 1.0 O
+SPHERE CENTER 16.934000 32.595001 -0.930000 RAD 1.0 CB
+SPHERE CENTER 17.721001 33.839001 -0.540000 RAD 1.0 CG
+SPHERE CENTER 16.740999 35.039001 -0.291000 RAD 1.0 CD
+SPHERE CENTER 15.472000 34.667999 0.404000 RAD 1.0 NE
+SPHERE CENTER 14.256000 34.889999 -0.074000 RAD 1.0 CZ
+SPHERE CENTER 13.983000 35.465000 -1.233000 RAD 1.0 NH1
+SPHERE CENTER 13.260000 34.542999 0.660000 RAD 1.0 NH2
+SPHERE CENTER 18.726999 30.198999 -0.237000 RAD 1.0 N
+SPHERE CENTER 19.889999 29.693001 0.496000 RAD 1.0 CA
+SPHERE CENTER 20.636999 28.649000 -0.297000 RAD 1.0 C
+SPHERE CENTER 21.871000 28.686001 -0.287000 RAD 1.0 O
+SPHERE CENTER 19.416000 29.106001 1.823000 RAD 1.0 CB
+SPHERE CENTER 18.643999 30.132000 2.537000 RAD 1.0 OG1
+SPHERE CENTER 20.615999 28.506001 2.662000 RAD 1.0 CG2
+SPHERE CENTER 19.988001 27.747000 -0.961000 RAD 1.0 N
+SPHERE CENTER 20.669001 26.563999 -1.471000 RAD 1.0 CA
+SPHERE CENTER 20.773001 26.534000 -2.963000 RAD 1.0 C
+SPHERE CENTER 21.341000 25.552999 -3.498000 RAD 1.0 O
+SPHERE CENTER 19.955999 25.260000 -1.056000 RAD 1.0 CB
+SPHERE CENTER 20.128000 24.914000 0.713000 RAD 1.0 SG
+SPHERE CENTER 20.132000 27.441999 -3.608000 RAD 1.0 N
+SPHERE CENTER 19.987000 27.268000 -5.071000 RAD 1.0 CA
+SPHERE CENTER 21.257000 27.575001 -5.849000 RAD 1.0 C
+SPHERE CENTER 21.386000 27.129000 -7.018000 RAD 1.0 O
+SPHERE CENTER 22.225000 28.049999 -5.113000 RAD 1.0 N
+SPHERE CENTER 23.639000 28.131001 -5.505000 RAD 1.0 CA
+SPHERE CENTER 23.886999 29.393000 -6.316000 RAD 1.0 C
+SPHERE CENTER 22.948999 30.065001 -6.822000 RAD 1.0 O
+SPHERE CENTER 25.146000 29.681000 -6.493000 RAD 1.0 N
+SPHERE CENTER 25.617001 30.840000 -7.256000 RAD 1.0 CA
+SPHERE CENTER 25.247999 30.735001 -8.729000 RAD 1.0 C
+SPHERE CENTER 24.962000 31.791000 -9.369000 RAD 1.0 O
+SPHERE CENTER 27.160000 30.980000 -7.146000 RAD 1.0 CB
+SPHERE CENTER 24.919001 29.594000 -9.172000 RAD 1.0 OXT
+
+PLANE
+ CENTER 0.0 -25.0 0.0
+ NORMAL 0.0 1.0 0.0
+ TEXTURE
+ AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0
+ COLOR 1.0 1.0 1.0
+ TEXFUNC 0
+
+END_SCENE
diff --git a/examples/parallel_for/tacheon/index.html b/examples/parallel_for/tacheon/index.html
new file mode 100644
index 0000000..53b63ad
--- /dev/null
+++ b/examples/parallel_for/tacheon/index.html
@@ -0,0 +1,203 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+Parallel raytracer / renderer that demonstrates the use of parallel_for.
+
+<P><I>
+This example includes software developed by John E. Stone. See
+<A HREF=#copyright>here</A> for copyright information.
+</I></P>
+
+<P>
+This example is a 2-D raytracer/renderer that visually shows different parallel scheduling
+methods and their resulting speedup. The code was parallelized by speculating
+that each pixel could be rendered in parallel. The resulting parallel code was
+then checked for correctness by using Intel® Thread Checker, which
+pointed out where synchronization was needed. Minimal synchronization was then
+inserted into the parallel code. The resulting parallel code exhibits good speedup.
+</P>
+
+<P>
+The following versions of the example are provided:
+<DL>
+<DT>serial
+<DD>Original sequential version.
+<DT>tbb1d
+<DD>Parallel version that uses Threading Building Blocks and blocked_range to parallelize
+ over tasks that are groups of scan-lines.
+ <UL>
+ <LI>By default, this version uses one thread per available processor. To change this
+ default, set the TBB_NUM_THREADS environment variable to the desired number of threads before running.
+ <LI>This version uses the preview feature: auto_range_partitioner. No grain size is provided to blocked_range.
+ The blocked_range class uses a default grain size of 1 when none is provided. However, the auto_range_partitioner
+ controls the amount of range splitting dynamically at runtime, resulting in sub-ranges of varying sizes.
+ </UL>
+<DT>tbb
+<DD>Parallel version that uses Threading Building Blocks and blocked_range2d to parallelize
+ over tasks that are rectangular sub-areas.
+ <UL>
+ <LI>By default, this version uses one thread per available processor. To change this
+ default, set the TBB_NUM_THREADS environment variable to the desired number of threads before running.
+ <LI>This version uses a reasonable task grain size by default. To change this default,
+ set the TBB_GRAINSIZE environment variable to the desired grain size before running.
+ The grain size corresponds to the number of pixels (in the X or Y direction, for a
+ rectangular sub-area) in each parallel task.
+ </UL>
+</DL>
+</P>
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="src/video.cpp">src/video.cpp</A>
+<DD>Source code for main program and GUI interfaces.
+<DT><A HREF="src/trace.serial.cpp">src/trace.serial.cpp</A>
+<DD>Source code for original sequential version of example.
+<DT><A HREF="src/trace.tbb1d.cpp">src/trace.tbb1d.cpp</A>
+<DD>Source code for Threading Building Blocks blocked_range (scan-line) version of example.
+<DT><A HREF="src/trace.tbb.cpp">src/trace.tbb.cpp</A>
+<DD>Source code for Threading Building Blocks blocked_range2d (rectangular sub-area) version of example.
+<DT>(src/*.cpp)
+<DD>Remainder of source code for example.
+<DT>(src/*.h)
+<DD>Remainder of include files for example.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="src">src</A>
+<DD>Contains source code and include files for the example.
+<DT><A HREF="dat">dat</A>
+<DD>Contains data sets for running the example.
+<DT><A HREF="vc7.1">vc7.1</A>
+<DD>Contains Microsoft* Visual Studio* .NET 2003 workspace for building and running the example.
+<DT><A HREF="vc8">vc8</A>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example.
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+
+<P>
+For Windows* systems, Microsoft* Visual Studio* projects are provided for each of the above versions.
+</P>
+
+<P>
+The Makefile supports the following build targets (in addition to the <A HREF=../../index.html#build>general</A> ones).
+Here, <<I>version</I>> is one of the above versions of the example, i.e., {serial, tbb1d, tbb}.
+</P>
+<DL>
+<DT><TT>make <<I>version</I>>[_debug]</TT>
+<DD>Build and run a single version (release or debug).
+ Equivalent to 'make build_<<I>version</I>>[_debug] run_<<I>version</I>>'.
+<DT><TT>make build_<<I>version</I>>[_debug]</TT>
+<DD>Compile and link a single version (release or debug).
+ The resulting executable is left in the directory for the example.
+<DT><TT>make run_<<I>version</I>></TT>
+<DD>Run a single version previously produced by one of the above commands.
+<DT><TT>make [(above options or targets)] DATASET={820spheres, balls, balls3, lattice, model2,
+ teapot, trypsin4pti}</TT>
+<DD>Build and run as above, but run with the specified data set.
+<DT><TT>make [(above options or targets)] ARGS=-D</TT>
+<DD>Build and run as above, but run with disabled run-time display updating for use in making performance measurements
+ <I>(strongly recommended when measuring performance or scalability; see note below)</I>.
+<DT><TT>make [(above options or targets)] UI={con, gdi, dd, x, mac}</TT>
+<DD>Build and run as usual, but build with the specified GUI driver: console, GDI+*, Direct Draw*, X11, or OpenGL*
+ (see the description of the <A HREF=../../common/index.html>common GUI code</A>
+ for more information on available graphics support).
+ For Linux* and Mac OS* X systems, the best available driver is detected automatically by the Makefile.
+ For Windows* systems, UI=gdi is the default GUI driver; compiling with UI=dd may offer superior
+ performance, but can only be used if the Microsoft* Direct Draw* SDK is installed on your system
+ and if overlay is supported by your graphics card.
+ Use UI=con to build without the GUI for use in making performance measurements
+ <I>(strongly recommended when measuring performance or scalability; see note below)</I>.
+<DT><TT>make [(above options or targets)] XARCH=x64</TT>
+<DD>Build and run as above, but
+ also specify XARCH=x64 (or XARCH=AMD64 for older compilers) when building the example on Windows* as a 64-bit binary.
+<DT><TT>make [(above options or targets)] DDLIB_DIR=<<I>specify path to library directory of Direct Draw* SDK here</I>></TT>
+<DD>If you experience ddraw.lib linking problems, specify the correct library directory via this option.
+</DL>
+
+<H2>Usage</H2>
+Building via the above make commands, or via Visual Studio projects on Windows* systems, produces executable files
+named tacheon.<<I>version</I>>.exe. To run these executables directly, use one or more of the following commands.
+<DL>
+<DT><TT>tacheon.<<I>version</I>>.exe <<I>dataset</I>></TT>
+<DD>Run this version (release or debug), where <<I>dataset</I>> is the path/name of
+ one of the *.dat files in the <A HREF="dat">dat</A> directory for the example.
+<DT><TT>tacheon.<<I>version</I>>.exe -D <<I>dataset</I>></TT>
+<DD>Run this version (release or debug), but run with disabled run-time display updating
+ for use in making performance measurements
+ <I>(strongly recommended when measuring performance or scalability; see note below)</I>.
+<DT>To run a short version of this example, e.g., for use with Intel® Threading Tools:
+<DD>Build a <I>debug</I> version of the <TT>tbb</TT> example with the GUI turned off
+ (e.g., <TT>make UI=con tbb_debug</TT>; see also the build directions above).
+ <BR>Run it with a small dataset, e.g., <TT>tacheon.tbb.exe -D dat/820spheres.dat</TT>.
+</DL>
+
+<H2>Notes</H2>
+<UL>
+<LI>While running with the GUI display turned on should yield reasonable performance in most cases, <I>running with the GUI
+ display turned off is strongly recommended</I> in order to demonstrate the full performance and scalability of the example.
+<LI>If using the X-windows (X11) GUI on Mac OS* X systems, X11 might not be installed on the system by default.
+ To install X11 on Mac OS* X systems, use the operating system install disk, choose "Optional installs" and select X11 from
+ the "Applications" list. Alternatively, if X11 is not available, build without the GUI (see build targets above).
+</UL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright © 2005-2007 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+
+<I>
+<P>
+<A NAME=copyright>The original source</A> for this example is<BR>
+Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+All rights reserved.
+</P>
+
+<P>
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+</P>
+<OL>
+<LI>Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+<LI>Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+<LI>All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+<LI>The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+</OL>
+
+<P>
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+</P>
+</I>
+
+</BODY>
+</HTML>
diff --git a/examples/parallel_for/tacheon/src/api.cpp b/examples/parallel_for/tacheon/src/api.cpp
new file mode 100644
index 0000000..dd4bea2
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/api.cpp
@@ -0,0 +1,431 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * api.c - This file contains all of the API calls that are defined for
+ * external driver code to use.
+ *
+ * $Id: api.cpp,v 1.5.2.1 2007/06/04 19:23:39 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+
+#include "box.h"
+#include "cylinder.h"
+#include "plane.h"
+#include "quadric.h"
+#include "ring.h"
+#include "sphere.h"
+#include "triangle.h"
+#include "vol.h"
+#include "extvol.h"
+
+#include "texture.h"
+#include "light.h"
+#include "render.h"
+#include "camera.h"
+#include "vector.h"
+#include "intersect.h"
+#include "shade.h"
+#include "util.h"
+#include "imap.h"
+#include "global.h"
+
+#include "video.h"
+
+typedef void * SceneHandle;
+#include "api.h"
+
+
+vector rt_vector(apiflt x, apiflt y, apiflt z) {
+ vector v;
+
+ v.x = x;
+ v.y = y;
+ v.z = z;
+
+ return v;
+}
+
+color rt_color(apiflt r, apiflt g, apiflt b) {
+ color c;
+
+ c.r = r;
+ c.g = g;
+ c.b = b;
+
+ return c;
+}
+
+void rt_initialize(int * argc, char ***argv) {
+ rpcmsg msg;
+
+ reset_object();
+ reset_lights();
+ InitTextures();
+
+ if (!parinitted) {
+ parinitted=1;
+
+ msg.type=1; /* setup a ping message */
+ }
+}
+
+void rt_renderscene(SceneHandle voidscene) {
+ scenedef * scene = (scenedef *) voidscene;
+ renderscene(*scene);
+}
+
+void rt_camerasetup(SceneHandle voidscene, apiflt zoom, apiflt aspectratio,
+ int antialiasing, int raydepth,
+ vector camcent, vector viewvec, vector upvec) {
+ scenedef * scene = (scenedef *) voidscene;
+
+ vector newupvec;
+ vector newviewvec;
+ vector newrightvec;
+
+ VCross((vector *) &upvec, &viewvec, &newrightvec);
+ VNorm(&newrightvec);
+
+ VCross((vector *) &viewvec, &newrightvec, &newupvec);
+ VNorm(&newupvec);
+
+ newviewvec=viewvec;
+ VNorm(&newviewvec);
+
+
+ scene->camzoom=zoom;
+ scene->aspectratio=aspectratio;
+ scene->antialiasing=antialiasing;
+ scene->raydepth=raydepth;
+ scene->camcent=camcent;
+ scene->camviewvec=newviewvec;
+ scene->camrightvec=newrightvec;
+ scene->camupvec=newupvec;
+}
+
+void rt_outputfile(SceneHandle voidscene, char * outname) {
+ scenedef * scene = (scenedef *) voidscene;
+ strcpy((char *) &scene->outfilename, outname);
+}
+
+void rt_resolution(SceneHandle voidscene, int hres, int vres) {
+ scenedef * scene = (scenedef *) voidscene;
+ scene->hres=hres;
+ scene->vres=vres;
+}
+
+void rt_verbose(SceneHandle voidscene, int v) {
+ scenedef * scene = (scenedef *) voidscene;
+ scene->verbosemode = v;
+}
+
+void rt_rawimage(SceneHandle voidscene, unsigned char *rawimage) {
+ scenedef * scene = (scenedef *) voidscene;
+ scene->rawimage = rawimage;
+}
+
+void rt_background(SceneHandle voidscene, color col) {
+ scenedef * scene = (scenedef *) voidscene;
+ scene->background.r = col.r;
+ scene->background.g = col.g;
+ scene->background.b = col.b;
+}
+
+void rt_boundmode(SceneHandle voidscene, int mode) {
+ scenedef * scene = (scenedef *) voidscene;
+ scene->boundmode = mode;
+}
+
+void rt_boundthresh(SceneHandle voidscene, int threshold) {
+ scenedef * scene = (scenedef *) voidscene;
+
+ if (threshold > 1) {
+ scene->boundthresh = threshold;
+ }
+ else {
+ rtmesg("Ignoring out-of-range automatic bounding threshold.\n");
+ rtmesg("Automatic bounding threshold reset to default.\n");
+ scene->boundthresh = MAXOCTNODES;
+ }
+}
+
+void rt_displaymode(SceneHandle voidscene, int mode) {
+ scenedef * scene = (scenedef *) voidscene;
+ scene->displaymode = mode;
+}
+
+
+void rt_scenesetup(SceneHandle voidscene, char * outname, int hres, int vres, int verbose) {
+ rt_outputfile(voidscene, outname);
+ rt_resolution(voidscene, hres, vres);
+ rt_verbose(voidscene, verbose);
+}
+
+SceneHandle rt_newscene(void) {
+ scenedef * scene;
+ SceneHandle voidscene;
+
+ scene = (scenedef *) malloc(sizeof(scenedef));
+ memset(scene, 0, sizeof(scenedef)); /* clear all valuas to 0 */
+
+ voidscene = (SceneHandle) scene;
+
+ rt_outputfile(voidscene, "/dev/null"); /* default output file (.tga) */
+ rt_resolution(voidscene, 512, 512); /* 512x512 resolution */
+ rt_verbose(voidscene, 0); /* verbose messages off */
+ rt_rawimage(voidscene, NULL); /* raw image output off */
+ rt_boundmode(voidscene, RT_BOUNDING_ENABLED); /* spatial subdivision on */
+ rt_boundthresh(voidscene, MAXOCTNODES); /* default threshold */
+ rt_displaymode(voidscene, RT_DISPLAY_ENABLED); /* video output on */
+ rt_camerasetup(voidscene, 1.0, 1.0, 0, 6,
+ rt_vector(0.0, 0.0, 0.0),
+ rt_vector(0.0, 0.0, 1.0),
+ rt_vector(0.0, 1.0, 0.0));
+
+ return scene;
+}
+
+void rt_deletescene(SceneHandle scene) {
+ if (scene != NULL)
+ free(scene);
+}
+
+void apitextotex(apitexture * apitex, texture * tex) {
+ switch(apitex->texturefunc) {
+ case 0:
+ tex->texfunc=(color(*)(void *, void *, void *))(standard_texture);
+ break;
+
+ case 1:
+ tex->texfunc=(color(*)(void *, void *, void *))(checker_texture);
+ break;
+
+ case 2:
+ tex->texfunc=(color(*)(void *, void *, void *))(grit_texture);
+ break;
+
+ case 3:
+ tex->texfunc=(color(*)(void *, void *, void *))(marble_texture);
+ break;
+
+ case 4:
+ tex->texfunc=(color(*)(void *, void *, void *))(wood_texture);
+ break;
+
+ case 5:
+ tex->texfunc=(color(*)(void *, void *, void *))(gnoise_texture);
+ break;
+
+ case 6:
+ tex->texfunc=(color(*)(void *, void *, void *))(cyl_checker_texture);
+ break;
+
+ case 7:
+ tex->texfunc=(color(*)(void *, void *, void *))(image_sphere_texture);
+ tex->img=AllocateImage((char *)apitex->imap);
+ break;
+
+ case 8:
+ tex->texfunc=(color(*)(void *, void *, void *))(image_cyl_texture);
+ tex->img=AllocateImage((char *)apitex->imap);
+ break;
+
+ case 9:
+ tex->texfunc=(color(*)(void *, void *, void *))(image_plane_texture);
+ tex->img=AllocateImage((char *)apitex->imap);
+ break;
+
+ default:
+ tex->texfunc=(color(*)(void *, void *, void *))(standard_texture);
+ break;
+ }
+
+ tex->ctr = apitex->ctr;
+ tex->rot = apitex->rot;
+ tex->scale = apitex->scale;
+ tex->uaxs = apitex->uaxs;
+ tex->vaxs = apitex->vaxs;
+ tex->ambient = apitex->ambient;
+ tex->diffuse = apitex->diffuse;
+ tex->specular = apitex->specular;
+ tex->opacity = apitex->opacity;
+ tex->col = apitex->col;
+
+ tex->islight = 0;
+ tex->shadowcast = 1;
+ tex->phong = 0.0;
+ tex->phongexp = 0.0;
+ tex->phongtype = 0;
+}
+
+void * rt_texture(apitexture * apitex) {
+ texture * tex;
+
+ tex=(texture *)rt_getmem(sizeof(texture));
+ apitextotex(apitex, tex);
+ return(tex);
+}
+
+void rt_tex_color(void * voidtex, color col) {
+ texture * tex = (texture *) voidtex;
+ tex->col = col;
+}
+
+void rt_tex_phong(void * voidtex, apiflt phong, apiflt phongexp, int type) {
+ texture * tex = (texture *) voidtex;
+ tex->phong = phong;
+ tex->phongexp = phongexp;
+ tex->phongtype = type;
+}
+
+void rt_light(void * tex, vector ctr, apiflt rad) {
+ point_light * li;
+
+ li=newlight(tex, (vector) ctr, rad);
+
+ li->tex->islight=1;
+ li->tex->shadowcast=1;
+ li->tex->diffuse=0.0;
+ li->tex->specular=0.0;
+ li->tex->opacity=1.0;
+
+ add_light(li);
+ add_object((object *)li);
+}
+
+void rt_scalarvol(void * tex, vector min, vector max,
+ int xs, int ys, int zs, char * fname, void * invol) {
+ add_object((object *) newscalarvol(tex, (vector)min, (vector)max, xs, ys, zs, fname, (scalarvol *) invol));
+}
+
+void rt_extvol(void * tex, vector min, vector max, int samples, flt (* evaluator)(flt, flt, flt)) {
+ add_object((object *) newextvol(tex, (vector)min, (vector)max, samples, evaluator));
+}
+
+void rt_box(void * tex, vector min, vector max) {
+ add_object((object *) newbox(tex, (vector)min, (vector)max));
+}
+
+void rt_cylinder(void * tex, vector ctr, vector axis, apiflt rad) {
+ add_object(newcylinder(tex, (vector)ctr, (vector)axis, rad));
+}
+
+void rt_fcylinder(void * tex, vector ctr, vector axis, apiflt rad) {
+ add_object(newfcylinder(tex, (vector)ctr, (vector)axis, rad));
+}
+
+void rt_plane(void * tex, vector ctr, vector norm) {
+ add_object(newplane(tex, (vector)ctr, (vector)norm));
+}
+
+void rt_ring(void * tex, vector ctr, vector norm, apiflt a, apiflt b) {
+ add_object(newring(tex, (vector)ctr, (vector)norm, a, b));
+}
+
+void rt_sphere(void * tex, vector ctr, apiflt rad) {
+ add_object(newsphere(tex, (vector)ctr, rad));
+}
+
+void rt_tri(void * tex, vector v0, vector v1, vector v2) {
+ object * trn;
+
+ trn = newtri(tex, (vector)v0, (vector)v1, (vector)v2);
+
+ if (trn != NULL) {
+ add_object(trn);
+ }
+}
+
+void rt_stri(void * tex, vector v0, vector v1, vector v2,
+ vector n0, vector n1, vector n2) {
+ object * trn;
+
+ trn = newstri(tex, (vector)v0, (vector)v1, (vector)v2, (vector)n0, (vector)n1, (vector)n2);
+
+ if (trn != NULL) {
+ add_object(trn);
+ }
+}
+
+void rt_quadsphere(void * tex, vector ctr, apiflt rad) {
+ quadric * q;
+ flt factor;
+ q=(quadric *) newquadric();
+ factor= 1.0 / (rad*rad);
+ q->tex=(texture *)tex;
+ q->ctr=ctr;
+
+ q->mat.a=factor;
+ q->mat.b=0.0;
+ q->mat.c=0.0;
+ q->mat.d=0.0;
+ q->mat.e=factor;
+ q->mat.f=0.0;
+ q->mat.g=0.0;
+ q->mat.h=factor;
+ q->mat.i=0.0;
+ q->mat.j=-1.0;
+
+ add_object((object *)q);
+}
diff --git a/examples/parallel_for/tacheon/src/api.h b/examples/parallel_for/tacheon/src/api.h
new file mode 100644
index 0000000..caa4256
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/api.h
@@ -0,0 +1,219 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*****************************************************************************
+ * api.h - The declarations and prototypes needed so that 3rd party driver *
+ * code can run the raytracer. Third party driver code should *
+ * only use the functions in this header file to interface with *
+ * the rendering engine. *
+ *************************************************************************** */
+
+
+/*
+ * $Id: api.h,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+
+/********************************************/
+/* Types defined for use with the API calls */
+/********************************************/
+
+#ifdef USESINGLEFLT
+typedef float apiflt; /* generic floating point number */
+#else
+typedef double apiflt; /* generic floating point number */
+#endif
+
+typedef void * SceneHandle;
+
+typedef struct {
+ int texturefunc; /* which texture function to use */
+ color col; /* base object color */
+ int shadowcast; /* does the object cast a shadow */
+ apiflt ambient; /* ambient lighting */
+ apiflt diffuse; /* diffuse reflection */
+ apiflt specular; /* specular reflection */
+ apiflt opacity; /* how opaque the object is */
+ vector ctr; /* origin of texture */
+ vector rot; /* rotation of texture around origin */
+ vector scale; /* scale of texture in x,y,z */
+ vector uaxs; /* planar map u axis */
+ vector vaxs; /* planar map v axis */
+ char imap[96]; /* name of image map */
+} apitexture;
+
+
+/*******************************************************************
+ * NOTE: The value passed in apitexture.texturefunc corresponds to
+ * the meanings given in this table:
+ *
+ * 0 - No texture function is applied other than standard lighting.
+ * 1 - 3D checkerboard texture. Red & Blue checkers through 3d space.
+ * 2 - Grit texture, roughens up the surface of the object a bit.
+ * 3 - 3D marble texture. Makes a 3D swirl pattern through the object.
+ * 4 - 3D wood texture. Makes a 3D wood pattern through the object.
+ * 5 - 3D gradient noise function.
+ * 6 - I've forgotten :-)
+ * 7 - Cylindrical Image Map **** IMAGE MAPS REQUIRE the filename
+ * 8 - Spherical Image Map of the image be put in imap[]
+ * 9 - Planar Image Map part of the texture...
+ * planar requires uaxs, and vaxs..
+ *
+ *******************************************************************/
+
+/********************************************/
+/* Functions implemented to provide the API */
+/********************************************/
+
+vector rt_vector(apiflt x, apiflt y, apiflt z); /* helper to make vectors */
+color rt_color(apiflt r, apiflt g, apiflt b); /* helper to make colors */
+
+void rt_initialize(int *, char ***);/* reset raytracer, memory deallocation */
+void rt_finalize(void); /* close down for good.. */
+
+SceneHandle rt_newscene(void); /* allocate new scene */
+void rt_deletescene(SceneHandle); /* delete a scene */
+void rt_renderscene(SceneHandle); /* raytrace the current scene */
+void rt_outputfile(SceneHandle, char * outname);
+void rt_resolution(SceneHandle, int hres, int vres);
+void rt_verbose(SceneHandle, int v);
+void rt_rawimage(SceneHandle, unsigned char *rawimage);
+void rt_background(SceneHandle, color);
+
+/* Parameter values for rt_boundmode() */
+#define RT_BOUNDING_DISABLED 0
+#define RT_BOUNDING_ENABLED 1
+
+void rt_boundmode(SceneHandle, int);
+void rt_boundthresh(SceneHandle, int);
+
+/* Parameter values for rt_displaymode() */
+#define RT_DISPLAY_DISABLED 0
+#define RT_DISPLAY_ENABLED 1
+
+void rt_displaymode(SceneHandle, int);
+
+void rt_scenesetup(SceneHandle, char *, int, int, int);
+ /* scene, output filename, horizontal resolution, vertical resolution,
+ verbose mode */
+
+
+void rt_camerasetup(SceneHandle, apiflt, apiflt, int, int,
+ vector, vector, vector);
+ /* camera parms: scene, zoom, aspectratio, antialiasing, raydepth,
+ camera center, view direction, up direction */
+
+
+
+void * rt_texture(apitexture *);
+ /* pointer to the texture struct that would have been passed to each
+ object() call in older revisions.. */
+
+
+
+
+void rt_light(void * , vector, apiflt); /* add a light */
+ /* light parms: texture, center, radius */
+
+void rt_sphere(void *, vector, apiflt); /* add a sphere */
+ /* sphere parms: texture, center, radius */
+
+void rt_scalarvol(void *, vector, vector,
+ int, int, int, char *, void *);
+
+void rt_extvol(void *, vector, vector, int, apiflt (* evaluator)(apiflt, apiflt, apiflt));
+
+void rt_box(void *, vector, vector);
+ /* box parms: texture, min, max */
+
+void rt_plane(void *, vector, vector);
+ /* plane parms: texture, center, normal */
+
+void rt_ring(void *, vector, vector, apiflt, apiflt);
+ /* ring parms: texture, center, normal, inner, outer */
+
+void rt_tri(void *, vector, vector, vector);
+ /* tri parms: texture, vertex 0, vertex 1, vertex 2 */
+
+void rt_stri(void *, vector, vector, vector,
+ vector, vector, vector);
+ /* stri parms: texture, vertex 0, vertex 1, vertex 2, norm 0, norm 1, norm 2 */
+
+void rt_heightfield(void *, vector, int, int, apiflt *, apiflt, apiflt);
+ /* field parms: texture, center, m, n, field, wx, wy */
+
+void rt_landscape(void *, int, int, vector, apiflt, apiflt);
+
+void rt_quadsphere(void *, vector, apiflt); /* add quadric sphere */
+ /* sphere parms: texture, center, radius */
+
+void rt_cylinder(void *, vector, vector, apiflt);
+
+void rt_fcylinder(void *, vector, vector, apiflt);
+
+void rt_polycylinder(void *, vector *, int, apiflt);
+
+
+/* new texture handling routines */
+void rt_tex_color(void * voidtex, color col);
+
+#define RT_PHONG_PLASTIC 0
+#define RT_PHONG_METAL 1
+void rt_tex_phong(void * voidtex, apiflt phong, apiflt phongexp, int type);
diff --git a/examples/parallel_for/tacheon/src/apigeom.cpp b/examples/parallel_for/tacheon/src/apigeom.cpp
new file mode 100644
index 0000000..4b30616
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/apigeom.cpp
@@ -0,0 +1,281 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * api.c - This file contains all of the API calls that are defined for
+ * external driver code to use.
+ *
+ * $Id: apigeom.cpp,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "api.h"
+#include "macros.h"
+#include "vector.h"
+
+#define MyVNorm(a) VNorm ((vector *) a)
+
+void rt_polycylinder(void * tex, vector * points, int numpts, apiflt rad) {
+ vector a;
+ int i;
+
+ if ((points == NULL) || (numpts == 0)) {
+ return;
+ }
+
+ if (numpts > 0) {
+ rt_sphere(tex, points[0], rad);
+
+ if (numpts > 1) {
+ for (i=1; i<numpts; i++) {
+ a.x = points[i].x - points[i-1].x;
+ a.y = points[i].y - points[i-1].y;
+ a.z = points[i].z - points[i-1].z;
+
+ rt_fcylinder(tex, points[i-1], a, rad);
+ rt_sphere(tex, points[i], rad);
+ }
+ }
+ }
+}
+
+void rt_heightfield(void * tex, vector ctr, int m, int n,
+ apiflt * field, apiflt wx, apiflt wy) {
+ int xx,yy;
+ vector v0, v1, v2;
+ apiflt xoff, yoff, zoff;
+
+ xoff=ctr.x - (wx / 2.0);
+ yoff=ctr.z - (wy / 2.0);
+ zoff=ctr.y;
+
+ for (yy=0; yy<(n-1); yy++) {
+ for (xx=0; xx<(m-1); xx++) {
+ v0.x=wx*(xx )/(m*1.0) + xoff;
+ v0.y=field[(yy )*m + (xx )] + zoff;
+ v0.z=wy*(yy )/(n*1.0) + yoff;
+
+ v1.x=wx*(xx + 1)/(m*1.0) + xoff;
+ v1.y=field[(yy )*m + (xx + 1)] + zoff;
+ v1.z=wy*(yy )/(n*1.0) + yoff;
+
+ v2.x=wx*(xx + 1)/(m*1.0) + xoff;
+ v2.y=field[(yy + 1)*m + (xx + 1)] + zoff;
+ v2.z=wy*(yy + 1)/(n*1.0) + yoff;
+
+ rt_tri(tex, v1, v0, v2);
+
+ v0.x=wx*(xx )/(m*1.0) + xoff;
+ v0.y=field[(yy )*m + (xx )] + zoff;
+ v0.z=wy*(yy )/(n*1.0) + yoff;
+
+ v1.x=wx*(xx )/(m*1.0) + xoff;
+ v1.y=field[(yy + 1)*m + (xx )] + zoff;
+ v1.z=wy*(yy + 1)/(n*1.0) + yoff;
+
+ v2.x=wx*(xx + 1)/(m*1.0) + xoff;
+ v2.y=field[(yy + 1)*m + (xx + 1)] + zoff;
+ v2.z=wy*(yy + 1)/(n*1.0) + yoff;
+
+ rt_tri(tex, v0, v1, v2);
+ }
+ }
+} /* end of heightfield */
+
+
+static void rt_sheightfield(void * tex, vector ctr, int m, int n,
+ apiflt * field, apiflt wx, apiflt wy) {
+ vector * vertices;
+ vector * normals;
+ vector offset;
+ apiflt xinc, yinc;
+ int x, y, addr;
+
+ vertices = (vector *) malloc(m*n*sizeof(vector));
+ normals = (vector *) malloc(m*n*sizeof(vector));
+
+ offset.x = ctr.x - (wx / 2.0);
+ offset.y = ctr.z - (wy / 2.0);
+ offset.z = ctr.y;
+
+ xinc = wx / ((apiflt) m);
+ yinc = wy / ((apiflt) n);
+
+ /* build vertex list */
+ for (y=0; y<n; y++) {
+ for (x=0; x<m; x++) {
+ addr = y*m + x;
+ vertices[addr] = rt_vector(
+ x * xinc + offset.x,
+ field[addr] + offset.z,
+ y * yinc + offset.y);
+ }
+ }
+
+ /* build normals from vertex list */
+ for (x=1; x<m; x++) {
+ normals[x] = normals[(n - 1)*m + x] = rt_vector(0.0, 1.0, 0.0);
+ }
+ for (y=1; y<n; y++) {
+ normals[y*m] = normals[y*m + (m-1)] = rt_vector(0.0, 1.0, 0.0);
+ }
+ for (y=1; y<(n-1); y++) {
+ for (x=1; x<(m-1); x++) {
+ addr = y*m + x;
+
+ normals[addr] = rt_vector(
+ -(field[addr + 1] - field[addr - 1]) / (2.0 * xinc),
+ 1.0,
+ -(field[addr + m] - field[addr - m]) / (2.0 * yinc));
+
+ MyVNorm(&normals[addr]);
+ }
+ }
+
+ /* generate actual triangles */
+ for (y=0; y<(n-1); y++) {
+ for (x=0; x<(m-1); x++) {
+ addr = y*m + x;
+
+ rt_stri(tex, vertices[addr], vertices[addr + 1 + m], vertices[addr + 1],
+ normals[addr], normals[addr + 1 + m], normals[addr + 1]);
+ rt_stri(tex, vertices[addr], vertices[addr + m], vertices[addr + 1 + m],
+ normals[addr], normals[addr + m], normals[addr + 1 + m]);
+ }
+ }
+
+ free(normals);
+ free(vertices);
+} /* end of smoothed heightfield */
+
+
+static void adjust(apiflt *base, int xres, int yres, apiflt wx, apiflt wy,
+ int xa, int ya, int x, int y, int xb, int yb) {
+ apiflt d, v;
+
+ if (base[x + (xres*y)]==0.0) {
+
+ d=(abs(xa - xb) / (xres * 1.0))*wx + (abs(ya - yb) / (yres * 1.0))*wy;
+
+ v=(base[xa + (xres*ya)] + base[xb + (xres*yb)]) / 2.0 +
+ (((((rand() % 1000) - 500.0)/500.0)*d) / 8.0);
+
+ if (v < 0.0) v=0.0;
+ if (v > (xres + yres)) v=(xres + yres);
+ base[x + (xres * y)]=v;
+ }
+}
+
+static void subdivide(apiflt *base, int xres, int yres, apiflt wx, apiflt wy,
+ int x1, int y1, int x2, int y2) {
+ long x,y;
+
+ if (((x2 - x1) < 2) && ((y2 - y1) < 2)) { return; }
+
+ x=(x1 + x2) / 2;
+ y=(y1 + y2) / 2;
+
+ adjust(base, xres, yres, wx, wy, x1, y1, x, y1, x2, y1);
+ adjust(base, xres, yres, wx, wy, x2, y1, x2, y, x2, y2);
+ adjust(base, xres, yres, wx, wy, x1, y2, x, y2, x2, y2);
+ adjust(base, xres, yres, wx, wy, x1, y1, x1, y, x1, y2);
+
+
+ if (base[x + xres*y]==0.0) {
+ base[x + (xres * y)]=(base[x1 + xres*y1] + base[x2 + xres*y1] +
+ base[x2 + xres*y2] + base[x1 + xres*y2] )/4.0;
+ }
+
+ subdivide(base, xres, yres, wx, wy, x1, y1 ,x ,y);
+ subdivide(base, xres, yres, wx, wy, x, y1, x2, y);
+ subdivide(base, xres, yres, wx, wy, x, y, x2, y2);
+ subdivide(base, xres, yres, wx, wy, x1, y, x, y2);
+}
+
+void rt_landscape(void * tex, int m, int n,
+ vector ctr, apiflt wx, apiflt wy) {
+ int totalsize, x, y;
+ apiflt * field;
+
+ totalsize=m*n;
+
+ srand(totalsize);
+
+ field=(apiflt *) malloc(totalsize*sizeof(apiflt));
+
+ for (y=0; y<n; y++) {
+ for (x=0; x<m; x++) {
+ field[x + y*m]=0.0;
+ }
+ }
+
+ field[0 + 0]=1.0 + (rand() % 100)/100.0;
+ field[m - 1]=1.0 + (rand() % 100)/100.0;
+ field[0 + m*(n - 1)]=1.0 + (rand() % 100)/100.0;
+ field[m - 1 + m*(n - 1)]=1.0 + (rand() % 100)/100.0;
+
+ subdivide(field, m, n, wx, wy, 0, 0, m-1, n-1);
+
+ rt_sheightfield(tex, ctr, m, n, field, wx, wy);
+
+ free(field);
+}
+
diff --git a/examples/parallel_for/tacheon/src/apitrigeom.cpp b/examples/parallel_for/tacheon/src/apitrigeom.cpp
new file mode 100644
index 0000000..eb4f4c8
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/apitrigeom.cpp
@@ -0,0 +1,239 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * apitrigeom.c - This file contains code for generating triangle tesselated
+ * geometry, for use with OpenGL, XGL, etc.
+ *
+ * $Id: apitrigeom.cpp,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "api.h"
+#include "macros.h"
+#include "vector.h"
+
+#define MyVNorm(a) VNorm ((vector *) a)
+#define MyVCross(a,b,c) VCross ((vector *) a, (vector *) b, (vector *) c)
+#define MyVAddS(x,a,b,c) VAddS ((flt) x, (vector *) a, (vector *) b, (vector *) c)
+
+#define CYLFACETS 36
+#define RINGFACETS 36
+#define SPHEREFACETS 25
+
+void rt_tri_fcylinder(void * tex, vector ctr, vector axis, apiflt rad) {
+ vector x, y, z, tmp;
+ double u, v, u2, v2;
+ int j;
+ vector p1, p2, p3, p4;
+ vector n1, n2;
+
+ z = axis;
+ MyVNorm(&z);
+ tmp.x = z.y - 2.1111111;
+ tmp.y = -z.z + 3.14159267;
+ tmp.z = z.x - 3.915292342341;
+ MyVNorm(&z);
+ MyVNorm(&tmp);
+ MyVCross(&z, &tmp, &x);
+ MyVNorm(&x);
+ MyVCross(&x, &z, &y);
+ MyVNorm(&y);
+
+ for (j=0; j<CYLFACETS; j++) {
+ u = rad * sin((6.28 * j) / (CYLFACETS - 1.0));
+ v = rad * cos((6.28 * j) / (CYLFACETS - 1.0));
+ u2 = rad * sin((6.28 * (j + 1.0)) / (CYLFACETS - 1.0));
+ v2 = rad * cos((6.28 * (j + 1.0)) / (CYLFACETS - 1.0));
+
+ p1.x = p1.y = p1.z = 0.0;
+ p4 = p3 = p2 = p1;
+
+ MyVAddS(u, &x, &p1, &p1);
+ MyVAddS(v, &y, &p1, &p1);
+ n1 = p1;
+ MyVNorm(&n1);
+ MyVAddS(1.0, &ctr, &p1, &p1);
+
+
+ MyVAddS(u2, &x, &p2, &p2);
+ MyVAddS(v2, &y, &p2, &p2);
+ n2 = p2;
+ MyVNorm(&n2);
+ MyVAddS(1.0, &ctr, &p2, &p2);
+
+ MyVAddS(1.0, &axis, &p1, &p3);
+ MyVAddS(1.0, &axis, &p2, &p4);
+
+ rt_stri(tex, p1, p2, p3, n1, n2, n1);
+ rt_stri(tex, p3, p2, p4, n1, n2, n2);
+ }
+}
+
+void rt_tri_cylinder(void * tex, vector ctr, vector axis, apiflt rad) {
+ rt_fcylinder(tex, ctr, axis, rad);
+}
+
+void rt_tri_ring(void * tex, vector ctr, vector norm, apiflt a, apiflt b) {
+ vector x, y, z, tmp;
+ double u, v, u2, v2;
+ int j;
+ vector p1, p2, p3, p4;
+ vector n1, n2;
+
+ z = norm;
+ MyVNorm(&z);
+ tmp.x = z.y - 2.1111111;
+ tmp.y = -z.z + 3.14159267;
+ tmp.z = z.x - 3.915292342341;
+ MyVNorm(&z);
+ MyVNorm(&tmp);
+ MyVCross(&z, &tmp, &x);
+ MyVNorm(&x);
+ MyVCross(&x, &z, &y);
+ MyVNorm(&y);
+
+ for (j=0; j<RINGFACETS; j++) {
+ u = sin((6.28 * j) / (RINGFACETS - 1.0));
+ v = cos((6.28 * j) / (RINGFACETS - 1.0));
+ u2 = sin((6.28 * (j + 1.0)) / (RINGFACETS - 1.0));
+ v2 = cos((6.28 * (j + 1.0)) / (RINGFACETS - 1.0));
+
+ p1.x = p1.y = p1.z = 0.0;
+ p4 = p3 = p2 = p1;
+
+ MyVAddS(u, &x, &p1, &p1);
+ MyVAddS(v, &y, &p1, &p1);
+ n1 = p1;
+ MyVNorm(&n1);
+ MyVAddS(a, &n1, &ctr, &p1);
+ MyVAddS(b, &n1, &ctr, &p3);
+
+ MyVAddS(u2, &x, &p2, &p2);
+ MyVAddS(v2, &y, &p2, &p2);
+ n2 = p2;
+ MyVNorm(&n2);
+ MyVAddS(a, &n2, &ctr, &p2);
+ MyVAddS(b, &n2, &ctr, &p4);
+
+ rt_stri(tex, p1, p2, p3, norm, norm, norm);
+ rt_stri(tex, p3, p2, p4, norm, norm, norm);
+
+ }
+}
+
+void rt_tri_box(void * tex, vector min, vector max) {
+ /* -XY face */
+ rt_tri(tex, rt_vector(min.x, min.y, min.z),
+ rt_vector(min.x, max.y, min.z),
+ rt_vector(max.x, max.y, min.z));
+ rt_tri(tex, rt_vector(min.x, min.y, min.z),
+ rt_vector(max.x, max.y, min.z),
+ rt_vector(max.x, min.y, min.z));
+
+ /* +XY face */
+ rt_tri(tex, rt_vector(min.x, min.y, max.z),
+ rt_vector(max.x, max.y, max.z),
+ rt_vector(min.x, max.y, max.z));
+ rt_tri(tex, rt_vector(min.x, min.y, max.z),
+ rt_vector(max.x, min.y, max.z),
+ rt_vector(max.x, max.y, max.z));
+
+ /* -YZ face */
+ rt_tri(tex, rt_vector(min.x, min.y, min.z),
+ rt_vector(min.x, max.y, max.z),
+ rt_vector(min.x, min.y, max.z));
+ rt_tri(tex, rt_vector(min.x, min.y, min.z),
+ rt_vector(min.x, max.y, min.z),
+ rt_vector(min.x, max.y, max.z));
+
+ /* +YZ face */
+ rt_tri(tex, rt_vector(max.x, min.y, min.z),
+ rt_vector(max.x, min.y, max.z),
+ rt_vector(max.x, max.y, max.z));
+ rt_tri(tex, rt_vector(max.x, min.y, min.z),
+ rt_vector(max.x, max.y, max.z),
+ rt_vector(max.x, max.y, min.z));
+
+ /* -XZ face */
+ rt_tri(tex, rt_vector(min.x, min.y, min.z),
+ rt_vector(min.x, min.y, max.z),
+ rt_vector(max.x, min.y, max.z));
+ rt_tri(tex, rt_vector(min.x, min.y, min.z),
+ rt_vector(max.x, min.y, max.z),
+ rt_vector(max.x, min.y, min.z));
+
+ /* +XZ face */
+ rt_tri(tex, rt_vector(min.x, max.y, min.z),
+ rt_vector(max.x, max.y, max.z),
+ rt_vector(min.x, max.y, max.z));
+ rt_tri(tex, rt_vector(min.x, max.y, min.z),
+ rt_vector(max.x, max.y, min.z),
+ rt_vector(max.x, max.y, max.z));
+}
+
+void rt_tri_sphere(void * tex, vector ctr, apiflt rad) {
+}
+
+void rt_tri_plane(void * tex, vector ctr, vector norm) {
+ rt_tri_ring(tex, ctr, norm, 0.0, 10000.0);
+}
+
diff --git a/examples/parallel_for/tacheon/src/apitrigeom.h b/examples/parallel_for/tacheon/src/apitrigeom.h
new file mode 100644
index 0000000..8e6a848
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/apitrigeom.h
@@ -0,0 +1,71 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * apitrigeom.h - header for functions to generate triangle tesselated
+ * geometry for use with OpenGL, XGL, etc.
+ *
+ */
+
+void rt_tri_fcylinder(void * tex, vector ctr, vector axis, apiflt rad);
+void rt_tri_cylinder(void * tex, vector ctr, vector axis, apiflt rad);
+void rt_tri_ring(void * tex, vector ctr, vector norm, apiflt a, apiflt b);
+void rt_tri_plane(void * tex, vector ctr, vector norm);
+void rt_tri_box(void * tex, vector min, vector max);
diff --git a/examples/parallel_for/tacheon/src/bndbox.cpp b/examples/parallel_for/tacheon/src/bndbox.cpp
new file mode 100644
index 0000000..fab89c9
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/bndbox.cpp
@@ -0,0 +1,195 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * bndbox.c - This file contains the functions for dealing with bounding boxes.
+ *
+ * $Id: bndbox.cpp,v 1.2.2.1 2007/06/04 19:23:39 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "intersect.h"
+#include "util.h"
+
+#define BNDBOX_PRIVATE
+#include "bndbox.h"
+
+static object_methods bndbox_methods = {
+ (void (*)(void *, void *))(bndbox_intersect),
+ (void (*)(void *, void *, void *, void *))(NULL),
+ bndbox_bbox,
+ free_bndbox
+};
+
+
+bndbox * newbndbox(vector min, vector max) {
+ bndbox * b;
+
+ b=(bndbox *) rt_getmem(sizeof(bndbox));
+ memset(b, 0, sizeof(bndbox));
+ b->min=min;
+ b->max=max;
+ b->methods = &bndbox_methods;
+
+ b->objlist=NULL;
+ b->tex=NULL;
+ b->nextobj=NULL;
+ return b;
+}
+
+
+static int bndbox_bbox(void * obj, vector * min, vector * max) {
+ bndbox * b = (bndbox *) obj;
+
+ *min = b->min;
+ *max = b->max;
+
+ return 1;
+}
+
+
+static void free_bndbox(void * v) {
+ bndbox * b = (bndbox *) v;
+
+ free_objects(b->objlist);
+
+ free(b);
+}
+
+
+static void bndbox_intersect(bndbox * bx, ray * ry) {
+ flt a, tx1, tx2, ty1, ty2, tz1, tz2;
+ flt tnear, tfar;
+ object * obj;
+ ray newray;
+
+ /* eliminate bounded rays whose bounds do not intersect */
+ /* the bounds of the box.. */
+ if (ry->flags |= RT_RAY_BOUNDED) {
+ if ((ry->s.x > bx->max.x) && (ry->e.x > bx->max.x)) return;
+ if ((ry->s.x < bx->min.x) && (ry->e.x < bx->min.x)) return;
+
+ if ((ry->s.y > bx->max.y) && (ry->e.y > bx->max.y)) return;
+ if ((ry->s.y < bx->min.y) && (ry->e.y < bx->min.y)) return;
+
+ if ((ry->s.z > bx->max.z) && (ry->e.z > bx->max.z)) return;
+ if ((ry->s.z < bx->min.z) && (ry->e.z < bx->min.z)) return;
+ }
+
+ tnear= -FHUGE;
+ tfar= FHUGE;
+
+ if (ry->d.x == 0.0) {
+ if ((ry->o.x < bx->min.x) || (ry->o.x > bx->max.x)) return;
+ }
+ else {
+ tx1 = (bx->min.x - ry->o.x) / ry->d.x;
+ tx2 = (bx->max.x - ry->o.x) / ry->d.x;
+ if (tx1 > tx2) { a=tx1; tx1=tx2; tx2=a; }
+ if (tx1 > tnear) tnear=tx1;
+ if (tx2 < tfar) tfar=tx2;
+ }
+ if (tnear > tfar) return;
+ if (tfar < 0.0) return;
+
+ if (ry->d.y == 0.0) {
+ if ((ry->o.y < bx->min.y) || (ry->o.y > bx->max.y)) return;
+ }
+ else {
+ ty1 = (bx->min.y - ry->o.y) / ry->d.y;
+ ty2 = (bx->max.y - ry->o.y) / ry->d.y;
+ if (ty1 > ty2) { a=ty1; ty1=ty2; ty2=a; }
+ if (ty1 > tnear) tnear=ty1;
+ if (ty2 < tfar) tfar=ty2;
+ }
+ if (tnear > tfar) return;
+ if (tfar < 0.0) return;
+
+ if (ry->d.z == 0.0) {
+ if ((ry->o.z < bx->min.z) || (ry->o.z > bx->max.z)) return;
+ }
+ else {
+ tz1 = (bx->min.z - ry->o.z) / ry->d.z;
+ tz2 = (bx->max.z - ry->o.z) / ry->d.z;
+ if (tz1 > tz2) { a=tz1; tz1=tz2; tz2=a; }
+ if (tz1 > tnear) tnear=tz1;
+ if (tz2 < tfar) tfar=tz2;
+ }
+ if (tnear > tfar) return;
+ if (tfar < 0.0) return;
+
+
+ /* intersect all of the enclosed objects */
+ newray=*ry;
+ newray.flags |= RT_RAY_BOUNDED;
+
+ RAYPNT(newray.s , (*ry) , tnear);
+ RAYPNT(newray.e , (*ry) , (tfar + EPSILON));
+
+ obj = bx->objlist;
+ while (obj != NULL) {
+ obj->methods->intersect(obj, &newray);
+ obj = (object *)obj->nextobj;
+ }
+}
+
diff --git a/examples/parallel_for/tacheon/src/bndbox.h b/examples/parallel_for/tacheon/src/bndbox.h
new file mode 100644
index 0000000..8a0f5f0
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/bndbox.h
@@ -0,0 +1,85 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * bndbox.h - This file contains the defines for bounding boxes etc.
+ *
+ * $Id: bndbox.h,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+typedef struct {
+ unsigned int id; /* Unique Object serial number */
+ void * nextobj; /* pointer to next object in list */
+ object_methods * methods; /* this object's methods */
+ texture * tex; /* object texture */
+ vector min;
+ vector max;
+ object * objlist;
+} bndbox;
+
+bndbox * newbndbox(vector min, vector max);
+
+#ifdef BNDBOX_PRIVATE
+
+static int bndbox_bbox(void * obj, vector * min, vector * max);
+static void free_bndbox(void * v);
+static void bndbox_intersect(bndbox *, ray *);
+
+#endif
diff --git a/examples/parallel_for/tacheon/src/box.cpp b/examples/parallel_for/tacheon/src/box.cpp
new file mode 100644
index 0000000..43fda64
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/box.cpp
@@ -0,0 +1,181 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * box.c - This file contains the functions for dealing with boxes.
+ *
+ * $Id: box.cpp,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "box.h"
+#include "vector.h"
+#include "intersect.h"
+#include "util.h"
+
+int box_bbox(void * obj, vector * min, vector * max) {
+ box * b = (box *) obj;
+
+ *min = b->min;
+ *max = b->max;
+
+ return 1;
+}
+
+static object_methods box_methods = {
+ (void (*)(void *, void *))(box_intersect),
+ (void (*)(void *, void *, void *, void *))(box_normal),
+ box_bbox,
+ free
+};
+
+box * newbox(void * tex, vector min, vector max) {
+ box * b;
+
+ b=(box *) rt_getmem(sizeof(box));
+ memset(b, 0, sizeof(box));
+ b->methods = &box_methods;
+ b->tex = (texture *)tex;
+ b->min = min;
+ b->max = max;
+
+ return b;
+}
+
+void box_intersect(box * bx, ray * ry) {
+ flt a, tx1, tx2, ty1, ty2, tz1, tz2;
+ flt tnear, tfar;
+
+ tnear= -FHUGE;
+ tfar= FHUGE;
+
+ if (ry->d.x == 0.0) {
+ if ((ry->o.x < bx->min.x) || (ry->o.x > bx->max.x)) return;
+ }
+ else {
+ tx1 = (bx->min.x - ry->o.x) / ry->d.x;
+ tx2 = (bx->max.x - ry->o.x) / ry->d.x;
+ if (tx1 > tx2) { a=tx1; tx1=tx2; tx2=a; }
+ if (tx1 > tnear) tnear=tx1;
+ if (tx2 < tfar) tfar=tx2;
+ }
+ if (tnear > tfar) return;
+ if (tfar < 0.0) return;
+
+ if (ry->d.y == 0.0) {
+ if ((ry->o.y < bx->min.y) || (ry->o.y > bx->max.y)) return;
+ }
+ else {
+ ty1 = (bx->min.y - ry->o.y) / ry->d.y;
+ ty2 = (bx->max.y - ry->o.y) / ry->d.y;
+ if (ty1 > ty2) { a=ty1; ty1=ty2; ty2=a; }
+ if (ty1 > tnear) tnear=ty1;
+ if (ty2 < tfar) tfar=ty2;
+ }
+ if (tnear > tfar) return;
+ if (tfar < 0.0) return;
+
+ if (ry->d.z == 0.0) {
+ if ((ry->o.z < bx->min.z) || (ry->o.z > bx->max.z)) return;
+ }
+ else {
+ tz1 = (bx->min.z - ry->o.z) / ry->d.z;
+ tz2 = (bx->max.z - ry->o.z) / ry->d.z;
+ if (tz1 > tz2) { a=tz1; tz1=tz2; tz2=a; }
+ if (tz1 > tnear) tnear=tz1;
+ if (tz2 < tfar) tfar=tz2;
+ }
+ if (tnear > tfar) return;
+ if (tfar < 0.0) return;
+
+ add_intersection(tnear, (object *) bx, ry);
+ add_intersection(tfar, (object *) bx, ry);
+}
+
+void box_normal(box * bx, vector * pnt, ray * incident, vector * N) {
+ vector a, b, c;
+ flt t;
+
+ c.x=(bx->max.x + bx->min.x) / 2.0;
+ c.y=(bx->max.y + bx->min.y) / 2.0;
+ c.z=(bx->max.z + bx->min.z) / 2.0;
+
+ VSub((vector *) pnt, &c, N);
+ b=(*N);
+
+ a.x=fabs(N->x);
+ a.y=fabs(N->y);
+ a.z=fabs(N->z);
+
+ N->x=0.0; N->y=0.0; N->z=0.0;
+
+ t=MYMAX(a.x, MYMAX(a.y, a.z));
+
+ if (t==a.x) N->x=b.x;
+
+ if (t==a.y) N->y=b.y;
+
+ if (t==a.z) N->z=b.z;
+
+ VNorm(N);
+}
+
diff --git a/examples/parallel_for/tacheon/src/box.h b/examples/parallel_for/tacheon/src/box.h
new file mode 100644
index 0000000..38a27db
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/box.h
@@ -0,0 +1,80 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * box.h - This file contains the defines for boxes etc.
+ *
+ * $Id: box.h,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+
+typedef struct {
+ unsigned int id; /* Unique Object serial number */
+ void * nextobj; /* pointer to next object in list */
+ object_methods * methods; /* this object's methods */
+ texture * tex; /* object texture */
+ vector min;
+ vector max;
+} box;
+
+
+box * newbox(void * tex, vector min, vector max);
+void box_intersect(box *, ray *);
+void box_normal(box *, vector *, ray * incident, vector *);
diff --git a/examples/parallel_for/tacheon/src/camera.cpp b/examples/parallel_for/tacheon/src/camera.cpp
new file mode 100644
index 0000000..e82c7cc
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/camera.cpp
@@ -0,0 +1,122 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * camera.c - This file contains all of the functions for doing camera work.
+ *
+ * $Id: camera.cpp,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "camera.h"
+#include "util.h"
+
+ray camray(scenedef *scene, int x, int y) {
+ ray ray1, newray;
+ vector projcent;
+ vector projpixel;
+ flt px, py, sx, sy;
+
+ sx = (flt) scene->hres;
+ sy = (flt) scene->vres;
+
+ /* calculate the width and height of the image plane given the */
+ /* aspect ratio, image resolution, and zoom factor */
+
+ px=((sx / sy) / scene->aspectratio) / scene->camzoom;
+ py=1.0 / scene->camzoom;
+
+ /* assuming viewvec is a unit vector, then the center of the */
+ /* image plane is the camera center + vievec */
+ projcent.x = scene->camcent.x + scene->camviewvec.x;
+ projcent.y = scene->camcent.y + scene->camviewvec.y;
+ projcent.z = scene->camcent.z + scene->camviewvec.z;
+
+ /* starting from the center of the image plane, we move the */
+ /* center of the pel we're calculating, to */
+ /* projcent + (rightvec * x distance) */
+ ray1.o=projcent;
+ ray1.d=scene->camrightvec;
+ projpixel=Raypnt(&ray1, ((x*px/sx) - (px / 2.0)));
+
+ /* starting from the horizontally translated pel, we move the */
+ /* center of the pel we're calculating, to */
+ /* projcent + (upvec * y distance) */
+ ray1.o=projpixel;
+ ray1.d=scene->camupvec;
+ projpixel=Raypnt(&ray1, ((y*py/sy) - (py / 2.0)));
+
+ /* now that we have the exact pel center in the image plane */
+ /* we create the real primary ray that will be used by the */
+ /* rest of the system. */
+ /* The ray is expected to be re-normalized elsewhere, we're */
+ /* only really concerned about getting its direction right. */
+ newray.o=scene->camcent;
+ VSub(&projpixel, &scene->camcent, &newray.d);
+ newray.depth = scene->raydepth;
+ newray.flags = RT_RAY_REGULAR; /* camera only generates primary rays */
+
+ return newray;
+}
+
+
diff --git a/examples/parallel_for/tacheon/src/camera.h b/examples/parallel_for/tacheon/src/camera.h
new file mode 100644
index 0000000..23d2597
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/camera.h
@@ -0,0 +1,67 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * camera.h - This file contains the defines for camera routines etc.
+ *
+ * $Id: camera.h,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+ray camray(scenedef *, int, int);
diff --git a/examples/parallel_for/tacheon/src/coordsys.cpp b/examples/parallel_for/tacheon/src/coordsys.cpp
new file mode 100644
index 0000000..c535973
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/coordsys.cpp
@@ -0,0 +1,109 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * coordsys.c - Routines to translate from one coordinate system to another.
+ *
+ * $Id: coordsys.cpp,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "coordsys.h"
+
+void xytopolar(flt x, flt y, flt rad, flt * u, flt * v) {
+ flt r1;
+ r1=x*x + y*y;
+ *v=sqrt(r1 / (rad*rad));
+ if (y<0.0)
+ *u=1.0 - acos(x/sqrt(r1))/TWOPI;
+ else
+ *u= acos(x/sqrt(r1))/TWOPI;
+}
+
+void xyztocyl(vector pnt, flt height, flt * u, flt * v) {
+ flt r1;
+
+ r1=pnt.x*pnt.x + pnt.y*pnt.y;
+
+ *v=pnt.z / height;
+ if (pnt.y<0.0)
+ *u=1.0 - acos(pnt.x/sqrt(r1))/TWOPI;
+ else
+ *u=acos(pnt.x/sqrt(r1))/TWOPI;
+}
+
+void xyztospr(vector pnt, flt * u, flt * v) {
+ flt r1, phi, theta;
+
+ r1=sqrt(pnt.x*pnt.x + pnt.y*pnt.y + pnt.z*pnt.z);
+
+ phi=acos(-pnt.y/r1);
+ *v=phi/3.1415926;
+
+ theta=acos((pnt.x/r1)/sin(phi))/TWOPI;
+
+ if (pnt.z > 0.0)
+ *u = theta;
+ else
+ *u = 1 - theta;
+}
+
+
diff --git a/examples/parallel_for/tacheon/src/coordsys.h b/examples/parallel_for/tacheon/src/coordsys.h
new file mode 100644
index 0000000..a7974f1
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/coordsys.h
@@ -0,0 +1,71 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * coordsys.h - defines for coordinate system routines.
+ *
+ * $Id: coordsys.h,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+#define TWOPI 6.2831853
+
+void xytopolar(flt, flt, flt, flt *, flt *);
+void xyztocyl(vector, flt, flt *, flt *);
+void xyztospr(vector, flt *, flt *);
diff --git a/examples/parallel_for/tacheon/src/cylinder.cpp b/examples/parallel_for/tacheon/src/cylinder.cpp
new file mode 100644
index 0000000..9814d2e
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/cylinder.cpp
@@ -0,0 +1,284 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * cylinder.c - This file contains the functions for dealing with cylinders.
+ *
+ * $Id: cylinder.cpp,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "intersect.h"
+#include "util.h"
+
+#define CYLINDER_PRIVATE
+#include "cylinder.h"
+
+static object_methods cylinder_methods = {
+ (void (*)(void *, void *))(cylinder_intersect),
+ (void (*)(void *, void *, void *, void *))(cylinder_normal),
+ cylinder_bbox,
+ free
+};
+
+static object_methods fcylinder_methods = {
+ (void (*)(void *, void *))(fcylinder_intersect),
+ (void (*)(void *, void *, void *, void *))(cylinder_normal),
+ fcylinder_bbox,
+ free
+};
+
+
+object * newcylinder(void * tex, vector ctr, vector axis, flt rad) {
+ cylinder * c;
+
+ c=(cylinder *) rt_getmem(sizeof(cylinder));
+ memset(c, 0, sizeof(cylinder));
+ c->methods = &cylinder_methods;
+
+ c->tex=(texture *) tex;
+ c->ctr=ctr;
+ c->axis=axis;
+ c->rad=rad;
+ return (object *) c;
+}
+
+static int cylinder_bbox(void * obj, vector * min, vector * max) {
+ return 0; /* infinite / unbounded object */
+}
+
+static void cylinder_intersect(cylinder * cyl, ray * ry) {
+ vector rc, n, D, O;
+ flt t, s, tin, tout, ln, d;
+
+ rc.x = ry->o.x - cyl->ctr.x;
+ rc.y = ry->o.y - cyl->ctr.y;
+ rc.z = ry->o.z - cyl->ctr.z;
+
+ VCross(&ry->d, &cyl->axis, &n);
+
+ VDOT(ln, n, n);
+ ln=sqrt(ln); /* finish length calculation */
+
+ if (ln == 0.0) { /* ray is parallel to the cylinder.. */
+ VDOT(d, rc, cyl->axis);
+ D.x = rc.x - d * cyl->axis.x;
+ D.y = rc.y - d * cyl->axis.y;
+ D.z = rc.z - d * cyl->axis.z;
+ VDOT(d, D, D);
+ d = sqrt(d);
+ tin = -FHUGE;
+ tout = FHUGE;
+ /* if (d <= cyl->rad) then ray is inside cylinder.. else outside */
+ }
+
+ VNorm(&n);
+ VDOT(d, rc, n);
+ d = fabs(d);
+
+ if (d <= cyl->rad) { /* ray intersects cylinder.. */
+ VCross(&rc, &cyl->axis, &O);
+ VDOT(t, O, n);
+ t = - t / ln;
+ VCross(&n, &cyl->axis, &O);
+ VNorm(&O);
+ VDOT(s, ry->d, O);
+ s = fabs(sqrt(cyl->rad*cyl->rad - d*d) / s);
+ tin = t - s;
+ add_intersection(tin, (object *) cyl, ry);
+ tout = t + s;
+ add_intersection(tout, (object *) cyl, ry);
+ }
+}
+
+static void cylinder_normal(cylinder * cyl, vector * pnt, ray * incident, vector * N) {
+ vector a,b,c;
+ flt t;
+
+ VSub((vector *) pnt, &(cyl->ctr), &a);
+
+ c=cyl->axis;
+
+ VNorm(&c);
+
+ VDOT(t, a, c);
+
+ b.x = c.x * t + cyl->ctr.x;
+ b.y = c.y * t + cyl->ctr.y;
+ b.z = c.z * t + cyl->ctr.z;
+
+ VSub(pnt, &b, N);
+ VNorm(N);
+
+ if (VDot(N, &(incident->d)) > 0.0) { /* make cylinder double sided */
+ N->x=-N->x;
+ N->y=-N->y;
+ N->z=-N->z;
+ }
+}
+
+object * newfcylinder(void * tex, vector ctr, vector axis, flt rad) {
+ cylinder * c;
+
+ c=(cylinder *) rt_getmem(sizeof(cylinder));
+ memset(c, 0, sizeof(cylinder));
+ c->methods = &fcylinder_methods;
+
+ c->tex=(texture *) tex;
+ c->ctr=ctr;
+ c->axis=axis;
+ c->rad=rad;
+
+ return (object *) c;
+}
+
+static int fcylinder_bbox(void * obj, vector * min, vector * max) {
+ cylinder * c = (cylinder *) obj;
+ vector mintmp, maxtmp;
+
+ mintmp.x = c->ctr.x;
+ mintmp.y = c->ctr.y;
+ mintmp.z = c->ctr.z;
+ maxtmp.x = c->ctr.x + c->axis.x;
+ maxtmp.y = c->ctr.y + c->axis.y;
+ maxtmp.z = c->ctr.z + c->axis.z;
+
+ min->x = MYMIN(mintmp.x, maxtmp.x);
+ min->y = MYMIN(mintmp.y, maxtmp.y);
+ min->z = MYMIN(mintmp.z, maxtmp.z);
+ min->x -= c->rad;
+ min->y -= c->rad;
+ min->z -= c->rad;
+
+ max->x = MYMAX(mintmp.x, maxtmp.x);
+ max->y = MYMAX(mintmp.y, maxtmp.y);
+ max->z = MYMAX(mintmp.z, maxtmp.z);
+ max->x += c->rad;
+ max->y += c->rad;
+ max->z += c->rad;
+
+ return 1;
+}
+
+
+static void fcylinder_intersect(cylinder * cyl, ray * ry) {
+ vector rc, n, O, hit, tmp2, ctmp4;
+ flt t, s, tin, tout, ln, d, tmp, tmp3;
+
+ rc.x = ry->o.x - cyl->ctr.x;
+ rc.y = ry->o.y - cyl->ctr.y;
+ rc.z = ry->o.z - cyl->ctr.z;
+
+ VCross(&ry->d, &cyl->axis, &n);
+
+ VDOT(ln, n, n);
+ ln=sqrt(ln); /* finish length calculation */
+
+ if (ln == 0.0) { /* ray is parallel to the cylinder.. */
+ return; /* in this case, we want to miss or go through the "hole" */
+ }
+
+ VNorm(&n);
+ VDOT(d, rc, n);
+ d = fabs(d);
+
+ if (d <= cyl->rad) { /* ray intersects cylinder.. */
+ VCross(&rc, &cyl->axis, &O);
+ VDOT(t, O, n);
+ t = - t / ln;
+ VCross(&n, &cyl->axis, &O);
+ VNorm(&O);
+ VDOT(s, ry->d, O);
+ s = fabs(sqrt(cyl->rad*cyl->rad - d*d) / s);
+ tin = t - s;
+
+ RAYPNT(hit, (*ry), tin);
+
+ ctmp4=cyl->axis;
+ VNorm(&ctmp4);
+
+ tmp2.x = hit.x - cyl->ctr.x;
+ tmp2.y = hit.y - cyl->ctr.y;
+ tmp2.z = hit.z - cyl->ctr.z;
+
+ VDOT(tmp, tmp2, ctmp4);
+ VDOT(tmp3, cyl->axis, cyl->axis);
+
+ if ((tmp > 0.0) && (tmp < sqrt(tmp3)))
+ add_intersection(tin, (object *) cyl, ry);
+ tout = t + s;
+
+ RAYPNT(hit, (*ry), tout);
+
+ tmp2.x = hit.x - cyl->ctr.x;
+ tmp2.y = hit.y - cyl->ctr.y;
+ tmp2.z = hit.z - cyl->ctr.z;
+
+ VDOT(tmp, tmp2, ctmp4);
+ VDOT(tmp3, cyl->axis, cyl->axis);
+
+ if ((tmp > 0.0) && (tmp < sqrt(tmp3)))
+ add_intersection(tout, (object *) cyl, ry);
+ }
+}
+
diff --git a/examples/parallel_for/tacheon/src/cylinder.h b/examples/parallel_for/tacheon/src/cylinder.h
new file mode 100644
index 0000000..fe36995
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/cylinder.h
@@ -0,0 +1,89 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * cylinder.h - This file contains the defines for cylinders etc.
+ *
+ * $Id: cylinder.h,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+object * newcylinder(void *, vector, vector, flt);
+object * newfcylinder(void *, vector, vector, flt);
+
+#ifdef CYLINDER_PRIVATE
+
+typedef struct {
+ unsigned int id; /* Unique Object serial number */
+ void * nextobj; /* pointer to next object in list */
+ object_methods * methods; /* this object's methods */
+ texture * tex; /* object texture */
+ vector ctr;
+ vector axis;
+ flt rad;
+} cylinder;
+
+static void cylinder_intersect(cylinder *, ray *);
+static void fcylinder_intersect(cylinder *, ray *);
+
+static int cylinder_bbox(void * obj, vector * min, vector * max);
+static int fcylinder_bbox(void * obj, vector * min, vector * max);
+
+static void cylinder_normal(cylinder *, vector *, ray *, vector *);
+#endif
diff --git a/examples/parallel_for/tacheon/src/extvol.cpp b/examples/parallel_for/tacheon/src/extvol.cpp
new file mode 100644
index 0000000..c8e7272
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/extvol.cpp
@@ -0,0 +1,324 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * extvol.c - Volume rendering helper routines etc.
+ *
+ * $Id: extvol.cpp,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+#include<stdio.h>
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "util.h"
+#include "box.h"
+#include "extvol.h"
+#include "trace.h"
+#include "sphere.h"
+#include "light.h"
+#include "shade.h"
+#include "global.h"
+
+
+int extvol_bbox(void * obj, vector * min, vector * max) {
+ box * b = (box *) obj;
+
+ *min = b->min;
+ *max = b->max;
+
+ return 1;
+}
+
+static object_methods extvol_methods = {
+ (void (*)(void *, void *))(box_intersect),
+ (void (*)(void *, void *, void *, void *))(box_normal),
+ extvol_bbox,
+ free
+};
+
+extvol * newextvol(void * voidtex, vector min, vector max,
+ int samples, flt (* evaluator)(flt, flt, flt)) {
+ extvol * xvol;
+ texture * tex;
+
+ tex = (texture *) voidtex;
+
+ xvol = (extvol *) rt_getmem(sizeof(extvol));
+ memset(xvol, 0, sizeof(extvol));
+
+ xvol->methods = &extvol_methods;
+
+ xvol->min=min;
+ xvol->max=max;
+ xvol->evaluator = evaluator;
+ xvol->ambient = tex->ambient;
+ xvol->diffuse = tex->diffuse;
+ xvol->opacity = tex->opacity;
+ xvol->samples = samples;
+
+ xvol->tex = (texture *)rt_getmem(sizeof(texture));
+ memset(xvol->tex, 0, sizeof(texture));
+
+ xvol->tex->ctr.x = 0.0;
+ xvol->tex->ctr.y = 0.0;
+ xvol->tex->ctr.z = 0.0;
+ xvol->tex->rot = xvol->tex->ctr;
+ xvol->tex->scale = xvol->tex->ctr;
+ xvol->tex->uaxs = xvol->tex->ctr;
+ xvol->tex->vaxs = xvol->tex->ctr;
+ xvol->tex->islight = 0;
+ xvol->tex->shadowcast = 0;
+
+ xvol->tex->col=tex->col;
+ xvol->tex->ambient=1.0;
+ xvol->tex->diffuse=0.0;
+ xvol->tex->specular=0.0;
+ xvol->tex->opacity=1.0;
+ xvol->tex->img=NULL;
+ xvol->tex->texfunc=(color(*)(void *, void *, void *))(ext_volume_texture);
+ xvol->tex->obj = (void *) xvol; /* XXX hack! */
+
+ return xvol;
+}
+
+color ExtVoxelColor(flt scalar) {
+ color col;
+
+ if (scalar > 1.0)
+ scalar = 1.0;
+
+ if (scalar < 0.0)
+ scalar = 0.0;
+
+ if (scalar < 0.5) {
+ col.g = 0.0;
+ }
+ else {
+ col.g = (scalar - 0.5) * 2.0;
+ }
+
+ col.r = scalar;
+ col.b = 1.0 - (scalar / 2.0);
+
+ return col;
+}
+
+color ext_volume_texture(vector * hit, texture * tex, ray * ry) {
+ color col, col2;
+ box * bx;
+ extvol * xvol;
+ flt a, tx1, tx2, ty1, ty2, tz1, tz2;
+ flt tnear, tfar;
+ flt t, tdist, dt, ddt, sum, tt;
+ vector pnt, bln;
+ flt scalar, transval;
+ int i;
+ point_light * li;
+ color diffint;
+ vector N, L;
+ flt inten;
+
+ col.r = 0.0;
+ col.g = 0.0;
+ col.b = 0.0;
+
+ bx = (box *) tex->obj;
+ xvol = (extvol *) tex->obj;
+
+ tnear= -FHUGE;
+ tfar= FHUGE;
+
+ if (ry->d.x == 0.0) {
+ if ((ry->o.x < bx->min.x) || (ry->o.x > bx->max.x)) return col;
+ }
+ else {
+ tx1 = (bx->min.x - ry->o.x) / ry->d.x;
+ tx2 = (bx->max.x - ry->o.x) / ry->d.x;
+ if (tx1 > tx2) { a=tx1; tx1=tx2; tx2=a; }
+ if (tx1 > tnear) tnear=tx1;
+ if (tx2 < tfar) tfar=tx2;
+ }
+ if (tnear > tfar) return col;
+ if (tfar < 0.0) return col;
+
+ if (ry->d.y == 0.0) {
+ if ((ry->o.y < bx->min.y) || (ry->o.y > bx->max.y)) return col;
+ }
+ else {
+ ty1 = (bx->min.y - ry->o.y) / ry->d.y;
+ ty2 = (bx->max.y - ry->o.y) / ry->d.y;
+ if (ty1 > ty2) { a=ty1; ty1=ty2; ty2=a; }
+ if (ty1 > tnear) tnear=ty1;
+ if (ty2 < tfar) tfar=ty2;
+ }
+ if (tnear > tfar) return col;
+ if (tfar < 0.0) return col;
+
+ if (ry->d.z == 0.0) {
+ if ((ry->o.z < bx->min.z) || (ry->o.z > bx->max.z)) return col;
+ }
+ else {
+ tz1 = (bx->min.z - ry->o.z) / ry->d.z;
+ tz2 = (bx->max.z - ry->o.z) / ry->d.z;
+ if (tz1 > tz2) { a=tz1; tz1=tz2; tz2=a; }
+ if (tz1 > tnear) tnear=tz1;
+ if (tz2 < tfar) tfar=tz2;
+ }
+ if (tnear > tfar) return col;
+ if (tfar < 0.0) return col;
+
+ if (tnear < 0.0) tnear=0.0;
+
+ tdist = xvol->samples;
+
+ tt = (xvol->opacity / tdist);
+
+ bln.x=fabs(bx->min.x - bx->max.x);
+ bln.y=fabs(bx->min.y - bx->max.y);
+ bln.z=fabs(bx->min.z - bx->max.z);
+
+ dt = 1.0 / tdist;
+ sum = 0.0;
+
+/* Accumulate color as the ray passes through the voxels */
+ for (t=tnear; t<=tfar; t+=dt) {
+ if (sum < 1.0) {
+ pnt.x=((ry->o.x + (ry->d.x * t)) - bx->min.x) / bln.x;
+ pnt.y=((ry->o.y + (ry->d.y * t)) - bx->min.y) / bln.y;
+ pnt.z=((ry->o.z + (ry->d.z * t)) - bx->min.z) / bln.z;
+
+ /* call external evaluator assume 0.0 -> 1.0 range.. */
+ scalar = xvol->evaluator(pnt.x, pnt.y, pnt.z);
+
+ transval = tt * scalar;
+ sum += transval;
+
+ col2 = ExtVoxelColor(scalar);
+
+ col.r += transval * col2.r * xvol->ambient;
+ col.g += transval * col2.g * xvol->ambient;
+ col.b += transval * col2.b * xvol->ambient;
+
+ ddt = dt;
+
+ /* Add in diffuse shaded light sources (no shadows) */
+ if (xvol->diffuse > 0.0) {
+
+ /* Calculate the Volume gradient at the voxel */
+ N.x = (xvol->evaluator(pnt.x - ddt, pnt.y, pnt.z) -
+ xvol->evaluator(pnt.x + ddt, pnt.y, pnt.z)) * 8.0 * tt;
+
+ N.y = (xvol->evaluator(pnt.x, pnt.y - ddt, pnt.z) -
+ xvol->evaluator(pnt.x, pnt.y + ddt, pnt.z)) * 8.0 * tt;
+
+ N.z = (xvol->evaluator(pnt.x, pnt.y, pnt.z - ddt) -
+ xvol->evaluator(pnt.x, pnt.y, pnt.z + ddt)) * 8.0 * tt;
+
+ /* only light surfaces with enough of a normal.. */
+ if ((N.x*N.x + N.y*N.y + N.z*N.z) > 0.0) {
+ diffint.r = 0.0;
+ diffint.g = 0.0;
+ diffint.b = 0.0;
+
+ /* add the contribution of each of the lights.. */
+ for (i=0; i<numlights; i++) {
+ li=lightlist[i];
+ VSUB(li->ctr, (*hit), L)
+ VNorm(&L);
+ VDOT(inten, N, L)
+
+ /* only add light if its from the front of the surface */
+ /* could add back-lighting if we wanted to later.. */
+ if (inten > 0.0) {
+ diffint.r += inten*li->tex->col.r;
+ diffint.g += inten*li->tex->col.g;
+ diffint.b += inten*li->tex->col.b;
+ }
+ }
+ col.r += col2.r * diffint.r * xvol->diffuse;
+ col.g += col2.g * diffint.g * xvol->diffuse;
+ col.b += col2.b * diffint.b * xvol->diffuse;
+ }
+ }
+ }
+ else {
+ sum=1.0;
+ }
+ }
+
+ /* Add in transmitted ray from outside environment */
+ if (sum < 1.0) { /* spawn transmission rays / refraction */
+ color transcol;
+
+ transcol = shade_transmission(ry, hit, 1.0 - sum);
+
+ col.r += transcol.r; /* add the transmitted ray */
+ col.g += transcol.g; /* to the diffuse and */
+ col.b += transcol.b; /* transmission total.. */
+ }
+
+ return col;
+}
+
+
+
diff --git a/examples/parallel_for/tacheon/src/extvol.h b/examples/parallel_for/tacheon/src/extvol.h
new file mode 100644
index 0000000..964b092
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/extvol.h
@@ -0,0 +1,84 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * vol.h - Volume rendering definitions etc.
+ *
+ *
+ * $Id: extvol.h,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+typedef struct {
+ unsigned int id; /* Unique Object serial number */
+ void * nextobj; /* pointer to next object in list */
+ object_methods * methods; /* this object's methods */
+ texture * tex; /* object texture */
+ vector min;
+ vector max;
+ flt ambient;
+ flt diffuse;
+ flt opacity;
+ int samples;
+ flt (* evaluator)(flt, flt, flt);
+} extvol;
+
+extvol * newextvol(void * voidtex, vector min, vector max,
+ int samples, flt (* evaluator)(flt, flt, flt));
+color ext_volume_texture(vector *, texture *, ray *);
diff --git a/examples/parallel_for/tacheon/src/getargs.cpp b/examples/parallel_for/tacheon/src/getargs.cpp
new file mode 100644
index 0000000..30b6b45
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/getargs.cpp
@@ -0,0 +1,207 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "types.h"
+#include "api.h"
+#include "getargs.h"
+
+void printusage(char **argv) {
+ fprintf(stderr, "Usage: \n");
+ fprintf(stderr, " %s modelfile [options] \n", argv[0]);
+ fprintf(stderr, "\n");
+ fprintf(stderr, "Model file formats supported:\n");
+ fprintf(stderr, " filename.dat -- The model files originated with this package.\n");
+ fprintf(stderr, " filaname.ac -- AC3D model files.\n");
+ fprintf(stderr, " filename.nff -- The NFF scene format used by Eric Haines' SPD.\n");
+ fprintf(stderr, "\n");
+ fprintf(stderr, "Valid options: (** denotes default behaviour)\n");
+ fprintf(stderr, " +D enable run-time display updating (if build supports it) **\n");
+ fprintf(stderr, " -D disable run-time display updating\n");
+ fprintf(stderr, " -nobounding\n");
+ fprintf(stderr, " -boundthresh XXX (** default threshold is 25)\n");
+ fprintf(stderr, "\n");
+}
+
+void initoptions(argoptions * opt) {
+ memset(opt, 0, sizeof(argoptions));
+ opt->foundfilename = -1;
+ opt->useoutfilename = -1;
+ opt->verbosemode = -1;
+ opt->antialiasing = -1;
+ opt->displaymode = -1;
+ opt->boundmode = -1;
+ opt->boundthresh = -1;
+ opt->usecamfile = -1;
+}
+
+int useoptions(argoptions * opt, SceneHandle scene) {
+ if (opt->useoutfilename == 1) {
+ rt_outputfile(scene, opt->outfilename);
+ }
+
+ if (opt->verbosemode == 1) {
+ rt_verbose(scene, 1);
+ }
+
+ if (opt->antialiasing != -1) {
+ /* need new api code for this */
+ }
+
+ if (opt->displaymode != -1) {
+ rt_displaymode(scene, opt->displaymode);
+ }
+
+ if (opt->boundmode != -1) {
+ rt_boundmode(scene, opt->boundmode);
+ }
+
+ if (opt->boundthresh != -1) {
+ rt_boundthresh(scene, opt->boundthresh);
+ }
+
+ return 0;
+}
+
+int getparm(int argc, char **argv, int num, argoptions * opt) {
+ if (!strcmp(argv[num], "+D")) {
+ /* turn video on */
+ opt->displaymode = RT_DISPLAY_ENABLED;
+ return 1;
+ }
+ if (!strcmp(argv[num], "-D")) {
+ /* turn video off */
+ opt->displaymode = RT_DISPLAY_DISABLED;
+ return 1;
+ }
+ if (!strcmp(argv[num], "-nobounding")) {
+ /* disable automatic spatial subdivision optimizations */
+ opt->boundmode = RT_BOUNDING_DISABLED;
+ return 1;
+ }
+ if (!strcmp(argv[num], "-boundthresh")) {
+ /* set automatic bounding threshold control value */
+ sscanf(argv[num + 1], "%d", &opt->boundthresh);
+ return 2;
+ }
+
+ /* unknown parameter setting */
+ fprintf(stderr, "Unrecognized parameter/option flag: %s\n", argv[num]);
+ return -1;
+}
+
+int getargs(int argc, char **argv, argoptions * opt) {
+ int i, rc, unknowncnt;
+
+ if (opt == NULL)
+ return -1;
+
+ initoptions(opt);
+
+ if (argc < 2) {
+ printusage(argv);
+#ifndef DEFAULT_MODELFILE
+ return -1;
+#else
+ return 0;
+#endif//DEFAULT_MODELFILE
+ }
+
+ i = 1;
+ unknowncnt = 0;
+ while (i < argc) {
+ if (argv[i][0] == '-' || argv[i][0] == '+') {
+ rc = getparm(argc, argv, i, opt);
+ if (rc != -1) {
+ i += rc;
+ }
+ else {
+ printusage(argv);
+ return -1;
+ }
+ }
+ else {
+ unknowncnt++;
+ if (unknowncnt > 1) {
+ fprintf(stderr, "Too many model file names found!\n");
+ printusage(argv);
+ return -1;
+ }
+ else {
+ strcpy(opt->filename, argv[i]);
+ opt->foundfilename = 1;
+ i++;
+ }
+ }
+ }
+
+ if (opt->foundfilename == -1) {
+ fprintf(stderr, "Missing model file name!\n");
+ printusage(argv);
+ return -1;
+ }
+
+ return 0;
+}
+
+
+
diff --git a/examples/parallel_for/tacheon/src/getargs.h b/examples/parallel_for/tacheon/src/getargs.h
new file mode 100644
index 0000000..c8e4f43
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/getargs.h
@@ -0,0 +1,77 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+typedef struct {
+ int foundfilename; /* was a model file name found in the args? */
+ char filename[1024]; /* model file to render */
+ int useoutfilename; /* command line override of output filename */
+ char outfilename[1024]; /* name of output image file */
+ int verbosemode; /* verbose flags */
+ int antialiasing; /* antialiasing setting */
+ int displaymode; /* display mode */
+ int boundmode; /* bounding mode */
+ int boundthresh; /* bounding threshold */
+ int usecamfile; /* use camera file */
+ char camfilename[1024]; /* camera filename */
+} argoptions;
+
+
+int getargs(int argc, char **argv, argoptions * opt);
+int useoptions(argoptions * opt, SceneHandle scene);
diff --git a/examples/parallel_for/tacheon/src/global.cpp b/examples/parallel_for/tacheon/src/global.cpp
new file mode 100644
index 0000000..a59cf5b
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/global.cpp
@@ -0,0 +1,88 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * global.c - any/all global data items etc should be in this file
+ *
+ * $Id: global.cpp,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ *
+ */
+
+#include "types.h"
+#include "machine.h"
+#include "sphere.h"
+#include "light.h"
+
+/* stuff moved from intersect.c */
+object * rootobj = NULL; /* starts out empty. */
+
+point_light * lightlist[MAXLIGHTS];
+int numlights = 0;
+
+unsigned int numobjects = 0; /* used to assign unique object ID's */
+
+/* used in util.c */
+unsigned int rt_mem_in_use = 0;
+
+/* used in api.c */
+int parinitted = 0;
+
+int graphicswindowopen = 0;
+
diff --git a/examples/parallel_for/tacheon/src/global.h b/examples/parallel_for/tacheon/src/global.h
new file mode 100644
index 0000000..60cef83
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/global.h
@@ -0,0 +1,79 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * global.h - any/all global data items etc should be in this file
+ *
+ * $Id: global.h,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ *
+ */
+
+/* stuff moved from intersect.c */
+extern object * rootobj;
+
+extern point_light * lightlist[MAXLIGHTS];
+extern int numlights;
+
+extern unsigned int numobjects;
+
+extern unsigned int rt_mem_in_use;
+extern int parinitted;
+
+extern int graphicswindowopen;
diff --git a/examples/parallel_for/tacheon/src/grid.cpp b/examples/parallel_for/tacheon/src/grid.cpp
new file mode 100644
index 0000000..e4bf0ac
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/grid.cpp
@@ -0,0 +1,690 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * grid.c - spatial subdivision efficiency structures
+ *
+ * $Id: grid.cpp,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ *
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "intersect.h"
+#include "util.h"
+
+#define GRID_PRIVATE
+#include "grid.h"
+
+#ifndef cbrt
+#define cbrt(x) ((x) > 0.0 ? pow((double)(x), 1.0/3.0) : \
+ ((x) < 0.0 ? -pow((double)-(x), 1.0/3.0) : 0.0))
+
+#define qbrt(x) ((x) > 0.0 ? pow((double)(x), 1.0/4.0) : \
+ ((x) < 0.0 ? -pow((double)-(x), 1.0/4.0) : 0.0))
+
+#endif
+
+static object_methods grid_methods = {
+ (void (*)(void *, void *))(grid_intersect),
+ (void (*)(void *, void *, void *, void *))(NULL),
+ grid_bbox,
+ grid_free
+};
+
+object * newgrid(int xsize, int ysize, int zsize, vector min, vector max) {
+ grid * g;
+
+ g = (grid *) rt_getmem(sizeof(grid));
+ memset(g, 0, sizeof(grid));
+
+ g->methods = &grid_methods;
+ g->id = new_objectid();
+
+ g->xsize = xsize;
+ g->ysize = ysize;
+ g->zsize = zsize;
+
+ g->min = min;
+ g->max = max;
+
+ VSub(&g->max, &g->min, &g->voxsize);
+ g->voxsize.x /= (flt) g->xsize;
+ g->voxsize.y /= (flt) g->ysize;
+ g->voxsize.z /= (flt) g->zsize;
+
+ g->cells = (objectlist **) rt_getmem(xsize*ysize*zsize*sizeof(objectlist *));
+ memset(g->cells, 0, xsize*ysize*zsize * sizeof(objectlist *));
+
+/* fprintf(stderr, "New grid, size: %8d %8d %8d\n", g->xsize, g->ysize, g->zsize); */
+
+ return (object *) g;
+}
+
+static int grid_bbox(void * obj, vector * min, vector * max) {
+ grid * g = (grid *) obj;
+
+ *min = g->min;
+ *max = g->max;
+
+ return 1;
+}
+
+static void grid_free(void * v) {
+ int i, numvoxels;
+ grid * g = (grid *) v;
+
+ /* loop through all voxels and free the object lists */
+ numvoxels = g->xsize * g->ysize * g->zsize;
+ for (i=0; i<numvoxels; i++) {
+ objectlist * lcur, * lnext;
+
+ lcur = g->cells[i];
+ while (lcur != NULL) {
+ lnext = lcur->next;
+ free(lcur);
+ }
+ }
+
+ /* free the grid cells */
+ free(g->cells);
+
+ /* free all objects on the grid object list */
+ free_objects(g->objects);
+
+ free(g);
+}
+
+static void globalbound(object ** rootlist, vector * gmin, vector * gmax) {
+ vector min, max;
+ object * cur;
+
+ if (*rootlist == NULL) /* don't bound non-existant objects */
+ return;
+
+ gmin->x = FHUGE; gmin->y = FHUGE; gmin->z = FHUGE;
+ gmax->x = -FHUGE; gmax->y = -FHUGE; gmax->z = -FHUGE;
+
+ cur=*rootlist;
+ while (cur != NULL) { /* Go! */
+ min.x = -FHUGE; min.y = -FHUGE; min.z = -FHUGE;
+ max.x = FHUGE; max.y = FHUGE; max.z = FHUGE;
+
+ if (cur->methods->bbox((void *) cur, &min, &max)) {
+ gmin->x = MYMIN( gmin->x , min.x);
+ gmin->y = MYMIN( gmin->y , min.y);
+ gmin->z = MYMIN( gmin->z , min.z);
+
+ gmax->x = MYMAX( gmax->x , max.x);
+ gmax->y = MYMAX( gmax->y , max.y);
+ gmax->z = MYMAX( gmax->z , max.z);
+ }
+
+ cur=(object *)cur->nextobj;
+ }
+}
+
+
+static int cellbound(grid *g, gridindex *index, vector * cmin, vector * cmax) {
+ vector min, max, cellmin, cellmax;
+ objectlist * cur;
+ int numinbounds = 0;
+
+ cur = g->cells[index->z*g->xsize*g->ysize + index->y*g->xsize + index->x];
+
+ if (cur == NULL) /* don't bound non-existant objects */
+ return 0;
+
+ cellmin.x = voxel2x(g, index->x);
+ cellmin.y = voxel2y(g, index->y);
+ cellmin.z = voxel2z(g, index->z);
+
+ cellmax.x = cellmin.x + g->voxsize.x;
+ cellmax.y = cellmin.y + g->voxsize.y;
+ cellmax.z = cellmin.z + g->voxsize.z;
+
+ cmin->x = FHUGE; cmin->y = FHUGE; cmin->z = FHUGE;
+ cmax->x = -FHUGE; cmax->y = -FHUGE; cmax->z = -FHUGE;
+
+ while (cur != NULL) { /* Go! */
+ min.x = -FHUGE; min.y = -FHUGE; min.z = -FHUGE;
+ max.x = FHUGE; max.y = FHUGE; max.z = FHUGE;
+
+ if (cur->obj->methods->bbox((void *) cur->obj, &min, &max)) {
+ if ((min.x >= cellmin.x) && (max.x <= cellmax.x) &&
+ (min.y >= cellmin.y) && (max.y <= cellmax.y) &&
+ (min.z >= cellmin.z) && (max.z <= cellmax.z)) {
+
+ cmin->x = MYMIN( cmin->x , min.x);
+ cmin->y = MYMIN( cmin->y , min.y);
+ cmin->z = MYMIN( cmin->z , min.z);
+
+ cmax->x = MYMAX( cmax->x , max.x);
+ cmax->y = MYMAX( cmax->y , max.y);
+ cmax->z = MYMAX( cmax->z , max.z);
+
+ numinbounds++;
+ }
+ }
+
+ cur=cur->next;
+ }
+
+ /* in case we get a 0.0 sized axis on the cell bounds, we'll */
+ /* use the original cell bounds */
+ if ((cmax->x - cmin->x) < EPSILON) {
+ cmax->x += EPSILON;
+ cmin->x -= EPSILON;
+ }
+ if ((cmax->y - cmin->y) < EPSILON) {
+ cmax->y += EPSILON;
+ cmin->y -= EPSILON;
+ }
+ if ((cmax->z - cmin->z) < EPSILON) {
+ cmax->z += EPSILON;
+ cmin->z -= EPSILON;
+ }
+
+ return numinbounds;
+}
+
+static int countobj(object * root) {
+ object * cur; /* counts the number of objects on a list */
+ int numobj;
+
+ numobj=0;
+ cur=root;
+
+ while (cur != NULL) {
+ cur=(object *)cur->nextobj;
+ numobj++;
+ }
+ return numobj;
+}
+
+static int countobjlist(objectlist * root) {
+ objectlist * cur;
+ int numobj;
+
+ numobj=0;
+ cur = root;
+
+ while (cur != NULL) {
+ cur = cur->next;
+ numobj++;
+ }
+ return numobj;
+}
+
+int engrid_scene(object ** list) {
+ grid * g;
+ int numobj, numcbrt;
+ vector gmin, gmax;
+ gridindex index;
+
+ if (*list == NULL)
+ return 0;
+
+ numobj = countobj(*list);
+
+fprintf(stderr, "Scene contains %d bounded objects.\n", numobj);
+
+ if (numobj > 16) {
+ numcbrt = (int) cbrt(4*numobj);
+ globalbound(list, &gmin, &gmax);
+
+ g = (grid *) newgrid(numcbrt, numcbrt, numcbrt, gmin, gmax);
+ engrid_objlist(g, list);
+
+ numobj = countobj(*list);
+ g->nextobj = *list;
+ *list = (object *) g;
+
+ /* now create subgrids.. */
+ for (index.z=0; index.z<g->zsize; index.z++) {
+ for (index.y=0; index.y<g->ysize; index.y++) {
+ for (index.x=0; index.x<g->xsize; index.x++) {
+ engrid_cell(g, &index);
+ }
+ }
+ }
+ }
+
+ return 1;
+}
+
+
+void engrid_objlist(grid * g, object ** list) {
+ object * cur, * next, **prev;
+
+ if (*list == NULL)
+ return;
+
+ prev = list;
+ cur = *list;
+
+ while (cur != NULL) {
+ next = (object *)cur->nextobj;
+
+ if (engrid_object(g, cur))
+ *prev = next;
+ else
+ prev = (object **) &cur->nextobj;
+
+ cur = next;
+ }
+}
+
+static int engrid_cell(grid * gold, gridindex *index) {
+ vector gmin, gmax, gsize;
+ flt len;
+ int numobj, numcbrt, xs, ys, zs;
+ grid * g;
+ objectlist **list;
+ objectlist * newobj;
+
+ list = &gold->cells[index->z*gold->xsize*gold->ysize +
+ index->y*gold->xsize + index->x];
+
+ if (*list == NULL)
+ return 0;
+
+ numobj = cellbound(gold, index, &gmin, &gmax);
+
+ VSub(&gmax, &gmin, &gsize);
+ len = 1.0 / (MYMAX( MYMAX(gsize.x, gsize.y), gsize.z ));
+ gsize.x *= len;
+ gsize.y *= len;
+ gsize.z *= len;
+
+ if (numobj > 16) {
+ numcbrt = (int) cbrt(2*numobj);
+
+ xs = (int) ((flt) numcbrt * gsize.x);
+ if (xs < 1) xs = 1;
+ ys = (int) ((flt) numcbrt * gsize.y);
+ if (ys < 1) ys = 1;
+ zs = (int) ((flt) numcbrt * gsize.z);
+ if (zs < 1) zs = 1;
+
+ g = (grid *) newgrid(xs, ys, zs, gmin, gmax);
+ engrid_objectlist(g, list);
+
+ newobj = (objectlist *) rt_getmem(sizeof(objectlist));
+ newobj->obj = (object *) g;
+ newobj->next = *list;
+ *list = newobj;
+
+ g->nextobj = gold->objects;
+ gold->objects = (object *) g;
+ }
+
+ return 1;
+}
+
+static int engrid_objectlist(grid * g, objectlist ** list) {
+ objectlist * cur, * next, **prev;
+ int numsucceeded = 0;
+
+ if (*list == NULL)
+ return 0;
+
+ prev = list;
+ cur = *list;
+
+ while (cur != NULL) {
+ next = cur->next;
+
+ if (engrid_object(g, cur->obj)) {
+ *prev = next;
+ free(cur);
+ numsucceeded++;
+ }
+ else {
+ prev = &cur->next;
+ }
+
+ cur = next;
+ }
+
+ return numsucceeded;
+}
+
+
+
+static int engrid_object(grid * g, object * obj) {
+ vector omin, omax;
+ gridindex low, high;
+ int x, y, z, zindex, yindex, voxindex;
+ objectlist * tmp;
+
+ if (obj->methods->bbox(obj, &omin, &omax)) {
+ if (!pos2grid(g, &omin, &low) || !pos2grid(g, &omax, &high)) {
+ return 0; /* object is not wholly contained in the grid */
+ }
+ }
+ else {
+ return 0; /* object is unbounded */
+ }
+
+ /* add the object to the complete list of objects in the grid */
+ obj->nextobj = g->objects;
+ g->objects = obj;
+
+ /* add this object to all voxels it inhabits */
+ for (z=low.z; z<=high.z; z++) {
+ zindex = z * g->xsize * g->ysize;
+ for (y=low.y; y<=high.y; y++) {
+ yindex = y * g->xsize;
+ for (x=low.x; x<=high.x; x++) {
+ voxindex = x + yindex + zindex;
+ tmp = (objectlist *) rt_getmem(sizeof(objectlist));
+ tmp->next = g->cells[voxindex];
+ tmp->obj = obj;
+ g->cells[voxindex] = tmp;
+ }
+ }
+ }
+
+ return 1;
+}
+
+static int pos2grid(grid * g, vector * pos, gridindex * index) {
+ index->x = (int) ((pos->x - g->min.x) / g->voxsize.x);
+ index->y = (int) ((pos->y - g->min.y) / g->voxsize.y);
+ index->z = (int) ((pos->z - g->min.z) / g->voxsize.z);
+
+ if (index->x == g->xsize)
+ index->x--;
+ if (index->y == g->ysize)
+ index->y--;
+ if (index->z == g->zsize)
+ index->z--;
+
+ if (index->x < 0 || index->x > g->xsize ||
+ index->y < 0 || index->y > g->ysize ||
+ index->z < 0 || index->z > g->zsize)
+ return 0;
+
+ if (pos->x < g->min.x || pos->x > g->max.x ||
+ pos->y < g->min.y || pos->y > g->max.y ||
+ pos->z < g->min.z || pos->z > g->max.z)
+ return 0;
+
+ return 1;
+}
+
+
+/* the real thing */
+static void grid_intersect(grid * g, ray * ry) {
+ flt tnear, tfar, offset;
+ vector curpos, tmax, tdelta, pdeltaX, pdeltaY, pdeltaZ, nXp, nYp, nZp;
+ gridindex curvox, step, out;
+ int voxindex;
+ objectlist * cur;
+
+ if (ry->flags & RT_RAY_FINISHED)
+ return;
+
+ if (!grid_bounds_intersect(g, ry, &tnear, &tfar))
+ return;
+
+ if (ry->maxdist < tnear)
+ return;
+
+ curpos = Raypnt(ry, tnear);
+ pos2grid(g, &curpos, &curvox);
+ offset = tnear;
+
+ /* Setup X iterator stuff */
+ if (fabs(ry->d.x) < EPSILON) {
+ tmax.x = FHUGE;
+ tdelta.x = 0.0;
+ step.x = 0;
+ out.x = 0; /* never goes out of bounds on this axis */
+ }
+ else if (ry->d.x < 0.0) {
+ tmax.x = offset + ((voxel2x(g, curvox.x) - curpos.x) / ry->d.x);
+ tdelta.x = g->voxsize.x / - ry->d.x;
+ step.x = out.x = -1;
+ }
+ else {
+ tmax.x = offset + ((voxel2x(g, curvox.x + 1) - curpos.x) / ry->d.x);
+ tdelta.x = g->voxsize.x / ry->d.x;
+ step.x = 1;
+ out.x = g->xsize;
+ }
+
+ /* Setup Y iterator stuff */
+ if (fabs(ry->d.y) < EPSILON) {
+ tmax.y = FHUGE;
+ tdelta.y = 0.0;
+ step.y = 0;
+ out.y = 0; /* never goes out of bounds on this axis */
+ }
+ else if (ry->d.y < 0.0) {
+ tmax.y = offset + ((voxel2y(g, curvox.y) - curpos.y) / ry->d.y);
+ tdelta.y = g->voxsize.y / - ry->d.y;
+ step.y = out.y = -1;
+ }
+ else {
+ tmax.y = offset + ((voxel2y(g, curvox.y + 1) - curpos.y) / ry->d.y);
+ tdelta.y = g->voxsize.y / ry->d.y;
+ step.y = 1;
+ out.y = g->ysize;
+ }
+
+ /* Setup Z iterator stuff */
+ if (fabs(ry->d.z) < EPSILON) {
+ tmax.z = FHUGE;
+ tdelta.z = 0.0;
+ step.z = 0;
+ out.z = 0; /* never goes out of bounds on this axis */
+ }
+ else if (ry->d.z < 0.0) {
+ tmax.z = offset + ((voxel2z(g, curvox.z) - curpos.z) / ry->d.z);
+ tdelta.z = g->voxsize.z / - ry->d.z;
+ step.z = out.z = -1;
+ }
+ else {
+ tmax.z = offset + ((voxel2z(g, curvox.z + 1) - curpos.z) / ry->d.z);
+ tdelta.z = g->voxsize.z / ry->d.z;
+ step.z = 1;
+ out.z = g->zsize;
+ }
+
+ pdeltaX = ry->d;
+ VScale(&pdeltaX, tdelta.x);
+ pdeltaY = ry->d;
+ VScale(&pdeltaY, tdelta.y);
+ pdeltaZ = ry->d;
+ VScale(&pdeltaZ, tdelta.z);
+
+ nXp = Raypnt(ry, tmax.x);
+ nYp = Raypnt(ry, tmax.y);
+ nZp = Raypnt(ry, tmax.z);
+
+ voxindex = curvox.z*g->xsize*g->ysize + curvox.y*g->xsize + curvox.x;
+ while (1) {
+ if (tmax.x < tmax.y && tmax.x < tmax.z) {
+ cur = g->cells[voxindex];
+ while (cur != NULL) {
+ if (ry->mbox[cur->obj->id] != ry->serial) {
+ ry->mbox[cur->obj->id] = ry->serial;
+ cur->obj->methods->intersect(cur->obj, ry);
+ }
+ cur = cur->next;
+ }
+ curvox.x += step.x;
+ if (ry->maxdist < tmax.x || curvox.x == out.x)
+ break;
+ voxindex += step.x;
+ tmax.x += tdelta.x;
+ curpos = nXp;
+ nXp.x += pdeltaX.x;
+ nXp.y += pdeltaX.y;
+ nXp.z += pdeltaX.z;
+ }
+ else if (tmax.z < tmax.y) {
+ cur = g->cells[voxindex];
+ while (cur != NULL) {
+ if (ry->mbox[cur->obj->id] != ry->serial) {
+ ry->mbox[cur->obj->id] = ry->serial;
+ cur->obj->methods->intersect(cur->obj, ry);
+ }
+ cur = cur->next;
+ }
+ curvox.z += step.z;
+ if (ry->maxdist < tmax.z || curvox.z == out.z)
+ break;
+ voxindex += step.z*g->xsize*g->ysize;
+ tmax.z += tdelta.z;
+ curpos = nZp;
+ nZp.x += pdeltaZ.x;
+ nZp.y += pdeltaZ.y;
+ nZp.z += pdeltaZ.z;
+ }
+ else {
+ cur = g->cells[voxindex];
+ while (cur != NULL) {
+ if (ry->mbox[cur->obj->id] != ry->serial) {
+ ry->mbox[cur->obj->id] = ry->serial;
+ cur->obj->methods->intersect(cur->obj, ry);
+ }
+ cur = cur->next;
+ }
+ curvox.y += step.y;
+ if (ry->maxdist < tmax.y || curvox.y == out.y)
+ break;
+ voxindex += step.y*g->xsize;
+ tmax.y += tdelta.y;
+ curpos = nYp;
+ nYp.x += pdeltaY.x;
+ nYp.y += pdeltaY.y;
+ nYp.z += pdeltaY.z;
+ }
+
+ if (ry->flags & RT_RAY_FINISHED)
+ break;
+ }
+}
+
+static void voxel_intersect(grid * g, ray * ry, int voxindex) {
+ objectlist * cur;
+
+ cur = g->cells[voxindex];
+ while (cur != NULL) {
+ cur->obj->methods->intersect(cur->obj, ry);
+ cur = cur->next;
+ }
+}
+
+static int grid_bounds_intersect(grid * g, ray * ry, flt *near, flt *far) {
+ flt a, tx1, tx2, ty1, ty2, tz1, tz2;
+ flt tnear, tfar;
+
+ tnear= -FHUGE;
+ tfar= FHUGE;
+
+ if (ry->d.x == 0.0) {
+ if ((ry->o.x < g->min.x) || (ry->o.x > g->max.x)) return 0;
+ }
+ else {
+ tx1 = (g->min.x - ry->o.x) / ry->d.x;
+ tx2 = (g->max.x - ry->o.x) / ry->d.x;
+ if (tx1 > tx2) { a=tx1; tx1=tx2; tx2=a; }
+ if (tx1 > tnear) tnear=tx1;
+ if (tx2 < tfar) tfar=tx2;
+ }
+ if (tnear > tfar) return 0;
+ if (tfar < 0.0) return 0;
+
+ if (ry->d.y == 0.0) {
+ if ((ry->o.y < g->min.y) || (ry->o.y > g->max.y)) return 0;
+ }
+ else {
+ ty1 = (g->min.y - ry->o.y) / ry->d.y;
+ ty2 = (g->max.y - ry->o.y) / ry->d.y;
+ if (ty1 > ty2) { a=ty1; ty1=ty2; ty2=a; }
+ if (ty1 > tnear) tnear=ty1;
+ if (ty2 < tfar) tfar=ty2;
+ }
+ if (tnear > tfar) return 0;
+ if (tfar < 0.0) return 0;
+
+ if (ry->d.z == 0.0) {
+ if ((ry->o.z < g->min.z) || (ry->o.z > g->max.z)) return 0;
+ }
+ else {
+ tz1 = (g->min.z - ry->o.z) / ry->d.z;
+ tz2 = (g->max.z - ry->o.z) / ry->d.z;
+ if (tz1 > tz2) { a=tz1; tz1=tz2; tz2=a; }
+ if (tz1 > tnear) tnear=tz1;
+ if (tz2 < tfar) tfar=tz2;
+ }
+ if (tnear > tfar) return 0;
+ if (tfar < 0.0) return 0;
+
+ *near = tnear;
+ *far = tfar;
+ return 1;
+}
diff --git a/examples/parallel_for/tacheon/src/grid.h b/examples/parallel_for/tacheon/src/grid.h
new file mode 100644
index 0000000..5cefdc9
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/grid.h
@@ -0,0 +1,131 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * grid.h - spatial subdivision efficiency structures
+ *
+ * $Id: grid.h,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ *
+ */
+
+int engrid_scene(object ** list);
+object * newgrid(int xsize, int ysize, int zsize, vector min, vector max);
+
+#ifdef GRID_PRIVATE
+
+typedef struct objectlist {
+ struct objectlist * next; /* next link in the list */
+ object * obj; /* the actual object */
+} objectlist;
+
+typedef struct {
+ unsigned int id; /* Unique Object serial number */
+ void * nextobj; /* pointer to next object in list */
+ object_methods * methods; /* this object's methods */
+ texture * tex; /* object texture */
+ int xsize; /* number of cells along the X direction */
+ int ysize; /* number of cells along the Y direction */
+ int zsize; /* number of cells along the Z direction */
+ vector min; /* the minimum coords for the box containing the grid */
+ vector max; /* the maximum coords for the box containing the grid */
+ vector voxsize; /* the size of a grid cell/voxel */
+ object * objects; /* all objects contained in the grid */
+ objectlist ** cells; /* the grid cells themselves */
+} grid;
+
+typedef struct {
+ int x; /* Voxel X address */
+ int y; /* Voxel Y address */
+ int z; /* Voxel Z address */
+} gridindex;
+
+/*
+ * Convert from voxel number along X/Y/Z to corresponding coordinate.
+ */
+#define voxel2x(g,X) ((X) * (g->voxsize.x) + (g->min.x))
+#define voxel2y(g,Y) ((Y) * (g->voxsize.y) + (g->min.y))
+#define voxel2z(g,Z) ((Z) * (g->voxsize.z) + (g->min.z))
+
+/*
+ * And vice-versa.
+ */
+#define x2voxel(g,x) (((x) - g->min.x) / g->voxsize.x)
+#define y2voxel(g,y) (((y) - g->min.y) / g->voxsize.y)
+#define z2voxel(g,z) (((z) - g->min.z) / g->voxsize.z)
+
+
+static int grid_bbox(void * obj, vector * min, vector * max);
+static void grid_free(void * v);
+
+static int cellbound(grid *g, gridindex *index, vector * cmin, vector * cmax);
+
+void engrid_objlist(grid * g, object ** list);
+static int engrid_object(grid * g, object * obj);
+
+static int engrid_objectlist(grid * g, objectlist ** list);
+static int engrid_cell(grid *, gridindex *);
+
+static int pos2grid(grid * g, vector * pos, gridindex * index);
+static void grid_intersect(grid *, ray *);
+static void voxel_intersect(grid * g, ray * ry, int voxaddr);
+static int grid_bounds_intersect(grid * g, ray * ry, flt *near, flt *far);
+
+
+#endif
diff --git a/examples/parallel_for/tacheon/src/imageio.cpp b/examples/parallel_for/tacheon/src/imageio.cpp
new file mode 100644
index 0000000..9aa8578
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/imageio.cpp
@@ -0,0 +1,160 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * imageio.c - This file deals with reading/writing image files
+ *
+ * $Id: imageio.cpp,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+/* For our puposes, we're interested only in the 3 byte per pixel 24 bit
+ * truecolor sort of file..
+ */
+
+#include <stdio.h>
+#include "machine.h"
+#include "types.h"
+#include "util.h"
+#include "imageio.h"
+#include "ppm.h" /* PPM files */
+#include "tgafile.h" /* Truevision Targa files */
+#include "jpeg.h" /* JPEG files */
+
+static
+int fakeimage(char * name, int * xres, int * yres, unsigned char ** imgdata) {
+ int i, imgsize;
+
+ fprintf(stderr, "Error loading image %s. Faking it.\n", name);
+
+ *xres = 2;
+ *yres = 2;
+ imgsize = 3 * (*xres) * (*yres);
+ *imgdata = (unsigned char *)rt_getmem(imgsize);
+ for (i=0; i<imgsize; i++) {
+ (*imgdata)[i] = 255;
+ }
+
+ return IMAGENOERR;
+}
+
+
+int readimage(rawimage * img) {
+ int rc;
+ int xres, yres;
+ unsigned char * imgdata;
+ char * name = img->name;
+
+ if (strstr(name, ".ppm")) {
+ rc = readppm(name, &xres, &yres, &imgdata);
+ }
+ else if (strstr(name, ".tga")) {
+ rc = readtga(name, &xres, &yres, &imgdata);
+ }
+ else if (strstr(name, ".jpg")) {
+ rc = readjpeg(name, &xres, &yres, &imgdata);
+ }
+ else if (strstr(name, ".gif")) {
+ rc = IMAGEUNSUP;
+ }
+ else if (strstr(name, ".png")) {
+ rc = IMAGEUNSUP;
+ }
+ else if (strstr(name, ".tiff")) {
+ rc = IMAGEUNSUP;
+ }
+ else if (strstr(name, ".rgb")) {
+ rc = IMAGEUNSUP;
+ }
+ else if (strstr(name, ".xpm")) {
+ rc = IMAGEUNSUP;
+ }
+ else {
+ rc = readppm(name, &xres, &yres, &imgdata);
+ }
+
+ switch (rc) {
+ case IMAGEREADERR:
+ fprintf(stderr, "Short read encountered while loading image %s\n", name);
+ rc = IMAGENOERR; /* remap to non-fatal error */
+ break;
+
+ case IMAGEUNSUP:
+ fprintf(stderr, "Cannot read unsupported image format for image %s\n", name);
+ break;
+ }
+
+ /* If the image load failed, create a tiny white colored image to fake it */
+ /* this allows a scene to render even when a file can't be loaded */
+ if (rc != IMAGENOERR) {
+ rc = fakeimage(name, &xres, &yres, &imgdata);
+ }
+
+ /* If we succeeded in loading the image, return it. */
+ if (rc == IMAGENOERR) {
+ img->xres = xres;
+ img->yres = yres;
+ img->bpp = 3;
+ img->data = imgdata;
+ }
+
+ return rc;
+}
+
+
diff --git a/examples/parallel_for/tacheon/src/imageio.h b/examples/parallel_for/tacheon/src/imageio.h
new file mode 100644
index 0000000..c38cfd8
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/imageio.h
@@ -0,0 +1,76 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * imageio.h - This file deals with reading/writing image files
+ *
+ * $Id: imageio.h,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+/* For our puposes, we're interested only in the 3 byte per pixel 24 bit
+ truecolor sort of file.. */
+
+#define IMAGENOERR 0 /* no error */
+#define IMAGEBADFILE 1 /* can't find or can't open the file */
+#define IMAGEUNSUP 2 /* the image file is an unsupported format */
+#define IMAGEALLOCERR 3 /* not enough remaining memory to load this image */
+#define IMAGEREADERR 4 /* failed read, short reads etc */
+
+int readimage(rawimage *);
diff --git a/examples/parallel_for/tacheon/src/imap.cpp b/examples/parallel_for/tacheon/src/imap.cpp
new file mode 100644
index 0000000..d5af7bb
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/imap.cpp
@@ -0,0 +1,180 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * imap.c - This file contains code for doing image map type things.
+ *
+ * $Id: imap.cpp,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "imap.h"
+#include "util.h"
+#include "imageio.h"
+
+rawimage * imagelist[MAXIMGS];
+int numimages;
+
+void ResetImages(void) {
+ int i;
+ numimages=0;
+ for (i=0; i<MAXIMGS; i++) {
+ imagelist[i]=NULL;
+ }
+}
+
+void LoadImage(rawimage * image) {
+ if (!image->loaded) {
+ readimage(image);
+ image->loaded=1;
+ }
+}
+
+color ImageMap(rawimage * image, flt u, flt v) {
+ color col, colx, colx2;
+ flt x,y, px, py;
+ int x1, x2, y1, y2;
+ unsigned char * ptr;
+ unsigned char * ptr2;
+
+ if (!image->loaded) {
+ LoadImage(image);
+ image->loaded=1;
+ }
+
+ if ((u <= 1.0) && (u >=0.0) && (v <= 1.0) && (v >= 0.0)) {
+ x=(image->xres - 1.0) * u; /* floating point X location */
+ y=(image->yres - 1.0) * v; /* floating point Y location */
+
+ px = x - ((int) x);
+ py = y - ((int) y);
+
+ x1 = (int) x;
+ x2 = x1 + 1;
+
+ y1 = (int) y;
+ y2 = y1 + 1;
+
+ ptr = image->data + ((image->xres * y1) + x1) * 3;
+ ptr2 = image->data + ((image->xres * y1) + x2) * 3;
+
+ colx.r = (flt) ((flt)ptr[0] + px*((flt)ptr2[0] - (flt) ptr[0])) / 255.0;
+ colx.g = (flt) ((flt)ptr[1] + px*((flt)ptr2[1] - (flt) ptr[1])) / 255.0;
+ colx.b = (flt) ((flt)ptr[2] + px*((flt)ptr2[2] - (flt) ptr[2])) / 255.0;
+
+ ptr = image->data + ((image->xres * y2) + x1) * 3;
+ ptr2 = image->data + ((image->xres * y2) + x2) * 3;
+
+ colx2.r = ((flt)ptr[0] + px*((flt)ptr2[0] - (flt)ptr[0])) / 255.0;
+ colx2.g = ((flt)ptr[1] + px*((flt)ptr2[1] - (flt)ptr[1])) / 255.0;
+ colx2.b = ((flt)ptr[2] + px*((flt)ptr2[2] - (flt)ptr[2])) / 255.0;
+
+ col.r = colx.r + py*(colx2.r - colx.r);
+ col.g = colx.g + py*(colx2.g - colx.g);
+ col.b = colx.b + py*(colx2.b - colx.b);
+
+ }
+ else {
+ col.r=0.0;
+ col.g=0.0;
+ col.b=0.0;
+ }
+ return col;
+}
+
+rawimage * AllocateImage(char * filename) {
+ rawimage * newimage = NULL;
+ int i, len, intable;
+
+ intable=0;
+ if (numimages!=0) {
+ for (i=0; i<numimages; i++) {
+ if (!strcmp(filename, imagelist[i]->name)) {
+ newimage=imagelist[i];
+ intable=1;
+ }
+ }
+ }
+
+ if (!intable) {
+ newimage=(rawimage *)rt_getmem(sizeof(rawimage));
+ newimage->loaded=0;
+ newimage->xres=0;
+ newimage->yres=0;
+ newimage->bpp=0;
+ newimage->data=NULL;
+ len=strlen(filename);
+ if (len > 80) rtbomb("Filename too long in image map!!");
+ strcpy(newimage->name, filename);
+
+ imagelist[numimages]=newimage; /* add new one to the table */
+ numimages++; /* increment the number of images */
+ }
+
+ return newimage;
+}
+
+void DeallocateImage(rawimage * image) {
+ image->loaded=0;
+ rt_freemem(image->data);
+}
+
+
diff --git a/examples/parallel_for/tacheon/src/imap.h b/examples/parallel_for/tacheon/src/imap.h
new file mode 100644
index 0000000..1f8d402
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/imap.h
@@ -0,0 +1,72 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * imap.h - This file contains defines etc for doing image map type things.
+ *
+ * $Id: imap.h,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+void ResetImage(void);
+void LoadImage(rawimage *);
+color ImageMap(rawimage *, flt, flt);
+rawimage * AllocateImage(char *);
+void DeallocateImage(rawimage *);
+void ResetImages(void);
diff --git a/examples/parallel_for/tacheon/src/intersect.cpp b/examples/parallel_for/tacheon/src/intersect.cpp
new file mode 100644
index 0000000..76e9fbe
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/intersect.cpp
@@ -0,0 +1,190 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * intersect.c - This file contains code for CSG and intersection routines.
+ *
+ * $Id: intersect.cpp,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "intersect.h"
+#include "light.h"
+#include "util.h"
+#include "global.h"
+
+unsigned int new_objectid(void) {
+ return numobjects++; /* global used to generate unique object ID's */
+}
+
+unsigned int max_objectid(void) {
+ return numobjects;
+}
+
+void add_object(object * obj) {
+ object * objtemp;
+
+ if (obj == NULL)
+ return;
+
+ obj->id = new_objectid();
+
+ objtemp = rootobj;
+ rootobj = obj;
+ obj->nextobj = objtemp;
+}
+
+void free_objects(object * start) {
+ object * cur;
+ object * cur2;
+
+ cur=start;
+ while (cur->nextobj != NULL) {
+ cur2=(object *)cur->nextobj;
+ cur->methods->free(cur);
+ cur=cur2;
+ }
+ free(cur);
+
+}
+
+void reset_object(void) {
+ if (rootobj != NULL)
+ free_objects(rootobj);
+
+ rootobj = NULL;
+ numobjects = 0; /* set number of objects back to 0 */
+}
+
+void intersect_objects(ray * intray) {
+ object * cur;
+ object temp;
+
+ temp.nextobj = rootobj; /* setup the initial object pointers.. */
+ cur = &temp; /* ready, set */
+
+ while ((cur=(object *)cur->nextobj) != NULL)
+ cur->methods->intersect(cur, intray);
+}
+
+void reset_intersection(intersectstruct * intstruct) {
+ intstruct->num = 0;
+ intstruct->list[0].t = FHUGE;
+ intstruct->list[0].obj = NULL;
+ intstruct->list[1].t = FHUGE;
+ intstruct->list[1].obj = NULL;
+}
+
+void add_intersection(flt t, object * obj, ray * ry) {
+ intersectstruct * intstruct = ry->intstruct;
+
+ if (t > EPSILON) {
+
+ /* if we hit something before maxdist update maxdist */
+ if (t < ry->maxdist) {
+ ry->maxdist = t;
+
+ /* if we hit *anything* before maxdist, and we're firing a */
+ /* shadow ray, then we are finished ray tracing the shadow */
+ if (ry->flags & RT_RAY_SHADOW)
+ ry->flags |= RT_RAY_FINISHED;
+ }
+
+ intstruct->num++;
+ intstruct->list[intstruct->num].obj = obj;
+ intstruct->list[intstruct->num].t = t;
+ }
+}
+
+
+int closest_intersection(flt * t, object ** obj, intersectstruct * intstruct) {
+ int i;
+ *t=FHUGE;
+
+ for (i=1; i<=intstruct->num; i++) {
+ if (intstruct->list[i].t < *t) {
+ *t=intstruct->list[i].t;
+ *obj=intstruct->list[i].obj;
+ }
+ }
+
+ return intstruct->num;
+}
+
+int shadow_intersection(intersectstruct * intstruct, flt maxdist) {
+ int i;
+
+ if (intstruct->num > 0) {
+ for (i=1; i<=intstruct->num; i++) {
+ if ((intstruct->list[i].t < maxdist) &&
+ (intstruct->list[i].obj->tex->shadowcast == 1)) {
+ return 1;
+ }
+ }
+ }
+
+ return 0;
+}
+
+
+
+
+
diff --git a/examples/parallel_for/tacheon/src/intersect.h b/examples/parallel_for/tacheon/src/intersect.h
new file mode 100644
index 0000000..de17dfa
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/intersect.h
@@ -0,0 +1,78 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * intersect.h - This file contains the declarations and defines for the
+ * functions that manage intersection, bounding and CSG..
+ *
+ * $Id: intersect.h,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+unsigned int new_objectid(void);
+unsigned int max_objectid(void);
+void add_object(object *);
+void reset_object(void);
+void free_objects(object *);
+void intersect_objects(ray *);
+void reset_intersection(intersectstruct *);
+void add_intersection(flt, object *, ray *);
+int closest_intersection(flt *, object **, intersectstruct *);
+int next_intersection(object **, object *, intersectstruct *);
+int shadow_intersection(intersectstruct * intstruct, flt maxdist);
diff --git a/examples/parallel_for/tacheon/src/jpeg.cpp b/examples/parallel_for/tacheon/src/jpeg.cpp
new file mode 100644
index 0000000..61298f3
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/jpeg.cpp
@@ -0,0 +1,142 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * jpeg.c - This file deals with JPEG format image files (reading/writing)
+ *
+ * $Id: jpeg.cpp,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+/*
+ * This code requires support from the Independent JPEG Group's libjpeg.
+ * For our puposes, we're interested only in the 3 byte per pixel 24 bit
+ * RGB output. Probably won't implement any decent checking at this point.
+ */
+
+#include <stdio.h>
+#include "machine.h"
+#include "types.h"
+#include "util.h"
+#include "imageio.h" /* error codes etc */
+#include "jpeg.h" /* the protos for this file */
+
+#if !defined(USEJPEG)
+
+int readjpeg(char * name, int * xres, int * yres, unsigned char **imgdata) {
+ return IMAGEUNSUP;
+}
+
+#else
+
+#include "jpeglib.h" /* the IJG jpeg library headers */
+
+int readjpeg(char * name, int * xres, int * yres, unsigned char **imgdata) {
+ FILE * ifp;
+ struct jpeg_decompress_struct cinfo; /* JPEG decompression struct */
+ struct jpeg_error_mgr jerr; /* JPEG Error handler */
+ JSAMPROW row_pointer[1]; /* output row buffer */
+ int row_stride; /* physical row width in output buf */
+
+ /* open input file before doing any JPEG decompression setup */
+ if ((ifp = fopen(name, "rb")) == NULL)
+ return IMAGEBADFILE; /* Could not open image, return error */
+
+ /*
+ * Note: The Independent JPEG Group's library does not have a way
+ * of returning errors without the use of setjmp/longjmp.
+ * This is a problem in multi-threaded environment, since setjmp
+ * and longjmp are declared thread-unsafe by many vendors currently.
+ * For now, JPEG decompression errors will result in the "default"
+ * error handling provided by the JPEG library, which is an error
+ * message and a fatal call to exit(). I'll have to work around this
+ * or find a reasonably thread-safe way of doing setjmp/longjmp..
+ */
+
+ cinfo.err = jpeg_std_error(&jerr); /* Set JPEG error handler to default */
+
+ jpeg_create_decompress(&cinfo); /* Create decompression context */
+ jpeg_stdio_src(&cinfo, ifp); /* Set input mechanism to stdio type */
+ jpeg_read_header(&cinfo, TRUE); /* Read the JPEG header for info */
+ jpeg_start_decompress(&cinfo); /* Prepare for actual decompression */
+
+ *xres = cinfo.output_width; /* set returned image width */
+ *yres = cinfo.output_height; /* set returned image height */
+
+ /* Calculate the size of a row in the image */
+ row_stride = cinfo.output_width * cinfo.output_components;
+
+ /* Allocate the image buffer which will be returned to the ray tracer */
+ *imgdata = (unsigned char *) malloc(row_stride * cinfo.output_height);
+
+ /* decompress the JPEG, one scanline at a time into the buffer */
+ while (cinfo.output_scanline < cinfo.output_height) {
+ row_pointer[0] = &((*imgdata)[(cinfo.output_scanline)*row_stride]);
+ jpeg_read_scanlines(&cinfo, row_pointer, 1);
+ }
+
+ jpeg_finish_decompress(&cinfo); /* Tell the JPEG library to cleanup */
+ jpeg_destroy_decompress(&cinfo); /* Destroy JPEG decompression context */
+
+ fclose(ifp); /* Close the input file */
+
+ return IMAGENOERR; /* No fatal errors */
+}
+
+#endif
diff --git a/examples/parallel_for/tacheon/src/jpeg.h b/examples/parallel_for/tacheon/src/jpeg.h
new file mode 100644
index 0000000..141cd13
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/jpeg.h
@@ -0,0 +1,67 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * jpeg.h - This file deals with JPEG format image files (reading/writing)
+ *
+ * $Id: jpeg.h,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+int readjpeg(char * name, int * xres, int * yres, unsigned char **imgdata);
diff --git a/examples/parallel_for/tacheon/src/light.cpp b/examples/parallel_for/tacheon/src/light.cpp
new file mode 100644
index 0000000..92e8c89
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/light.cpp
@@ -0,0 +1,141 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * light.c - This file contains declarations and defines for light sources.
+ *
+ * $Id: light.cpp,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "intersect.h"
+#include "util.h"
+
+#define LIGHT_PRIVATE
+#include "light.h"
+
+static object_methods light_methods = {
+ (void (*)(void *, void *))(light_intersect),
+ (void (*)(void *, void *, void *, void *))(light_normal),
+ light_bbox,
+ free
+};
+
+point_light * newlight(void * tex, vector ctr, flt rad) {
+ point_light * l;
+
+ l=(point_light *) rt_getmem(sizeof(point_light));
+ memset(l, 0, sizeof(point_light));
+ l->methods = &light_methods;
+
+ l->tex=(texture *)tex;
+ l->ctr=ctr;
+ l->rad=rad;
+
+ return l;
+}
+
+static int light_bbox(void * obj, vector * min, vector * max) {
+ return 0; /* lights are unbounded currently */
+}
+
+static void light_intersect(point_light * l, ray * ry) {
+ flt b, disc, t1, t2, temp;
+ vector V;
+
+ /* Lights do not cast shadows.. */
+ if (ry->flags & RT_RAY_SHADOW)
+ return;
+
+ VSUB(l->ctr, ry->o, V);
+ VDOT(b, V, ry->d);
+ VDOT(temp, V, V);
+
+ disc=b*b + l->rad*l->rad - temp;
+
+ if (disc<=0.0) return;
+ disc=sqrt(disc);
+
+ t2=b+disc;
+ if (t2 <= SPEPSILON)
+ return;
+ add_intersection(t2, (object *) l, ry);
+
+ t1=b-disc;
+ if (t1 > SPEPSILON)
+ add_intersection(t1, (object *) l, ry);
+}
+
+static void light_normal(point_light * l, vector * pnt, ray * incident, vector * N) {
+ VSub((vector *) pnt, &(l->ctr), N);
+
+ VNorm(N);
+
+ if (VDot(N, &(incident->d)) > 0.0) {
+ N->x=-N->x;
+ N->y=-N->y;
+ N->z=-N->z;
+ }
+}
+
+
diff --git a/examples/parallel_for/tacheon/src/light.h b/examples/parallel_for/tacheon/src/light.h
new file mode 100644
index 0000000..727afde
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/light.h
@@ -0,0 +1,82 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * light.h - this file includes declarations and defines for light sources.
+ *
+ * $Id: light.h,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+typedef struct {
+ unsigned int id; /* Unique Object serial number */
+ void * nextobj; /* pointer to next object in list */
+ object_methods * methods; /* this object's methods */
+ texture * tex; /* object texture */
+ vector ctr;
+ flt rad;
+} point_light;
+
+point_light * newlight(void *, vector, flt);
+
+#ifdef LIGHT_PRIVATE
+static int light_bbox(void * obj, vector * min, vector * max);
+static void light_intersect(point_light *, ray *);
+static void light_normal(point_light *, vector *, ray *, vector *);
+#endif
diff --git a/examples/parallel_for/tacheon/src/machine.h b/examples/parallel_for/tacheon/src/machine.h
new file mode 100644
index 0000000..74623b1
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/machine.h
@@ -0,0 +1,75 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * machine.h - This is the machine specific include file
+ *
+ * $Id: machine.h,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#define STDTIME
diff --git a/examples/parallel_for/tacheon/src/macros.h b/examples/parallel_for/tacheon/src/macros.h
new file mode 100644
index 0000000..8dd01e2
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/macros.h
@@ -0,0 +1,90 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * macros.h - This file contains macro versions of functions that would be best
+ * used as inlined code rather than function calls.
+ *
+ * $Id: macros.h,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+#define MYMAX(a , b) ((a) > (b) ? (a) : (b))
+#define MYMIN(a , b) ((a) < (b) ? (a) : (b))
+
+#define VDOT(return, a, b) \
+ return=(a.x * b.x + a.y * b.y + a.z * b.z); \
+
+#define RAYPNT(c, a, b) \
+c.x = a.o.x + ( a.d.x * b ); \
+c.y = a.o.y + ( a.d.y * b ); \
+c.z = a.o.z + ( a.d.z * b ); \
+
+
+#define VSUB(a, b, c) \
+c.x = (a.x - b.x); \
+c.y = (a.y - b.y); \
+c.z = (a.z - b.z); \
+
+
+#define VCROSS(a, b, c) \
+ c->x = (a->y * b->z) - (a->z * b->y); \
+ c->y = (a->z * b->x) - (a->x * b->z); \
+ c->z = (a->x * b->y) - (a->y * b->x); \
+
diff --git a/examples/parallel_for/tacheon/src/objbound.cpp b/examples/parallel_for/tacheon/src/objbound.cpp
new file mode 100644
index 0000000..30a1210
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/objbound.cpp
@@ -0,0 +1,349 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * objbound.c - This file contains the functions to find bounding boxes
+ * for the various primitives
+ *
+ * $Id: objbound.cpp,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "bndbox.h"
+
+#define OBJBOUND_PRIVATE
+#include "objbound.h"
+
+static void globalbound(object ** rootlist, vector * gmin, vector * gmax) {
+ vector min, max;
+ object * cur;
+
+ if (*rootlist == NULL) /* don't bound non-existant objects */
+ return;
+
+ gmin->x = FHUGE; gmin->y = FHUGE; gmin->z = FHUGE;
+ gmax->x = -FHUGE; gmax->y = -FHUGE; gmax->z = -FHUGE;
+
+ cur=*rootlist;
+ while (cur != NULL) { /* Go! */
+ min.x = -FHUGE; min.y = -FHUGE; min.z = -FHUGE;
+ max.x = FHUGE; max.y = FHUGE; max.z = FHUGE;
+
+ cur->methods->bbox((void *) cur, &min, &max);
+
+ gmin->x = MYMIN( gmin->x , min.x);
+ gmin->y = MYMIN( gmin->y , min.y);
+ gmin->z = MYMIN( gmin->z , min.z);
+
+ gmax->x = MYMAX( gmax->x , max.x);
+ gmax->y = MYMAX( gmax->y , max.y);
+ gmax->z = MYMAX( gmax->z , max.z);
+
+ cur=(object *)cur->nextobj;
+ }
+}
+
+static int objinside(object * obj, vector * min, vector * max) {
+ vector omin, omax;
+
+ if (obj == NULL) /* non-existant object, shouldn't get here */
+ return 0;
+
+ if (obj->methods->bbox((void *) obj, &omin, &omax)) {
+ if ((min->x <= omin.x) && (min->y <= omin.y) && (min->z <= omin.z) &&
+ (max->x >= omax.x) && (max->y >= omax.y) && (max->z >= omax.z)) {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+static int countobj(object * root) {
+ object * cur; /* counts the number of objects on a list */
+ int numobj;
+
+ numobj=0;
+ cur=root;
+
+ while (cur != NULL) {
+ cur=(object *)cur->nextobj;
+ numobj++;
+ }
+ return numobj;
+}
+
+static void movenextobj(object * thisobj, object ** root) {
+ object * cur, * tmp;
+
+ /* move the object after thisobj to the front of the object list */
+ /* headed by root */
+ if (thisobj != NULL) {
+ if (thisobj->nextobj != NULL) {
+ cur=(object *)thisobj->nextobj; /* the object to be moved */
+ thisobj->nextobj = cur->nextobj; /* link around the moved obj */
+ tmp=*root; /* store the root node */
+ cur->nextobj=tmp; /* attach root to cur */
+ *root=cur; /* make cur, the new root */
+ }
+ }
+}
+
+static void octreespace(object ** rootlist, int maxoctnodes) {
+ object * cur;
+ vector gmin, gmax, gctr;
+ vector cmin1, cmin2, cmin3, cmin4, cmin5, cmin6, cmin7, cmin8;
+ vector cmax1, cmax2, cmax3, cmax4, cmax5, cmax6, cmax7, cmax8;
+ bndbox * box1, * box2, * box3, * box4;
+ bndbox * box5, * box6, * box7, * box8;
+ int skipobj;
+
+ if (*rootlist == NULL) /* don't subdivide non-existant data */
+ return;
+
+ skipobj=0;
+ globalbound(rootlist, &gmin, &gmax); /* find global min and max */
+
+ gctr.x = ((gmax.x - gmin.x) / 2.0) + gmin.x;
+ gctr.y = ((gmax.y - gmin.y) / 2.0) + gmin.y;
+ gctr.z = ((gmax.z - gmin.z) / 2.0) + gmin.z;
+
+ cmin1=gmin;
+ cmax1=gctr;
+ box1 = newbndbox(cmin1, cmax1);
+
+ cmin2=gmin;
+ cmin2.x=gctr.x;
+ cmax2=gmax;
+ cmax2.y=gctr.y;
+ cmax2.z=gctr.z;
+ box2 = newbndbox(cmin2, cmax2);
+
+ cmin3=gmin;
+ cmin3.y=gctr.y;
+ cmax3=gmax;
+ cmax3.x=gctr.x;
+ cmax3.z=gctr.z;
+ box3 = newbndbox(cmin3, cmax3);
+
+ cmin4=gmin;
+ cmin4.x=gctr.x;
+ cmin4.y=gctr.y;
+ cmax4=gmax;
+ cmax4.z=gctr.z;
+ box4 = newbndbox(cmin4, cmax4);
+
+ cmin5=gmin;
+ cmin5.z=gctr.z;
+ cmax5=gctr;
+ cmax5.z=gmax.z;
+ box5 = newbndbox(cmin5, cmax5);
+
+ cmin6=gctr;
+ cmin6.y=gmin.y;
+ cmax6=gmax;
+ cmax6.y=gctr.y;
+ box6 = newbndbox(cmin6, cmax6);
+
+ cmin7=gctr;
+ cmin7.x=gmin.x;
+ cmax7=gctr;
+ cmax7.y=gmax.y;
+ cmax7.z=gmax.z;
+ box7 = newbndbox(cmin7, cmax7);
+
+ cmin8=gctr;
+ cmax8=gmax;
+ box8 = newbndbox(cmin8, cmax8);
+
+ cur = *rootlist;
+ while (cur != NULL) {
+ if (objinside((object *)cur->nextobj, &cmin1, &cmax1)) {
+ movenextobj(cur, &box1->objlist);
+ }
+ else if (objinside((object *)cur->nextobj, &cmin2, &cmax2)) {
+ movenextobj(cur, &box2->objlist);
+ }
+ else if (objinside((object *)cur->nextobj, &cmin3, &cmax3)) {
+ movenextobj(cur, &box3->objlist);
+ }
+ else if (objinside((object *)cur->nextobj, &cmin4, &cmax4)) {
+ movenextobj(cur, &box4->objlist);
+ }
+ else if (objinside((object *)cur->nextobj, &cmin5, &cmax5)) {
+ movenextobj(cur, &box5->objlist);
+ }
+ else if (objinside((object *)cur->nextobj, &cmin6, &cmax6)) {
+ movenextobj(cur, &box6->objlist);
+ }
+ else if (objinside((object *)cur->nextobj, &cmin7, &cmax7)) {
+ movenextobj(cur, &box7->objlist);
+ }
+ else if (objinside((object *)cur->nextobj, &cmin8, &cmax8)) {
+ movenextobj(cur, &box8->objlist);
+ }
+ else {
+ skipobj++;
+ cur=(object *)cur->nextobj;
+ }
+ }
+
+/* new scope, for redefinition of cur, and old */
+ { bndbox * cur, * old;
+ old=box1;
+ cur=box2;
+ if (countobj(cur->objlist) > 0) {
+ old->nextobj=cur;
+ globalbound(&cur->objlist, &cur->min, &cur->max);
+ old=cur;
+ }
+ cur=box3;
+ if (countobj(cur->objlist) > 0) {
+ old->nextobj=cur;
+ globalbound(&cur->objlist, &cur->min, &cur->max);
+ old=cur;
+ }
+ cur=box4;
+ if (countobj(cur->objlist) > 0) {
+ old->nextobj=cur;
+ globalbound(&cur->objlist, &cur->min, &cur->max);
+ old=cur;
+ }
+ cur=box5;
+ if (countobj(cur->objlist) > 0) {
+ old->nextobj=cur;
+ globalbound(&cur->objlist, &cur->min, &cur->max);
+ old=cur;
+ }
+ cur=box6;
+ if (countobj(cur->objlist) > 0) {
+ old->nextobj=cur;
+ globalbound(&cur->objlist, &cur->min, &cur->max);
+ old=cur;
+ }
+ cur=box7;
+ if (countobj(cur->objlist) > 0) {
+ old->nextobj=cur;
+ globalbound(&cur->objlist, &cur->min, &cur->max);
+ old=cur;
+ }
+ cur=box8;
+ if (countobj(cur->objlist) > 0) {
+ old->nextobj=cur;
+ globalbound(&cur->objlist, &cur->min, &cur->max);
+ old=cur;
+ }
+
+ old->nextobj=*rootlist;
+
+ if (countobj(box1->objlist) > 0) {
+ globalbound(&box1->objlist, &box1->min, &box1->max);
+ *rootlist=(object *) box1;
+ }
+ else {
+ *rootlist=(object *) box1->nextobj;
+ }
+
+ } /**** end of special cur and old scope */
+
+ if (countobj(box1->objlist) > maxoctnodes) {
+ octreespace(&box1->objlist, maxoctnodes);
+ }
+ if (countobj(box2->objlist) > maxoctnodes) {
+ octreespace(&box2->objlist, maxoctnodes);
+ }
+ if (countobj(box3->objlist) > maxoctnodes) {
+ octreespace(&box3->objlist, maxoctnodes);
+ }
+ if (countobj(box4->objlist) > maxoctnodes) {
+ octreespace(&box4->objlist, maxoctnodes);
+ }
+ if (countobj(box5->objlist) > maxoctnodes) {
+ octreespace(&box5->objlist, maxoctnodes);
+ }
+ if (countobj(box6->objlist) > maxoctnodes) {
+ octreespace(&box6->objlist, maxoctnodes);
+ }
+ if (countobj(box7->objlist) > maxoctnodes) {
+ octreespace(&box7->objlist, maxoctnodes);
+ }
+ if (countobj(box8->objlist) > maxoctnodes) {
+ octreespace(&box8->objlist, maxoctnodes);
+ }
+}
+
+void dividespace(int maxoctnodes, object **toplist) {
+ bndbox * gbox;
+ vector gmin, gmax;
+
+ if (countobj(*toplist) > maxoctnodes) {
+ globalbound(toplist, &gmin, &gmax);
+
+ octreespace(toplist, maxoctnodes);
+
+ gbox = newbndbox(gmin, gmax);
+ gbox->objlist = NULL;
+ gbox->tex = NULL;
+ gbox->nextobj=NULL;
+ gbox->objlist=*toplist;
+ *toplist=(object *) gbox;
+ }
+}
diff --git a/examples/parallel_for/tacheon/src/objbound.h b/examples/parallel_for/tacheon/src/objbound.h
new file mode 100644
index 0000000..88f0a5e
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/objbound.h
@@ -0,0 +1,77 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * objbound.h - defines for object bounding code.
+ *
+ * $Id: objbound.h,v 1.2 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+void dividespace(int, object **);
+
+#ifdef OBJBOUND_PRIVATE
+
+static void globalbound(object **, vector *, vector *);
+static int objinside(object * obj, vector * min, vector * max);
+static int countobj(object *);
+static void movenextobj(object *, object **);
+static void octreespace(object **, int);
+
+#endif
diff --git a/examples/parallel_for/tacheon/src/parse.cpp b/examples/parallel_for/tacheon/src/parse.cpp
new file mode 100644
index 0000000..7127e22
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/parse.cpp
@@ -0,0 +1,860 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * parse.c - an UltraLame (tm) parser for simple data files...
+ *
+ * $Id: parse.cpp,v 1.3 2007/02/22 17:54:15 dpoulsen Exp $
+ */
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h> /* needed for toupper(), macro.. */
+
+#include "types.h"
+#include "api.h" /* rendering API */
+
+#define PARSE_INTERNAL
+#include "parse.h" /* self protos */
+#undef PARSE_INTERNAL
+
+static texentry textable[NUMTEXS]; /* texture lookup table */
+static texentry defaulttex; /* The default texture when a lookup fails */
+static int numtextures; /* number of TEXDEF textures */
+static int numobjectsparsed; /* total number of objects parsed so far */
+static color scenebackcol; /* scene background color */
+
+static int stringcmp(char * a, char * b) {
+ int i, s, l;
+
+ s=strlen(a);
+ l=strlen(b);
+
+ if (s != l)
+ return 1;
+
+ for (i=0; i<s; i++) {
+ if (toupper(a[i]) != toupper(b[i])) {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+static void reset_tex_table(void) {
+ apitexture apitex;
+
+ numtextures=0;
+ memset(&textable, 0, sizeof(textable));
+
+ apitex.col.r=1.0;
+ apitex.col.g=1.0;
+ apitex.col.b=1.0;
+ apitex.ambient=0.1;
+ apitex.diffuse=0.9;
+ apitex.specular=0.0;
+ apitex.opacity=1.0;
+ apitex.texturefunc=0;
+
+ defaulttex.tex=rt_texture(&apitex);
+}
+
+static errcode add_texture(void * tex, char name[TEXNAMELEN]) {
+ textable[numtextures].tex=tex;
+ strcpy(textable[numtextures].name, name);
+
+ numtextures++;
+ if (numtextures > NUMTEXS) {
+ fprintf(stderr, "Parse: %d textures allocated, texture slots full!\n", numtextures);
+ numtextures--; /* keep writing over last texture if we've run out.. */
+ return PARSEALLOCERR;
+ }
+
+ return PARSENOERR;
+}
+
+static void * find_texture(char name[TEXNAMELEN]) {
+ int i;
+
+ for (i=0; i<numtextures; i++) {
+ if (strcmp(name, textable[i].name) == 0)
+ return textable[i].tex;
+ }
+ fprintf(stderr, "Undefined texture '%s', using default. \n",name);
+ return(defaulttex.tex);
+}
+
+apiflt degtorad(apiflt deg) {
+ apiflt tmp;
+ tmp=deg * 3.1415926 / 180.0;
+ return tmp;
+}
+
+static void degvectoradvec(vector * degvec) {
+ vector tmp;
+
+ tmp.x=degtorad(degvec->x);
+ tmp.y=degtorad(degvec->y);
+ tmp.z=degtorad(degvec->z);
+ *degvec=tmp;
+}
+
+static void InitRot3d(RotMat * rot, apiflt x, apiflt y, apiflt z) {
+ rot->rx1=cos(y)*cos(z);
+ rot->rx2=sin(x)*sin(y)*cos(z) - cos(x)*sin(z);
+ rot->rx3=sin(x)*sin(z) + cos(x)*cos(z)*sin(y);
+
+ rot->ry1=cos(y)*sin(z);
+ rot->ry2=cos(x)*cos(z) + sin(x)*sin(y)*sin(z);
+ rot->ry3=cos(x)*sin(y)*sin(z) - sin(x)*cos(z);
+
+ rot->rz1=sin(y);
+ rot->rz2=sin(x)*cos(y);
+ rot->rz3=cos(x)*cos(y);
+}
+
+static void Rotate3d(RotMat * rot, vector * vec) {
+ vector tmp;
+ tmp.x=(vec->x*(rot->rx1) + vec->y*(rot->rx2) + vec->z*(rot->rx3));
+ tmp.y=(vec->x*(rot->ry1) + vec->y*(rot->ry2) + vec->z*(rot->ry3));
+ tmp.z=(vec->x*(rot->rz1) + vec->y*(rot->rz2) + vec->z*(rot->rz3));
+ *vec=tmp;
+}
+
+static void Scale3d(vector * scale, vector * vec) {
+ vec->x=vec->x * scale->x;
+ vec->y=vec->y * scale->y;
+ vec->z=vec->z * scale->z;
+}
+
+static void Trans3d(vector * trans, vector * vec) {
+ vec->x+=trans->x;
+ vec->y+=trans->y;
+ vec->z+=trans->z;
+}
+
+static errcode GetString(FILE * dfile, char * string) {
+ char data[255];
+
+ fscanf(dfile,"%s",data);
+ if (stringcmp(data, string) != 0) {
+ fprintf(stderr, "parse: Expected %s, got %s \n",string, data);
+ fprintf(stderr, "parse: Error while parsing object: %d \n",numobjectsparsed);
+ return PARSEBADSYNTAX;
+ }
+
+ return PARSENOERR;
+}
+
+unsigned int readmodel(char * modelfile, SceneHandle scene) {
+ FILE * dfile;
+ errcode rc;
+
+ reset_tex_table();
+ dfile=NULL;
+
+ dfile=fopen(modelfile,"r");
+ if (dfile==NULL) {
+ return PARSEBADFILE;
+ }
+
+ rc = GetScenedefs(dfile, scene);
+ if (rc != PARSENOERR)
+ return rc;
+
+ scenebackcol.r = 0.0; /* default background is black */
+ scenebackcol.g = 0.0;
+ scenebackcol.b = 0.0;
+
+ numobjectsparsed=0;
+ while ((rc = GetObject(dfile, scene)) == PARSENOERR) {
+ numobjectsparsed++;
+ }
+ fclose(dfile);
+
+ if (rc == PARSEEOF)
+ rc = PARSENOERR;
+
+ rt_background(scene, scenebackcol);
+
+ return rc;
+}
+
+
+static errcode GetScenedefs(FILE * dfile, SceneHandle scene) {
+ vector Ccenter, Cview, Cup;
+ apiflt zoom, aspectratio;
+ int raydepth, antialiasing;
+ char outfilename[200];
+ int xres, yres, verbose;
+ float a,b,c;
+ errcode rc = PARSENOERR;
+
+ rc |= GetString(dfile, "BEGIN_SCENE");
+
+ rc |= GetString(dfile, "OUTFILE");
+ fscanf(dfile, "%s", outfilename);
+#ifdef _WIN32
+ if (strcmp (outfilename, "/dev/null") == 0) {
+ strcpy (outfilename, "NUL:");
+ }
+#endif
+
+ rc |= GetString(dfile, "RESOLUTION");
+ fscanf(dfile, "%d %d", &xres, &yres);
+
+ rc |= GetString(dfile, "VERBOSE");
+ fscanf(dfile, "%d", &verbose);
+
+ rt_scenesetup(scene, outfilename, xres, yres, verbose);
+
+ rc |= GetString(dfile, "CAMERA");
+
+ rc |= GetString(dfile, "ZOOM");
+ fscanf(dfile, "%f", &a);
+ zoom=a;
+
+ rc |= GetString(dfile, "ASPECTRATIO");
+ fscanf(dfile, "%f", &b);
+ aspectratio=b;
+
+ rc |= GetString(dfile, "ANTIALIASING");
+ fscanf(dfile, "%d", &antialiasing);
+
+ rc |= GetString(dfile, "RAYDEPTH");
+ fscanf(dfile, "%d", &raydepth);
+
+ rc |= GetString(dfile, "CENTER");
+ fscanf(dfile,"%f %f %f", &a, &b, &c);
+ Ccenter.x = a;
+ Ccenter.y = b;
+ Ccenter.z = c;
+
+ rc |= GetString(dfile, "VIEWDIR");
+ fscanf(dfile,"%f %f %f", &a, &b, &c);
+ Cview.x = a;
+ Cview.y = b;
+ Cview.z = c;
+
+ rc |= GetString(dfile, "UPDIR");
+ fscanf(dfile,"%f %f %f", &a, &b, &c);
+ Cup.x = a;
+ Cup.y = b;
+ Cup.z = c;
+
+ rc |= GetString(dfile, "END_CAMERA");
+
+ rt_camerasetup(scene, zoom, aspectratio, antialiasing, raydepth,
+ Ccenter, Cview, Cup);
+
+
+ return rc;
+}
+
+static errcode GetObject(FILE * dfile, SceneHandle scene) {
+ char objtype[80];
+
+ fscanf(dfile, "%s", objtype);
+ if (!stringcmp(objtype, "END_SCENE")) {
+ return PARSEEOF; /* end parsing */
+ }
+ if (!stringcmp(objtype, "TEXDEF")) {
+ return GetTexDef(dfile);
+ }
+ if (!stringcmp(objtype, "TEXALIAS")) {
+ return GetTexAlias(dfile);
+ }
+ if (!stringcmp(objtype, "BACKGROUND")) {
+ return GetBackGnd(dfile);
+ }
+ if (!stringcmp(objtype, "CYLINDER")) {
+ return GetCylinder(dfile);
+ }
+ if (!stringcmp(objtype, "FCYLINDER")) {
+ return GetFCylinder(dfile);
+ }
+ if (!stringcmp(objtype, "POLYCYLINDER")) {
+ return GetPolyCylinder(dfile);
+ }
+ if (!stringcmp(objtype, "SPHERE")) {
+ return GetSphere(dfile);
+ }
+ if (!stringcmp(objtype, "PLANE")) {
+ return GetPlane(dfile);
+ }
+ if (!stringcmp(objtype, "RING")) {
+ return GetRing(dfile);
+ }
+ if (!stringcmp(objtype, "BOX")) {
+ return GetBox(dfile);
+ }
+ if (!stringcmp(objtype, "SCALARVOL")) {
+ return GetVol(dfile);
+ }
+ if (!stringcmp(objtype, "TRI")) {
+ return GetTri(dfile);
+ }
+ if (!stringcmp(objtype, "STRI")) {
+ return GetSTri(dfile);
+ }
+ if (!stringcmp(objtype, "LIGHT")) {
+ return GetLight(dfile);
+ }
+ if (!stringcmp(objtype, "SCAPE")) {
+ return GetLandScape(dfile);
+ }
+ if (!stringcmp(objtype, "TPOLYFILE")) {
+ return GetTPolyFile(dfile);
+ }
+
+ fprintf(stderr, "Found bad token: %s expected an object type\n", objtype);
+ return PARSEBADSYNTAX;
+}
+
+static errcode GetVector(FILE * dfile, vector * v1) {
+ float a, b, c;
+
+ fscanf(dfile, "%f %f %f", &a, &b, &c);
+ v1->x=a;
+ v1->y=b;
+ v1->z=c;
+
+ return PARSENOERR;
+}
+
+static errcode GetColor(FILE * dfile, color * c1) {
+ float r, g, b;
+ int rc;
+
+ rc = GetString(dfile, "COLOR");
+ fscanf(dfile, "%f %f %f", &r, &g, &b);
+ c1->r=r;
+ c1->g=g;
+ c1->b=b;
+
+ return rc;
+}
+
+static errcode GetTexDef(FILE * dfile) {
+ char texname[TEXNAMELEN];
+
+ fscanf(dfile, "%s", texname);
+ add_texture(GetTexBody(dfile), texname);
+
+ return PARSENOERR;
+}
+
+static errcode GetTexAlias(FILE * dfile) {
+ char texname[TEXNAMELEN];
+ char aliasname[TEXNAMELEN];
+
+ fscanf(dfile, "%s", texname);
+ fscanf(dfile, "%s", aliasname);
+ add_texture(find_texture(aliasname), texname);
+
+ return PARSENOERR;
+}
+
+
+static errcode GetTexture(FILE * dfile, void ** tex) {
+ char tmp[255];
+ errcode rc = PARSENOERR;
+
+ fscanf(dfile, "%s", tmp);
+ if (!stringcmp("TEXTURE", tmp)) {
+ *tex = GetTexBody(dfile);
+ }
+ else
+ *tex = find_texture(tmp);
+
+ return rc;
+}
+
+void * GetTexBody(FILE * dfile) {
+ char tmp[255];
+ float a,b,c,d, phong, phongexp, phongtype;
+ apitexture tex;
+ void * voidtex;
+ errcode rc;
+
+ rc = GetString(dfile, "AMBIENT");
+ fscanf(dfile, "%f", &a);
+ tex.ambient=a;
+
+ rc |= GetString(dfile, "DIFFUSE");
+ fscanf(dfile, "%f", &b);
+ tex.diffuse=b;
+
+ rc |= GetString(dfile, "SPECULAR");
+ fscanf(dfile, "%f", &c);
+ tex.specular=c;
+
+ rc |= GetString(dfile, "OPACITY");
+ fscanf(dfile, "%f", &d);
+ tex.opacity=d;
+
+ fscanf(dfile, "%s", tmp);
+ if (!stringcmp("PHONG", tmp)) {
+ fscanf(dfile, "%s", tmp);
+ if (!stringcmp("METAL", tmp)) {
+ phongtype = RT_PHONG_METAL;
+ }
+ else if (!stringcmp("PLASTIC", tmp)) {
+ phongtype = RT_PHONG_PLASTIC;
+ }
+ else {
+ phongtype = RT_PHONG_PLASTIC;
+ }
+
+ fscanf(dfile, "%f", &phong);
+ GetString(dfile, "PHONG_SIZE");
+ fscanf(dfile, "%f", &phongexp);
+ fscanf(dfile, "%s", tmp);
+ }
+ else {
+ phong = 0.0;
+ phongexp = 100.0;
+ phongtype = RT_PHONG_PLASTIC;
+ }
+
+ fscanf(dfile, "%f %f %f", &a, &b, &c);
+ tex.col.r = a;
+ tex.col.g = b;
+ tex.col.b = c;
+
+ rc |= GetString(dfile, "TEXFUNC");
+ fscanf(dfile, "%d", &tex.texturefunc);
+ if (tex.texturefunc >= 7) { /* if its an image map, we need a filename */
+ fscanf(dfile, "%s", tex.imap);
+ }
+ if (tex.texturefunc != 0) {
+ rc |= GetString(dfile, "CENTER");
+ rc |= GetVector(dfile, &tex.ctr);
+ rc |= GetString(dfile, "ROTATE");
+ rc |= GetVector(dfile, &tex.rot);
+ rc |= GetString(dfile, "SCALE");
+ rc |= GetVector(dfile, &tex.scale);
+ }
+ if (tex.texturefunc == 9) {
+ rc |= GetString(dfile, "UAXIS");
+ rc |= GetVector(dfile, &tex.uaxs);
+ rc |= GetString(dfile, "VAXIS");
+ rc |= GetVector(dfile, &tex.vaxs);
+ }
+
+ voidtex = rt_texture(&tex);
+ rt_tex_phong(voidtex, phong, phongexp, (int) phongtype);
+
+ return voidtex;
+}
+
+static errcode GetLight(FILE * dfile) {
+ apiflt rad;
+ vector ctr;
+ apitexture tex;
+ float a;
+ errcode rc;
+
+ memset(&tex, 0, sizeof(apitexture));
+
+ rc = GetString(dfile,"CENTER");
+ rc |= GetVector(dfile, &ctr);
+ rc |= GetString(dfile,"RAD");
+ fscanf(dfile,"%f",&a); /* read in radius */
+ rad=a;
+
+ rc |= GetColor(dfile, &tex.col);
+
+ rt_light(rt_texture(&tex), ctr, rad);
+
+ return rc;
+}
+
+static errcode GetBackGnd(FILE * dfile) {
+ float r,g,b;
+
+ fscanf(dfile, "%f %f %f", &r, &g, &b);
+
+ scenebackcol.r=r;
+ scenebackcol.g=g;
+ scenebackcol.b=b;
+
+ return PARSENOERR;
+}
+
+static errcode GetCylinder(FILE * dfile) {
+ apiflt rad;
+ vector ctr, axis;
+ void * tex;
+ float a;
+ errcode rc;
+
+ rc = GetString(dfile, "CENTER");
+ rc |= GetVector(dfile, &ctr);
+ rc |= GetString(dfile, "AXIS");
+ rc |= GetVector(dfile, &axis);
+ rc |= GetString(dfile, "RAD");
+ fscanf(dfile, "%f", &a);
+ rad=a;
+
+ rc |= GetTexture(dfile, &tex);
+ rt_cylinder(tex, ctr, axis, rad);
+
+ return rc;
+}
+
+static errcode GetFCylinder(FILE * dfile) {
+ apiflt rad;
+ vector ctr, axis;
+ vector pnt1, pnt2;
+ void * tex;
+ float a;
+ errcode rc;
+
+ rc = GetString(dfile, "BASE");
+ rc |= GetVector(dfile, &pnt1);
+ rc |= GetString(dfile, "APEX");
+ rc |= GetVector(dfile, &pnt2);
+
+ ctr=pnt1;
+ axis.x=pnt2.x - pnt1.x;
+ axis.y=pnt2.y - pnt1.y;
+ axis.z=pnt2.z - pnt1.z;
+
+ rc |= GetString(dfile, "RAD");
+ fscanf(dfile, "%f", &a);
+ rad=a;
+
+ rc |= GetTexture(dfile, &tex);
+ rt_fcylinder(tex, ctr, axis, rad);
+
+ return rc;
+}
+
+static errcode GetPolyCylinder(FILE * dfile) {
+ apiflt rad;
+ vector * temp;
+ void * tex;
+ float a;
+ int numpts, i;
+ errcode rc;
+
+ rc = GetString(dfile, "POINTS");
+ fscanf(dfile, "%d", &numpts);
+
+ temp = (vector *) malloc(numpts * sizeof(vector));
+
+ for (i=0; i<numpts; i++) {
+ rc |= GetVector(dfile, &temp[i]);
+ }
+
+ rc |= GetString(dfile, "RAD");
+ fscanf(dfile, "%f", &a);
+ rad=a;
+
+ rc |= GetTexture(dfile, &tex);
+ rt_polycylinder(tex, temp, numpts, rad);
+
+ free(temp);
+
+ return rc;
+}
+
+
+static errcode GetSphere(FILE * dfile) {
+ apiflt rad;
+ vector ctr;
+ void * tex;
+ float a;
+ errcode rc;
+
+ rc = GetString(dfile,"CENTER");
+ rc |= GetVector(dfile, &ctr);
+ rc |= GetString(dfile, "RAD");
+ fscanf(dfile,"%f",&a);
+ rad=a;
+
+ rc |= GetTexture(dfile, &tex);
+
+ rt_sphere(tex, ctr, rad);
+
+ return rc;
+}
+
+static errcode GetPlane(FILE * dfile) {
+ vector normal;
+ vector ctr;
+ void * tex;
+ errcode rc;
+
+ rc = GetString(dfile, "CENTER");
+ rc |= GetVector(dfile, &ctr);
+ rc |= GetString(dfile, "NORMAL");
+ rc |= GetVector(dfile, &normal);
+ rc |= GetTexture(dfile, &tex);
+
+ rt_plane(tex, ctr, normal);
+
+ return rc;
+}
+
+static errcode GetVol(FILE * dfile) {
+ vector min, max;
+ int x,y,z;
+ char fname[255];
+ void * tex;
+ errcode rc;
+
+ rc = GetString(dfile, "MIN");
+ rc |= GetVector(dfile, &min);
+ rc |= GetString(dfile, "MAX");
+ rc |= GetVector(dfile, &max);
+ rc |= GetString(dfile, "DIM");
+ fscanf(dfile, "%d %d %d ", &x, &y, &z);
+ rc |= GetString(dfile, "FILE");
+ fscanf(dfile, "%s", fname);
+ rc |= GetTexture(dfile, &tex);
+
+ rt_scalarvol(tex, min, max, x, y, z, fname, NULL);
+
+ return rc;
+}
+
+static errcode GetBox(FILE * dfile) {
+ vector min, max;
+ void * tex;
+ errcode rc;
+
+ rc = GetString(dfile, "MIN");
+ rc |= GetVector(dfile, &min);
+ rc |= GetString(dfile, "MAX");
+ rc |= GetVector(dfile, &max);
+ rc |= GetTexture(dfile, &tex);
+
+ rt_box(tex, min, max);
+
+ return rc;
+}
+
+static errcode GetRing(FILE * dfile) {
+ vector normal;
+ vector ctr;
+ void * tex;
+ float a,b;
+ errcode rc;
+
+ rc = GetString(dfile, "CENTER");
+ rc |= GetVector(dfile, &ctr);
+ rc |= GetString(dfile, "NORMAL");
+ rc |= GetVector(dfile, &normal);
+ rc |= GetString(dfile, "INNER");
+ fscanf(dfile, " %f ", &a);
+ rc |= GetString(dfile, "OUTER");
+ fscanf(dfile, " %f ", &b);
+ rc |= GetTexture(dfile, &tex);
+
+ rt_ring(tex, ctr, normal, a, b);
+
+ return rc;
+}
+
+static errcode GetTri(FILE * dfile) {
+ vector v0,v1,v2;
+ void * tex;
+ errcode rc;
+
+ rc = GetString(dfile, "V0");
+ rc |= GetVector(dfile, &v0);
+
+ rc |= GetString(dfile, "V1");
+ rc |= GetVector(dfile, &v1);
+
+ rc |= GetString(dfile, "V2");
+ rc |= GetVector(dfile, &v2);
+
+ rc |= GetTexture(dfile, &tex);
+
+ rt_tri(tex, v0, v1, v2);
+
+ return rc;
+}
+
+static errcode GetSTri(FILE * dfile) {
+ vector v0,v1,v2,n0,n1,n2;
+ void * tex;
+ errcode rc;
+
+ rc = GetString(dfile, "V0");
+ rc |= GetVector(dfile, &v0);
+
+ rc |= GetString(dfile, "V1");
+ rc |= GetVector(dfile, &v1);
+
+ rc |= GetString(dfile, "V2");
+ rc |= GetVector(dfile, &v2);
+
+ rc |= GetString(dfile, "N0");
+ rc |= GetVector(dfile, &n0);
+
+ rc |= GetString(dfile, "N1");
+ rc |= GetVector(dfile, &n1);
+
+ rc |= GetString(dfile, "N2");
+ rc |= GetVector(dfile, &n2);
+
+ rc |= GetTexture(dfile, &tex);
+
+ rt_stri(tex, v0, v1, v2, n0, n1, n2);
+
+ return rc;
+}
+
+static errcode GetLandScape(FILE * dfile) {
+ void * tex;
+ vector ctr;
+ apiflt wx, wy;
+ int m, n;
+ float a,b;
+ errcode rc;
+
+ rc = GetString(dfile, "RES");
+ fscanf(dfile, "%d %d", &m, &n);
+
+ rc |= GetString(dfile, "SCALE");
+ fscanf(dfile, "%f %f", &a, &b);
+ wx=a;
+ wy=b;
+
+ rc |= GetString(dfile, "CENTER");
+ rc |= GetVector(dfile, &ctr);
+
+ rc |= GetTexture(dfile, &tex);
+
+ rt_landscape(tex, m, n, ctr, wx, wy);
+
+ return rc;
+}
+
+static errcode GetTPolyFile(FILE * dfile) {
+ void * tex;
+ vector ctr, rot, scale;
+ vector v1, v2, v0;
+ char ifname[255];
+ FILE *ifp;
+ int v, totalpolys;
+ RotMat RotA;
+ errcode rc;
+
+ totalpolys=0;
+
+ rc = GetString(dfile, "SCALE");
+ rc |= GetVector(dfile, &scale);
+
+ rc |= GetString(dfile, "ROT");
+ rc |= GetVector(dfile, &rot);
+
+ degvectoradvec(&rot);
+ InitRot3d(&RotA, rot.x, rot.y, rot.z);
+
+ rc |= GetString(dfile, "CENTER");
+ rc |= GetVector(dfile, &ctr);
+
+ rc |= GetString(dfile, "FILE");
+ fscanf(dfile, "%s", ifname);
+
+ rc |= GetTexture(dfile, &tex);
+
+ if ((ifp=fopen(ifname, "r")) == NULL) {
+ fprintf(stderr, "Can't open data file %s for input!! Aborting...\n", ifname);
+ return PARSEBADSUBFILE;
+ }
+
+ while (!feof(ifp)) {
+ fscanf(ifp, "%d", &v);
+ if (v != 3) { break; }
+
+ totalpolys++;
+ v=0;
+
+ rc |= GetVector(ifp, &v0);
+ rc |= GetVector(ifp, &v1);
+ rc |= GetVector(ifp, &v2);
+
+ Scale3d(&scale, &v0);
+ Scale3d(&scale, &v1);
+ Scale3d(&scale, &v2);
+
+ Rotate3d(&RotA, &v0);
+ Rotate3d(&RotA, &v1);
+ Rotate3d(&RotA, &v2);
+
+ Trans3d(&ctr, &v0);
+ Trans3d(&ctr, &v1);
+ Trans3d(&ctr, &v2);
+
+ rt_tri(tex, v1, v0, v2);
+ }
+
+ fclose(ifp);
+
+ return rc;
+}
diff --git a/examples/parallel_for/tacheon/src/parse.h b/examples/parallel_for/tacheon/src/parse.h
new file mode 100644
index 0000000..73cdd63
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/parse.h
@@ -0,0 +1,122 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * parse.h - this file contains defines for model file reading.
+ *
+ * $Id: parse.h,v 1.2 2007/02/22 17:54:16 dpoulsen Exp $
+ */
+
+#define PARSENOERR 0
+#define PARSEBADFILE 1
+#define PARSEBADSUBFILE 2
+#define PARSEBADSYNTAX 4
+#define PARSEEOF 8
+#define PARSEALLOCERR 16
+
+unsigned int readmodel(char *, SceneHandle);
+
+#ifdef PARSE_INTERNAL
+#define NUMTEXS 32768
+#define TEXNAMELEN 24
+
+typedef struct {
+ double rx1; double rx2; double rx3;
+ double ry1; double ry2; double ry3;
+ double rz1; double rz2; double rz3;
+} RotMat;
+
+typedef struct {
+ char name[TEXNAMELEN];
+ void * tex;
+} texentry;
+
+#ifdef _ERRCODE_DEFINED
+#define errcode errcode_t
+#endif//_ERRCODE_DEFINED
+typedef unsigned int errcode;
+
+static errcode add_texture(void * tex, char name[TEXNAMELEN]);
+static errcode GetString(FILE *, char *);
+static errcode GetScenedefs(FILE *, SceneHandle);
+static errcode GetColor(FILE *, color *);
+static errcode GetVector(FILE *, vector *);
+static errcode GetTexDef(FILE *);
+static errcode GetTexAlias(FILE *);
+static errcode GetTexture(FILE *, void **);
+void * GetTexBody(FILE *);
+static errcode GetBackGnd(FILE *);
+static errcode GetCylinder(FILE *);
+static errcode GetFCylinder(FILE *);
+static errcode GetPolyCylinder(FILE *);
+static errcode GetSphere(FILE *);
+static errcode GetPlane(FILE *);
+static errcode GetRing(FILE *);
+static errcode GetBox(FILE *);
+static errcode GetVol(FILE *);
+static errcode GetTri(FILE *);
+static errcode GetSTri(FILE *);
+static errcode GetLight(FILE *);
+static errcode GetLandScape(FILE *);
+static errcode GetTPolyFile(FILE *);
+static errcode GetMGFFile(FILE *, SceneHandle);
+static errcode GetObject(FILE *, SceneHandle);
+
+#endif
diff --git a/examples/parallel_for/tacheon/src/plane.cpp b/examples/parallel_for/tacheon/src/plane.cpp
new file mode 100644
index 0000000..a627c6b
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/plane.cpp
@@ -0,0 +1,118 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * plane.c - This file contains the functions for dealing with planes.
+ *
+ * $Id: plane.cpp,v 1.2 2007/02/22 17:54:16 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "intersect.h"
+#include "util.h"
+
+#define PLANE_PRIVATE
+#include "plane.h"
+
+static object_methods plane_methods = {
+ (void (*)(void *, void *))(plane_intersect),
+ (void (*)(void *, void *, void *, void *))(plane_normal),
+ plane_bbox,
+ free
+};
+
+object * newplane(void * tex, vector ctr, vector norm) {
+ plane * p;
+
+ p=(plane *) rt_getmem(sizeof(plane));
+ memset(p, 0, sizeof(plane));
+ p->methods = &plane_methods;
+
+ p->tex = (texture *)tex;
+ p->norm = norm;
+ VNorm(&p->norm);
+ p->d = -VDot(&ctr, &p->norm);
+
+ return (object *) p;
+}
+
+static int plane_bbox(void * obj, vector * min, vector * max) {
+ return 0;
+}
+
+static void plane_intersect(plane * pln, ray * ry) {
+ flt t,td;
+
+ t=-(pln->d + VDot(&pln->norm, &ry->o));
+ td=VDot(&pln->norm, &ry->d);
+ if (td != 0.0) {
+ t /= td;
+ if (t > 0.0)
+ add_intersection(t,(object *) pln, ry);
+ }
+}
+
+static void plane_normal(plane * pln, vector * pnt, ray * incident, vector * N) {
+ *N=pln->norm;
+}
+
diff --git a/examples/parallel_for/tacheon/src/plane.h b/examples/parallel_for/tacheon/src/plane.h
new file mode 100644
index 0000000..ce677ca
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/plane.h
@@ -0,0 +1,83 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * plane.h - This file contains the defines for planes etc.
+ *
+ * $Id: plane.h,v 1.2 2007/02/22 17:54:16 dpoulsen Exp $
+ */
+
+
+object * newplane(void * tex, vector ctr, vector norm);
+
+#ifdef PLANE_PRIVATE
+typedef struct {
+ unsigned int id; /* Unique Object serial number */
+ void * nextobj; /* pointer to next object in list */
+ object_methods * methods; /* this object's methods */
+ texture * tex; /* object texture */
+ flt d;
+ vector norm;
+} plane;
+
+static void plane_intersect(plane *, ray *);
+static int plane_bbox(void * obj, vector * min, vector * max);
+static void plane_normal(plane *, vector *, ray * incident, vector *);
+#endif
diff --git a/examples/parallel_for/tacheon/src/ppm.cpp b/examples/parallel_for/tacheon/src/ppm.cpp
new file mode 100644
index 0000000..b2a5bb9
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/ppm.cpp
@@ -0,0 +1,127 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * ppm.c - This file deals with PPM format image files (reading/writing)
+ *
+ * $Id: ppm.cpp,v 1.2 2007/02/22 17:54:16 dpoulsen Exp $
+ */
+
+/* For our puposes, we're interested only in the 3 byte per pixel 24 bit
+ truecolor sort of file.. Probably won't implement any decent checking
+ at this point, probably choke on things like the # comments.. */
+
+#include <stdio.h>
+#include "machine.h"
+#include "types.h"
+#include "util.h"
+#include "imageio.h" /* error codes etc */
+#include "ppm.h"
+
+static int getint(FILE * dfile) {
+ char ch[200];
+ int i;
+ int num;
+
+ num=0;
+ while (num==0) {
+ fscanf(dfile, "%s", ch);
+ while (ch[0]=='#') {
+ fgets(ch, 200, dfile);
+ }
+ num=sscanf(ch, "%d", &i);
+ }
+ return i;
+}
+
+int readppm(char * name, int * xres, int * yres, unsigned char **imgdata) {
+ char data[200];
+ FILE * ifp;
+ int i, bytesread;
+ int datasize;
+
+ ifp=fopen(name, "r");
+ if (ifp==NULL) {
+ return IMAGEBADFILE; /* couldn't open the file */
+ }
+ fscanf(ifp, "%s", data);
+
+ if (strcmp(data, "P6")) {
+ fclose(ifp);
+ return IMAGEUNSUP; /* not a format we support */
+ }
+
+ *xres=getint(ifp);
+ *yres=getint(ifp);
+ i=getint(ifp); /* eat the maxval number */
+ fread(&i, 1, 1, ifp); /* eat the newline */
+ datasize = 3 * (*xres) * (*yres);
+
+ *imgdata=(unsigned char *)rt_getmem(datasize);
+
+ bytesread=fread(*imgdata, 1, datasize, ifp);
+
+ fclose(ifp);
+
+ if (bytesread != datasize)
+ return IMAGEREADERR;
+
+ return IMAGENOERR;
+}
diff --git a/examples/parallel_for/tacheon/src/ppm.h b/examples/parallel_for/tacheon/src/ppm.h
new file mode 100644
index 0000000..156f72a
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/ppm.h
@@ -0,0 +1,71 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * ppm.h - This file deals with PPM format image files (reading/writing)
+ *
+ * $Id: ppm.h,v 1.2 2007/02/22 17:54:16 dpoulsen Exp $
+ */
+
+/* For our puposes, we're interested only in the 3 byte per pixel 24 bit
+ truecolor sort of file.. Probably won't implement any decent checking
+ at this point, probably choke on things like the # comments.. */
+
+int readppm(char * name, int * xres, int * yres, unsigned char **imgdata);
diff --git a/examples/parallel_for/tacheon/src/pthread.cpp b/examples/parallel_for/tacheon/src/pthread.cpp
new file mode 100644
index 0000000..b21eeb2
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/pthread.cpp
@@ -0,0 +1,167 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+#ifdef EMULATE_PTHREADS
+
+#include <assert.h>
+#include "pthread.h"
+
+/*
+ Basics
+*/
+
+int
+pthread_create (pthread_t *thread, pthread_attr_t *attr, void *(*start_routine) (void *), void *arg)
+{
+ pthread_t th;
+
+ if (thread == NULL) return EINVAL;
+ *thread = NULL;
+
+ if (start_routine == NULL) return EINVAL;
+
+ th = (pthread_t) malloc (sizeof (pthread_s));
+ memset (th, 0, sizeof (pthread_s));
+
+ th->winthread_handle = CreateThread (
+ NULL,
+ 0,
+ (LPTHREAD_START_ROUTINE) start_routine,
+ arg,
+ 0,
+ &th->winthread_id);
+ if (th->winthread_handle == NULL) return EAGAIN; /* GetLastError() */
+
+ *thread = th;
+ return 0;
+}
+
+int
+pthread_join (pthread_t th, void **thread_return)
+{
+ BOOL b_ret;
+ DWORD dw_ret;
+
+ if (thread_return) *thread_return = NULL;
+
+ if ((th == NULL) || (th->winthread_handle == NULL)) return EINVAL;
+
+ dw_ret = WaitForSingleObject (th->winthread_handle, INFINITE);
+ if (dw_ret != WAIT_OBJECT_0) return ERROR_PTHREAD; /* dw_ret == WAIT_FAILED; GetLastError() */
+
+ if (thread_return) {
+ BOOL e_ret;
+ DWORD exit_val;
+ e_ret = GetExitCodeThread (th->winthread_handle, &exit_val);
+ if (!e_ret) return ERROR_PTHREAD; /* GetLastError() */
+ *thread_return = (void *)(size_t) exit_val;
+ }
+
+ b_ret = CloseHandle (th->winthread_handle);
+ if (!b_ret) return ERROR_PTHREAD; /* GetLastError() */
+ memset (th, 0, sizeof (pthread_s));
+ free (th);
+ th = NULL;
+
+ return 0;
+}
+
+void
+pthread_exit (void *retval)
+{
+ /* specific to PTHREAD_TO_WINTHREAD */
+
+ ExitThread ((DWORD) ((size_t) retval)); /* thread becomes signalled so its death can be waited upon */
+ /*NOTREACHED*/
+ assert (0); return; /* void fnc; can't return an error code */
+}
+
+/*
+ Mutex
+*/
+
+int
+pthread_mutex_init (pthread_mutex_t *mutex, pthread_mutexattr_t *mutex_attr)
+{
+ InitializeCriticalSection (&mutex->critsec);
+ return 0;
+}
+
+int
+pthread_mutex_destroy (pthread_mutex_t *mutex)
+{
+ return 0;
+}
+
+int
+pthread_mutex_lock (pthread_mutex_t *mutex)
+{
+ EnterCriticalSection (&mutex->critsec);
+ return 0;
+}
+
+int
+pthread_mutex_unlock (pthread_mutex_t *mutex)
+{
+ LeaveCriticalSection (&mutex->critsec);
+ return 0;
+}
+
+#endif /* EMULATE_PTHREADS */
diff --git a/examples/parallel_for/tacheon/src/pthread.h b/examples/parallel_for/tacheon/src/pthread.h
new file mode 100644
index 0000000..088a973
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/pthread.h
@@ -0,0 +1,120 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+#ifdef EMULATE_PTHREADS
+
+#ifndef _PTHREAD_H_DEFINED
+#define _PTHREAD_H_DEFINED
+
+#include <windows.h>
+#include <errno.h>
+#ifndef ENOTSUP
+#define ENOTSUP EPERM
+#endif
+
+/* just need <stddef.h> on Windows to get size_t defined */
+#include <stddef.h>
+
+#define ERROR_PTHREAD 1000
+#define ERROR_MODE 1001
+#define ERROR_UNIMPL 1002
+
+/*
+ Basics
+*/
+
+struct pthread_s {
+ HANDLE winthread_handle;
+ DWORD winthread_id;
+};
+typedef struct pthread_s *pthread_t; /* one of the few types that's pointer, not struct */
+
+typedef struct {
+ int i; /* not yet defined... */
+} pthread_attr_t;
+
+/*
+ Mutex
+*/
+
+typedef struct {
+ int i; /* not yet defined... */
+} pthread_mutexattr_t;
+
+typedef struct {
+ CRITICAL_SECTION critsec;
+} pthread_mutex_t;
+
+/*
+ Function prototypes
+*/
+
+extern int pthread_create (pthread_t *thread, pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
+extern int pthread_join (pthread_t th, void **thread_return);
+extern void pthread_exit (void *retval);
+
+extern int pthread_mutex_init (pthread_mutex_t *mutex, pthread_mutexattr_t *mutex_attr);
+extern int pthread_mutex_destroy (pthread_mutex_t *mutex);
+extern int pthread_mutex_lock (pthread_mutex_t *mutex);
+extern int pthread_mutex_unlock (pthread_mutex_t *mutex);
+
+#endif /* _PTHREAD_H_DEFINED */
+
+#endif /* EMULATE_PTHREADS */
diff --git a/examples/parallel_for/tacheon/src/quadric.cpp b/examples/parallel_for/tacheon/src/quadric.cpp
new file mode 100644
index 0000000..908a3b2
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/quadric.cpp
@@ -0,0 +1,183 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * quadric.c - This file contains the functions for dealing with quadrics.
+ *
+ * $Id: quadric.cpp,v 1.2 2007/02/22 17:54:16 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "quadric.h"
+#include "vector.h"
+#include "intersect.h"
+#include "util.h"
+
+int quadric_bbox(void * obj, vector * min, vector * max) {
+ return 0;
+}
+
+static object_methods quadric_methods = {
+ (void (*)(void *, void *))(quadric_intersect),
+ (void (*)(void *, void *, void *, void *))(quadric_normal),
+ quadric_bbox,
+ free
+};
+
+quadric * newquadric() {
+ quadric * q;
+
+ q=(quadric *) rt_getmem(sizeof(quadric));
+ memset(q, 0, sizeof(quadric));
+ q->ctr.x=0.0;
+ q->ctr.y=0.0;
+ q->ctr.z=0.0;
+ q->methods = &quadric_methods;
+
+ return q;
+}
+
+void quadric_intersect(quadric * q, ray * ry) {
+ flt Aq, Bq, Cq;
+ flt t1, t2;
+ flt disc;
+ vector rd;
+ vector ro;
+
+ rd=ry->d;
+ VNorm(&rd);
+
+ ro.x = ry->o.x - q->ctr.x;
+ ro.y = ry->o.y - q->ctr.y;
+ ro.z = ry->o.z - q->ctr.z;
+
+
+ Aq = (q->mat.a*(rd.x * rd.x)) +
+ (2.0 * q->mat.b * rd.x * rd.y) +
+ (2.0 * q->mat.c * rd.x * rd.z) +
+ (q->mat.e * (rd.y * rd.y)) +
+ (2.0 * q->mat.f * rd.y * rd.z) +
+ (q->mat.h * (rd.z * rd.z));
+
+ Bq = 2.0 * (
+ (q->mat.a * ro.x * rd.x) +
+ (q->mat.b * ((ro.x * rd.y) + (rd.x * ro.y))) +
+ (q->mat.c * ((ro.x * rd.z) + (rd.x * ro.z))) +
+ (q->mat.d * rd.x) +
+ (q->mat.e * ro.y * rd.y) +
+ (q->mat.f * ((ro.y * rd.z) + (rd.y * ro.z))) +
+ (q->mat.g * rd.y) +
+ (q->mat.h * ro.z * rd.z) +
+ (q->mat.i * rd.z)
+ );
+
+ Cq = (q->mat.a * (ro.x * ro.x)) +
+ (2.0 * q->mat.b * ro.x * ro.y) +
+ (2.0 * q->mat.c * ro.x * ro.z) +
+ (2.0 * q->mat.d * ro.x) +
+ (q->mat.e * (ro.y * ro.y)) +
+ (2.0 * q->mat.f * ro.y * ro.z) +
+ (2.0 * q->mat.g * ro.y) +
+ (q->mat.h * (ro.z * ro.z)) +
+ (2.0 * q->mat.i * ro.z) +
+ q->mat.j;
+
+ if (Aq == 0.0) {
+ t1 = - Cq / Bq;
+ add_intersection(t1, (object *) q, ry);
+ }
+ else {
+ disc=(Bq*Bq - 4.0 * Aq * Cq);
+ if (disc > 0.0) {
+ disc=sqrt(disc);
+ t1 = (-Bq + disc) / (2.0 * Aq);
+ t2 = (-Bq - disc) / (2.0 * Aq);
+ add_intersection(t1, (object *) q, ry);
+ add_intersection(t2, (object *) q, ry);
+ }
+ }
+}
+
+void quadric_normal(quadric * q, vector * pnt, ray * incident, vector * N) {
+
+ N->x = (q->mat.a*(pnt->x - q->ctr.x) +
+ q->mat.b*(pnt->y - q->ctr.y) +
+ q->mat.c*(pnt->z - q->ctr.z) + q->mat.d);
+
+ N->y = (q->mat.b*(pnt->x - q->ctr.x) +
+ q->mat.e*(pnt->y - q->ctr.y) +
+ q->mat.f*(pnt->z - q->ctr.z) + q->mat.g);
+
+ N->z = (q->mat.c*(pnt->x - q->ctr.x) +
+ q->mat.f*(pnt->y - q->ctr.y) +
+ q->mat.h*(pnt->z - q->ctr.z) + q->mat.i);
+
+ VNorm(N);
+
+ if (VDot(N, &(incident->d)) > 0.0) {
+ N->x=-N->x;
+ N->y=-N->y;
+ N->z=-N->z;
+ }
+}
+
+
diff --git a/examples/parallel_for/tacheon/src/quadric.h b/examples/parallel_for/tacheon/src/quadric.h
new file mode 100644
index 0000000..1083daf
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/quadric.h
@@ -0,0 +1,86 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * quadric.h - This file contains the defines for quadrics.
+ *
+ * $Id: quadric.h,v 1.2 2007/02/22 17:54:16 dpoulsen Exp $
+ */
+
+typedef struct {
+ flt a; flt b; flt c;
+ flt d; flt e; flt f;
+ flt g; flt h; flt i; flt j;
+} quadmatrix;
+
+
+typedef struct {
+ unsigned int id; /* Unique Object serial number */
+ void * nextobj; /* pointer to next object in list */
+ object_methods * methods; /* this object's methods */
+ texture * tex; /* object texture */
+ vector ctr;
+ quadmatrix mat;
+} quadric;
+
+
+quadric * newquadric(void);
+void quadric_intersect(quadric *, ray *);
+void quadric_normal(quadric *, vector *, ray *, vector *);
diff --git a/examples/parallel_for/tacheon/src/render.cpp b/examples/parallel_for/tacheon/src/render.cpp
new file mode 100644
index 0000000..a1fbff1
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/render.cpp
@@ -0,0 +1,106 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * render.c - This file contains the main program and driver for the raytracer.
+ *
+ * $Id: render.cpp,v 1.5.2.1 2007/06/04 19:23:39 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "tgafile.h"
+#include "trace.h"
+#include "render.h"
+#include "util.h"
+#include "light.h"
+#include "global.h"
+#include "ui.h"
+#include "video.h"
+#include "objbound.h"
+#include "grid.h"
+
+/* how many pieces to divide each scanline into */
+#define NUMHORZDIV 1
+
+void renderscene(scenedef scene) {
+ //char msgtxt[2048];
+ //void * outfile;
+ /* Grid based accerlation scheme */
+ if (scene.boundmode == RT_BOUNDING_ENABLED)
+ engrid_scene(&rootobj); /* grid */
+ /* Not used now
+ if (scene.verbosemode) {
+ sprintf(msgtxt, "Opening %s for output.", scene.outfilename);
+ rt_ui_message(MSG_0, msgtxt);
+ }
+
+ createtgafile(scene.outfilename,
+ (unsigned short) scene.hres,
+ (unsigned short) scene.vres);
+ outfile = opentgafile(scene.outfilename);
+ */
+
+ timerstart();
+
+ trace_region (scene, 0/*outfile*/, 0, 0, scene.hres, scene.vres);
+ //fclose((FILE *)outfile);
+} /* end of renderscene() */
diff --git a/examples/parallel_for/tacheon/src/render.h b/examples/parallel_for/tacheon/src/render.h
new file mode 100644
index 0000000..fac56e9
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/render.h
@@ -0,0 +1,68 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * render.h - This file contains the defines for the top level functions
+ *
+ * $Id: render.h,v 1.2 2007/02/22 17:54:16 dpoulsen Exp $
+ */
+
+
+void renderscene(scenedef);
diff --git a/examples/parallel_for/tacheon/src/ring.cpp b/examples/parallel_for/tacheon/src/ring.cpp
new file mode 100644
index 0000000..dcaa994
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/ring.cpp
@@ -0,0 +1,144 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * ring.c - This file contains the functions for dealing with rings.
+ *
+ * $Id: ring.cpp,v 1.2 2007/02/22 17:54:16 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "intersect.h"
+#include "util.h"
+
+#define RING_PRIVATE
+#include "ring.h"
+
+static object_methods ring_methods = {
+ (void (*)(void *, void *))(ring_intersect),
+ (void (*)(void *, void *, void *, void *))(ring_normal),
+ ring_bbox,
+ free
+};
+
+object * newring(void * tex, vector ctr, vector norm, flt inrad, flt outrad) {
+ ring * r;
+
+ r=(ring *) rt_getmem(sizeof(ring));
+ memset(r, 0, sizeof(ring));
+ r->methods = &ring_methods;
+
+ r->tex = (texture *)tex;
+ r->ctr = ctr;
+ r->norm = norm;
+ r->inrad = inrad;
+ r->outrad= outrad;
+
+ return (object *) r;
+}
+
+static int ring_bbox(void * obj, vector * min, vector * max) {
+ ring * r = (ring *) obj;
+
+ min->x = r->ctr.x - r->outrad;
+ min->y = r->ctr.y - r->outrad;
+ min->z = r->ctr.z - r->outrad;
+ max->x = r->ctr.x + r->outrad;
+ max->y = r->ctr.y + r->outrad;
+ max->z = r->ctr.z + r->outrad;
+
+ return 1;
+}
+
+static void ring_intersect(ring * rng, ray * ry) {
+ flt d;
+ flt t,td;
+ vector hit, pnt;
+
+ d = -VDot(&(rng->ctr), &(rng->norm));
+
+ t=-(d+VDot(&(rng->norm), &(ry->o)));
+ td=VDot(&(rng->norm),&(ry->d));
+ if (td != 0.0) {
+ t= t / td;
+ if (t>=0.0) {
+ hit=Raypnt(ry, t);
+ VSUB(hit, rng->ctr, pnt);
+ VDOT(td, pnt, pnt);
+ td=sqrt(td);
+ if ((td > rng->inrad) && (td < rng->outrad))
+ add_intersection(t,(object *) rng, ry);
+ }
+ }
+}
+
+static void ring_normal(ring * rng, vector * pnt, ray * incident, vector * N) {
+ *N=rng->norm;
+ VNorm(N);
+ if (VDot(N, &(incident->d)) > 0.0) {
+ N->x=-N->x;
+ N->y=-N->y;
+ N->z=-N->z;
+ }
+}
+
diff --git a/examples/parallel_for/tacheon/src/ring.h b/examples/parallel_for/tacheon/src/ring.h
new file mode 100644
index 0000000..df2037a
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/ring.h
@@ -0,0 +1,84 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * ring.h - This file contains the defines for rings etc.
+ *
+ * $Id: ring.h,v 1.2 2007/02/22 17:54:16 dpoulsen Exp $
+ */
+
+object * newring(void * tex, vector ctr, vector norm, flt in, flt out);
+
+#ifdef RING_PRIVATE
+typedef struct {
+ unsigned int id; /* Unique Object serial number */
+ void * nextobj; /* pointer to next object in list */
+ object_methods * methods; /* this object's methods */
+ texture * tex; /* object texture */
+ vector ctr;
+ vector norm;
+ flt inrad;
+ flt outrad;
+} ring;
+
+static int ring_bbox(void * obj, vector * min, vector * max);
+static void ring_intersect(ring *, ray *);
+static void ring_normal(ring *, vector *, ray * incident, vector *);
+#endif
diff --git a/examples/parallel_for/tacheon/src/shade.cpp b/examples/parallel_for/tacheon/src/shade.cpp
new file mode 100644
index 0000000..a453ae5
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/shade.cpp
@@ -0,0 +1,271 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * shade.c - This file contains the functions that perform surface shading.
+ *
+ * $Id: shade.cpp,v 1.3 2007/02/22 17:54:16 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "light.h"
+#include "intersect.h"
+#include "vector.h"
+#include "trace.h"
+#include "global.h"
+#include "shade.h"
+
+void reset_lights(void) {
+ numlights=0;
+}
+
+void add_light(point_light * li) {
+ lightlist[numlights]=li;
+ numlights++;
+}
+
+color shader(ray * incident) {
+ color col, diffuse, phongcol;
+ vector N, L, hit;
+ ray shadowray;
+ flt inten, t, Llen;
+ object * obj;
+ int numints, i;
+ point_light * li;
+
+
+ numints=closest_intersection(&t, &obj, incident->intstruct);
+ /* find the number of intersections */
+ /* and return the closest one. */
+
+ if (numints < 1) {
+ /* if there weren't any object intersections then return the */
+ /* background color for the pixel color. */
+ return incident->scene->background;
+ }
+
+ if (obj->tex->islight) { /* if the current object is a light, then we */
+ return obj->tex->col; /* will only use the objects ambient color */
+ }
+
+ RAYPNT(hit, (*incident), t) /* find the point of intersection from t */
+ obj->methods->normal(obj, &hit, incident, &N); /* find the surface normal */
+
+ /* execute the object's texture function */
+ col = obj->tex->texfunc(&hit, obj->tex, incident);
+
+ diffuse.r = 0.0;
+ diffuse.g = 0.0;
+ diffuse.b = 0.0;
+ phongcol = diffuse;
+
+ if ((obj->tex->diffuse > 0.0) || (obj->tex->phong > 0.0)) {
+ for (i=0; i<numlights; i++) { /* loop for light contributions */
+ li=lightlist[i]; /* set li=to the current light */
+ VSUB(li->ctr, hit, L) /* find the light vector */
+
+ /* calculate the distance to the light from the hit point */
+ Llen = sqrt(L.x*L.x + L.y*L.y + L.z*L.z) + EPSILON;
+
+ L.x /= Llen; /* normalize the light direction vector */
+ L.y /= Llen;
+ L.z /= Llen;
+
+ VDOT(inten, N, L) /* light intensity */
+
+ /* add in diffuse lighting for this light if we're facing it */
+ if (inten > 0.0) {
+ /* test for a shadow */
+ shadowray.intstruct = incident->intstruct;
+ shadowray.flags = RT_RAY_SHADOW | RT_RAY_BOUNDED;
+ incident->serial++;
+ shadowray.serial = incident->serial;
+ shadowray.mbox = incident->mbox;
+ shadowray.o = hit;
+ shadowray.d = L;
+ shadowray.maxdist = Llen;
+ shadowray.s = hit;
+ shadowray.e = li->ctr;
+ shadowray.scene = incident->scene;
+ reset_intersection(incident->intstruct);
+ intersect_objects(&shadowray);
+
+ if (!shadow_intersection(incident->intstruct, Llen)) {
+ /* XXX now that opacity is in the code, have to be more careful */
+ ColorAddS(&diffuse, &li->tex->col, inten);
+
+ /* phong type specular highlights */
+ if (obj->tex->phong > 0.0) {
+ flt phongval;
+ phongval = shade_phong(incident, &hit, &N, &L, obj->tex->phongexp);
+ if (obj->tex->phongtype)
+ ColorAddS(&phongcol, &col, phongval);
+ else
+ ColorAddS(&phongcol, &(li->tex->col), phongval);
+ }
+ }
+ }
+ }
+ }
+
+ ColorScale(&diffuse, obj->tex->diffuse);
+
+ col.r *= (diffuse.r + obj->tex->ambient); /* do a product of the */
+ col.g *= (diffuse.g + obj->tex->ambient); /* diffuse intensity with */
+ col.b *= (diffuse.b + obj->tex->ambient); /* object color + ambient */
+
+ if (obj->tex->phong > 0.0) {
+ ColorAccum(&col, &phongcol);
+ }
+
+ /* spawn reflection rays if necessary */
+ /* note: this will overwrite the old intersection list */
+ if (obj->tex->specular > 0.0) {
+ color specol;
+ specol = shade_reflection(incident, &hit, &N, obj->tex->specular);
+ ColorAccum(&col, &specol);
+ }
+
+ /* spawn transmission rays / refraction */
+ /* note: this will overwrite the old intersection list */
+ if (obj->tex->opacity < 1.0) {
+ color transcol;
+ transcol = shade_transmission(incident, &hit, 1.0 - obj->tex->opacity);
+ ColorAccum(&col, &transcol);
+ }
+
+ return col; /* return the color of the shaded pixel... */
+}
+
+
+color shade_reflection(ray * incident, vector * hit, vector * N, flt specular) {
+ ray specray;
+ color col;
+ vector R;
+
+ VAddS(-2.0 * (incident->d.x * N->x +
+ incident->d.y * N->y +
+ incident->d.z * N->z), N, &incident->d, &R);
+
+ specray.intstruct=incident->intstruct; /* what thread are we */
+ specray.depth=incident->depth - 1; /* go up a level in recursion depth */
+ specray.flags = RT_RAY_REGULAR; /* infinite ray, to start with */
+ specray.serial = incident->serial + 1; /* next serial number */
+ specray.mbox = incident->mbox;
+ specray.o=*hit;
+ specray.d=R; /* reflect incident ray about normal */
+ specray.o=Raypnt(&specray, EPSILON); /* avoid numerical precision bugs */
+ specray.maxdist = FHUGE; /* take any intersection */
+ specray.scene=incident->scene; /* global scenedef info */
+ col=trace(&specray); /* trace specular reflection ray */
+
+ incident->serial = specray.serial; /* update the serial number */
+
+ ColorScale(&col, specular);
+
+ return col;
+}
+
+
+color shade_transmission(ray * incident, vector * hit, flt trans) {
+ ray transray;
+ color col;
+
+ transray.intstruct=incident->intstruct; /* what thread are we */
+ transray.depth=incident->depth - 1; /* go up a level in recursion depth */
+ transray.flags = RT_RAY_REGULAR; /* infinite ray, to start with */
+ transray.serial = incident->serial + 1; /* update serial number */
+ transray.mbox = incident->mbox;
+ transray.o=*hit;
+ transray.d=incident->d; /* ray continues along incident path */
+ transray.o=Raypnt(&transray, EPSILON); /* avoid numerical precision bugs */
+ transray.maxdist = FHUGE; /* take any intersection */
+ transray.scene=incident->scene; /* global scenedef info */
+ col=trace(&transray); /* trace transmission ray */
+
+ incident->serial = transray.serial;
+
+ ColorScale(&col, trans);
+
+ return col;
+}
+
+flt shade_phong(ray * incident, vector * hit,
+ vector * N, vector * L, flt specpower){
+ vector H, V;
+ flt inten;
+
+ V = incident->d;
+ VScale(&V, -1.0);
+ VAdd(&V, L, &H);
+ VScale(&H, 0.5);
+ VNorm(&H);
+ inten = VDot(N, &H);
+ if (inten > 0.0)
+ inten = pow(inten, specpower);
+ else
+ inten = 0.0;
+
+ return inten;
+}
+
+
diff --git a/examples/parallel_for/tacheon/src/shade.h b/examples/parallel_for/tacheon/src/shade.h
new file mode 100644
index 0000000..5d5da20
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/shade.h
@@ -0,0 +1,73 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * shade.h - This file contains declarations and definitions for the shader.
+ *
+ * $Id: shade.h,v 1.2 2007/02/22 17:54:16 dpoulsen Exp $
+ */
+
+void reset_lights(void);
+void add_light(point_light *);
+
+color shader(ray *);
+color shade_reflection(ray *, vector *, vector *, flt);
+color shade_transmission(ray *, vector *, flt);
+flt shade_phong(ray * incident, vector * hit, vector * N, vector * L, flt specpower);
diff --git a/examples/parallel_for/tacheon/src/sphere.cpp b/examples/parallel_for/tacheon/src/sphere.cpp
new file mode 100644
index 0000000..8296b3a
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/sphere.cpp
@@ -0,0 +1,146 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * sphere.c - This file contains the functions for dealing with spheres.
+ *
+ * $Id: sphere.cpp,v 1.2 2007/02/22 17:54:16 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "intersect.h"
+#include "util.h"
+
+#define SPHERE_PRIVATE
+#include "sphere.h"
+
+static object_methods sphere_methods = {
+ (void (*)(void *, void *))(sphere_intersect),
+ (void (*)(void *, void *, void *, void *))(sphere_normal),
+ sphere_bbox,
+ free
+};
+
+object * newsphere(void * tex, vector ctr, flt rad) {
+ sphere * s;
+
+ s=(sphere *) rt_getmem(sizeof(sphere));
+ memset(s, 0, sizeof(sphere));
+ s->methods = &sphere_methods;
+
+ s->tex=(texture *)tex;
+ s->ctr=ctr;
+ s->rad=rad;
+
+ return (object *) s;
+}
+
+static int sphere_bbox(void * obj, vector * min, vector * max) {
+ sphere * s = (sphere *) obj;
+
+ min->x = s->ctr.x - s->rad;
+ min->y = s->ctr.y - s->rad;
+ min->z = s->ctr.z - s->rad;
+ max->x = s->ctr.x + s->rad;
+ max->y = s->ctr.y + s->rad;
+ max->z = s->ctr.z + s->rad;
+
+ return 1;
+}
+
+static void sphere_intersect(sphere * spr, ray * ry) {
+ flt b, disc, t1, t2, temp;
+ vector V;
+
+ VSUB(spr->ctr, ry->o, V);
+ VDOT(b, V, ry->d);
+ VDOT(temp, V, V);
+
+ disc=b*b + spr->rad*spr->rad - temp;
+
+ if (disc<=0.0) return;
+ disc=sqrt(disc);
+
+ t2=b+disc;
+ if (t2 <= SPEPSILON)
+ return;
+ add_intersection(t2, (object *) spr, ry);
+
+ t1=b-disc;
+ if (t1 > SPEPSILON)
+ add_intersection(t1, (object *) spr, ry);
+}
+
+static void sphere_normal(sphere * spr, vector * pnt, ray * incident, vector * N) {
+ VSub((vector *) pnt, &(spr->ctr), N);
+
+ VNorm(N);
+
+ if (VDot(N, &(incident->d)) > 0.0) {
+ N->x=-N->x;
+ N->y=-N->y;
+ N->z=-N->z;
+ }
+}
+
+
diff --git a/examples/parallel_for/tacheon/src/sphere.h b/examples/parallel_for/tacheon/src/sphere.h
new file mode 100644
index 0000000..282e499
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/sphere.h
@@ -0,0 +1,84 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * sphere.h - This file contains the defines for spheres etc.
+ *
+ * $Id: sphere.h,v 1.2 2007/02/22 17:54:16 dpoulsen Exp $
+ */
+
+object * newsphere(void *, vector, flt);
+
+#ifdef SPHERE_PRIVATE
+
+typedef struct {
+ unsigned int id; /* Unique Object serial number */
+ void * nextobj; /* pointer to next object in list */
+ object_methods * methods; /* this object's methods */
+ texture * tex; /* object texture */
+ vector ctr;
+ flt rad;
+} sphere;
+
+static int sphere_bbox(void * obj, vector * min, vector * max);
+static void sphere_intersect(sphere *, ray *);
+static void sphere_normal(sphere *, vector *, ray *, vector *);
+
+#endif /* SPHERE_PRIVATE */
diff --git a/examples/parallel_for/tacheon/src/texture.cpp b/examples/parallel_for/tacheon/src/texture.cpp
new file mode 100644
index 0000000..70b7e0d
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/texture.cpp
@@ -0,0 +1,398 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * texture.c - This file contains functions for implementing textures.
+ *
+ * $Id: texture.cpp,v 1.2 2007/02/22 17:54:16 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "texture.h"
+#include "coordsys.h"
+#include "imap.h"
+#include "vector.h"
+#include "box.h"
+
+/* plain vanilla texture solely based on object color */
+color standard_texture(vector * hit, texture * tex, ray * ry) {
+ return tex->col;
+}
+
+/* cylindrical image map */
+color image_cyl_texture(vector * hit, texture * tex, ray * ry) {
+ vector rh;
+ flt u,v;
+
+ rh.x=hit->x - tex->ctr.x;
+ rh.z=hit->y - tex->ctr.y;
+ rh.y=hit->z - tex->ctr.z;
+
+ xyztocyl(rh, 1.0, &u, &v);
+
+ u = u * tex->scale.x;
+ u = u + tex->rot.x;
+ u=fmod(u, 1.0);
+ if (u < 0.0) u+=1.0;
+
+ v = v * tex->scale.y;
+ v = v + tex->rot.y;
+ v=fmod(v, 1.0);
+ if (v < 0.0) v+=1.0;
+
+ return ImageMap((rawimage *)tex->img, u, v);
+}
+
+/* spherical image map */
+color image_sphere_texture(vector * hit, texture * tex, ray * ry) {
+ vector rh;
+ flt u,v;
+
+ rh.x=hit->x - tex->ctr.x;
+ rh.y=hit->y - tex->ctr.y;
+ rh.z=hit->z - tex->ctr.z;
+
+ xyztospr(rh, &u, &v);
+
+ u = u * tex->scale.x;
+ u = u + tex->rot.x;
+ u=fmod(u, 1.0);
+ if (u < 0.0) u+=1.0;
+
+ v = v * tex->scale.y;
+ v = v + tex->rot.y;
+ v=fmod(v, 1.0);
+ if (v < 0.0) v+=1.0;
+
+ return ImageMap((rawimage *)tex->img, u, v);
+}
+
+/* planar image map */
+color image_plane_texture(vector * hit, texture * tex, ray * ry) {
+ vector pnt;
+ flt u,v;
+
+ pnt.x=hit->x - tex->ctr.x;
+ pnt.y=hit->y - tex->ctr.y;
+ pnt.z=hit->z - tex->ctr.z;
+
+ VDOT(u, tex->uaxs, pnt);
+/* VDOT(len, tex->uaxs, tex->uaxs);
+ u = u / sqrt(len); */
+
+ VDOT(v, tex->vaxs, pnt);
+/* VDOT(len, tex->vaxs, tex->vaxs);
+ v = v / sqrt(len); */
+
+
+ u = u * tex->scale.x;
+ u = u + tex->rot.x;
+ u = fmod(u, 1.0);
+ if (u < 0.0) u += 1.0;
+
+ v = v * tex->scale.y;
+ v = v + tex->rot.y;
+ v = fmod(v, 1.0);
+ if (v < 0.0) v += 1.0;
+
+ return ImageMap((rawimage *)tex->img, u, v);
+}
+
+color grit_texture(vector * hit, texture * tex, ray * ry) {
+ int rnum;
+ flt fnum;
+ color col;
+
+ rnum=rand() % 4096;
+ fnum=(rnum / 4096.0 * 0.2) + 0.8;
+
+ col.r=tex->col.r * fnum;
+ col.g=tex->col.g * fnum;
+ col.b=tex->col.b * fnum;
+
+ return col;
+}
+
+color checker_texture(vector * hit, texture * tex, ray * ry) {
+ long x,y,z;
+ flt xh,yh,zh;
+ color col;
+
+ xh=hit->x - tex->ctr.x;
+ x=(long) ((fabs(xh) * 3) + 0.5);
+ x=x % 2;
+ yh=hit->y - tex->ctr.y;
+ y=(long) ((fabs(yh) * 3) + 0.5);
+ y=y % 2;
+ zh=hit->z - tex->ctr.z;
+ z=(long) ((fabs(zh) * 3) + 0.5);
+ z=z % 2;
+
+ if (((x + y + z) % 2)==1) {
+ col.r=1.0;
+ col.g=0.2;
+ col.b=0.0;
+ }
+ else {
+ col.r=0.0;
+ col.g=0.2;
+ col.b=1.0;
+ }
+
+ return col;
+}
+
+color cyl_checker_texture(vector * hit, texture * tex, ray * ry) {
+ long x,y;
+ vector rh;
+ flt u,v;
+ color col;
+
+ rh.x=hit->x - tex->ctr.x;
+ rh.y=hit->y - tex->ctr.y;
+ rh.z=hit->z - tex->ctr.z;
+
+ xyztocyl(rh, 1.0, &u, &v);
+
+ x=(long) (fabs(u) * 18.0);
+ x=x % 2;
+ y=(long) (fabs(v) * 10.0);
+ y=y % 2;
+
+ if (((x + y) % 2)==1) {
+ col.r=1.0;
+ col.g=0.2;
+ col.b=0.0;
+ }
+ else {
+ col.r=0.0;
+ col.g=0.2;
+ col.b=1.0;
+ }
+
+ return col;
+}
+
+
+color wood_texture(vector * hit, texture * tex, ray * ry) {
+ flt radius, angle;
+ int grain;
+ color col;
+ flt x,y,z;
+
+ x=(hit->x - tex->ctr.x) * 1000;
+ y=(hit->y - tex->ctr.y) * 1000;
+ z=(hit->z - tex->ctr.z) * 1000;
+
+ radius=sqrt(x*x + z*z);
+ if (z == 0.0)
+ angle=3.1415926/2.0;
+ else
+ angle=atan(x / z);
+
+ radius=radius + 3.0 * sin(20 * angle + y / 150.0);
+ grain=((int) (radius + 0.5)) % 60;
+ if (grain < 40) {
+ col.r=0.8;
+ col.g=1.0;
+ col.b=0.2;
+ }
+ else {
+ col.r=0.0;
+ col.g=0.0;
+ col.b=0.0;
+ }
+
+ return col;
+}
+
+
+
+#define NMAX 28
+short int NoiseMatrix[NMAX][NMAX][NMAX];
+
+void InitNoise(void) {
+ byte x,y,z,i,j,k;
+
+ for (x=0; x<NMAX; x++) {
+ for (y=0; y<NMAX; y++) {
+ for (z=0; z<NMAX; z++) {
+ NoiseMatrix[x][y][z]=rand() % 12000;
+
+ if (x==NMAX-1) i=0;
+ else i=x;
+
+ if (y==NMAX-1) j=0;
+ else j=y;
+
+ if (z==NMAX-1) k=0;
+ else k=z;
+
+ NoiseMatrix[x][y][z]=NoiseMatrix[i][j][k];
+ }
+ }
+ }
+}
+
+int Noise(flt x, flt y, flt z) {
+ byte ix, iy, iz;
+ flt ox, oy, oz;
+ int p000, p001, p010, p011;
+ int p100, p101, p110, p111;
+ int p00, p01, p10, p11;
+ int p0, p1;
+ int d00, d01, d10, d11;
+ int d0, d1, d;
+
+ x=fabs(x);
+ y=fabs(y);
+ z=fabs(z);
+
+ ix=((int) x) % NMAX;
+ iy=((int) y) % NMAX;
+ iz=((int) z) % NMAX;
+
+ ox=(x - ((int) x));
+ oy=(y - ((int) y));
+ oz=(z - ((int) z));
+
+ p000=NoiseMatrix[ix][iy][iz];
+ p001=NoiseMatrix[ix][iy][iz+1];
+ p010=NoiseMatrix[ix][iy+1][iz];
+ p011=NoiseMatrix[ix][iy+1][iz+1];
+ p100=NoiseMatrix[ix+1][iy][iz];
+ p101=NoiseMatrix[ix+1][iy][iz+1];
+ p110=NoiseMatrix[ix+1][iy+1][iz];
+ p111=NoiseMatrix[ix+1][iy+1][iz+1];
+
+ d00=p100-p000;
+ d01=p101-p001;
+ d10=p110-p010;
+ d11=p111-p011;
+
+ p00=(int) ((int) d00*ox) + p000;
+ p01=(int) ((int) d01*ox) + p001;
+ p10=(int) ((int) d10*ox) + p010;
+ p11=(int) ((int) d11*ox) + p011;
+ d0=p10-p00;
+ d1=p11-p01;
+ p0=(int) ((int) d0*oy) + p00;
+ p1=(int) ((int) d1*oy) + p01;
+ d=p1-p0;
+
+ return (int) ((int) d*oz) + p0;
+}
+
+color marble_texture(vector * hit, texture * tex, ray * ry) {
+ flt i,d;
+ flt x,y,z;
+ color col;
+
+ x=hit->x;
+ y=hit->y;
+ z=hit->z;
+
+ x=x * 1.0;
+
+ d=x + 0.0006 * Noise(x, (y * 1.0), (z * 1.0));
+ d=d*(((int) d) % 25);
+ i=0.0 + 0.10 * fabs(d - 10.0 - 20.0 * ((int) d * 0.05));
+ if (i > 1.0) i=1.0;
+ if (i < 0.0) i=0.0;
+
+/*
+ col.r=i * tex->col.r;
+ col.g=i * tex->col.g;
+ col.b=i * tex->col.b;
+*/
+
+ col.r = (1.0 + sin(i * 6.28)) / 2.0;
+ col.g = (1.0 + sin(i * 16.28)) / 2.0;
+ col.b = (1.0 + cos(i * 30.28)) / 2.0;
+
+ return col;
+}
+
+
+color gnoise_texture(vector * hit, texture * tex, ray * ry) {
+ color col;
+ flt f;
+
+ f=Noise((hit->x - tex->ctr.x),
+ (hit->y - tex->ctr.y),
+ (hit->z - tex->ctr.z));
+
+ if (f < 0.01) f=0.01;
+ if (f > 1.0) f=1.0;
+
+ col.r=tex->col.r * f;
+ col.g=tex->col.g * f;
+ col.b=tex->col.b * f;
+
+ return col;
+}
+
+void InitTextures(void) {
+ InitNoise();
+ ResetImages();
+}
+
diff --git a/examples/parallel_for/tacheon/src/texture.h b/examples/parallel_for/tacheon/src/texture.h
new file mode 100644
index 0000000..f0ffc52
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/texture.h
@@ -0,0 +1,80 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * texture.h This file contains all of the includes and defines for the texture
+ * mapping part of the shader.
+ *
+ * $Id: texture.h,v 1.2 2007/02/22 17:54:16 dpoulsen Exp $
+ */
+
+void InitTextures(void);
+color standard_texture(vector *, texture *, ray *);
+color image_cyl_texture(vector *, texture *, ray *);
+color image_sphere_texture(vector *, texture *, ray *);
+color image_plane_texture(vector *, texture *, ray *);
+color checker_texture(vector *, texture *, ray *);
+color cyl_checker_texture(vector *, texture *, ray *);
+color grit_texture(vector *, texture *, ray *);
+color wood_texture(vector *, texture *, ray *);
+color marble_texture(vector *, texture *, ray *);
+color gnoise_texture(vector *, texture *, ray *);
+int Noise(flt, flt, flt);
+void InitTextures(void);
diff --git a/examples/parallel_for/tacheon/src/tgafile.cpp b/examples/parallel_for/tacheon/src/tgafile.cpp
new file mode 100644
index 0000000..c00aab7
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/tgafile.cpp
@@ -0,0 +1,248 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * tgafile.c - This file contains the code to write 24 bit targa files...
+ *
+ * $Id: tgafile.cpp,v 1.2 2007/02/22 17:54:16 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "util.h"
+#include "ui.h"
+#include "imageio.h"
+#include "tgafile.h"
+
+void createtgafile(char *name, unsigned short width, unsigned short height) {
+ int filesize;
+ FILE * ofp;
+
+ filesize = 3*width*height + 18 - 10;
+
+ if (name==NULL)
+ exit(1);
+ else {
+ ofp=fopen(name, "w+b");
+ if (ofp == NULL) {
+ char msgtxt[2048];
+ sprintf(msgtxt, "Cannot create %s for output!", name);
+ rt_ui_message(MSG_ERR, msgtxt);
+ rt_ui_message(MSG_ABORT, "Rendering Aborted.");
+ exit(1);
+ }
+
+ fputc(0, ofp); /* IdLength */
+ fputc(0, ofp); /* ColorMapType */
+ fputc(2, ofp); /* ImageTypeCode */
+ fputc(0, ofp); /* ColorMapOrigin, low byte */
+ fputc(0, ofp); /* ColorMapOrigin, high byte */
+ fputc(0, ofp); /* ColorMapLength, low byte */
+ fputc(0, ofp); /* ColorMapLength, high byte */
+ fputc(0, ofp); /* ColorMapEntrySize */
+ fputc(0, ofp); /* XOrigin, low byte */
+ fputc(0, ofp); /* XOrigin, high byte */
+ fputc(0, ofp); /* YOrigin, low byte */
+ fputc(0, ofp); /* YOrigin, high byte */
+ fputc((width & 0xff), ofp); /* Width, low byte */
+ fputc(((width >> 8) & 0xff), ofp); /* Width, high byte */
+ fputc((height & 0xff), ofp); /* Height, low byte */
+ fputc(((height >> 8) & 0xff), ofp); /* Height, high byte */
+ fputc(24, ofp); /* ImagePixelSize */
+ fputc(0x20, ofp); /* ImageDescriptorByte 0x20 == flip vertically */
+
+ fseek(ofp, filesize, 0);
+ fprintf(ofp, "9876543210");
+
+ fclose(ofp);
+ }
+}
+
+void * opentgafile(char * filename) {
+ FILE * ofp;
+
+ ofp=fopen(filename, "r+b");
+ if (ofp == NULL) {
+ char msgtxt[2048];
+ sprintf(msgtxt, "Cannot open %s for output!", filename);
+ rt_ui_message(MSG_ERR, msgtxt);
+ rt_ui_message(MSG_ABORT, "Rendering Aborted.");
+ exit(1);
+ }
+
+ return ofp;
+}
+
+void writetgaregion(void * voidofp,
+ int iwidth, int iheight,
+ int startx, int starty,
+ int stopx, int stopy, char * buffer) {
+ int y, totalx, totaly;
+ char * bufpos;
+ int filepos, numbytes;
+ FILE * ofp = (FILE *) voidofp;
+
+ totalx = stopx - startx + 1;
+ totaly = stopy - starty + 1;
+
+ for (y=0; y<totaly; y++) {
+ bufpos=buffer + (totalx*3)*(totaly-y-1);
+ filepos=18 + iwidth*3*(iheight - starty - totaly + y + 1) + (startx - 1)*3;
+
+ if (filepos >= 18) {
+ fseek(ofp, filepos, 0);
+ numbytes = fwrite(bufpos, 3, totalx, ofp);
+
+ if (numbytes != totalx) {
+ char msgtxt[256];
+ sprintf(msgtxt, "File write problem, %d bytes written.", numbytes);
+ rt_ui_message(MSG_ERR, msgtxt);
+ }
+ }
+ else {
+ rt_ui_message(MSG_ERR, "writetgaregion: file ptr out of range!!!\n");
+ return; /* don't try to continue */
+ }
+ }
+}
+
+
+int readtga(char * name, int * xres, int * yres, unsigned char **imgdata) {
+ int format, width, height, w1, w2, h1, h2, depth, flags;
+ int imgsize, bytesread, i, tmp;
+ FILE * ifp;
+
+ ifp=fopen(name, "r");
+ if (ifp==NULL) {
+ return IMAGEBADFILE; /* couldn't open the file */
+ }
+
+ /* read the targa header */
+ getc(ifp); /* ID length */
+ getc(ifp); /* colormap type */
+ format = getc(ifp); /* image type */
+ getc(ifp); /* color map origin */
+ getc(ifp); /* color map origin */
+ getc(ifp); /* color map length */
+ getc(ifp); /* color map length */
+ getc(ifp); /* color map entry size */
+ getc(ifp); /* x origin */
+ getc(ifp); /* x origin */
+ getc(ifp); /* y origin */
+ getc(ifp); /* y origin */
+ w1 = getc(ifp); /* width (low) */
+ w2 = getc(ifp); /* width (hi) */
+ h1 = getc(ifp); /* height (low) */
+ h2 = getc(ifp); /* height (hi) */
+ depth = getc(ifp); /* image pixel size */
+ flags = getc(ifp); /* image descriptor byte */
+
+ if ((format != 2) || (depth != 24)) {
+ fclose(ifp);
+ return IMAGEUNSUP; /* unsupported targa format */
+ }
+
+
+ width = ((w2 << 8) | w1);
+ height = ((h2 << 8) | h1);
+
+ imgsize = 3 * width * height;
+ *imgdata = (unsigned char *)rt_getmem(imgsize);
+ bytesread = fread(*imgdata, 1, imgsize, ifp);
+ fclose(ifp);
+
+ /* flip image vertically */
+ if (flags == 0x20) {
+ int rowsize = 3 * width;
+ unsigned char * copytmp;
+
+ copytmp = (unsigned char *)malloc(rowsize);
+
+ for (i=0; i<height / 2; i++) {
+ memcpy(copytmp, &((*imgdata)[rowsize*i]), rowsize);
+ memcpy(&(*imgdata)[rowsize*i], &(*imgdata)[rowsize*(height - 1 - i)], rowsize);
+ memcpy(&(*imgdata)[rowsize*(height - 1 - i)], copytmp, rowsize);
+ }
+
+ free(copytmp);
+ }
+
+
+ /* convert from BGR order to RGB order */
+ for (i=0; i<imgsize; i+=3) {
+ tmp = (*imgdata)[i]; /* Blue */
+ (*imgdata)[i] = (*imgdata)[i+2]; /* Red */
+ (*imgdata)[i+2] = tmp; /* Blue */
+ }
+
+ *xres = width;
+ *yres = height;
+
+ if (bytesread != imgsize)
+ return IMAGEREADERR;
+
+ return IMAGENOERR;
+}
+
+
+
+
+
+
diff --git a/examples/parallel_for/tacheon/src/tgafile.h b/examples/parallel_for/tacheon/src/tgafile.h
new file mode 100644
index 0000000..71aeb5b
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/tgafile.h
@@ -0,0 +1,72 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * tgafile.h - this file contains defines and structures for tgafile.c
+ *
+ * $Id: tgafile.h,v 1.2 2007/02/22 17:54:16 dpoulsen Exp $
+ */
+
+/* declare other functions */
+void createtgafile(char *, unsigned short, unsigned short);
+void * opentgafile(char *);
+void writetgaregion(void *, int, int, int, int, int, int, char *);
+
+int readtga(char * name, int * xres, int * yres, unsigned char **imgdata);
diff --git a/examples/parallel_for/tacheon/src/trace.h b/examples/parallel_for/tacheon/src/trace.h
new file mode 100644
index 0000000..fccf8e9
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/trace.h
@@ -0,0 +1,109 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * trace.h - This file contains the declarations and defines for the trace module
+ *
+ * $Id: trace.h,v 1.2 2007/02/22 17:54:16 dpoulsen Exp $
+ */
+
+extern char *global_buffer;
+
+typedef struct {
+ int tid;
+ int nthr;
+ scenedef scene;
+ char * buffer;
+ int startx;
+ int stopx;
+ int starty;
+ int stopy;
+ } thr_parms;
+
+typedef struct {
+ int startx;
+ int stopx;
+ int starty;
+ int stopy;
+ } patch;
+
+typedef struct {
+ void * tga;
+ int iwidth;
+ int iheight;
+ int startx;
+ int starty;
+ int stopx;
+ int stopy;
+ char * buffer;
+ } thr_io_parms;
+
+color trace(ray *);
+
+void * thread_trace(thr_parms * parms);
+
+void thread_trace1(thr_parms *, patch *, int depth);
+void thread_trace2(thr_parms *, patch *);
+
+void * thread_io(void *);
+
+void trace_shm(scenedef, /*char *,*/ int, int, int, int);
+
+void trace_region(scenedef, void *, int, int, int, int);
diff --git a/examples/parallel_for/tacheon/src/trace.serial.cpp b/examples/parallel_for/tacheon/src/trace.serial.cpp
new file mode 100644
index 0000000..b026f9a
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/trace.serial.cpp
@@ -0,0 +1,188 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "tgafile.h"
+#include "trace.h"
+#include "light.h"
+#include "shade.h"
+#include "camera.h"
+#include "util.h"
+#include "intersect.h"
+#include "global.h"
+#include "ui.h"
+#include "video.h"
+
+// shared but read-only so could be private too
+static thr_parms *all_parms;
+static scenedef scene;
+static int startx;
+static int stopx;
+static int starty;
+static int stopy;
+static flt jitterscale;
+static int totaly;
+
+static color_t render_one_pixel (int x, int y, unsigned int *local_mbox, unsigned int &serial,
+ int startx, int stopx, int starty, int stopy)
+{
+ /* private vars moved inside loop */
+ ray primary, sample;
+ color col, avcol;
+ int R,G,B;
+ intersectstruct local_intersections;
+ int alias;
+ /* end private */
+
+ primary=camray(&scene, x, y);
+ primary.intstruct = &local_intersections;
+ primary.flags = RT_RAY_REGULAR;
+
+ serial++;
+ primary.serial = serial;
+ primary.mbox = local_mbox;
+ primary.maxdist = FHUGE;
+ primary.scene = &scene;
+ col=trace(&primary);
+
+ serial = primary.serial;
+
+ /* perform antialiasing if enabled.. */
+ if (scene.antialiasing > 0) {
+ for (alias=0; alias < scene.antialiasing; alias++) {
+
+ serial++; /* increment serial number */
+ sample=primary; /* copy the regular primary ray to start with */
+ sample.serial = serial;
+
+ {
+ sample.d.x+=((rand() % 100) - 50) / jitterscale;
+ sample.d.y+=((rand() % 100) - 50) / jitterscale;
+ sample.d.z+=((rand() % 100) - 50) / jitterscale;
+ }
+
+ avcol=trace(&sample);
+
+ serial = sample.serial; /* update our overall serial # */
+
+ col.r += avcol.r;
+ col.g += avcol.g;
+ col.b += avcol.b;
+ }
+
+ col.r /= (scene.antialiasing + 1.0);
+ col.g /= (scene.antialiasing + 1.0);
+ col.b /= (scene.antialiasing + 1.0);
+ }
+
+ /* Handle overexposure and underexposure here... */
+ R=(int) (col.r*255);
+ if (R > 255) R = 255;
+ else if (R < 0) R = 0;
+
+ G=(int) (col.g*255);
+ if (G > 255) G = 255;
+ else if (G < 0) G = 0;
+
+ B=(int) (col.b*255);
+ if (B > 255) B = 255;
+ else if (B < 0) B = 0;
+
+ return video->get_color(R, G, B);
+
+}
+
+static void parallel_thread (void)
+{
+ // thread-local storage
+ unsigned int serial = 1;
+ unsigned int mboxsize = sizeof(unsigned int)*(max_objectid() + 20);
+ unsigned int * local_mbox = (unsigned int *) alloca(mboxsize);
+ memset(local_mbox,0,mboxsize);
+
+ for (int y = starty; y < stopy; y++) { {
+ drawing_area drawing(startx, totaly-y, stopx-startx, 1);
+ for (int x = startx; x < stopx; x++) {
+ color_t c = render_one_pixel (x, y, local_mbox, serial, startx, stopx, starty, stopy);
+ drawing.put_pixel(c);
+ } }
+ if(!video->next_frame()) return;
+ }
+}
+
+void * thread_trace(thr_parms * parms)
+{
+ // shared but read-only so could be private too
+ all_parms = parms;
+ scene = parms->scene;
+ startx = parms->startx;
+ stopx = parms->stopx;
+ starty = parms->starty;
+ stopy = parms->stopy;
+ jitterscale = 40.0*(scene.hres + scene.vres);
+ totaly = parms->scene.vres-1;
+
+ parallel_thread ();
+
+ return(NULL);
+}
diff --git a/examples/parallel_for/tacheon/src/trace.tbb.cpp b/examples/parallel_for/tacheon/src/trace.tbb.cpp
new file mode 100644
index 0000000..a0a2a24
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/trace.tbb.cpp
@@ -0,0 +1,210 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "tgafile.h"
+#include "trace.h"
+#include "light.h"
+#include "shade.h"
+#include "camera.h"
+#include "util.h"
+#include "intersect.h"
+#include "global.h"
+#include "ui.h"
+#include "video.h"
+
+// shared but read-only so could be private too
+static thr_parms *all_parms;
+static scenedef scene;
+static int startx;
+static int stopx;
+static int starty;
+static int stopy;
+static flt jitterscale;
+static int totaly;
+
+#include "tbb/task_scheduler_init.h"
+#include "tbb/parallel_for.h"
+#include "tbb/spin_mutex.h"
+#include "tbb/blocked_range2d.h"
+
+static tbb::spin_mutex MyMutex, MyMutex2;
+
+static color_t render_one_pixel (int x, int y, unsigned int *local_mbox, unsigned int &serial,
+ int startx, int stopx, int starty, int stopy)
+{
+ /* private vars moved inside loop */
+ ray primary, sample;
+ color col, avcol;
+ int R,G,B;
+ intersectstruct local_intersections;
+ int alias;
+ /* end private */
+
+ primary=camray(&scene, x, y);
+ primary.intstruct = &local_intersections;
+ primary.flags = RT_RAY_REGULAR;
+
+ serial++;
+ primary.serial = serial;
+ primary.mbox = local_mbox;
+ primary.maxdist = FHUGE;
+ primary.scene = &scene;
+ col=trace(&primary);
+
+ serial = primary.serial;
+
+ /* perform antialiasing if enabled.. */
+ if (scene.antialiasing > 0) {
+ for (alias=0; alias < scene.antialiasing; alias++) {
+
+ serial++; /* increment serial number */
+ sample=primary; /* copy the regular primary ray to start with */
+ sample.serial = serial;
+
+ {
+ tbb::spin_mutex::scoped_lock lock (MyMutex);
+ sample.d.x+=((rand() % 100) - 50) / jitterscale;
+ sample.d.y+=((rand() % 100) - 50) / jitterscale;
+ sample.d.z+=((rand() % 100) - 50) / jitterscale;
+ }
+
+ avcol=trace(&sample);
+
+ serial = sample.serial; /* update our overall serial # */
+
+ col.r += avcol.r;
+ col.g += avcol.g;
+ col.b += avcol.b;
+ }
+
+ col.r /= (scene.antialiasing + 1.0);
+ col.g /= (scene.antialiasing + 1.0);
+ col.b /= (scene.antialiasing + 1.0);
+ }
+
+ /* Handle overexposure and underexposure here... */
+ R=(int) (col.r*255);
+ if (R > 255) R = 255;
+ else if (R < 0) R = 0;
+
+ G=(int) (col.g*255);
+ if (G > 255) G = 255;
+ else if (G < 0) G = 0;
+
+ B=(int) (col.b*255);
+ if (B > 255) B = 255;
+ else if (B < 0) B = 0;
+
+ return video->get_color(R, G, B);
+}
+
+class parallel_task {
+public:
+ void operator() (const tbb::blocked_range2d<int> &r) const
+ {
+ // task-local storage
+ unsigned int serial = 1;
+ unsigned int mboxsize = sizeof(unsigned int)*(max_objectid() + 20);
+ unsigned int * local_mbox = (unsigned int *) alloca(mboxsize);
+ memset(local_mbox,0,mboxsize);
+ if(video->next_frame())
+ {
+ drawing_area drawing(r.cols().begin(), totaly-r.rows().end(), r.cols().end() - r.cols().begin(), r.rows().end()-r.rows().begin());
+ for (int i = 1, y = r.rows().begin(); y != r.rows().end(); ++y, i++) {
+ drawing.set_pos(0, drawing.size_y-i);
+ for (int x = r.cols().begin(); x != r.cols().end(); x++) {
+ color_t c = render_one_pixel (x, y, local_mbox, serial, startx, stopx, starty, stopy);
+ drawing.put_pixel(c);
+ }
+ }
+ }
+ }
+
+ parallel_task () {}
+};
+
+void * thread_trace(thr_parms * parms)
+{
+ int n, nthreads = tbb::task_scheduler_init::automatic;
+ char *nthreads_str = getenv ("TBB_NUM_THREADS");
+ if (nthreads_str && (sscanf (nthreads_str, "%d", &n) > 0) && (n > 0)) nthreads = n;
+ tbb::task_scheduler_init init (nthreads);
+
+ // shared but read-only so could be private too
+ all_parms = parms;
+ scene = parms->scene;
+ startx = parms->startx;
+ stopx = parms->stopx;
+ starty = parms->starty;
+ stopy = parms->stopy;
+ jitterscale = 40.0*(scene.hres + scene.vres);
+ totaly = parms->scene.vres;
+
+ int g, grain_size = 50;
+ char *grain_str = getenv ("TBB_GRAINSIZE");
+ if (grain_str && (sscanf (grain_str, "%d", &g) > 0) && (g > 0)) grain_size = g;
+ tbb::parallel_for (tbb::blocked_range2d<int> (starty, stopy, grain_size, startx, stopx, grain_size), parallel_task ());
+
+ return(NULL);
+}
diff --git a/examples/parallel_for/tacheon/src/trace.tbb1d.cpp b/examples/parallel_for/tacheon/src/trace.tbb1d.cpp
new file mode 100644
index 0000000..4fa7be2
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/trace.tbb1d.cpp
@@ -0,0 +1,212 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "tgafile.h"
+#include "trace.h"
+#include "light.h"
+#include "shade.h"
+#include "camera.h"
+#include "util.h"
+#include "intersect.h"
+#include "global.h"
+#include "ui.h"
+#include "video.h"
+
+// shared but read-only so could be private too
+static thr_parms *all_parms;
+static scenedef scene;
+static int startx;
+static int stopx;
+static int starty;
+static int stopy;
+static flt jitterscale;
+static int totaly;
+
+#include "tbb/task_scheduler_init.h"
+#include "tbb/parallel_for.h"
+#include "tbb/spin_mutex.h"
+#include "tbb/blocked_range.h"
+
+static tbb::spin_mutex MyMutex, MyMutex2;
+
+static color_t render_one_pixel (int x, int y, unsigned int *local_mbox, unsigned int &serial,
+ int startx, int stopx, int starty, int stopy)
+{
+ /* private vars moved inside loop */
+ ray primary, sample;
+ color col, avcol;
+ int R,G,B;
+ intersectstruct local_intersections;
+ int alias;
+ /* end private */
+
+ primary=camray(&scene, x, y);
+ primary.intstruct = &local_intersections;
+ primary.flags = RT_RAY_REGULAR;
+
+ serial++;
+ primary.serial = serial;
+ primary.mbox = local_mbox;
+ primary.maxdist = FHUGE;
+ primary.scene = &scene;
+ col=trace(&primary);
+
+ serial = primary.serial;
+
+ /* perform antialiasing if enabled.. */
+ if (scene.antialiasing > 0) {
+ for (alias=0; alias < scene.antialiasing; alias++) {
+
+ serial++; /* increment serial number */
+ sample=primary; /* copy the regular primary ray to start with */
+ sample.serial = serial;
+
+ {
+ tbb::spin_mutex::scoped_lock lock (MyMutex);
+ sample.d.x+=((rand() % 100) - 50) / jitterscale;
+ sample.d.y+=((rand() % 100) - 50) / jitterscale;
+ sample.d.z+=((rand() % 100) - 50) / jitterscale;
+ }
+
+ avcol=trace(&sample);
+
+ serial = sample.serial; /* update our overall serial # */
+
+ col.r += avcol.r;
+ col.g += avcol.g;
+ col.b += avcol.b;
+ }
+
+ col.r /= (scene.antialiasing + 1.0);
+ col.g /= (scene.antialiasing + 1.0);
+ col.b /= (scene.antialiasing + 1.0);
+ }
+
+ /* Handle overexposure and underexposure here... */
+ R=(int) (col.r*255);
+ if (R > 255) R = 255;
+ else if (R < 0) R = 0;
+
+ G=(int) (col.g*255);
+ if (G > 255) G = 255;
+ else if (G < 0) G = 0;
+
+ B=(int) (col.b*255);
+ if (B > 255) B = 255;
+ else if (B < 0) B = 0;
+
+ return video->get_color(R, G, B);
+
+}
+
+class parallel_task {
+public:
+ void operator() (const tbb::blocked_range<int> &r) const
+ {
+ // task-local storage
+ unsigned int serial = 1;
+ unsigned int mboxsize = sizeof(unsigned int)*(max_objectid() + 20);
+ unsigned int * local_mbox = (unsigned int *) alloca(mboxsize);
+ memset(local_mbox,0,mboxsize);
+
+ for (int y = r.begin(); y != r.end(); ++y) { {
+ drawing_area drawing(startx, totaly-y, stopx-startx, 1);
+ for (int x = startx; x < stopx; x++) {
+ color_t c = render_one_pixel (x, y, local_mbox, serial, startx, stopx, starty, stopy);
+ drawing.put_pixel(c);
+ } }
+ if(!video->next_frame()) return;
+ }
+ }
+
+ parallel_task () {}
+};
+
+void * thread_trace(thr_parms * parms)
+{
+ int n, nthreads = tbb::task_scheduler_init::automatic;
+ char *nthreads_str = getenv ("TBB_NUM_THREADS");
+ if (nthreads_str && (sscanf (nthreads_str, "%d", &n) > 0) && (n > 0)) nthreads = n;
+ tbb::task_scheduler_init init (nthreads);
+
+ // shared but read-only so could be private too
+ all_parms = parms;
+ scene = parms->scene;
+ startx = parms->startx;
+ stopx = parms->stopx;
+ starty = parms->starty;
+ stopy = parms->stopy;
+ jitterscale = 40.0*(scene.hres + scene.vres);
+ totaly = parms->scene.vres-1;
+
+ int g, grain_size = 50;
+ char *grain_str = getenv ("TBB_GRAINSIZE");
+ if (grain_str && (sscanf (grain_str, "%d", &g) > 0) && (g > 0)) grain_size = g;
+
+ // Uses the preview feature: auto_partitioner.
+ // Note that no grainsize is provided to the blocked_range object.
+ tbb::parallel_for (tbb::blocked_range<int> (starty, stopy), parallel_task (), tbb::auto_partitioner() );
+
+ return(NULL);
+}
diff --git a/examples/parallel_for/tacheon/src/trace_rest.cpp b/examples/parallel_for/tacheon/src/trace_rest.cpp
new file mode 100644
index 0000000..38a3c4f
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/trace_rest.cpp
@@ -0,0 +1,151 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * trace.c - This file contains the functions for firing primary rays
+ * and handling subsequent calculations
+ *
+ * $Id: trace_rest.cpp,v 1.4 2007/02/22 17:54:16 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "tgafile.h"
+#include "trace.h"
+#include "light.h"
+#include "shade.h"
+#include "camera.h"
+#include "util.h"
+#include "intersect.h"
+#include "global.h"
+#include "ui.h"
+#include "video.h"
+
+color trace(ray * primary) {
+ if (primary->depth > 0) {
+ VNorm(&primary->d);
+ reset_intersection(primary->intstruct);
+ intersect_objects(primary);
+ return shader(primary);
+ }
+
+ /* if ray is truncated, return the background as its color */
+ return primary->scene->background;
+}
+
+void * thread_io(void * parms) {
+ thr_io_parms p;
+
+ p= *((thr_io_parms *) parms);
+ writetgaregion(p.tga, p.iwidth, p.iheight, p.startx, p.starty,
+ p.stopx, p.stopy, p.buffer);
+ free(p.buffer); /* free the buffer once we are done with it.. */
+ free(parms);
+
+ return(NULL);
+}
+
+void trace_shm(scenedef scene, /*char * buffer, */ int startx, int stopx, int starty, int stopy) {
+
+ thr_parms * parms;
+
+ parms = (thr_parms *) rt_getmem(sizeof(thr_parms));
+
+ parms->tid=0;
+ parms->nthr=1;
+ parms->scene=scene;
+ parms->startx=startx;
+ parms->stopx=stopx;
+ parms->starty=starty;
+ parms->stopy=stopy;
+
+ thread_trace(parms);
+
+ rt_freemem(parms);
+}
+
+void trace_region(scenedef scene, void * tga, int startx, int starty, int stopx, int stopy) {
+
+ if (scene.verbosemode) {
+ char msgtxt[2048];
+ sprintf(msgtxt, "Node %3d tracing region %4d, %4d ---> %4d, %4d \n", 0, startx,starty,stopx,stopy);
+ rt_ui_message(MSG_0, msgtxt);
+ }
+
+ trace_shm(scene, /*buffer,*/ startx, stopx, starty, stopy);
+/* not used now
+ writetgaregion(tga, scene.hres, scene.vres,
+ startx, starty, stopx, stopy, global_buffer);
+
+ if (scene.rawimage != NULL) {
+ int x, y;
+ int totalx = stopx - startx + 1;
+ for (y=starty; y<=stopy; y++) {
+ for (x=0; x<scene.hres; x++) {
+ scene.rawimage[(scene.vres-y)*scene.hres*3 + x*3] = global_buffer[(y-starty)*totalx*3 + x*3 + 2];
+ scene.rawimage[(scene.vres-y)*scene.hres*3 + x*3 +1] = global_buffer[(y-starty)*totalx*3 + x*3 + 1];
+ scene.rawimage[(scene.vres-y)*scene.hres*3 + x*3 +2] = global_buffer[(y-starty)*totalx*3 + x*3];
+ }
+ }
+ }
+*/
+}
diff --git a/examples/parallel_for/tacheon/src/triangle.cpp b/examples/parallel_for/tacheon/src/triangle.cpp
new file mode 100644
index 0000000..fd0c8d5
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/triangle.cpp
@@ -0,0 +1,258 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * triangle.c - This file contains the functions for dealing with triangles.
+ *
+ * $Id: triangle.cpp,v 1.3.2.1 2007/06/04 19:23:39 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "vector.h"
+#include "macros.h"
+#include "intersect.h"
+#include "util.h"
+
+#define TRIANGLE_PRIVATE
+#include "triangle.h"
+
+static object_methods tri_methods = {
+ (void (*)(void *, void *))(tri_intersect),
+ (void (*)(void *, void *, void *, void *))(tri_normal),
+ tri_bbox,
+ free
+};
+
+static object_methods stri_methods = {
+ (void (*)(void *, void *))(tri_intersect),
+ (void (*)(void *, void *, void *, void *))(stri_normal),
+ tri_bbox,
+ free
+};
+
+object * newtri(void * tex, vector v0, vector v1, vector v2) {
+ tri * t;
+ vector edge1, edge2, edge3;
+
+ VSub(&v1, &v0, &edge1);
+ VSub(&v2, &v0, &edge2);
+ VSub(&v2, &v1, &edge3);
+
+ /* check to see if this will be a degenerate triangle before creation */
+ if ((VLength(&edge1) >= EPSILON) &&
+ (VLength(&edge2) >= EPSILON) &&
+ (VLength(&edge3) >= EPSILON)) {
+
+ t=(tri *) rt_getmem(sizeof(tri));
+
+ t->nextobj = NULL;
+ t->methods = &tri_methods;
+
+ t->tex = (texture *)tex;
+ t->v0 = v0;
+ t->edge1 = edge1;
+ t->edge2 = edge2;
+
+ return (object *) t;
+ }
+
+ return NULL; /* was a degenerate triangle */
+}
+
+
+object * newstri(void * tex, vector v0, vector v1, vector v2,
+ vector n0, vector n1, vector n2) {
+ stri * t;
+ vector edge1, edge2, edge3;
+
+ VSub(&v1, &v0, &edge1);
+ VSub(&v2, &v0, &edge2);
+ VSub(&v2, &v1, &edge3);
+
+ /* check to see if this will be a degenerate triangle before creation */
+ if ((VLength(&edge1) >= EPSILON) &&
+ (VLength(&edge2) >= EPSILON) &&
+ (VLength(&edge3) >= EPSILON)) {
+
+ t=(stri *) rt_getmem(sizeof(stri));
+
+ t->nextobj = NULL;
+ t->methods = &stri_methods;
+
+ t->tex = (texture *)tex;
+ t->v0 = v0;
+ t->edge1 = edge1;
+ t->edge2 = edge2;
+ t->n0 = n0;
+ t->n1 = n1;
+ t->n2 = n2;
+
+ return (object *) t;
+ }
+
+ return NULL; /* was a degenerate triangle */
+}
+
+#define CROSS(dest,v1,v2) \
+ dest.x=v1.y*v2.z-v1.z*v2.y; \
+ dest.y=v1.z*v2.x-v1.x*v2.z; \
+ dest.z=v1.x*v2.y-v1.y*v2.x;
+
+#define DOT(v1,v2) (v1.x*v2.x+v1.y*v2.y+v1.z*v2.z)
+
+#define SUB(dest,v1,v2) \
+ dest.x=v1.x-v2.x; \
+ dest.y=v1.y-v2.y; \
+ dest.z=v1.z-v2.z;
+
+static int tri_bbox(void * obj, vector * min, vector * max) {
+ tri * t = (tri *) obj;
+ vector v1, v2;
+
+ VAdd(&t->v0, &t->edge1, &v1);
+ VAdd(&t->v0, &t->edge2, &v2);
+
+ min->x = MYMIN( t->v0.x , MYMIN( v1.x , v2.x ));
+ min->y = MYMIN( t->v0.y , MYMIN( v1.y , v2.y ));
+ min->z = MYMIN( t->v0.z , MYMIN( v1.z , v2.z ));
+
+ max->x = MYMAX( t->v0.x , MYMAX( v1.x , v2.x ));
+ max->y = MYMAX( t->v0.y , MYMAX( v1.y , v2.y ));
+ max->z = MYMAX( t->v0.z , MYMAX( v1.z , v2.z ));
+
+ return 1;
+}
+
+static void tri_intersect(tri * trn, ray * ry) {
+ vector tvec, pvec, qvec;
+ flt det, inv_det, t, u, v;
+
+ /* begin calculating determinant - also used to calculate U parameter */
+ CROSS(pvec, ry->d, trn->edge2);
+
+ /* if determinant is near zero, ray lies in plane of triangle */
+ det = DOT(trn->edge1, pvec);
+
+ if (det > -EPSILON && det < EPSILON)
+ return;
+
+ inv_det = 1.0 / det;
+
+ /* calculate distance from vert0 to ray origin */
+ SUB(tvec, ry->o, trn->v0);
+
+ /* calculate U parameter and test bounds */
+ u = DOT(tvec, pvec) * inv_det;
+ if (u < 0.0 || u > 1.0)
+ return;
+
+ /* prepare to test V parameter */
+ CROSS(qvec, tvec, trn->edge1);
+
+ /* calculate V parameter and test bounds */
+ v = DOT(ry->d, qvec) * inv_det;
+ if (v < 0.0 || u + v > 1.0)
+ return;
+
+ /* calculate t, ray intersects triangle */
+ t = DOT(trn->edge2, qvec) * inv_det;
+
+ add_intersection(t,(object *) trn, ry);
+}
+
+
+static void tri_normal(tri * trn, vector * pnt, ray * incident, vector * N) {
+
+ CROSS((*N), trn->edge1, trn->edge2);
+
+ VNorm(N);
+
+ if (VDot(N, &(incident->d)) > 0.0) {
+ N->x=-N->x;
+ N->y=-N->y;
+ N->z=-N->z;
+ }
+}
+
+static void stri_normal(stri * trn, vector * pnt, ray * incident, vector * N) {
+ flt U, V, W, lensqr;
+ vector P, tmp, norm;
+
+ CROSS(norm, trn->edge1, trn->edge2);
+ lensqr = DOT(norm, norm);
+
+ VSUB((*pnt), trn->v0, P);
+
+ CROSS(tmp, P, trn->edge2);
+ U = DOT(tmp, norm) / lensqr;
+
+ CROSS(tmp, trn->edge1, P);
+ V = DOT(tmp, norm) / lensqr;
+
+ W = 1.0 - (U + V);
+
+ N->x = W*trn->n0.x + U*trn->n1.x + V*trn->n2.x;
+ N->y = W*trn->n0.y + U*trn->n1.y + V*trn->n2.y;
+ N->z = W*trn->n0.z + U*trn->n1.z + V*trn->n2.z;
+
+ VNorm(N);
+}
+
diff --git a/examples/parallel_for/tacheon/src/triangle.h b/examples/parallel_for/tacheon/src/triangle.h
new file mode 100644
index 0000000..d0e4ac5
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/triangle.h
@@ -0,0 +1,105 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * triangle.h - This file contains the defines for triangles etc.
+ *
+ * $Id: triangle.h,v 1.2 2007/02/22 17:54:16 dpoulsen Exp $
+ */
+
+object * newtri(void *, vector, vector, vector);
+object * newstri(void *, vector, vector, vector, vector, vector, vector);
+
+#ifdef TRIANGLE_PRIVATE
+
+#define TRIXMAJOR 0
+#define TRIYMAJOR 1
+#define TRIZMAJOR 2
+
+typedef struct {
+ unsigned int id; /* Unique Object serial number */
+ void * nextobj; /* pointer to next object in list */
+ object_methods * methods; /* this object's methods */
+ texture * tex; /* object texture */
+ vector edge2;
+ vector edge1;
+ vector v0;
+} tri;
+
+typedef struct {
+ unsigned int id; /* Unique Object serial number */
+ void * nextobj; /* pointer to next object in list */
+ object_methods * methods; /* this object's methods */
+ texture * tex; /* object texture */
+ vector edge2;
+ vector edge1;
+ vector v0;
+ vector n0;
+ vector n1;
+ vector n2;
+} stri;
+
+static int tri_bbox(void * obj, vector * min, vector * max);
+
+static void tri_intersect(tri *, ray *);
+
+static void tri_normal(tri *, vector *, ray *, vector *);
+static void stri_normal(stri *, vector *, ray *, vector *);
+#endif
diff --git a/examples/parallel_for/tacheon/src/types.h b/examples/parallel_for/tacheon/src/types.h
new file mode 100644
index 0000000..b462e71
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/types.h
@@ -0,0 +1,233 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+#ifdef _WIN32
+#include <malloc.h>
+#define alloca _alloca
+#else
+#include <alloca.h>
+#endif
+
+/*
+ * types.h - This file contains all of the type definitions for the raytracer
+ *
+ * $Id: types.h,v 1.2 2007/02/22 17:54:16 dpoulsen Exp $
+ */
+
+#define MAXOCTNODES 25 /* subdivide octants /w > # of children */
+#define SPEPSILON 0.000001 /* amount to crawl down a ray */
+#define EPSILON 0.000001 /* amount to crawl down a ray */
+#define TWOPI 6.2831853 /* guess */
+#define FHUGE 1e18 /* biggest fp number we can represent */
+
+/* Maximum internal table sizes */
+/* Use prime numbers for best memory system performance */
+#define INTTBSIZE 1024 /* maximum intersections we can hold */
+#define MAXLIGHTS 39 /* maximum number of lights in a scene */
+#define MAXIMGS 39 /* maxiumum number of distinct images */
+#define RPCQSIZE 113 /* number of RPC messages to queue */
+
+/* Parameter values for rt_boundmode() */
+#define RT_BOUNDING_DISABLED 0 /* spatial subdivision/bounding disabled */
+#define RT_BOUNDING_ENABLED 1 /* spatial subdivision/bounding enabled */
+
+/* Parameter values for rt_displaymode() */
+#define RT_DISPLAY_DISABLED 0 /* video output enabled */
+#define RT_DISPLAY_ENABLED 1 /* video output disabled */
+
+/* Ray flags */
+#define RT_RAY_REGULAR 1
+#define RT_RAY_SHADOW 2
+#define RT_RAY_BOUNDED 4
+#define RT_RAY_FINISHED 8
+
+#ifdef USESINGLEFLT
+typedef float flt; /* generic floating point number, using float */
+#else
+typedef double flt; /* generic floating point number, using double */
+#endif
+
+typedef unsigned char byte; /* 1 byte */
+typedef signed int word; /* 32 bit integer */
+
+typedef struct {
+ flt x; /* X coordinate value */
+ flt y; /* Y coordinate value */
+ flt z; /* Z coordinate value */
+} vector;
+
+typedef struct {
+ flt r; /* Red component */
+ flt g; /* Green component */
+ flt b; /* Blue component */
+} color;
+
+typedef struct {
+ byte r; /* Red component */
+ byte g; /* Green component */
+ byte b; /* Blue component */
+} bytecolor;
+
+typedef struct { /* Raw 24 bit image structure, for tga, ppm etc */
+ int loaded; /* image memory residence flag */
+ int xres; /* image X axis size */
+ int yres; /* image Y axis size */
+ int bpp; /* image bits per pixel */
+ char name[96]; /* image filename (with path) */
+ unsigned char * data; /* pointer to raw byte image data */
+} rawimage;
+
+typedef struct { /* Scalar Volume Data */
+ int loaded; /* Volume data memory residence flag */
+ int xres; /* volume X axis size */
+ int yres; /* volume Y axis size */
+ int zres; /* volume Z axis size */
+ flt opacity; /* opacity per unit length */
+ char name[96]; /* Volume data filename */
+ unsigned char * data; /* pointer to raw byte volume data */
+} scalarvol;
+
+typedef struct {
+ color (* texfunc)(void *, void *, void *);
+ int shadowcast; /* does the object cast a shadow */
+ int islight; /* light flag... */
+ color col; /* base object color */
+ flt ambient; /* ambient lighting */
+ flt diffuse; /* diffuse reflection */
+ flt phong; /* phong specular highlights */
+ flt phongexp; /* phong exponent/shininess factor */
+ int phongtype; /* phong type: 0 == plastic, nonzero == metal */
+ flt specular; /* specular reflection */
+ flt opacity; /* how opaque the object is */
+ vector ctr; /* origin of texture */
+ vector rot; /* rotation of texture about origin */
+ vector scale; /* scale of texture in x,y,z */
+ vector uaxs; /* planar map U axis */
+ vector vaxs; /* planar map V axis */
+ void * img; /* pointer to image for image mapping */
+ void * obj; /* object ptr, hack for volume shaders for now */
+} texture;
+
+typedef struct {
+ void (* intersect)(void *, void *); /* intersection func ptr */
+ void (* normal)(void *, void *, void *, void *); /* normal function ptr */
+ int (* bbox)(void *, vector *, vector *); /* return the object bbox */
+ void (* free)(void *); /* free the object */
+} object_methods;
+
+typedef struct {
+ unsigned int id; /* Unique Object serial number */
+ void * nextobj; /* pointer to next object in list */
+ object_methods * methods; /* this object's methods */
+ texture * tex; /* object texture */
+} object;
+
+typedef struct {
+ object * obj; /* to object we hit */
+ flt t; /* distance along the ray to the hit point */
+} intersection;
+
+typedef struct {
+ int num; /* number of intersections */
+ intersection closest; /* closest intersection > 0.0 */
+ intersection list[INTTBSIZE]; /* list of all intersections */
+} intersectstruct;
+
+typedef struct {
+ char outfilename[200]; /* name of the output image */
+ unsigned char * rawimage; /* pointer to a raw rgb image to be stored */
+ int hres; /* horizontal output image resolution */
+ int vres; /* vertical output image resolution */
+ flt aspectratio; /* aspect ratio of output image */
+ int raydepth; /* maximum recursion depth */
+ int antialiasing; /* number of antialiasing rays to fire */
+ int verbosemode; /* verbose reporting flag */
+ int boundmode; /* automatic spatial subdivision flag */
+ int boundthresh; /* threshold number of subobjects */
+ int displaymode; /* run-time X11 display flag */
+ vector camcent; /* center of the camera in world coords */
+ vector camviewvec; /* view direction of the camera (Z axis) */
+ vector camrightvec; /* right axis for the camera (X axis) */
+ vector camupvec; /* up axis for the camera (Y axis) */
+ flt camzoom; /* zoom factor for the camera */
+ color background; /* scene background color */
+} scenedef;
+
+typedef struct {
+ intersectstruct * intstruct; /* ptr to thread's intersection data */
+ unsigned int depth; /* levels left to recurse.. (maxdepth - curdepth) */
+ unsigned int flags; /* ray flags, any special treatment needed etc */
+ unsigned int serial; /* serial number of the ray */
+ unsigned int * mbox; /* mailbox array for optimizing intersections */
+ vector o; /* origin of the ray X,Y,Z */
+ vector d; /* normalized direction of the ray */
+ flt maxdist; /* maximum distance to search for intersections */
+ vector s; /* startpoint of the ray (may differ from origin */
+ vector e; /* endpoint of the ray if bounded */
+ scenedef * scene; /* pointer to the scene, for global parms such as */
+ /* background colors etc */
+} ray;
+
+typedef struct {
+ int type; /* RPC call type */
+ int from; /* Sending processor */
+ int len; /* length of parms in bytes */
+ void * parms; /* Parameters to RPC */
+} rpcmsg;
diff --git a/examples/parallel_for/tacheon/src/ui.cpp b/examples/parallel_for/tacheon/src/ui.cpp
new file mode 100644
index 0000000..23526ad
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/ui.cpp
@@ -0,0 +1,122 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * ui.c - Contains functions for dealing with user interfaces
+ *
+ * $Id: ui.cpp,v 1.2 2007/02/22 17:54:16 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "util.h"
+#include "ui.h"
+
+static void (* rt_static_ui_message) (int, char *) = NULL;
+static void (* rt_static_ui_progress) (int) = NULL;
+static int (* rt_static_ui_checkaction) (void) = NULL;
+
+void set_rt_ui_message(void (* func) (int, char *)) {
+ rt_static_ui_message = func;
+}
+
+void set_rt_ui_progress(void (* func) (int)) {
+ rt_static_ui_progress = func;
+}
+
+void rt_ui_message(int level, char * msg) {
+ if (rt_static_ui_message == NULL) {
+ fprintf(stderr, "%s\n", msg);
+ fflush (stderr);
+ } else {
+ rt_static_ui_message(level, msg);
+ }
+}
+
+void rt_ui_progress(int percent) {
+ if (rt_static_ui_progress != NULL)
+ rt_static_ui_progress(percent);
+ else {
+ fprintf(stderr, "\r %3d%% Complete \r", percent);
+ fflush(stderr);
+ }
+}
+
+int rt_ui_checkaction(void) {
+ if (rt_static_ui_checkaction != NULL)
+ return rt_static_ui_checkaction();
+ else
+ return 0;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/parallel_for/tacheon/src/ui.h b/examples/parallel_for/tacheon/src/ui.h
new file mode 100644
index 0000000..303991f
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/ui.h
@@ -0,0 +1,79 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * ui.h - defines for user interface functions
+ *
+ * $Id: ui.h,v 1.2 2007/02/22 17:54:16 dpoulsen Exp $
+ */
+
+/* Different types of message, for levels of verbosity etc */
+#define MSG_0 100
+#define MSG_1 101
+#define MSG_2 102
+#define MSG_3 103
+#define MSG_4 104
+#define MSG_5 105
+#define MSG_ERR 200
+#define MSG_ABORT 300
+
+void rt_ui_message(int, char *);
+void rt_ui_progress(int);
+int rt_ui_checkaction(void);
diff --git a/examples/parallel_for/tacheon/src/util.cpp b/examples/parallel_for/tacheon/src/util.cpp
new file mode 100644
index 0000000..f5998f5
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/util.cpp
@@ -0,0 +1,204 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * util.c - Contains all of the timing functions for various platforms.
+ *
+ * $Id: util.cpp,v 1.6 2007/02/22 18:17:51 amalakho Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "util.h"
+#include "light.h"
+#include "global.h"
+#include "ui.h"
+
+void rt_finalize(void);
+
+#ifndef _WIN32
+#include <sys/time.h>
+#include <unistd.h>
+
+void rt_sleep(int msec) {
+ usleep(msec*1000);
+}
+
+#else //_WIN32
+
+#undef OLDUNIXTIME
+#undef STDTIME
+
+#include <windows.h>
+
+void rt_sleep(int msec) {
+ Sleep(msec);
+}
+
+DWORD starttime;
+DWORD stoptime;
+
+void timerstart(void) {
+ starttime = GetTickCount ();
+}
+
+void timerstop(void) {
+ stoptime = GetTickCount ();
+}
+
+flt timertime(void) {
+ double ttime, start, end;
+
+ start = ((double) starttime) / ((double) 1000.00);
+ end = ((double) stoptime) / ((double) 1000.00);
+ ttime = end - start;
+
+ return ttime;
+}
+#endif /* _WIN32 */
+
+/* if we're on a Unix with gettimeofday() we'll use newer timers */
+#ifdef STDTIME
+ struct timeval starttime, endtime;
+ struct timezone tz;
+
+void timerstart(void) {
+ gettimeofday(&starttime, &tz);
+}
+
+void timerstop(void) {
+ gettimeofday(&endtime, &tz);
+}
+
+flt timertime(void) {
+ double ttime, start, end;
+
+ start = (starttime.tv_sec+1.0*starttime.tv_usec / 1000000.0);
+ end = (endtime.tv_sec+1.0*endtime.tv_usec / 1000000.0);
+ ttime = end - start;
+
+ return ttime;
+}
+#endif /* STDTIME */
+
+
+
+/* use the old fashioned Unix time functions */
+#ifdef OLDUNIXTIME
+time_t starttime;
+time_t stoptime;
+
+void timerstart(void) {
+ starttime=time(NULL);
+}
+
+void timerstop(void) {
+ stoptime=time(NULL);
+}
+
+flt timertime(void) {
+ flt a;
+ a = difftime(stoptime, starttime);
+ return a;
+}
+#endif /* OLDUNIXTIME */
+
+
+
+/* random other helper utility functions */
+int rt_meminuse(void) {
+ return rt_mem_in_use;
+}
+
+void * rt_getmem(unsigned int bytes) {
+ void * mem;
+
+ mem=malloc( bytes );
+ if (mem!=NULL) {
+ rt_mem_in_use += bytes;
+ }
+ else {
+ rtbomb("No more memory!!!!");
+ }
+ return mem;
+}
+
+unsigned int rt_freemem(void * addr) {
+ unsigned int bytes;
+
+ free(addr);
+
+ bytes=0;
+ rt_mem_in_use -= bytes;
+ return bytes;
+}
+
+void rtbomb(char * msg) {
+ rt_ui_message(MSG_ERR, msg);
+ rt_ui_message(MSG_ABORT, "Rendering Aborted.");
+
+ rt_finalize();
+ exit(1);
+}
+
+void rtmesg(char * msg) {
+ rt_ui_message(MSG_0, msg);
+}
diff --git a/examples/parallel_for/tacheon/src/util.h b/examples/parallel_for/tacheon/src/util.h
new file mode 100644
index 0000000..abcbf9c
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/util.h
@@ -0,0 +1,75 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * util.h - This file contains defines for the timer functions...
+ *
+ * $Id: util.h,v 1.3 2007/02/22 17:54:17 dpoulsen Exp $
+ */
+
+void timerstart(void);
+void timerstop(void);
+flt timertime(void);
+void rt_sleep(int);
+int rt_meminuse(void);
+void * rt_getmem(unsigned int);
+unsigned int rt_freemem(void *);
+void rtbomb(char *);
+void rtmesg(char *);
diff --git a/examples/parallel_for/tacheon/src/vector.cpp b/examples/parallel_for/tacheon/src/vector.cpp
new file mode 100644
index 0000000..84b2ed8
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/vector.cpp
@@ -0,0 +1,147 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * vector.c - This file contains all of the vector arithmetic functions.
+ *
+ * $Id: vector.cpp,v 1.2 2007/02/22 17:54:17 dpoulsen Exp $
+ */
+
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+
+flt VDot(vector *a, vector *b) {
+ return (a->x*b->x + a->y*b->y + a->z*b->z);
+}
+
+void VCross(vector * a, vector * b, vector * c) {
+ c->x = (a->y * b->z) - (a->z * b->y);
+ c->y = (a->z * b->x) - (a->x * b->z);
+ c->z = (a->x * b->y) - (a->y * b->x);
+}
+
+flt VLength(vector * a) {
+ return (flt) sqrt((a->x * a->x) + (a->y * a->y) + (a->z * a->z));
+}
+
+void VNorm(vector * a) {
+ flt len;
+
+ len=sqrt((a->x * a->x) + (a->y * a->y) + (a->z * a->z));
+ if (len != 0.0) {
+ a->x /= len;
+ a->y /= len;
+ a->z /= len;
+ }
+}
+
+void VAdd(vector * a, vector * b, vector * c) {
+ c->x = (a->x + b->x);
+ c->y = (a->y + b->y);
+ c->z = (a->z + b->z);
+}
+
+void VSub(vector * a, vector * b, vector * c) {
+ c->x = (a->x - b->x);
+ c->y = (a->y - b->y);
+ c->z = (a->z - b->z);
+}
+
+void VAddS(flt a, vector * A, vector * B, vector * C) {
+ C->x = (a * A->x) + B->x;
+ C->y = (a * A->y) + B->y;
+ C->z = (a * A->z) + B->z;
+}
+
+vector Raypnt(ray * a, flt t) {
+ vector temp;
+
+ temp.x=a->o.x + (a->d.x * t);
+ temp.y=a->o.y + (a->d.y * t);
+ temp.z=a->o.z + (a->d.z * t);
+
+ return temp;
+}
+
+void VScale(vector * a, flt s) {
+ a->x *= s;
+ a->y *= s;
+ a->z *= s;
+}
+
+void ColorAddS(color * a, color * b, flt s) {
+ a->r += b->r * s;
+ a->g += b->g * s;
+ a->b += b->b * s;
+}
+
+void ColorAccum(color * a, color * b) {
+ a->r += b->r;
+ a->g += b->g;
+ a->b += b->b;
+}
+
+void ColorScale(color * a, flt s) {
+ a->r *= s;
+ a->g *= s;
+ a->b *= s;
+}
+
diff --git a/examples/parallel_for/tacheon/src/vector.h b/examples/parallel_for/tacheon/src/vector.h
new file mode 100644
index 0000000..cf32ccf
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/vector.h
@@ -0,0 +1,79 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * vector.h - This file contains declarations of vector functions
+ *
+ * $Id: vector.h,v 1.2 2007/02/22 17:54:17 dpoulsen Exp $
+ */
+
+flt VDot(vector *, vector *);
+void VCross(vector *, vector *, vector *);
+flt VLength(vector *);
+void VNorm(vector *);
+void VAdd(vector *, vector *, vector *);
+void VSub(vector *, vector *, vector *);
+void VAddS(flt, vector *, vector *, vector *);
+vector Raypnt(ray *, flt);
+void VScale(vector * a, flt s);
+
+void ColorAddS(color * a, color * b, flt s);
+void ColorAccum(color * a, color * b);
+void ColorScale(color * a, flt s);
diff --git a/examples/parallel_for/tacheon/src/video.cpp b/examples/parallel_for/tacheon/src/video.cpp
new file mode 100644
index 0000000..76eb9fd
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/video.cpp
@@ -0,0 +1,221 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * video.c - routines for putting pixels on a screen if one is available.
+ *
+ * $Id: video.cpp,v 1.20 2007/02/28 18:35:22 amalakho Exp $
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define VIDEO_WINMAIN_ARGS
+#include "types.h"
+#include "api.h" /* The ray tracing library API */
+#include "getargs.h" /* command line argument/option parsing */
+#include "parse.h" /* Support for my own file format */
+#include "ui.h"
+#include "util.h"
+#include "video.h"
+
+static SceneHandle global_scene;
+static int global_xsize; /* size of graphic image rendered in window (from hres, vres) */
+static int global_ysize;
+static int global_xwinsize; /* size of window (may be larger than above) */
+static int global_ywinsize;
+static char *global_window_title;
+static bool global_usegraphics;
+
+static char *window_title_string (int argc, char **argv)
+{
+ int i;
+ char *name;
+
+ name = (char *) malloc (8192);
+
+ if(strrchr(argv[0], '\\')) strcpy (name, strrchr(argv[0], '\\')+1);
+ else if(strrchr(argv[0], '/')) strcpy (name, strrchr(argv[0], '/')+1);
+ else strcpy (name, *argv[0]?argv[0]:"Tacheon");
+ for (i = 1; i < argc; i++) {
+ strcat (name, " ");
+ strcat (name, argv[i]);
+ }
+#ifdef _DEBUG
+ strcat (name, " (DEBUG BUILD)");
+#endif
+ return name;
+}
+
+static int main_init_parts (int argc, char **argv)
+{
+ int rc;
+ argoptions opt;
+ char * filename;
+
+ global_window_title = window_title_string (argc, argv);
+
+ global_scene = rt_newscene();
+
+ rt_initialize(&argc, &argv);
+
+ if ((rc = getargs(argc, argv, &opt)) == -1) {
+#if _WIN32||_WIN64
+ rt_sleep(10000);
+#endif
+ exit(rc);
+ }
+
+#ifdef DEFAULT_MODELFILE
+#if _WIN32||_WIN64
+#define _GLUE_FILENAME(x) "..\\dat\\" #x
+#else
+#define _GLUE_FILENAME(x) #x
+#endif
+#define GLUE_FILENAME(x) _GLUE_FILENAME(x)
+ if(opt.foundfilename == -1)
+ filename = GLUE_FILENAME(DEFAULT_MODELFILE);
+ else
+#endif//DEFAULT_MODELFILE
+ filename = opt.filename;
+
+ rc = readmodel(filename, global_scene);
+
+ if (rc != 0) {
+ fprintf(stderr, "Parser returned a non-zero error code reading %s\n", filename);
+ fprintf(stderr, "Aborting Render...\n");
+ rt_finalize();
+ return -1;
+ }
+
+ /* process command line overrides */
+ useoptions(&opt, global_scene);
+
+ // need these early for create_graphics_window() so grab these here...
+ scenedef *scene = (scenedef *) global_scene;
+ global_xsize = scene->hres;
+ global_ysize = scene->vres;
+ global_xwinsize = global_xsize;
+ global_ywinsize = global_ysize; // add some here to leave extra blank space on bottom for status etc.
+ global_usegraphics = (scene->displaymode == RT_DISPLAY_ENABLED);
+
+ rt_ui_message (MSG_0, "\nIncludes software developed by John E. Stone.\n");
+
+ return 0;
+}
+
+class tacheon_video : public video
+{
+ void on_process()
+ {
+ char buf[128];
+ flt runtime;
+ timerstart();
+ rt_renderscene(global_scene);
+ timerstop();
+ runtime=timertime();
+ sprintf(buf, "\nCPU Time: %.3f seconds.", runtime);
+ rt_ui_message(MSG_0, buf); buf[0] = ' ';
+ strcat(global_window_title, buf);
+ title = global_window_title; updating = true;
+ show_title();
+ rt_finalize();
+ }
+ void on_key(int key) {
+ key &= 0xff; if(key == 27) running = false;
+ }
+};
+class video *video = 0;
+
+void rt_finalize(void) {
+ timerstart();
+ if(global_usegraphics)
+ do { rt_sleep(10); timerstop(); }
+ while(timertime() < 10 && video->next_frame());
+#ifdef _WINDOWS
+ else rt_sleep(10000);
+#endif
+}
+
+int main (int argc, char **argv)
+{
+ int rc;
+
+ tacheon_video tacheon;
+ tacheon.threaded = true;
+ tacheon.init_console();
+
+ rc = main_init_parts (argc, argv);
+ if (rc) return rc;
+
+ tacheon.title = global_window_title;
+ tacheon.updating = global_usegraphics;
+ // always using window even if(!global_usegraphics)
+ global_usegraphics =
+ tacheon.init_window(global_xwinsize, global_ywinsize);
+ if(!tacheon.running)
+ return -1;
+
+ video = &tacheon;
+ tacheon.main_loop();
+
+ return 0;
+}
diff --git a/examples/parallel_for/tacheon/src/video.h b/examples/parallel_for/tacheon/src/video.h
new file mode 100644
index 0000000..c878fce
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/video.h
@@ -0,0 +1,62 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+#include "../../../common/gui/video.h"
+extern class video *video;
diff --git a/examples/parallel_for/tacheon/src/vol.cpp b/examples/parallel_for/tacheon/src/vol.cpp
new file mode 100644
index 0000000..b506cb1
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/vol.cpp
@@ -0,0 +1,315 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * vol.c - Volume rendering helper routines etc.
+ *
+ *
+ * $Id: vol.cpp,v 1.3 2007/02/22 18:17:51 amalakho Exp $
+ */
+
+#include<stdio.h>
+#include "machine.h"
+#include "types.h"
+#include "macros.h"
+#include "vector.h"
+#include "util.h"
+#include "vol.h"
+#include "box.h"
+#include "trace.h"
+#include "ui.h"
+#include "light.h"
+#include "shade.h"
+
+int scalarvol_bbox(void * obj, vector * min, vector * max) {
+ box * b = (box *) obj;
+
+ *min = b->min;
+ *max = b->max;
+
+ return 1;
+}
+
+void * newscalarvol(void * intex, vector min, vector max,
+ int xs, int ys, int zs, char * fname, scalarvol * invol) {
+ box * bx;
+ texture * tx, * tex;
+ scalarvol * vol;
+
+ tex=(texture *)intex;
+ tex->shadowcast = 0; /* doesn't cast a shadow */
+
+ tx=(texture *)rt_getmem(sizeof(texture));
+
+ /* is the volume data already loaded? */
+ if (invol==NULL) {
+ vol=(scalarvol *)rt_getmem(sizeof(scalarvol));
+ vol->loaded=0;
+ vol->data=NULL;
+ }
+ else
+ vol=invol;
+
+ vol->opacity=tex->opacity;
+ vol->xres=xs;
+ vol->yres=ys;
+ vol->zres=zs;
+ strcpy(vol->name, fname);
+
+ tx->ctr.x = 0.0;
+ tx->ctr.y = 0.0;
+ tx->ctr.z = 0.0;
+ tx->rot = tx->ctr;
+ tx->scale = tx->ctr;
+ tx->uaxs = tx->ctr;
+ tx->vaxs = tx->ctr;
+
+ tx->islight = 0;
+ tx->shadowcast = 0; /* doesn't cast a shadow */
+
+ tx->col = tex->col;
+ tx->ambient = 1.0;
+ tx->diffuse = 0.0;
+ tx->specular = 0.0;
+ tx->opacity = 1.0;
+ tx->img = vol;
+ tx->texfunc = (color(*)(void *, void *, void *))(scalar_volume_texture);
+
+ bx=newbox(tx, min, max);
+ tx->obj = (void *) bx; /* XXX hack! */
+
+ return (void *) bx;
+}
+
+
+color VoxelColor(flt scalar) {
+ color col;
+
+ if (scalar > 1.0)
+ scalar = 1.0;
+
+ if (scalar < 0.0)
+ scalar = 0.0;
+
+ if (scalar < 0.25) {
+ col.r = scalar * 4.0;
+ col.g = 0.0;
+ col.b = 0.0;
+ }
+ else {
+ if (scalar < 0.75) {
+ col.r = 1.0;
+ col.g = (scalar - 0.25) * 2.0;
+ col.b = 0.0;
+ }
+ else {
+ col.r = 1.0;
+ col.g = 1.0;
+ col.b = (scalar - 0.75) * 4.0;
+ }
+ }
+
+ return col;
+}
+
+color scalar_volume_texture(vector * hit, texture * tex, ray * ry) {
+ color col, col2;
+ box * bx;
+ flt a, tx1, tx2, ty1, ty2, tz1, tz2;
+ flt tnear, tfar;
+ flt t, tdist, dt, sum, tt;
+ vector pnt, bln;
+ scalarvol * vol;
+ flt scalar, transval;
+ int x, y, z;
+ unsigned char * ptr;
+
+ bx=(box *) tex->obj;
+ vol=(scalarvol *)bx->tex->img;
+
+ col.r=0.0;
+ col.g=0.0;
+ col.b=0.0;
+
+ tnear= -FHUGE;
+ tfar= FHUGE;
+
+ if (ry->d.x == 0.0) {
+ if ((ry->o.x < bx->min.x) || (ry->o.x > bx->max.x)) return col;
+ }
+ else {
+ tx1 = (bx->min.x - ry->o.x) / ry->d.x;
+ tx2 = (bx->max.x - ry->o.x) / ry->d.x;
+ if (tx1 > tx2) { a=tx1; tx1=tx2; tx2=a; }
+ if (tx1 > tnear) tnear=tx1;
+ if (tx2 < tfar) tfar=tx2;
+ }
+ if (tnear > tfar) return col;
+ if (tfar < 0.0) return col;
+
+ if (ry->d.y == 0.0) {
+ if ((ry->o.y < bx->min.y) || (ry->o.y > bx->max.y)) return col;
+ }
+ else {
+ ty1 = (bx->min.y - ry->o.y) / ry->d.y;
+ ty2 = (bx->max.y - ry->o.y) / ry->d.y;
+ if (ty1 > ty2) { a=ty1; ty1=ty2; ty2=a; }
+ if (ty1 > tnear) tnear=ty1;
+ if (ty2 < tfar) tfar=ty2;
+ }
+ if (tnear > tfar) return col;
+ if (tfar < 0.0) return col;
+
+ if (ry->d.z == 0.0) {
+ if ((ry->o.z < bx->min.z) || (ry->o.z > bx->max.z)) return col;
+ }
+ else {
+ tz1 = (bx->min.z - ry->o.z) / ry->d.z;
+ tz2 = (bx->max.z - ry->o.z) / ry->d.z;
+ if (tz1 > tz2) { a=tz1; tz1=tz2; tz2=a; }
+ if (tz1 > tnear) tnear=tz1;
+ if (tz2 < tfar) tfar=tz2;
+ }
+ if (tnear > tfar) return col;
+ if (tfar < 0.0) return col;
+
+ if (tnear < 0.0) tnear=0.0;
+
+ tdist=sqrt((flt) (vol->xres*vol->xres + vol->yres*vol->yres + vol->zres*vol->zres));
+ tt = (vol->opacity / tdist);
+
+ bln.x=fabs(bx->min.x - bx->max.x);
+ bln.y=fabs(bx->min.y - bx->max.y);
+ bln.z=fabs(bx->min.z - bx->max.z);
+
+ dt=sqrt(bln.x*bln.x + bln.y*bln.y + bln.z*bln.z) / tdist;
+ sum=0.0;
+
+ /* move the volume residency check out of loop.. */
+ if (!vol->loaded) {
+ LoadVol(vol);
+ vol->loaded=1;
+ }
+
+ for (t=tnear; t<=tfar; t+=dt) {
+ pnt.x=((ry->o.x + (ry->d.x * t)) - bx->min.x) / bln.x;
+ pnt.y=((ry->o.y + (ry->d.y * t)) - bx->min.y) / bln.y;
+ pnt.z=((ry->o.z + (ry->d.z * t)) - bx->min.z) / bln.z;
+
+ x=(int) ((vol->xres - 1.5) * pnt.x + 0.5);
+ y=(int) ((vol->yres - 1.5) * pnt.y + 0.5);
+ z=(int) ((vol->zres - 1.5) * pnt.z + 0.5);
+
+ ptr = vol->data + ((vol->xres * vol->yres * z) + (vol->xres * y) + x);
+
+ scalar = (flt) ((flt) 1.0 * ((int) ptr[0])) / 255.0;
+
+ sum += tt * scalar;
+
+ transval = tt * scalar;
+
+ col2 = VoxelColor(scalar);
+
+ if (sum < 1.0) {
+ col.r += transval * col2.r;
+ col.g += transval * col2.g;
+ col.b += transval * col2.b;
+ if (sum < 0.0) sum=0.0;
+ }
+ else {
+ sum=1.0;
+ }
+ }
+
+ if (sum < 1.0) { /* spawn transmission rays / refraction */
+ color transcol;
+
+ transcol = shade_transmission(ry, hit, 1.0 - sum);
+
+ col.r += transcol.r; /* add the transmitted ray */
+ col.g += transcol.g; /* to the diffuse and */
+ col.b += transcol.b; /* transmission total.. */
+ }
+
+ return col;
+}
+
+void LoadVol(scalarvol * vol) {
+ FILE * dfile;
+ int status;
+ char msgtxt[2048];
+
+ dfile=fopen(vol->name, "r");
+ if (dfile==NULL) {
+ char msgtxt[2048];
+ sprintf(msgtxt, "Vol: can't open %s for input!!! Aborting\n",vol->name);
+ rt_ui_message(MSG_ERR, msgtxt);
+ rt_ui_message(MSG_ABORT, "Rendering Aborted.");
+ exit(1);
+ }
+
+ sprintf(msgtxt, "loading %dx%dx%d volume set from %s",
+ vol->xres, vol->yres, vol->zres, vol->name);
+ rt_ui_message(MSG_0, msgtxt);
+
+ vol->data = (unsigned char *)rt_getmem(vol->xres * vol->yres * vol->zres);
+
+ status=fread(vol->data, 1, (vol->xres * vol->yres * vol->zres), dfile);
+}
diff --git a/examples/parallel_for/tacheon/src/vol.h b/examples/parallel_for/tacheon/src/vol.h
new file mode 100644
index 0000000..66b93f6
--- /dev/null
+++ b/examples/parallel_for/tacheon/src/vol.h
@@ -0,0 +1,74 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/*
+ The original source for this example is
+ Copyright (c) 1994, 1995, 1996, 1997 John E. Stone
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement:
+ This product includes software developed by John E. Stone
+ 4. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+*/
+
+/*
+ * vol.h - Volume rendering definitions etc.
+ *
+ *
+ * $Id: vol.h,v 1.2 2007/02/22 17:54:17 dpoulsen Exp $
+ */
+
+
+void * newscalarvol(void * intex, vector min, vector max,
+ int xs, int ys, int zs,
+ char * fname, scalarvol * invol);
+
+void LoadVol(scalarvol *);
+color scalar_volume_texture(vector *, texture *, ray *);
diff --git a/examples/parallel_for/tacheon/vc7.1/gui.ico b/examples/parallel_for/tacheon/vc7.1/gui.ico
new file mode 100644
index 0000000..d551aa3
Binary files /dev/null and b/examples/parallel_for/tacheon/vc7.1/gui.ico differ
diff --git a/examples/parallel_for/tacheon/vc7.1/gui.rc b/examples/parallel_for/tacheon/vc7.1/gui.rc
new file mode 100644
index 0000000..5a13d04
--- /dev/null
+++ b/examples/parallel_for/tacheon/vc7.1/gui.rc
@@ -0,0 +1,90 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#define APSTUDIO_HIDDEN_SYMBOLS
+#include "windows.h"
+#undef APSTUDIO_HIDDEN_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_GUI ICON "gui.ico"
+IDI_SMALL ICON "small.ico"
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
+ "#include ""windows.h""\r\n"
+ "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE
+BEGIN
+ IDS_APP_TITLE "gui"
+ IDC_GUI "GUI"
+END
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/examples/parallel_for/tacheon/vc7.1/resource.h b/examples/parallel_for/tacheon/vc7.1/resource.h
new file mode 100644
index 0000000..5f70f0c
--- /dev/null
+++ b/examples/parallel_for/tacheon/vc7.1/resource.h
@@ -0,0 +1,8 @@
+#define IDC_MYICON 2
+#define IDD_GUI 102
+#define IDS_APP_TITLE 103
+#define IDI_GUI 107
+#define IDI_SMALL 108
+#define IDC_GUI 109
+#define IDR_MAINFRAME 128
+#define IDC_STATIC -1
diff --git a/examples/parallel_for/tacheon/vc7.1/small.ico b/examples/parallel_for/tacheon/vc7.1/small.ico
new file mode 100644
index 0000000..d551aa3
Binary files /dev/null and b/examples/parallel_for/tacheon/vc7.1/small.ico differ
diff --git a/examples/parallel_for/tacheon/vc7.1/tacheon.serial.vcproj b/examples/parallel_for/tacheon/vc7.1/tacheon.serial.vcproj
new file mode 100644
index 0000000..8a77053
--- /dev/null
+++ b/examples/parallel_for/tacheon/vc7.1/tacheon.serial.vcproj
@@ -0,0 +1,239 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="tacheon.serial"
+ ProjectGUID="{1D7176EE-63B6-48F2-AB83-FFAD2048C25D}"
+ RootNamespace="tacheon.serial"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ EnableFunctionLevelLinking="TRUE"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/$(ProjectName).pdb"
+ SubSystem="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="DD Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x86"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="DD Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ EnableFunctionLevelLinking="TRUE"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x86"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/$(ProjectName).pdb"
+ SubSystem="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ <ProjectReference
+ ReferencedProjectIdentifier="{1D7176EE-63B6-48F2-AB83-FFAD2149C25E}"
+ Name="tacheon.common"/>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\src\trace.serial.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/parallel_for/tacheon/vc7.1/tacheon.sln b/examples/parallel_for/tacheon/vc7.1/tacheon.sln
new file mode 100644
index 0000000..c657856
--- /dev/null
+++ b/examples/parallel_for/tacheon/vc7.1/tacheon.sln
@@ -0,0 +1,63 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tacheon.common", "tacheon.vcproj", "{1D7176EE-63B6-48F2-AB83-FFAD2149C25E}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tacheon.serial", "tacheon.serial.vcproj", "{1D7176EE-63B6-48F2-AB83-FFAD2048C25D}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tacheon.tbb1d", "tacheon.tbb1d.vcproj", "{1D7176EE-63B6-48F2-AB83-FFAD2348C25D}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tacheon.tbb", "tacheon.tbb.vcproj", "{1D7176EE-63B6-48F2-AB83-FFAD2448C25D}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ DD Debug = DD Debug
+ DD Release = DD Release
+ GDI Debug = GDI Debug
+ GDI Release = GDI Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {1D7176EE-63B6-48F2-AB83-FFAD2149C25E}.DD Debug.ActiveCfg = DD Debug|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2149C25E}.DD Debug.Build.0 = DD Debug|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2149C25E}.DD Release.ActiveCfg = DD Release|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2149C25E}.DD Release.Build.0 = DD Release|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2149C25E}.GDI Debug.ActiveCfg = Debug|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2149C25E}.GDI Debug.Build.0 = Debug|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2149C25E}.GDI Release.ActiveCfg = Release|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2149C25E}.GDI Release.Build.0 = Release|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2048C25D}.DD Debug.ActiveCfg = DD Debug|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2048C25D}.DD Debug.Build.0 = DD Debug|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2048C25D}.DD Release.ActiveCfg = DD Release|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2048C25D}.DD Release.Build.0 = DD Release|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2048C25D}.GDI Debug.ActiveCfg = Debug|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2048C25D}.GDI Debug.Build.0 = Debug|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2048C25D}.GDI Release.ActiveCfg = Release|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2048C25D}.GDI Release.Build.0 = Release|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2348C25D}.DD Debug.ActiveCfg = DD Debug|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2348C25D}.DD Debug.Build.0 = DD Debug|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2348C25D}.DD Release.ActiveCfg = DD Release|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2348C25D}.DD Release.Build.0 = DD Release|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2348C25D}.GDI Debug.ActiveCfg = Debug|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2348C25D}.GDI Debug.Build.0 = Debug|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2348C25D}.GDI Release.ActiveCfg = Release|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2348C25D}.GDI Release.Build.0 = Release|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2448C25D}.DD Debug.ActiveCfg = DD Debug|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2448C25D}.DD Debug.Build.0 = DD Debug|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2448C25D}.DD Release.ActiveCfg = DD Release|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2448C25D}.DD Release.Build.0 = DD Release|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2448C25D}.GDI Debug.ActiveCfg = Debug|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2448C25D}.GDI Debug.Build.0 = Debug|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2448C25D}.GDI Release.ActiveCfg = Release|Win32
+ {1D7176EE-63B6-48F2-AB83-FFAD2448C25D}.GDI Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/examples/parallel_for/tacheon/vc7.1/tacheon.suo b/examples/parallel_for/tacheon/vc7.1/tacheon.suo
new file mode 100644
index 0000000..ddc558f
Binary files /dev/null and b/examples/parallel_for/tacheon/vc7.1/tacheon.suo differ
diff --git a/examples/parallel_for/tacheon/vc7.1/tacheon.tbb.vcproj b/examples/parallel_for/tacheon/vc7.1/tacheon.tbb.vcproj
new file mode 100644
index 0000000..90a9ddb
--- /dev/null
+++ b/examples/parallel_for/tacheon/vc7.1/tacheon.tbb.vcproj
@@ -0,0 +1,255 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="tacheon.tbb"
+ ProjectGUID="{1D7176EE-63B6-48F2-AB83-FFAD2448C25D}"
+ RootNamespace="tacheon.tbb"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="TBB_DO_ASSERT;WIN32;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ EnableFunctionLevelLinking="TRUE"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/$(ProjectName).pdb"
+ SubSystem="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="DD Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib";"$(DXSDK_DIR)\lib\x86""
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="DD Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="TBB_DO_ASSERT;WIN32;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ EnableFunctionLevelLinking="TRUE"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib";"$(DXSDK_DIR)\lib\x86""
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/$(ProjectName).pdb"
+ SubSystem="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ <ProjectReference
+ ReferencedProjectIdentifier="{1D7176EE-63B6-48F2-AB83-FFAD2149C25E}"
+ Name="tacheon.common"/>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\src\trace.tbb.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/parallel_for/tacheon/vc7.1/tacheon.tbb1d.vcproj b/examples/parallel_for/tacheon/vc7.1/tacheon.tbb1d.vcproj
new file mode 100644
index 0000000..f2e1a5f
--- /dev/null
+++ b/examples/parallel_for/tacheon/vc7.1/tacheon.tbb1d.vcproj
@@ -0,0 +1,255 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="tacheon.tbb1d"
+ ProjectGUID="{1D7176EE-63B6-48F2-AB83-FFAD2348C25D}"
+ RootNamespace="tacheon.tbb1d"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="TBB_DO_ASSERT;WIN32;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ EnableFunctionLevelLinking="TRUE"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/$(ProjectName).pdb"
+ SubSystem="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="DD Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib";"$(DXSDK_DIR)\lib\x86""
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="DD Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="TBB_DO_ASSERT;WIN32;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ EnableFunctionLevelLinking="TRUE"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib";"$(DXSDK_DIR)\lib\x86""
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/$(ProjectName).pdb"
+ SubSystem="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ <ProjectReference
+ ReferencedProjectIdentifier="{1D7176EE-63B6-48F2-AB83-FFAD2149C25E}"
+ Name="tacheon.common"/>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\src\trace.tbb1d.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/parallel_for/tacheon/vc7.1/tacheon.threads.vcproj b/examples/parallel_for/tacheon/vc7.1/tacheon.threads.vcproj
new file mode 100644
index 0000000..0b1ea69
--- /dev/null
+++ b/examples/parallel_for/tacheon/vc7.1/tacheon.threads.vcproj
@@ -0,0 +1,239 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="tacheon.threads"
+ ProjectGUID="{1D7176EE-63B6-48F2-AB83-FFAD2148C25D}"
+ RootNamespace="tacheon.threads"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ PreprocessorDefinitions="EMULATE_PTHREADS;WIN32;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ EnableFunctionLevelLinking="TRUE"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/$(ProjectName).pdb"
+ SubSystem="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="EMULATE_PTHREADS;WIN32;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="DD Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="EMULATE_PTHREADS;WIN32;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x86"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="DD Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ PreprocessorDefinitions="EMULATE_PTHREADS;WIN32;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ EnableFunctionLevelLinking="TRUE"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)/$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x86"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/$(ProjectName).pdb"
+ SubSystem="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ <ProjectReference
+ ReferencedProjectIdentifier="{1D7176EE-63B6-48F2-AB83-FFAD2149C25E}"
+ Name="tacheon.common"/>
+ </References>
+ <Files>
+ <File
+ RelativePath="..\src\trace.threads.cpp">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/parallel_for/tacheon/vc7.1/tacheon.vcproj b/examples/parallel_for/tacheon/vc7.1/tacheon.vcproj
new file mode 100644
index 0000000..7c31310
--- /dev/null
+++ b/examples/parallel_for/tacheon/vc7.1/tacheon.vcproj
@@ -0,0 +1,494 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="tacheon.common"
+ ProjectGUID="{1D7176EE-63B6-48F2-AB83-FFAD2149C25E}"
+ RootNamespace="tacheon.common"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ EnableFunctionLevelLinking="TRUE"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLibrarianTool"
+ AdditionalOptions="/LTCG"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLibrarianTool"
+ AdditionalOptions="/LTCG"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="DD Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories="$(DXSDK_DIR)\include"
+ PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLibrarianTool"
+ AdditionalOptions="/LTCG"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine="..\..\..\common\gui\dxcheck.bat"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="DD Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="TRUE"
+ AdditionalIncludeDirectories="$(DXSDK_DIR)\include"
+ PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ EnableFunctionLevelLinking="TRUE"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLibrarianTool"
+ AdditionalOptions="/LTCG"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine="..\..\..\common\gui\dxcheck.bat"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+ <File
+ RelativePath="..\src\api.cpp">
+ </File>
+ <File
+ RelativePath="..\src\apigeom.cpp">
+ </File>
+ <File
+ RelativePath="..\src\apitrigeom.cpp">
+ </File>
+ <File
+ RelativePath="..\src\bndbox.cpp">
+ </File>
+ <File
+ RelativePath="..\src\box.cpp">
+ </File>
+ <File
+ RelativePath="..\src\camera.cpp">
+ </File>
+ <File
+ RelativePath="..\src\coordsys.cpp">
+ </File>
+ <File
+ RelativePath="..\src\cylinder.cpp">
+ </File>
+ <File
+ RelativePath="..\src\extvol.cpp">
+ </File>
+ <File
+ RelativePath="..\src\getargs.cpp">
+ </File>
+ <File
+ RelativePath="..\src\global.cpp">
+ </File>
+ <File
+ RelativePath="..\src\grid.cpp">
+ </File>
+ <File
+ RelativePath="..\src\imageio.cpp">
+ </File>
+ <File
+ RelativePath="..\src\imap.cpp">
+ </File>
+ <File
+ RelativePath="..\src\intersect.cpp">
+ </File>
+ <File
+ RelativePath="..\src\jpeg.cpp">
+ </File>
+ <File
+ RelativePath="..\src\light.cpp">
+ </File>
+ <File
+ RelativePath="..\src\objbound.cpp">
+ </File>
+ <File
+ RelativePath="..\src\parse.cpp">
+ </File>
+ <File
+ RelativePath="..\src\plane.cpp">
+ </File>
+ <File
+ RelativePath="..\src\ppm.cpp">
+ </File>
+ <File
+ RelativePath="..\src\pthread.cpp">
+ </File>
+ <File
+ RelativePath="..\src\quadric.cpp">
+ </File>
+ <File
+ RelativePath="..\src\render.cpp">
+ </File>
+ <File
+ RelativePath="..\src\ring.cpp">
+ </File>
+ <File
+ RelativePath="..\src\shade.cpp">
+ </File>
+ <File
+ RelativePath="..\src\sphere.cpp">
+ </File>
+ <File
+ RelativePath="..\src\texture.cpp">
+ </File>
+ <File
+ RelativePath="..\src\tgafile.cpp">
+ </File>
+ <File
+ RelativePath="..\src\trace_rest.cpp">
+ </File>
+ <File
+ RelativePath="..\src\triangle.cpp">
+ </File>
+ <File
+ RelativePath="..\src\ui.cpp">
+ </File>
+ <File
+ RelativePath="..\src\util.cpp">
+ </File>
+ <File
+ RelativePath="..\src\vector.cpp">
+ </File>
+ <File
+ RelativePath="..\src\video.cpp">
+ </File>
+ <File
+ RelativePath="..\src\vol.cpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+ <File
+ RelativePath="..\src\api.h">
+ </File>
+ <File
+ RelativePath="..\src\apitrigeom.h">
+ </File>
+ <File
+ RelativePath="..\src\bndbox.h">
+ </File>
+ <File
+ RelativePath="..\src\box.h">
+ </File>
+ <File
+ RelativePath="..\src\camera.h">
+ </File>
+ <File
+ RelativePath="..\src\coordsys.h">
+ </File>
+ <File
+ RelativePath="..\src\cylinder.h">
+ </File>
+ <File
+ RelativePath="..\src\extvol.h">
+ </File>
+ <File
+ RelativePath="..\src\getargs.h">
+ </File>
+ <File
+ RelativePath="..\src\global.h">
+ </File>
+ <File
+ RelativePath="..\src\grid.h">
+ </File>
+ <File
+ RelativePath="..\src\imageio.h">
+ </File>
+ <File
+ RelativePath="..\src\imap.h">
+ </File>
+ <File
+ RelativePath="..\src\intersect.h">
+ </File>
+ <File
+ RelativePath="..\src\jpeg.h">
+ </File>
+ <File
+ RelativePath="..\src\light.h">
+ </File>
+ <File
+ RelativePath="..\src\machine.h">
+ </File>
+ <File
+ RelativePath="..\src\macros.h">
+ </File>
+ <File
+ RelativePath="..\src\objbound.h">
+ </File>
+ <File
+ RelativePath="..\src\parse.h">
+ </File>
+ <File
+ RelativePath="..\src\plane.h">
+ </File>
+ <File
+ RelativePath="..\src\ppm.h">
+ </File>
+ <File
+ RelativePath="..\src\pthread.h">
+ </File>
+ <File
+ RelativePath="..\src\quadric.h">
+ </File>
+ <File
+ RelativePath="..\src\render.h">
+ </File>
+ <File
+ RelativePath=".\resource.h">
+ </File>
+ <File
+ RelativePath="..\src\ring.h">
+ </File>
+ <File
+ RelativePath="..\src\shade.h">
+ </File>
+ <File
+ RelativePath="..\src\sphere.h">
+ </File>
+ <File
+ RelativePath="..\src\texture.h">
+ </File>
+ <File
+ RelativePath="..\src\tgafile.h">
+ </File>
+ <File
+ RelativePath="..\src\trace.h">
+ </File>
+ <File
+ RelativePath="..\src\triangle.h">
+ </File>
+ <File
+ RelativePath="..\src\types.h">
+ </File>
+ <File
+ RelativePath="..\src\ui.h">
+ </File>
+ <File
+ RelativePath="..\src\util.h">
+ </File>
+ <File
+ RelativePath="..\src\vector.h">
+ </File>
+ <File
+ RelativePath="..\src\video.h">
+ </File>
+ <File
+ RelativePath="..\src\vol.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
+ <File
+ RelativePath=".\gui.ico">
+ </File>
+ <File
+ RelativePath=".\gui.rc">
+ </File>
+ <File
+ RelativePath=".\small.ico">
+ </File>
+ </Filter>
+ <Filter
+ Name="Video Layer"
+ Filter="">
+ <File
+ RelativePath="..\..\..\common\gui\ddvideo.cpp">
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\common\gui\gdivideo.cpp">
+ <FileConfiguration
+ Name="DD Release|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="DD Debug|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\common\gui\video.h">
+ </File>
+ <File
+ RelativePath="..\..\..\common\gui\winvideo.h">
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\index.html">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/parallel_for/tacheon/vc8/tacheon.serial.vcproj b/examples/parallel_for/tacheon/vc8/tacheon.serial.vcproj
new file mode 100644
index 0000000..7934c86
--- /dev/null
+++ b/examples/parallel_for/tacheon/vc8/tacheon.serial.vcproj
@@ -0,0 +1,691 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="tacheon.serial"
+ ProjectGUID="{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}"
+ RootNamespace="tacheon.serial"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ LinkTimeCodeGeneration="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ PreprocessorDefinitions="WIN64;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ LinkTimeCodeGeneration="1"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ PreprocessorDefinitions="WIN64;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="DD Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x86"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="DD Release|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ PreprocessorDefinitions="WIN64;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x64"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="DD Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x86"
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ LinkTimeCodeGeneration="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="DD Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ PreprocessorDefinitions="WIN64;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x64"
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ LinkTimeCodeGeneration="1"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ <ProjectReference
+ ReferencedProjectIdentifier="{924517DF-2B6A-47D5-8A11-CC247CC4D810}"
+ CopyLocal="false"
+ CopyLocalDependencies="false"
+ CopyLocalSatelliteAssemblies="false"
+ RelativePathToProject=".\tacheon.vcproj"
+ />
+ </References>
+ <Files>
+ <File
+ RelativePath="..\src\trace.serial.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/parallel_for/tacheon/vc8/tacheon.sln b/examples/parallel_for/tacheon/vc8/tacheon.sln
new file mode 100644
index 0000000..48ab98d
--- /dev/null
+++ b/examples/parallel_for/tacheon/vc8/tacheon.sln
@@ -0,0 +1,92 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tacheon.common", "tacheon.vcproj", "{924517DF-2B6A-47D5-8A11-CC247CC4D810}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tacheon.serial", "tacheon.serial.vcproj", "{924517DF-2B6A-47D5-8A11-CC047CC4D8E9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tacheon.tbb1d", "tacheon.tbb1d.vcproj", "{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tacheon.tbb", "tacheon.tbb.vcproj", "{6E9B1702-78E0-4D64-B771-8B274D963B58}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ DD Debug|Win32 = DD Debug|Win32
+ DD Debug|x64 = DD Debug|x64
+ DD Release|Win32 = DD Release|Win32
+ DD Release|x64 = DD Release|x64
+ GDI Debug|Win32 = GDI Debug|Win32
+ GDI Debug|x64 = GDI Debug|x64
+ GDI Release|Win32 = GDI Release|Win32
+ GDI Release|x64 = GDI Release|x64
+ Description = Tacheon ray-tracer example
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|Win32.ActiveCfg = DD Debug|Win32
+ {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|Win32.Build.0 = DD Debug|Win32
+ {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|x64.ActiveCfg = DD Debug|x64
+ {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Debug|x64.Build.0 = DD Debug|x64
+ {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|Win32.ActiveCfg = DD Release|Win32
+ {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|Win32.Build.0 = DD Release|Win32
+ {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|x64.ActiveCfg = DD Release|x64
+ {924517DF-2B6A-47D5-8A11-CC247CC4D810}.DD Release|x64.Build.0 = DD Release|x64
+ {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+ {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|Win32.Build.0 = Debug|Win32
+ {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|x64.ActiveCfg = Debug|x64
+ {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Debug|x64.Build.0 = Debug|x64
+ {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Release|Win32.ActiveCfg = Release|Win32
+ {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Release|Win32.Build.0 = Release|Win32
+ {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Release|x64.ActiveCfg = Release|x64
+ {924517DF-2B6A-47D5-8A11-CC247CC4D810}.GDI Release|x64.Build.0 = Release|x64
+ {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|Win32.ActiveCfg = DD Debug|Win32
+ {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|Win32.Build.0 = DD Debug|Win32
+ {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|x64.ActiveCfg = DD Debug|x64
+ {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Debug|x64.Build.0 = DD Debug|x64
+ {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|Win32.ActiveCfg = DD Release|Win32
+ {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|Win32.Build.0 = DD Release|Win32
+ {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|x64.ActiveCfg = DD Release|x64
+ {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.DD Release|x64.Build.0 = DD Release|x64
+ {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+ {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|Win32.Build.0 = Debug|Win32
+ {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|x64.ActiveCfg = Debug|x64
+ {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Debug|x64.Build.0 = Debug|x64
+ {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Release|Win32.ActiveCfg = Release|Win32
+ {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Release|Win32.Build.0 = Release|Win32
+ {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Release|x64.ActiveCfg = Release|x64
+ {924517DF-2B6A-47D5-8A11-CC047CC4D8E9}.GDI Release|x64.Build.0 = Release|x64
+ {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|Win32.ActiveCfg = DD Debug|Win32
+ {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|Win32.Build.0 = DD Debug|Win32
+ {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|x64.ActiveCfg = DD Debug|x64
+ {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Debug|x64.Build.0 = DD Debug|x64
+ {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|Win32.ActiveCfg = DD Release|Win32
+ {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|Win32.Build.0 = DD Release|Win32
+ {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|x64.ActiveCfg = DD Release|x64
+ {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.DD Release|x64.Build.0 = DD Release|x64
+ {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+ {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|Win32.Build.0 = Debug|Win32
+ {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|x64.ActiveCfg = Debug|x64
+ {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Debug|x64.Build.0 = Debug|x64
+ {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Release|Win32.ActiveCfg = Release|Win32
+ {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Release|Win32.Build.0 = Release|Win32
+ {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Release|x64.ActiveCfg = Release|x64
+ {924517DF-2B6A-47D5-8A11-CC347CC4D8E9}.GDI Release|x64.Build.0 = Release|x64
+ {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|Win32.ActiveCfg = DD Debug|Win32
+ {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|Win32.Build.0 = DD Debug|Win32
+ {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|x64.ActiveCfg = DD Debug|x64
+ {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Debug|x64.Build.0 = DD Debug|x64
+ {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|Win32.ActiveCfg = DD Release|Win32
+ {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|Win32.Build.0 = DD Release|Win32
+ {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|x64.ActiveCfg = DD Release|x64
+ {6E9B1702-78E0-4D64-B771-8B274D963B58}.DD Release|x64.Build.0 = DD Release|x64
+ {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|Win32.ActiveCfg = Debug|Win32
+ {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|Win32.Build.0 = Debug|Win32
+ {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|x64.ActiveCfg = Debug|x64
+ {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Debug|x64.Build.0 = Debug|x64
+ {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Release|Win32.ActiveCfg = Release|Win32
+ {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Release|Win32.Build.0 = Release|Win32
+ {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Release|x64.ActiveCfg = Release|x64
+ {6E9B1702-78E0-4D64-B771-8B274D963B58}.GDI Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/examples/parallel_for/tacheon/vc8/tacheon.suo b/examples/parallel_for/tacheon/vc8/tacheon.suo
new file mode 100644
index 0000000..2171ff9
Binary files /dev/null and b/examples/parallel_for/tacheon/vc8/tacheon.suo differ
diff --git a/examples/parallel_for/tacheon/vc8/tacheon.tbb.vcproj b/examples/parallel_for/tacheon/vc8/tacheon.tbb.vcproj
new file mode 100644
index 0000000..5d8c82a
--- /dev/null
+++ b/examples/parallel_for/tacheon/vc8/tacheon.tbb.vcproj
@@ -0,0 +1,727 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="tacheon.tbb"
+ ProjectGUID="{6E9B1702-78E0-4D64-B771-8B274D963B58}"
+ RootNamespace="tacheon.tbb"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ LinkTimeCodeGeneration="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ LinkTimeCodeGeneration="1"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="DD Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""$(TBB20_INSTALL_DIR)\ia32\vc8\lib";"$(DXSDK_DIR)\lib\x86""
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="DD Release|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""$(TBB20_INSTALL_DIR)\em64t\vc8\lib";"$(DXSDK_DIR)\lib\x64""
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="DD Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""$(TBB20_INSTALL_DIR)\ia32\vc8\lib";"$(DXSDK_DIR)\lib\x86""
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ LinkTimeCodeGeneration="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="DD Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""$(TBB20_INSTALL_DIR)\em64t\vc8\lib";"$(DXSDK_DIR)\lib\x64""
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ LinkTimeCodeGeneration="1"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ <ProjectReference
+ ReferencedProjectIdentifier="{924517DF-2B6A-47D5-8A11-CC247CC4D810}"
+ CopyLocal="false"
+ CopyLocalDependencies="false"
+ CopyLocalSatelliteAssemblies="false"
+ RelativePathToProject=".\tacheon.vcproj"
+ />
+ </References>
+ <Files>
+ <File
+ RelativePath="..\src\trace.tbb.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/parallel_for/tacheon/vc8/tacheon.tbb1d.vcproj b/examples/parallel_for/tacheon/vc8/tacheon.tbb1d.vcproj
new file mode 100644
index 0000000..6351f0b
--- /dev/null
+++ b/examples/parallel_for/tacheon/vc8/tacheon.tbb1d.vcproj
@@ -0,0 +1,727 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="tacheon.tbb1d"
+ ProjectGUID="{924517DF-2B6A-47D5-8A11-CC347CC4D8E9}"
+ RootNamespace="tacheon.tbb1d"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ LinkTimeCodeGeneration="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ LinkTimeCodeGeneration="1"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="DD Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""$(TBB20_INSTALL_DIR)\ia32\vc8\lib";"$(DXSDK_DIR)\lib\x86""
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="DD Release|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""$(TBB20_INSTALL_DIR)\em64t\vc8\lib";"$(DXSDK_DIR)\lib\x64""
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="DD Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""$(TBB20_INSTALL_DIR)\ia32\vc8\lib";"$(DXSDK_DIR)\lib\x86""
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ LinkTimeCodeGeneration="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="DD Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""$(TBB20_INSTALL_DIR)\em64t\vc8\lib";"$(DXSDK_DIR)\lib\x64""
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ LinkTimeCodeGeneration="1"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ <ProjectReference
+ ReferencedProjectIdentifier="{924517DF-2B6A-47D5-8A11-CC247CC4D810}"
+ CopyLocal="false"
+ CopyLocalDependencies="false"
+ CopyLocalSatelliteAssemblies="false"
+ RelativePathToProject=".\tacheon.vcproj"
+ />
+ </References>
+ <Files>
+ <File
+ RelativePath="..\src\trace.tbb1d.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/parallel_for/tacheon/vc8/tacheon.threads.vcproj b/examples/parallel_for/tacheon/vc8/tacheon.threads.vcproj
new file mode 100644
index 0000000..d92a06e
--- /dev/null
+++ b/examples/parallel_for/tacheon/vc8/tacheon.threads.vcproj
@@ -0,0 +1,691 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="tacheon.threads"
+ ProjectGUID="{924517DF-2B6A-47D5-8A11-CC247CC4D8E9}"
+ RootNamespace="tacheon.threads"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ PreprocessorDefinitions="EMULATE_PTHREADS;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ LinkTimeCodeGeneration="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ PreprocessorDefinitions="EMULATE_PTHREADS;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ LinkTimeCodeGeneration="1"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ PreprocessorDefinitions="EMULATE_PTHREADS;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ PreprocessorDefinitions="EMULATE_PTHREADS;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="DD Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ PreprocessorDefinitions="EMULATE_PTHREADS;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x86"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="DD Release|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ PreprocessorDefinitions="EMULATE_PTHREADS;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;NDEBUG"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x64"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="DD Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ PreprocessorDefinitions="EMULATE_PTHREADS;_CRT_SECURE_NO_DEPRECATE;WIN32;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x86"
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ LinkTimeCodeGeneration="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="DD Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ EnableIntrinsicFunctions="true"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ PreprocessorDefinitions="EMULATE_PTHREADS;_CRT_SECURE_NO_DEPRECATE;WIN64;_WINDOWS;_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(InputName).pdb"
+ WarningLevel="2"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(DXSDK_DIR)\lib\x64"
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ LinkTimeCodeGeneration="1"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ <ProjectReference
+ ReferencedProjectIdentifier="{924517DF-2B6A-47D5-8A11-CC247CC4D810}"
+ CopyLocal="false"
+ CopyLocalDependencies="false"
+ CopyLocalSatelliteAssemblies="false"
+ RelativePathToProject=".\tacheon.vcproj"
+ />
+ </References>
+ <Files>
+ <File
+ RelativePath="..\src\trace.threads.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/parallel_for/tacheon/vc8/tacheon.vcproj b/examples/parallel_for/tacheon/vc8/tacheon.vcproj
new file mode 100644
index 0000000..ee0d20e
--- /dev/null
+++ b/examples/parallel_for/tacheon/vc8/tacheon.vcproj
@@ -0,0 +1,1042 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="tacheon.common"
+ ProjectGUID="{924517DF-2B6A-47D5-8A11-CC247CC4D810}"
+ RootNamespace="tacheon.common"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ EnableFunctionLevelLinking="true"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="2"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="2"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="DD Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine="..\..\..\common\gui\dxcheck.bat"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="DD Release|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine="..\..\..\common\gui\dxcheck.bat"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="2"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="DD Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine="..\..\..\common\gui\dxcheck.bat"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ EnableFunctionLevelLinking="true"
+ EnableEnhancedInstructionSet="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="2"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="DD Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine="..\..\..\common\gui\dxcheck.bat"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ FavorSizeOrSpeed="1"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ PreprocessorDefinitions="DEFAULT_MODELFILE=balls.dat;EMULATE_PTHREADS;WIN64;_WINDOWS;_DEBUG;_CRT_SECURE_NO_DEPRECATE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="2"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\src\api.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\apigeom.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\apitrigeom.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\bndbox.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\box.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\camera.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\coordsys.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\cylinder.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\extvol.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\getargs.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\global.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\grid.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\imageio.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\imap.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\intersect.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\jpeg.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\light.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\objbound.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\parse.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\plane.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\ppm.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\pthread.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\quadric.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\render.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\ring.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\shade.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\sphere.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\texture.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\tgafile.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\trace_rest.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\triangle.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\ui.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\util.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\vector.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\video.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\vol.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath="..\src\api.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\apitrigeom.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\bndbox.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\box.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\camera.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\coordsys.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\cylinder.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\extvol.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\getargs.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\global.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\grid.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\imageio.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\imap.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\intersect.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\jpeg.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\light.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\machine.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\macros.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\objbound.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\parse.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\plane.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\ppm.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\pthread.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\quadric.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\render.h"
+ >
+ </File>
+ <File
+ RelativePath="..\vc7.1\resource.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\ring.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\shade.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\sphere.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\texture.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\tgafile.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\trace.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\triangle.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\types.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\ui.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\util.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\vector.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\video.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\vol.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ <File
+ RelativePath="..\vc7.1\gui.ico"
+ >
+ </File>
+ <File
+ RelativePath="..\vc7.1\gui.rc"
+ >
+ </File>
+ <File
+ RelativePath="..\vc7.1\small.ico"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Video Layer"
+ >
+ <File
+ RelativePath="..\..\..\common\gui\ddvideo.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="DD Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(DXSDK_DIR)\include"
+ PreprocessorDefinitions="_WINDOWS;NDEBUG;$(NOINHERIT)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="DD Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(DXSDK_DIR)\include"
+ PreprocessorDefinitions="_WINDOWS;NDEBUG;$(NOINHERIT)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="DD Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(DXSDK_DIR)\include"
+ PreprocessorDefinitions="_WINDOWS;_DEBUG;$(NOINHERIT)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="DD Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(DXSDK_DIR)\include"
+ PreprocessorDefinitions="_WINDOWS;_DEBUG;$(NOINHERIT)"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\common\gui\gdivideo.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="_WINDOWS;_DEBUG;$(NOINHERIT)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="_WINDOWS;_DEBUG;$(NOINHERIT)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="_WINDOWS;NDEBUG;$(NOINHERIT)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="_WINDOWS;NDEBUG;$(NOINHERIT)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="DD Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="DD Release|x64"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="DD Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="DD Debug|x64"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\common\gui\video.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\common\gui\winvideo.h"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\index.html"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/parallel_for/tacheon/xcode/English.lproj/InfoPlist.strings b/examples/parallel_for/tacheon/xcode/English.lproj/InfoPlist.strings
new file mode 100644
index 0000000..c0fdfdc
--- /dev/null
+++ b/examples/parallel_for/tacheon/xcode/English.lproj/InfoPlist.strings
@@ -0,0 +1,3 @@
+/* Localized versions of Info.plist keys */
+
+NSHumanReadableCopyright = "(C) Intel, 2007";
diff --git a/examples/parallel_for/tacheon/xcode/English.lproj/main.nib/classes.nib b/examples/parallel_for/tacheon/xcode/English.lproj/main.nib/classes.nib
new file mode 100644
index 0000000..ea58db1
--- /dev/null
+++ b/examples/parallel_for/tacheon/xcode/English.lproj/main.nib/classes.nib
@@ -0,0 +1,4 @@
+{
+IBClasses = ();
+IBVersion = 1;
+}
diff --git a/examples/parallel_for/tacheon/xcode/English.lproj/main.nib/info.nib b/examples/parallel_for/tacheon/xcode/English.lproj/main.nib/info.nib
new file mode 100644
index 0000000..97a70e1
--- /dev/null
+++ b/examples/parallel_for/tacheon/xcode/English.lproj/main.nib/info.nib
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>IBDocumentLocation</key>
+ <string>662 774 356 240 0 0 1680 1028 </string>
+ <key>IBEditorPositions</key>
+ <dict>
+ <key>29</key>
+ <string>863 618 271 44 0 0 1680 1028 </string>
+ </dict>
+ <key>IBFramework Version</key>
+ <string>446.1</string>
+ <key>IBOldestOS</key>
+ <integer>3</integer>
+ <key>IBOpenObjects</key>
+ <array>
+ <integer>29</integer>
+ <integer>166</integer>
+ </array>
+ <key>IBSystem Version</key>
+ <string>8J2135a</string>
+ <key>targetFramework</key>
+ <string>IBCarbonFramework</string>
+</dict>
+</plist>
diff --git a/examples/parallel_for/tacheon/xcode/English.lproj/main.nib/objects.xib b/examples/parallel_for/tacheon/xcode/English.lproj/main.nib/objects.xib
new file mode 100644
index 0000000..6cf03e0
--- /dev/null
+++ b/examples/parallel_for/tacheon/xcode/English.lproj/main.nib/objects.xib
@@ -0,0 +1,183 @@
+<?xml version="1.0" standalone="yes"?>
+<object class="NSIBObjectData">
+ <string name="targetFramework">IBCarbonFramework</string>
+ <object name="rootObject" class="NSCustomObject" id="1">
+ <string name="customClass">NSApplication</string>
+ </object>
+ <array count="22" name="allObjects">
+ <object class="IBCarbonMenu" id="29">
+ <string name="title">main</string>
+ <array count="3" name="items">
+ <object class="IBCarbonMenuItem" id="210">
+ <boolean name="updateSingleItem">TRUE</boolean>
+ <string name="title">Tacheon</string>
+ <object name="submenu" class="IBCarbonMenu" id="211">
+ <string name="title">Seismic Simulation</string>
+ <array count="7" name="items">
+ <object class="IBCarbonMenuItem" id="215">
+ <boolean name="checked">TRUE</boolean>
+ <boolean name="dynamic">TRUE</boolean>
+ <boolean name="autoDisable">TRUE</boolean>
+ <boolean name="updateSingleItem">TRUE</boolean>
+ <string name="title">Parallel</string>
+ <ostype name="command">para</ostype>
+ </object>
+ <object class="IBCarbonMenuItem" id="214">
+ <boolean name="dynamic">TRUE</boolean>
+ <boolean name="autoDisable">TRUE</boolean>
+ <boolean name="updateSingleItem">TRUE</boolean>
+ <string name="title">Serial</string>
+ <ostype name="command">seri</ostype>
+ </object>
+ <object class="IBCarbonMenuItem" id="216">
+ <boolean name="separator">TRUE</boolean>
+ <boolean name="updateSingleItem">TRUE</boolean>
+ </object>
+ <object class="IBCarbonMenuItem" id="217">
+ <boolean name="checked">TRUE</boolean>
+ <boolean name="dynamic">TRUE</boolean>
+ <boolean name="autoDisable">TRUE</boolean>
+ <boolean name="updateSingleItem">TRUE</boolean>
+ <string name="title">Enable GUI</string>
+ <ostype name="command">egui</ostype>
+ </object>
+ <object class="IBCarbonMenuItem" id="218">
+ <boolean name="dynamic">TRUE</boolean>
+ <boolean name="autoDisable">TRUE</boolean>
+ <boolean name="updateSingleItem">TRUE</boolean>
+ <string name="title">Disable GUI</string>
+ <ostype name="command">dgui</ostype>
+ </object>
+ <object class="IBCarbonMenuItem" id="213">
+ <boolean name="separator">TRUE</boolean>
+ <boolean name="updateSingleItem">TRUE</boolean>
+ </object>
+ <object class="IBCarbonMenuItem" id="212">
+ <boolean name="updateSingleItem">TRUE</boolean>
+ <string name="title">About Tacheon</string>
+ <int name="keyEquivalentModifier">0</int>
+ <ostype name="command">abou</ostype>
+ </object>
+ </array>
+ <string name="name">_NSAppleMenu</string>
+ </object>
+ </object>
+ <object class="IBCarbonMenuItem" id="127">
+ <string name="title">File</string>
+ <object name="submenu" class="IBCarbonMenu" id="131">
+ <string name="title">File</string>
+ <array count="1" name="items">
+ <object class="IBCarbonMenuItem" id="200">
+ <string name="title">Close</string>
+ <string name="keyEquivalent">w</string>
+ <ostype name="command">clos</ostype>
+ </object>
+ </array>
+ </object>
+ </object>
+ <object class="IBCarbonMenuItem" id="192">
+ <string name="title">Window</string>
+ <object name="submenu" class="IBCarbonMenu" id="195">
+ <string name="title">Window</string>
+ <array count="5" name="items">
+ <object class="IBCarbonMenuItem" id="190">
+ <boolean name="dynamic">TRUE</boolean>
+ <string name="title">Minimize</string>
+ <string name="keyEquivalent">m</string>
+ <ostype name="command">mini</ostype>
+ </object>
+ <object class="IBCarbonMenuItem" id="197">
+ <string name="title">Zoom</string>
+ <ostype name="command">zoom</ostype>
+ </object>
+ <object class="IBCarbonMenuItem" id="194">
+ <boolean name="separator">TRUE</boolean>
+ </object>
+ <object class="IBCarbonMenuItem" id="196">
+ <boolean name="dynamic">TRUE</boolean>
+ <string name="title">Bring All to Front</string>
+ <ostype name="command">bfrt</ostype>
+ </object>
+ <object class="IBCarbonMenuItem" id="193">
+ <boolean name="dynamic">TRUE</boolean>
+ <string name="title">Arrange in Front</string>
+ <int name="keyEquivalentModifier">1572864</int>
+ <ostype name="command">frnt</ostype>
+ </object>
+ </array>
+ <string name="name">_NSWindowsMenu</string>
+ </object>
+ </object>
+ </array>
+ <string name="name">_NSMainMenu</string>
+ </object>
+ <reference idRef="127"/>
+ <reference idRef="131"/>
+ <object class="IBCarbonWindow" id="166">
+ <string name="windowRect">338 353 698 833 </string>
+ <string name="title">Tacheon</string>
+ <object name="rootControl" class="IBCarbonRootControl" id="167">
+ <string name="bounds">0 0 360 480 </string>
+ <string name="viewFrame">0 0 480 360 </string>
+ </object>
+ <boolean name="receiveUpdates">FALSE</boolean>
+ <boolean name="compositing">TRUE</boolean>
+ <int name="themeBrush">-1</int>
+ <boolean name="asyncDrag">TRUE</boolean>
+ <boolean name="doesNotCycle">TRUE</boolean>
+ <int name="WindowMinWidth">320</int>
+ <int name="WindowMinHeight">200</int>
+ </object>
+ <reference idRef="167"/>
+ <reference idRef="190"/>
+ <reference idRef="192"/>
+ <reference idRef="193"/>
+ <reference idRef="194"/>
+ <reference idRef="195"/>
+ <reference idRef="196"/>
+ <reference idRef="197"/>
+ <reference idRef="200"/>
+ <reference idRef="210"/>
+ <reference idRef="211"/>
+ <reference idRef="212"/>
+ <reference idRef="213"/>
+ <reference idRef="214"/>
+ <reference idRef="215"/>
+ <reference idRef="216"/>
+ <reference idRef="217"/>
+ <reference idRef="218"/>
+ </array>
+ <array count="22" name="allParents">
+ <reference idRef="1"/>
+ <reference idRef="29"/>
+ <reference idRef="127"/>
+ <reference idRef="1"/>
+ <reference idRef="166"/>
+ <reference idRef="195"/>
+ <reference idRef="29"/>
+ <reference idRef="195"/>
+ <reference idRef="195"/>
+ <reference idRef="192"/>
+ <reference idRef="195"/>
+ <reference idRef="195"/>
+ <reference idRef="131"/>
+ <reference idRef="29"/>
+ <reference idRef="210"/>
+ <reference idRef="211"/>
+ <reference idRef="211"/>
+ <reference idRef="211"/>
+ <reference idRef="211"/>
+ <reference idRef="211"/>
+ <reference idRef="211"/>
+ <reference idRef="211"/>
+ </array>
+ <dictionary count="3" name="nameTable">
+ <string>Files Owner</string>
+ <reference idRef="1"/>
+ <string>MainWindow</string>
+ <reference idRef="166"/>
+ <string>MenuBar</string>
+ <reference idRef="29"/>
+ </dictionary>
+ <unsigned_int name="nextObjectID">219</unsigned_int>
+</object>
diff --git a/examples/parallel_for/tacheon/xcode/Info.plist b/examples/parallel_for/tacheon/xcode/Info.plist
new file mode 100644
index 0000000..147266c
--- /dev/null
+++ b/examples/parallel_for/tacheon/xcode/Info.plist
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIconFile</key>
+ <string></string>
+ <key>CFBundleIdentifier</key>
+ <string>com.intel.tbb.tacheon</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1.0</string>
+ <key>CSResourcesFileMapped</key>
+ <true/>
+</dict>
+</plist>
diff --git a/examples/parallel_for/tacheon/xcode/tacheon.pch b/examples/parallel_for/tacheon/xcode/tacheon.pch
new file mode 100644
index 0000000..a620cdb
--- /dev/null
+++ b/examples/parallel_for/tacheon/xcode/tacheon.pch
@@ -0,0 +1,5 @@
+//
+// Prefix header for all source files of the 'tacheon' target in the 'tacheon' project.
+//
+
+#include <Carbon/Carbon.h>
diff --git a/examples/parallel_for/tacheon/xcode/tacheon.xcodeproj/project.pbxproj b/examples/parallel_for/tacheon/xcode/tacheon.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..fcb1c39
--- /dev/null
+++ b/examples/parallel_for/tacheon/xcode/tacheon.xcodeproj/project.pbxproj
@@ -0,0 +1,930 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 42;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 8D0C4E8D0486CD37000505A6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */; };
+ 8D0C4E8E0486CD37000505A6 /* main.nib in Resources */ = {isa = PBXBuildFile; fileRef = 02345980000FD03B11CA0E72 /* main.nib */; };
+ 8D0C4E920486CD37000505A6 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20286C33FDCF999611CA2CEA /* Carbon.framework */; };
+ A117DC7B0B8DC08100F62CED /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC7A0B8DC08100F62CED /* AGL.framework */; };
+ A117DC800B8DC09300F62CED /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC7F0B8DC09300F62CED /* OpenGL.framework */; };
+ A117DC850B8DC0EA00F62CED /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC830B8DC0DE00F62CED /* libtbb.dylib */; };
+ A117DC950B8DC5FB00F62CED /* libtbb.dylib in Copy TBB lib */ = {isa = PBXBuildFile; fileRef = A117DC830B8DC0DE00F62CED /* libtbb.dylib */; };
+ A1F58DCD0B8DF19700073279 /* main.nib in Resources */ = {isa = PBXBuildFile; fileRef = 02345980000FD03B11CA0E72 /* main.nib */; };
+ A1F58DCE0B8DF19800073279 /* main.nib in Resources */ = {isa = PBXBuildFile; fileRef = 02345980000FD03B11CA0E72 /* main.nib */; };
+ A1F58E8C0B8DF25800073279 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC7F0B8DC09300F62CED /* OpenGL.framework */; };
+ A1F58E8D0B8DF25900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC830B8DC0DE00F62CED /* libtbb.dylib */; };
+ A1F58E8E0B8DF25A00073279 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20286C33FDCF999611CA2CEA /* Carbon.framework */; };
+ A1F58E8F0B8DF25A00073279 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC7A0B8DC08100F62CED /* AGL.framework */; };
+ A1F58E900B8DF25F00073279 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC7A0B8DC08100F62CED /* AGL.framework */; };
+ A1F58E910B8DF26000073279 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20286C33FDCF999611CA2CEA /* Carbon.framework */; };
+ A1F58E920B8DF26100073279 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A117DC7F0B8DC09300F62CED /* OpenGL.framework */; };
+ A1F58EA30B8DF32900073279 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D0C4E960486CD37000505A6 /* Info.plist */; };
+ A1F58EA40B8DF32A00073279 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D0C4E960486CD37000505A6 /* Info.plist */; };
+ A1F58EA60B8DF32B00073279 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8D0C4E960486CD37000505A6 /* Info.plist */; };
+ A1F58EA80B8DF33100073279 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */; };
+ A1F58EAA0B8DF33200073279 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */; };
+ A1F58EE80B8DF4F900073279 /* libtbb.dylib in Copy TBB lib */ = {isa = PBXBuildFile; fileRef = A117DC830B8DC0DE00F62CED /* libtbb.dylib */; };
+ A1F58F960B8DF63C00073279 /* trace.tbb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1A8FB5D0B8CBB8D001C55B1 /* trace.tbb.cpp */; };
+ A1F5902C0B8DF6A700073279 /* trace.tbb1d.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F58D8B0B8DEFD900073279 /* trace.tbb1d.cpp */; };
+ A1F590300B8DF74600073279 /* trace.serial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F58D8C0B8DEFE900073279 /* trace.serial.cpp */; };
+ A1F590C30B8DF81800073279 /* api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5909E0B8DF81800073279 /* api.cpp */; };
+ A1F590C40B8DF81800073279 /* apigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5909F0B8DF81800073279 /* apigeom.cpp */; };
+ A1F590C50B8DF81800073279 /* apitrigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A00B8DF81800073279 /* apitrigeom.cpp */; };
+ A1F590C60B8DF81800073279 /* bndbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A10B8DF81800073279 /* bndbox.cpp */; };
+ A1F590C70B8DF81800073279 /* box.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A20B8DF81800073279 /* box.cpp */; };
+ A1F590C80B8DF81800073279 /* camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A30B8DF81800073279 /* camera.cpp */; };
+ A1F590C90B8DF81800073279 /* coordsys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A40B8DF81800073279 /* coordsys.cpp */; };
+ A1F590CA0B8DF81800073279 /* cylinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A50B8DF81800073279 /* cylinder.cpp */; };
+ A1F590CB0B8DF81800073279 /* extvol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A60B8DF81800073279 /* extvol.cpp */; };
+ A1F590CC0B8DF81800073279 /* getargs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A70B8DF81800073279 /* getargs.cpp */; };
+ A1F590CD0B8DF81800073279 /* global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A80B8DF81800073279 /* global.cpp */; };
+ A1F590CE0B8DF81800073279 /* grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A90B8DF81800073279 /* grid.cpp */; };
+ A1F590CF0B8DF81800073279 /* imageio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AA0B8DF81800073279 /* imageio.cpp */; };
+ A1F590D00B8DF81800073279 /* imap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AB0B8DF81800073279 /* imap.cpp */; };
+ A1F590D10B8DF81800073279 /* intersect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AC0B8DF81800073279 /* intersect.cpp */; };
+ A1F590D20B8DF81800073279 /* jpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AD0B8DF81800073279 /* jpeg.cpp */; };
+ A1F590D30B8DF81800073279 /* light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AE0B8DF81800073279 /* light.cpp */; };
+ A1F590D40B8DF81800073279 /* objbound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AF0B8DF81800073279 /* objbound.cpp */; };
+ A1F590D50B8DF81800073279 /* parse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B00B8DF81800073279 /* parse.cpp */; };
+ A1F590D60B8DF81800073279 /* plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B10B8DF81800073279 /* plane.cpp */; };
+ A1F590D70B8DF81800073279 /* ppm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B20B8DF81800073279 /* ppm.cpp */; };
+ A1F590D80B8DF81800073279 /* quadric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B30B8DF81800073279 /* quadric.cpp */; };
+ A1F590D90B8DF81800073279 /* render.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B40B8DF81800073279 /* render.cpp */; };
+ A1F590DA0B8DF81800073279 /* ring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B50B8DF81800073279 /* ring.cpp */; };
+ A1F590DB0B8DF81800073279 /* shade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B60B8DF81800073279 /* shade.cpp */; };
+ A1F590DC0B8DF81800073279 /* sphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B70B8DF81800073279 /* sphere.cpp */; };
+ A1F590DD0B8DF81800073279 /* texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B80B8DF81800073279 /* texture.cpp */; };
+ A1F590DE0B8DF81800073279 /* tgafile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B90B8DF81800073279 /* tgafile.cpp */; };
+ A1F590DF0B8DF81800073279 /* trace_rest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BA0B8DF81800073279 /* trace_rest.cpp */; };
+ A1F590E20B8DF81800073279 /* triangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BD0B8DF81800073279 /* triangle.cpp */; };
+ A1F590E30B8DF81800073279 /* ui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BE0B8DF81800073279 /* ui.cpp */; };
+ A1F590E40B8DF81800073279 /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BF0B8DF81800073279 /* util.cpp */; };
+ A1F590E50B8DF81800073279 /* vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C00B8DF81800073279 /* vector.cpp */; };
+ A1F590E60B8DF81800073279 /* video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C10B8DF81800073279 /* video.cpp */; };
+ A1F590E70B8DF81800073279 /* vol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C20B8DF81800073279 /* vol.cpp */; };
+ A1F5910D0B8DF81800073279 /* api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5909E0B8DF81800073279 /* api.cpp */; };
+ A1F5910E0B8DF81800073279 /* apigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5909F0B8DF81800073279 /* apigeom.cpp */; };
+ A1F5910F0B8DF81800073279 /* apitrigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A00B8DF81800073279 /* apitrigeom.cpp */; };
+ A1F591100B8DF81800073279 /* bndbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A10B8DF81800073279 /* bndbox.cpp */; };
+ A1F591110B8DF81800073279 /* box.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A20B8DF81800073279 /* box.cpp */; };
+ A1F591120B8DF81800073279 /* camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A30B8DF81800073279 /* camera.cpp */; };
+ A1F591130B8DF81800073279 /* coordsys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A40B8DF81800073279 /* coordsys.cpp */; };
+ A1F591140B8DF81800073279 /* cylinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A50B8DF81800073279 /* cylinder.cpp */; };
+ A1F591150B8DF81800073279 /* extvol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A60B8DF81800073279 /* extvol.cpp */; };
+ A1F591160B8DF81800073279 /* getargs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A70B8DF81800073279 /* getargs.cpp */; };
+ A1F591170B8DF81800073279 /* global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A80B8DF81800073279 /* global.cpp */; };
+ A1F591180B8DF81800073279 /* grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A90B8DF81800073279 /* grid.cpp */; };
+ A1F591190B8DF81800073279 /* imageio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AA0B8DF81800073279 /* imageio.cpp */; };
+ A1F5911A0B8DF81800073279 /* imap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AB0B8DF81800073279 /* imap.cpp */; };
+ A1F5911B0B8DF81800073279 /* intersect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AC0B8DF81800073279 /* intersect.cpp */; };
+ A1F5911C0B8DF81800073279 /* jpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AD0B8DF81800073279 /* jpeg.cpp */; };
+ A1F5911D0B8DF81800073279 /* light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AE0B8DF81800073279 /* light.cpp */; };
+ A1F5911E0B8DF81800073279 /* objbound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AF0B8DF81800073279 /* objbound.cpp */; };
+ A1F5911F0B8DF81800073279 /* parse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B00B8DF81800073279 /* parse.cpp */; };
+ A1F591200B8DF81800073279 /* plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B10B8DF81800073279 /* plane.cpp */; };
+ A1F591210B8DF81800073279 /* ppm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B20B8DF81800073279 /* ppm.cpp */; };
+ A1F591220B8DF81800073279 /* quadric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B30B8DF81800073279 /* quadric.cpp */; };
+ A1F591230B8DF81800073279 /* render.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B40B8DF81800073279 /* render.cpp */; };
+ A1F591240B8DF81800073279 /* ring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B50B8DF81800073279 /* ring.cpp */; };
+ A1F591250B8DF81800073279 /* shade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B60B8DF81800073279 /* shade.cpp */; };
+ A1F591260B8DF81800073279 /* sphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B70B8DF81800073279 /* sphere.cpp */; };
+ A1F591270B8DF81800073279 /* texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B80B8DF81800073279 /* texture.cpp */; };
+ A1F591280B8DF81800073279 /* tgafile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B90B8DF81800073279 /* tgafile.cpp */; };
+ A1F591290B8DF81800073279 /* trace_rest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BA0B8DF81800073279 /* trace_rest.cpp */; };
+ A1F5912C0B8DF81800073279 /* triangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BD0B8DF81800073279 /* triangle.cpp */; };
+ A1F5912D0B8DF81800073279 /* ui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BE0B8DF81800073279 /* ui.cpp */; };
+ A1F5912E0B8DF81800073279 /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BF0B8DF81800073279 /* util.cpp */; };
+ A1F5912F0B8DF81800073279 /* vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C00B8DF81800073279 /* vector.cpp */; };
+ A1F591300B8DF81800073279 /* video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C10B8DF81800073279 /* video.cpp */; };
+ A1F591310B8DF81800073279 /* vol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C20B8DF81800073279 /* vol.cpp */; };
+ A1F591320B8DF81800073279 /* api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5909E0B8DF81800073279 /* api.cpp */; };
+ A1F591330B8DF81800073279 /* apigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5909F0B8DF81800073279 /* apigeom.cpp */; };
+ A1F591340B8DF81800073279 /* apitrigeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A00B8DF81800073279 /* apitrigeom.cpp */; };
+ A1F591350B8DF81800073279 /* bndbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A10B8DF81800073279 /* bndbox.cpp */; };
+ A1F591360B8DF81800073279 /* box.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A20B8DF81800073279 /* box.cpp */; };
+ A1F591370B8DF81800073279 /* camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A30B8DF81800073279 /* camera.cpp */; };
+ A1F591380B8DF81800073279 /* coordsys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A40B8DF81800073279 /* coordsys.cpp */; };
+ A1F591390B8DF81800073279 /* cylinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A50B8DF81800073279 /* cylinder.cpp */; };
+ A1F5913A0B8DF81800073279 /* extvol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A60B8DF81800073279 /* extvol.cpp */; };
+ A1F5913B0B8DF81800073279 /* getargs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A70B8DF81800073279 /* getargs.cpp */; };
+ A1F5913C0B8DF81800073279 /* global.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A80B8DF81800073279 /* global.cpp */; };
+ A1F5913D0B8DF81800073279 /* grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590A90B8DF81800073279 /* grid.cpp */; };
+ A1F5913E0B8DF81800073279 /* imageio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AA0B8DF81800073279 /* imageio.cpp */; };
+ A1F5913F0B8DF81800073279 /* imap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AB0B8DF81800073279 /* imap.cpp */; };
+ A1F591400B8DF81800073279 /* intersect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AC0B8DF81800073279 /* intersect.cpp */; };
+ A1F591410B8DF81800073279 /* jpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AD0B8DF81800073279 /* jpeg.cpp */; };
+ A1F591420B8DF81800073279 /* light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AE0B8DF81800073279 /* light.cpp */; };
+ A1F591430B8DF81800073279 /* objbound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590AF0B8DF81800073279 /* objbound.cpp */; };
+ A1F591440B8DF81800073279 /* parse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B00B8DF81800073279 /* parse.cpp */; };
+ A1F591450B8DF81800073279 /* plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B10B8DF81800073279 /* plane.cpp */; };
+ A1F591460B8DF81800073279 /* ppm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B20B8DF81800073279 /* ppm.cpp */; };
+ A1F591470B8DF81800073279 /* quadric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B30B8DF81800073279 /* quadric.cpp */; };
+ A1F591480B8DF81800073279 /* render.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B40B8DF81800073279 /* render.cpp */; };
+ A1F591490B8DF81800073279 /* ring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B50B8DF81800073279 /* ring.cpp */; };
+ A1F5914A0B8DF81800073279 /* shade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B60B8DF81800073279 /* shade.cpp */; };
+ A1F5914B0B8DF81800073279 /* sphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B70B8DF81800073279 /* sphere.cpp */; };
+ A1F5914C0B8DF81800073279 /* texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B80B8DF81800073279 /* texture.cpp */; };
+ A1F5914D0B8DF81800073279 /* tgafile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590B90B8DF81800073279 /* tgafile.cpp */; };
+ A1F5914E0B8DF81800073279 /* trace_rest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BA0B8DF81800073279 /* trace_rest.cpp */; };
+ A1F591510B8DF81800073279 /* triangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BD0B8DF81800073279 /* triangle.cpp */; };
+ A1F591520B8DF81800073279 /* ui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BE0B8DF81800073279 /* ui.cpp */; };
+ A1F591530B8DF81800073279 /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590BF0B8DF81800073279 /* util.cpp */; };
+ A1F591540B8DF81800073279 /* vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C00B8DF81800073279 /* vector.cpp */; };
+ A1F591550B8DF81800073279 /* video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C10B8DF81800073279 /* video.cpp */; };
+ A1F591560B8DF81800073279 /* vol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F590C20B8DF81800073279 /* vol.cpp */; };
+ A1F5915D0B8DF94400073279 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5915C0B8DF94400073279 /* macvideo.cpp */; };
+ A1F5915E0B8DF94400073279 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5915C0B8DF94400073279 /* macvideo.cpp */; };
+ A1F591600B8DF94400073279 /* macvideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F5915C0B8DF94400073279 /* macvideo.cpp */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ A117DC910B8DC59A00F62CED /* Copy TBB lib */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 16;
+ files = (
+ A117DC950B8DC5FB00F62CED /* libtbb.dylib in Copy TBB lib */,
+ );
+ name = "Copy TBB lib";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A1F58EE60B8DF4E100073279 /* Copy TBB lib */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 16;
+ files = (
+ A1F58EE80B8DF4F900073279 /* libtbb.dylib in Copy TBB lib */,
+ );
+ name = "Copy TBB lib";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 0867D6ABFE840B52C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+ 1870340FFE93FCAF11CA0CD7 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/main.nib; sourceTree = "<group>"; };
+ 20286C33FDCF999611CA2CEA /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
+ 32DBCF6D0370B57F00C91783 /* tacheon.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tacheon.pch; sourceTree = "<group>"; };
+ 8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
+ A117DC7A0B8DC08100F62CED /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; };
+ A117DC7F0B8DC09300F62CED /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
+ A117DC830B8DC0DE00F62CED /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+ A1A8FB5D0B8CBB8D001C55B1 /* trace.tbb.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = trace.tbb.cpp; path = ../src/trace.tbb.cpp; sourceTree = SOURCE_ROOT; };
+ A1F58CD90B8DE90E00073279 /* tacheon-tbb.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "tacheon-tbb.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ A1F58D3D0B8DEB8E00073279 /* trace.threads.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = trace.threads.cpp; path = ../src/trace.threads.cpp; sourceTree = SOURCE_ROOT; };
+ A1F58D8B0B8DEFD900073279 /* trace.tbb1d.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = trace.tbb1d.cpp; path = ../src/trace.tbb1d.cpp; sourceTree = SOURCE_ROOT; };
+ A1F58D8C0B8DEFE900073279 /* trace.serial.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = trace.serial.cpp; path = ../src/trace.serial.cpp; sourceTree = SOURCE_ROOT; };
+ A1F58D920B8DF03600073279 /* tacheon-tbb1d.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "tacheon-tbb1d.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ A1F58D9C0B8DF06700073279 /* tacheon-serial.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "tacheon-serial.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ A1F590320B8DF7D100073279 /* api.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = api.h; path = ../src/api.h; sourceTree = SOURCE_ROOT; };
+ A1F590330B8DF7D100073279 /* apitrigeom.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = apitrigeom.h; path = ../src/apitrigeom.h; sourceTree = SOURCE_ROOT; };
+ A1F590340B8DF7D100073279 /* bndbox.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = bndbox.h; path = ../src/bndbox.h; sourceTree = SOURCE_ROOT; };
+ A1F590350B8DF7D100073279 /* box.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = box.h; path = ../src/box.h; sourceTree = SOURCE_ROOT; };
+ A1F590360B8DF7D100073279 /* camera.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = camera.h; path = ../src/camera.h; sourceTree = SOURCE_ROOT; };
+ A1F590370B8DF7D100073279 /* coordsys.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = coordsys.h; path = ../src/coordsys.h; sourceTree = SOURCE_ROOT; };
+ A1F590380B8DF7D100073279 /* cylinder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = cylinder.h; path = ../src/cylinder.h; sourceTree = SOURCE_ROOT; };
+ A1F590390B8DF7D100073279 /* extvol.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = extvol.h; path = ../src/extvol.h; sourceTree = SOURCE_ROOT; };
+ A1F5903A0B8DF7D100073279 /* getargs.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = getargs.h; path = ../src/getargs.h; sourceTree = SOURCE_ROOT; };
+ A1F5903B0B8DF7D100073279 /* global.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = global.h; path = ../src/global.h; sourceTree = SOURCE_ROOT; };
+ A1F5903C0B8DF7D100073279 /* grid.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = grid.h; path = ../src/grid.h; sourceTree = SOURCE_ROOT; };
+ A1F5903D0B8DF7D100073279 /* imageio.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = imageio.h; path = ../src/imageio.h; sourceTree = SOURCE_ROOT; };
+ A1F5903E0B8DF7D100073279 /* imap.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = imap.h; path = ../src/imap.h; sourceTree = SOURCE_ROOT; };
+ A1F5903F0B8DF7D100073279 /* intersect.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = intersect.h; path = ../src/intersect.h; sourceTree = SOURCE_ROOT; };
+ A1F590400B8DF7D100073279 /* jpeg.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = jpeg.h; path = ../src/jpeg.h; sourceTree = SOURCE_ROOT; };
+ A1F590410B8DF7D100073279 /* light.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = light.h; path = ../src/light.h; sourceTree = SOURCE_ROOT; };
+ A1F590420B8DF7D100073279 /* machine.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = machine.h; path = ../src/machine.h; sourceTree = SOURCE_ROOT; };
+ A1F590430B8DF7D100073279 /* macros.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = macros.h; path = ../src/macros.h; sourceTree = SOURCE_ROOT; };
+ A1F590440B8DF7D100073279 /* objbound.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = objbound.h; path = ../src/objbound.h; sourceTree = SOURCE_ROOT; };
+ A1F590450B8DF7D100073279 /* parse.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = parse.h; path = ../src/parse.h; sourceTree = SOURCE_ROOT; };
+ A1F590460B8DF7D100073279 /* plane.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = plane.h; path = ../src/plane.h; sourceTree = SOURCE_ROOT; };
+ A1F590470B8DF7D100073279 /* ppm.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ppm.h; path = ../src/ppm.h; sourceTree = SOURCE_ROOT; };
+ A1F590480B8DF7D100073279 /* quadric.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = quadric.h; path = ../src/quadric.h; sourceTree = SOURCE_ROOT; };
+ A1F590490B8DF7D100073279 /* render.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = render.h; path = ../src/render.h; sourceTree = SOURCE_ROOT; };
+ A1F5904A0B8DF7D100073279 /* ring.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ring.h; path = ../src/ring.h; sourceTree = SOURCE_ROOT; };
+ A1F5904B0B8DF7D100073279 /* shade.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = shade.h; path = ../src/shade.h; sourceTree = SOURCE_ROOT; };
+ A1F5904C0B8DF7D100073279 /* sphere.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = sphere.h; path = ../src/sphere.h; sourceTree = SOURCE_ROOT; };
+ A1F5904D0B8DF7D100073279 /* texture.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = texture.h; path = ../src/texture.h; sourceTree = SOURCE_ROOT; };
+ A1F5904E0B8DF7D100073279 /* tgafile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = tgafile.h; path = ../src/tgafile.h; sourceTree = SOURCE_ROOT; };
+ A1F5904F0B8DF7D100073279 /* trace.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = trace.h; path = ../src/trace.h; sourceTree = SOURCE_ROOT; };
+ A1F590500B8DF7D100073279 /* types.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = types.h; path = ../src/types.h; sourceTree = SOURCE_ROOT; };
+ A1F590510B8DF7D100073279 /* ui.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ui.h; path = ../src/ui.h; sourceTree = SOURCE_ROOT; };
+ A1F590520B8DF7D100073279 /* util.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = util.h; path = ../src/util.h; sourceTree = SOURCE_ROOT; };
+ A1F590530B8DF7D100073279 /* vector.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = vector.h; path = ../src/vector.h; sourceTree = SOURCE_ROOT; };
+ A1F590540B8DF7D100073279 /* video.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = video.h; path = ../src/video.h; sourceTree = SOURCE_ROOT; };
+ A1F590550B8DF7D100073279 /* vol.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = vol.h; path = ../src/vol.h; sourceTree = SOURCE_ROOT; };
+ A1F5909E0B8DF81800073279 /* api.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = api.cpp; path = ../src/api.cpp; sourceTree = SOURCE_ROOT; };
+ A1F5909F0B8DF81800073279 /* apigeom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = apigeom.cpp; path = ../src/apigeom.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590A00B8DF81800073279 /* apitrigeom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = apitrigeom.cpp; path = ../src/apitrigeom.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590A10B8DF81800073279 /* bndbox.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = bndbox.cpp; path = ../src/bndbox.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590A20B8DF81800073279 /* box.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = box.cpp; path = ../src/box.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590A30B8DF81800073279 /* camera.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = camera.cpp; path = ../src/camera.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590A40B8DF81800073279 /* coordsys.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = coordsys.cpp; path = ../src/coordsys.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590A50B8DF81800073279 /* cylinder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = cylinder.cpp; path = ../src/cylinder.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590A60B8DF81800073279 /* extvol.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = extvol.cpp; path = ../src/extvol.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590A70B8DF81800073279 /* getargs.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = getargs.cpp; path = ../src/getargs.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590A80B8DF81800073279 /* global.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = global.cpp; path = ../src/global.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590A90B8DF81800073279 /* grid.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = grid.cpp; path = ../src/grid.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590AA0B8DF81800073279 /* imageio.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = imageio.cpp; path = ../src/imageio.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590AB0B8DF81800073279 /* imap.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = imap.cpp; path = ../src/imap.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590AC0B8DF81800073279 /* intersect.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = intersect.cpp; path = ../src/intersect.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590AD0B8DF81800073279 /* jpeg.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = jpeg.cpp; path = ../src/jpeg.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590AE0B8DF81800073279 /* light.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = light.cpp; path = ../src/light.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590AF0B8DF81800073279 /* objbound.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = objbound.cpp; path = ../src/objbound.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590B00B8DF81800073279 /* parse.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = parse.cpp; path = ../src/parse.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590B10B8DF81800073279 /* plane.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = plane.cpp; path = ../src/plane.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590B20B8DF81800073279 /* ppm.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ppm.cpp; path = ../src/ppm.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590B30B8DF81800073279 /* quadric.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = quadric.cpp; path = ../src/quadric.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590B40B8DF81800073279 /* render.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = render.cpp; path = ../src/render.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590B50B8DF81800073279 /* ring.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ring.cpp; path = ../src/ring.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590B60B8DF81800073279 /* shade.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = shade.cpp; path = ../src/shade.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590B70B8DF81800073279 /* sphere.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = sphere.cpp; path = ../src/sphere.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590B80B8DF81800073279 /* texture.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = texture.cpp; path = ../src/texture.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590B90B8DF81800073279 /* tgafile.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = tgafile.cpp; path = ../src/tgafile.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590BA0B8DF81800073279 /* trace_rest.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = trace_rest.cpp; path = ../src/trace_rest.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590BD0B8DF81800073279 /* triangle.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = triangle.cpp; path = ../src/triangle.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590BE0B8DF81800073279 /* ui.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ui.cpp; path = ../src/ui.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590BF0B8DF81800073279 /* util.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = util.cpp; path = ../src/util.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590C00B8DF81800073279 /* vector.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = vector.cpp; path = ../src/vector.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590C10B8DF81800073279 /* video.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = video.cpp; path = ../src/video.cpp; sourceTree = SOURCE_ROOT; };
+ A1F590C20B8DF81800073279 /* vol.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = vol.cpp; path = ../src/vol.cpp; sourceTree = SOURCE_ROOT; };
+ A1F5915A0B8DF8FA00073279 /* triangle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = triangle.h; path = ../src/triangle.h; sourceTree = SOURCE_ROOT; };
+ A1F5915C0B8DF94400073279 /* macvideo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macvideo.cpp; path = ../../../common/gui/macvideo.cpp; sourceTree = SOURCE_ROOT; };
+ A1F591610B8DF96500073279 /* video.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = video.h; path = ../../../common/gui/video.h; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8D0C4E910486CD37000505A6 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8D0C4E920486CD37000505A6 /* Carbon.framework in Frameworks */,
+ A117DC7B0B8DC08100F62CED /* AGL.framework in Frameworks */,
+ A117DC800B8DC09300F62CED /* OpenGL.framework in Frameworks */,
+ A117DC850B8DC0EA00F62CED /* libtbb.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A1F58D900B8DF03600073279 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F58E8C0B8DF25800073279 /* OpenGL.framework in Frameworks */,
+ A1F58E8D0B8DF25900073279 /* libtbb.dylib in Frameworks */,
+ A1F58E8E0B8DF25A00073279 /* Carbon.framework in Frameworks */,
+ A1F58E8F0B8DF25A00073279 /* AGL.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A1F58D9A0B8DF06700073279 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F58E900B8DF25F00073279 /* AGL.framework in Frameworks */,
+ A1F58E910B8DF26000073279 /* Carbon.framework in Frameworks */,
+ A1F58E920B8DF26100073279 /* OpenGL.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 20286C29FDCF999611CA2CEA /* tacheon */ = {
+ isa = PBXGroup;
+ children = (
+ 20286C2AFDCF999611CA2CEA /* Sources */,
+ 20286C2CFDCF999611CA2CEA /* Resources */,
+ 20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */,
+ A1F58CD30B8DE85300073279 /* Products */,
+ );
+ name = tacheon;
+ sourceTree = "<group>";
+ };
+ 20286C2AFDCF999611CA2CEA /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ A1F590310B8DF75E00073279 /* Tacheon */,
+ A1A8FB5F0B8CBB9E001C55B1 /* Render */,
+ );
+ name = Sources;
+ sourceTree = "<group>";
+ };
+ 20286C2CFDCF999611CA2CEA /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ 8D0C4E960486CD37000505A6 /* Info.plist */,
+ 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */,
+ 02345980000FD03B11CA0E72 /* main.nib */,
+ );
+ name = Resources;
+ sourceTree = "<group>";
+ };
+ 20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ A117DC830B8DC0DE00F62CED /* libtbb.dylib */,
+ A117DC7F0B8DC09300F62CED /* OpenGL.framework */,
+ A117DC7A0B8DC08100F62CED /* AGL.framework */,
+ 20286C33FDCF999611CA2CEA /* Carbon.framework */,
+ );
+ name = "External Frameworks and Libraries";
+ sourceTree = "<group>";
+ };
+ A1A8FB5F0B8CBB9E001C55B1 /* Render */ = {
+ isa = PBXGroup;
+ children = (
+ A1F5902F0B8DF71B00073279 /* Headers */,
+ A1F5902E0B8DF71200073279 /* Sources */,
+ );
+ name = Render;
+ sourceTree = "<group>";
+ };
+ A1F58CD30B8DE85300073279 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ A1F58CD90B8DE90E00073279 /* tacheon-tbb.app */,
+ A1F58D920B8DF03600073279 /* tacheon-tbb1d.app */,
+ A1F58D9C0B8DF06700073279 /* tacheon-serial.app */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ A1F5902E0B8DF71200073279 /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ A1F5915C0B8DF94400073279 /* macvideo.cpp */,
+ A1F5909E0B8DF81800073279 /* api.cpp */,
+ A1F5909F0B8DF81800073279 /* apigeom.cpp */,
+ A1F590A00B8DF81800073279 /* apitrigeom.cpp */,
+ A1F590A10B8DF81800073279 /* bndbox.cpp */,
+ A1F590A20B8DF81800073279 /* box.cpp */,
+ A1F590A30B8DF81800073279 /* camera.cpp */,
+ A1F590A40B8DF81800073279 /* coordsys.cpp */,
+ A1F590A50B8DF81800073279 /* cylinder.cpp */,
+ A1F590A60B8DF81800073279 /* extvol.cpp */,
+ A1F590A70B8DF81800073279 /* getargs.cpp */,
+ A1F590A80B8DF81800073279 /* global.cpp */,
+ A1F590A90B8DF81800073279 /* grid.cpp */,
+ A1F590AA0B8DF81800073279 /* imageio.cpp */,
+ A1F590AB0B8DF81800073279 /* imap.cpp */,
+ A1F590AC0B8DF81800073279 /* intersect.cpp */,
+ A1F590AD0B8DF81800073279 /* jpeg.cpp */,
+ A1F590AE0B8DF81800073279 /* light.cpp */,
+ A1F590AF0B8DF81800073279 /* objbound.cpp */,
+ A1F590B00B8DF81800073279 /* parse.cpp */,
+ A1F590B10B8DF81800073279 /* plane.cpp */,
+ A1F590B20B8DF81800073279 /* ppm.cpp */,
+ A1F590B30B8DF81800073279 /* quadric.cpp */,
+ A1F590B40B8DF81800073279 /* render.cpp */,
+ A1F590B50B8DF81800073279 /* ring.cpp */,
+ A1F590B60B8DF81800073279 /* shade.cpp */,
+ A1F590B70B8DF81800073279 /* sphere.cpp */,
+ A1F590B80B8DF81800073279 /* texture.cpp */,
+ A1F590B90B8DF81800073279 /* tgafile.cpp */,
+ A1F590BA0B8DF81800073279 /* trace_rest.cpp */,
+ A1F590BD0B8DF81800073279 /* triangle.cpp */,
+ A1F590BE0B8DF81800073279 /* ui.cpp */,
+ A1F590BF0B8DF81800073279 /* util.cpp */,
+ A1F590C00B8DF81800073279 /* vector.cpp */,
+ A1F590C10B8DF81800073279 /* video.cpp */,
+ A1F590C20B8DF81800073279 /* vol.cpp */,
+ );
+ name = Sources;
+ sourceTree = "<group>";
+ };
+ A1F5902F0B8DF71B00073279 /* Headers */ = {
+ isa = PBXGroup;
+ children = (
+ A1F591610B8DF96500073279 /* video.h */,
+ A1F5915A0B8DF8FA00073279 /* triangle.h */,
+ A1F590320B8DF7D100073279 /* api.h */,
+ A1F590330B8DF7D100073279 /* apitrigeom.h */,
+ A1F590340B8DF7D100073279 /* bndbox.h */,
+ A1F590350B8DF7D100073279 /* box.h */,
+ A1F590360B8DF7D100073279 /* camera.h */,
+ A1F590370B8DF7D100073279 /* coordsys.h */,
+ A1F590380B8DF7D100073279 /* cylinder.h */,
+ A1F590390B8DF7D100073279 /* extvol.h */,
+ A1F5903A0B8DF7D100073279 /* getargs.h */,
+ A1F5903B0B8DF7D100073279 /* global.h */,
+ A1F5903C0B8DF7D100073279 /* grid.h */,
+ A1F5903D0B8DF7D100073279 /* imageio.h */,
+ A1F5903E0B8DF7D100073279 /* imap.h */,
+ A1F5903F0B8DF7D100073279 /* intersect.h */,
+ A1F590400B8DF7D100073279 /* jpeg.h */,
+ A1F590410B8DF7D100073279 /* light.h */,
+ A1F590420B8DF7D100073279 /* machine.h */,
+ A1F590430B8DF7D100073279 /* macros.h */,
+ A1F590440B8DF7D100073279 /* objbound.h */,
+ A1F590450B8DF7D100073279 /* parse.h */,
+ A1F590460B8DF7D100073279 /* plane.h */,
+ A1F590470B8DF7D100073279 /* ppm.h */,
+ A1F590480B8DF7D100073279 /* quadric.h */,
+ A1F590490B8DF7D100073279 /* render.h */,
+ A1F5904A0B8DF7D100073279 /* ring.h */,
+ A1F5904B0B8DF7D100073279 /* shade.h */,
+ A1F5904C0B8DF7D100073279 /* sphere.h */,
+ A1F5904D0B8DF7D100073279 /* texture.h */,
+ A1F5904E0B8DF7D100073279 /* tgafile.h */,
+ A1F5904F0B8DF7D100073279 /* trace.h */,
+ A1F590500B8DF7D100073279 /* types.h */,
+ A1F590510B8DF7D100073279 /* ui.h */,
+ A1F590520B8DF7D100073279 /* util.h */,
+ A1F590530B8DF7D100073279 /* vector.h */,
+ A1F590540B8DF7D100073279 /* video.h */,
+ A1F590550B8DF7D100073279 /* vol.h */,
+ );
+ name = Headers;
+ sourceTree = "<group>";
+ };
+ A1F590310B8DF75E00073279 /* Tacheon */ = {
+ isa = PBXGroup;
+ children = (
+ A1F58D8C0B8DEFE900073279 /* trace.serial.cpp */,
+ A1F58D3D0B8DEB8E00073279 /* trace.threads.cpp */,
+ A1F58D8B0B8DEFD900073279 /* trace.tbb1d.cpp */,
+ A1A8FB5D0B8CBB8D001C55B1 /* trace.tbb.cpp */,
+ 32DBCF6D0370B57F00C91783 /* tacheon.pch */,
+ );
+ name = Tacheon;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8D0C4E890486CD37000505A6 /* tacheon-tbb */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "tacheon-tbb" */;
+ buildPhases = (
+ 8D0C4E8C0486CD37000505A6 /* Resources */,
+ 8D0C4E8F0486CD37000505A6 /* Sources */,
+ 8D0C4E910486CD37000505A6 /* Frameworks */,
+ A117DC910B8DC59A00F62CED /* Copy TBB lib */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "tacheon-tbb";
+ productInstallPath = "$(HOME)/Applications";
+ productName = tacheon;
+ productReference = A1F58CD90B8DE90E00073279 /* tacheon-tbb.app */;
+ productType = "com.apple.product-type.application";
+ };
+ A1F58D910B8DF03600073279 /* tacheon-tbb1d */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = A1F58D950B8DF03600073279 /* Build configuration list for PBXNativeTarget "tacheon-tbb1d" */;
+ buildPhases = (
+ A1F58D8E0B8DF03600073279 /* Resources */,
+ A1F58D8F0B8DF03600073279 /* Sources */,
+ A1F58D900B8DF03600073279 /* Frameworks */,
+ A1F58EE60B8DF4E100073279 /* Copy TBB lib */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "tacheon-tbb1d";
+ productName = "tacheon-tbb1d";
+ productReference = A1F58D920B8DF03600073279 /* tacheon-tbb1d.app */;
+ productType = "com.apple.product-type.application";
+ };
+ A1F58D9B0B8DF06700073279 /* tacheon-serial */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = A1F58D9F0B8DF06700073279 /* Build configuration list for PBXNativeTarget "tacheon-serial" */;
+ buildPhases = (
+ A1F58D980B8DF06700073279 /* Resources */,
+ A1F58D990B8DF06700073279 /* Sources */,
+ A1F58D9A0B8DF06700073279 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "tacheon-serial";
+ productName = "tacheon-serial";
+ productReference = A1F58D9C0B8DF06700073279 /* tacheon-serial.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 20286C28FDCF999611CA2CEA /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "tacheon" */;
+ hasScannedForEncodings = 1;
+ mainGroup = 20286C29FDCF999611CA2CEA /* tacheon */;
+ productRefGroup = A1F58CD30B8DE85300073279 /* Products */;
+ projectDirPath = "";
+ targets = (
+ A1F58D9B0B8DF06700073279 /* tacheon-serial */,
+ A1F58D910B8DF03600073279 /* tacheon-tbb1d */,
+ 8D0C4E890486CD37000505A6 /* tacheon-tbb */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 8D0C4E8C0486CD37000505A6 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8D0C4E8D0486CD37000505A6 /* InfoPlist.strings in Resources */,
+ 8D0C4E8E0486CD37000505A6 /* main.nib in Resources */,
+ A1F58EA30B8DF32900073279 /* Info.plist in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A1F58D8E0B8DF03600073279 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F58DCD0B8DF19700073279 /* main.nib in Resources */,
+ A1F58EA40B8DF32A00073279 /* Info.plist in Resources */,
+ A1F58EA80B8DF33100073279 /* InfoPlist.strings in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A1F58D980B8DF06700073279 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F58DCE0B8DF19800073279 /* main.nib in Resources */,
+ A1F58EA60B8DF32B00073279 /* Info.plist in Resources */,
+ A1F58EAA0B8DF33200073279 /* InfoPlist.strings in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8D0C4E8F0486CD37000505A6 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F58F960B8DF63C00073279 /* trace.tbb.cpp in Sources */,
+ A1F591320B8DF81800073279 /* api.cpp in Sources */,
+ A1F591330B8DF81800073279 /* apigeom.cpp in Sources */,
+ A1F591340B8DF81800073279 /* apitrigeom.cpp in Sources */,
+ A1F591350B8DF81800073279 /* bndbox.cpp in Sources */,
+ A1F591360B8DF81800073279 /* box.cpp in Sources */,
+ A1F591370B8DF81800073279 /* camera.cpp in Sources */,
+ A1F591380B8DF81800073279 /* coordsys.cpp in Sources */,
+ A1F591390B8DF81800073279 /* cylinder.cpp in Sources */,
+ A1F5913A0B8DF81800073279 /* extvol.cpp in Sources */,
+ A1F5913B0B8DF81800073279 /* getargs.cpp in Sources */,
+ A1F5913C0B8DF81800073279 /* global.cpp in Sources */,
+ A1F5913D0B8DF81800073279 /* grid.cpp in Sources */,
+ A1F5913E0B8DF81800073279 /* imageio.cpp in Sources */,
+ A1F5913F0B8DF81800073279 /* imap.cpp in Sources */,
+ A1F591400B8DF81800073279 /* intersect.cpp in Sources */,
+ A1F591410B8DF81800073279 /* jpeg.cpp in Sources */,
+ A1F591420B8DF81800073279 /* light.cpp in Sources */,
+ A1F591430B8DF81800073279 /* objbound.cpp in Sources */,
+ A1F591440B8DF81800073279 /* parse.cpp in Sources */,
+ A1F591450B8DF81800073279 /* plane.cpp in Sources */,
+ A1F591460B8DF81800073279 /* ppm.cpp in Sources */,
+ A1F591470B8DF81800073279 /* quadric.cpp in Sources */,
+ A1F591480B8DF81800073279 /* render.cpp in Sources */,
+ A1F591490B8DF81800073279 /* ring.cpp in Sources */,
+ A1F5914A0B8DF81800073279 /* shade.cpp in Sources */,
+ A1F5914B0B8DF81800073279 /* sphere.cpp in Sources */,
+ A1F5914C0B8DF81800073279 /* texture.cpp in Sources */,
+ A1F5914D0B8DF81800073279 /* tgafile.cpp in Sources */,
+ A1F5914E0B8DF81800073279 /* trace_rest.cpp in Sources */,
+ A1F591510B8DF81800073279 /* triangle.cpp in Sources */,
+ A1F591520B8DF81800073279 /* ui.cpp in Sources */,
+ A1F591530B8DF81800073279 /* util.cpp in Sources */,
+ A1F591540B8DF81800073279 /* vector.cpp in Sources */,
+ A1F591550B8DF81800073279 /* video.cpp in Sources */,
+ A1F591560B8DF81800073279 /* vol.cpp in Sources */,
+ A1F5915D0B8DF94400073279 /* macvideo.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A1F58D8F0B8DF03600073279 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F5902C0B8DF6A700073279 /* trace.tbb1d.cpp in Sources */,
+ A1F5910D0B8DF81800073279 /* api.cpp in Sources */,
+ A1F5910E0B8DF81800073279 /* apigeom.cpp in Sources */,
+ A1F5910F0B8DF81800073279 /* apitrigeom.cpp in Sources */,
+ A1F591100B8DF81800073279 /* bndbox.cpp in Sources */,
+ A1F591110B8DF81800073279 /* box.cpp in Sources */,
+ A1F591120B8DF81800073279 /* camera.cpp in Sources */,
+ A1F591130B8DF81800073279 /* coordsys.cpp in Sources */,
+ A1F591140B8DF81800073279 /* cylinder.cpp in Sources */,
+ A1F591150B8DF81800073279 /* extvol.cpp in Sources */,
+ A1F591160B8DF81800073279 /* getargs.cpp in Sources */,
+ A1F591170B8DF81800073279 /* global.cpp in Sources */,
+ A1F591180B8DF81800073279 /* grid.cpp in Sources */,
+ A1F591190B8DF81800073279 /* imageio.cpp in Sources */,
+ A1F5911A0B8DF81800073279 /* imap.cpp in Sources */,
+ A1F5911B0B8DF81800073279 /* intersect.cpp in Sources */,
+ A1F5911C0B8DF81800073279 /* jpeg.cpp in Sources */,
+ A1F5911D0B8DF81800073279 /* light.cpp in Sources */,
+ A1F5911E0B8DF81800073279 /* objbound.cpp in Sources */,
+ A1F5911F0B8DF81800073279 /* parse.cpp in Sources */,
+ A1F591200B8DF81800073279 /* plane.cpp in Sources */,
+ A1F591210B8DF81800073279 /* ppm.cpp in Sources */,
+ A1F591220B8DF81800073279 /* quadric.cpp in Sources */,
+ A1F591230B8DF81800073279 /* render.cpp in Sources */,
+ A1F591240B8DF81800073279 /* ring.cpp in Sources */,
+ A1F591250B8DF81800073279 /* shade.cpp in Sources */,
+ A1F591260B8DF81800073279 /* sphere.cpp in Sources */,
+ A1F591270B8DF81800073279 /* texture.cpp in Sources */,
+ A1F591280B8DF81800073279 /* tgafile.cpp in Sources */,
+ A1F591290B8DF81800073279 /* trace_rest.cpp in Sources */,
+ A1F5912C0B8DF81800073279 /* triangle.cpp in Sources */,
+ A1F5912D0B8DF81800073279 /* ui.cpp in Sources */,
+ A1F5912E0B8DF81800073279 /* util.cpp in Sources */,
+ A1F5912F0B8DF81800073279 /* vector.cpp in Sources */,
+ A1F591300B8DF81800073279 /* video.cpp in Sources */,
+ A1F591310B8DF81800073279 /* vol.cpp in Sources */,
+ A1F5915E0B8DF94400073279 /* macvideo.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A1F58D990B8DF06700073279 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F590300B8DF74600073279 /* trace.serial.cpp in Sources */,
+ A1F590C30B8DF81800073279 /* api.cpp in Sources */,
+ A1F590C40B8DF81800073279 /* apigeom.cpp in Sources */,
+ A1F590C50B8DF81800073279 /* apitrigeom.cpp in Sources */,
+ A1F590C60B8DF81800073279 /* bndbox.cpp in Sources */,
+ A1F590C70B8DF81800073279 /* box.cpp in Sources */,
+ A1F590C80B8DF81800073279 /* camera.cpp in Sources */,
+ A1F590C90B8DF81800073279 /* coordsys.cpp in Sources */,
+ A1F590CA0B8DF81800073279 /* cylinder.cpp in Sources */,
+ A1F590CB0B8DF81800073279 /* extvol.cpp in Sources */,
+ A1F590CC0B8DF81800073279 /* getargs.cpp in Sources */,
+ A1F590CD0B8DF81800073279 /* global.cpp in Sources */,
+ A1F590CE0B8DF81800073279 /* grid.cpp in Sources */,
+ A1F590CF0B8DF81800073279 /* imageio.cpp in Sources */,
+ A1F590D00B8DF81800073279 /* imap.cpp in Sources */,
+ A1F590D10B8DF81800073279 /* intersect.cpp in Sources */,
+ A1F590D20B8DF81800073279 /* jpeg.cpp in Sources */,
+ A1F590D30B8DF81800073279 /* light.cpp in Sources */,
+ A1F590D40B8DF81800073279 /* objbound.cpp in Sources */,
+ A1F590D50B8DF81800073279 /* parse.cpp in Sources */,
+ A1F590D60B8DF81800073279 /* plane.cpp in Sources */,
+ A1F590D70B8DF81800073279 /* ppm.cpp in Sources */,
+ A1F590D80B8DF81800073279 /* quadric.cpp in Sources */,
+ A1F590D90B8DF81800073279 /* render.cpp in Sources */,
+ A1F590DA0B8DF81800073279 /* ring.cpp in Sources */,
+ A1F590DB0B8DF81800073279 /* shade.cpp in Sources */,
+ A1F590DC0B8DF81800073279 /* sphere.cpp in Sources */,
+ A1F590DD0B8DF81800073279 /* texture.cpp in Sources */,
+ A1F590DE0B8DF81800073279 /* tgafile.cpp in Sources */,
+ A1F590DF0B8DF81800073279 /* trace_rest.cpp in Sources */,
+ A1F590E20B8DF81800073279 /* triangle.cpp in Sources */,
+ A1F590E30B8DF81800073279 /* ui.cpp in Sources */,
+ A1F590E40B8DF81800073279 /* util.cpp in Sources */,
+ A1F590E50B8DF81800073279 /* vector.cpp in Sources */,
+ A1F590E60B8DF81800073279 /* video.cpp in Sources */,
+ A1F590E70B8DF81800073279 /* vol.cpp in Sources */,
+ A1F591600B8DF94400073279 /* macvideo.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 02345980000FD03B11CA0E72 /* main.nib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 1870340FFE93FCAF11CA0CD7 /* English */,
+ );
+ name = main.nib;
+ sourceTree = "<group>";
+ };
+ 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 0867D6ABFE840B52C02AAC07 /* English */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "<group>";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ A1F58D960B8DF03600073279 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Applications";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PREBINDING = NO;
+ PRODUCT_NAME = "tacheon-tbb1d";
+ WRAPPER_EXTENSION = app;
+ ZERO_LINK = NO;
+ };
+ name = Debug;
+ };
+ A1F58D970B8DF03600073279 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = YES;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Applications";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PREBINDING = NO;
+ PRODUCT_NAME = "tacheon-tbb1d";
+ WRAPPER_EXTENSION = app;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ A1F58DA00B8DF06700073279 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Applications";
+ PREBINDING = NO;
+ PRODUCT_NAME = "tacheon-serial";
+ WRAPPER_EXTENSION = app;
+ ZERO_LINK = NO;
+ };
+ name = Debug;
+ };
+ A1F58DA10B8DF06700073279 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = YES;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Applications";
+ PREBINDING = NO;
+ PRODUCT_NAME = "tacheon-serial";
+ WRAPPER_EXTENSION = app;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ C0E91AC608A95435008D54AB /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_MODEL_TUNING = "";
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = tacheon.pch;
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Applications";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = "tacheon-tbb";
+ WRAPPER_EXTENSION = app;
+ ZERO_LINK = NO;
+ };
+ name = Debug;
+ };
+ C0E91AC708A95435008D54AB /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = tacheon.pch;
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Applications";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = "tacheon-tbb";
+ WRAPPER_EXTENSION = app;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ C0E91ACA08A95435008D54AB /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_AUTO_VECTORIZATION = YES;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_ENABLE_SSE3_EXTENSIONS = YES;
+ GCC_MODEL_TUNING = "";
+ GCC_PREPROCESSOR_DEFINITIONS = "DEFAULT_MODELFILE=\"/Library/Frameworks/TBB.framework/Versions/Current/examples/parallel_for/tacheon/dat/balls.dat\"";
+ GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Debug;
+ };
+ C0E91ACB08A95435008D54AB /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_AUTO_VECTORIZATION = YES;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_ENABLE_SSE3_EXTENSIONS = YES;
+ GCC_MODEL_TUNING = "";
+ GCC_PREPROCESSOR_DEFINITIONS = "DEFAULT_MODELFILE=\"/Library/Frameworks/TBB.framework/Versions/Current/examples/parallel_for/tacheon/dat/balls.dat\"";
+ GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ A1F58D950B8DF03600073279 /* Build configuration list for PBXNativeTarget "tacheon-tbb1d" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ A1F58D960B8DF03600073279 /* Debug */,
+ A1F58D970B8DF03600073279 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ A1F58D9F0B8DF06700073279 /* Build configuration list for PBXNativeTarget "tacheon-serial" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ A1F58DA00B8DF06700073279 /* Debug */,
+ A1F58DA10B8DF06700073279 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ C0E91AC508A95435008D54AB /* Build configuration list for PBXNativeTarget "tacheon-tbb" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C0E91AC608A95435008D54AB /* Debug */,
+ C0E91AC708A95435008D54AB /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ C0E91AC908A95435008D54AB /* Build configuration list for PBXProject "tacheon" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C0E91ACA08A95435008D54AB /* Debug */,
+ C0E91ACB08A95435008D54AB /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 20286C28FDCF999611CA2CEA /* Project object */;
+}
diff --git a/examples/parallel_reduce/convex_hull/Makefile b/examples/parallel_reduce/convex_hull/Makefile
new file mode 100644
index 0000000..3fcf601
--- /dev/null
+++ b/examples/parallel_reduce/convex_hull/Makefile
@@ -0,0 +1,46 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# GNU Makefile that builds and runs example.
+
+# The C++ compiler
+#CXX=g++
+
+all: release test
+
+release: *.cpp
+ $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o convex_hull_sample convex_hull_sample.cpp -ltbb
+ $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o convex_hull_bench convex_hull_bench.cpp -ltbb
+
+debug: *.cpp
+ $(CXX) -O0 -g -DTBB_DO_ASSERT $(CXXFLAGS) -o convex_hull_sample convex_hull_sample.cpp -ltbb_debug
+ $(CXX) -O0 -g -DTBB_DO_ASSERT $(CXXFLAGS) -o convex_hull_bench convex_hull_bench.cpp -ltbb_debug
+
+clean:
+ rm -f convex_hull_bench convex_hull_sample *.o *.d
+
+test:
+ ./convex_hull_bench
diff --git a/examples/parallel_reduce/convex_hull/Makefile.windows b/examples/parallel_reduce/convex_hull/Makefile.windows
new file mode 100644
index 0000000..b2bf4ea
--- /dev/null
+++ b/examples/parallel_reduce/convex_hull/Makefile.windows
@@ -0,0 +1,46 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+
+# The C++ compiler options
+CXX=cl.exe
+MYCXXFLAGS=/TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
+MYLDFLAGS=/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO /OUT:$(PROG).exe $(LDFLAGS)
+
+all: release test
+release:
+ $(CXX) convex_hull_sample.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(MYLDFLAGS) /OUT:convex_hull_sample.exe
+ $(CXX) convex_hull_bench.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(MYLDFLAGS) /OUT:convex_hull_bench.exe
+debug:
+ $(CXX) convex_hull_sample.cpp /MDd /Od /Zi /D TBB_DO_ASSERT /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(MYLDFLAGS) /OUT:convex_hull_sample.exe
+ $(CXX) convex_hull_bench.cpp /MDd /Od /Zi /D TBB_DO_ASSERT /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(MYLDFLAGS) /OUT:convex_hull_bench.exe
+clean:
+ @cmd.exe /C del convex_hull*.exe *.obj *.?db *.manifest
+test:
+ convex_hull_bench
diff --git a/examples/parallel_reduce/convex_hull/convex_hull.h b/examples/parallel_reduce/convex_hull/convex_hull.h
new file mode 100644
index 0000000..11b497d
--- /dev/null
+++ b/examples/parallel_reduce/convex_hull/convex_hull.h
@@ -0,0 +1,233 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __CONVEX_HULL_H__
+#define __CONVEX_HULL_H__
+
+#define _SCL_SECURE_NO_DEPRECATE
+#include <stdlib.h>
+#include <iostream>
+#include <sstream>
+#include <vector>
+#include <string>
+#include <algorithm>
+#include <functional>
+#include <assert.h>
+#include "tbb/tick_count.h"
+
+namespace cfg {
+ // convex hull problem parameter defaults
+ const long NP = 5000000; // problem size
+ const size_t SNT = 1; // minimal number of threads
+ const size_t ENT = 8; // maximal number of threads
+
+ // convex hull problem user set parameters
+ long MAXPOINTS = NP;
+ size_t NUM_THREADS_START = SNT;
+ size_t NUM_THREADS_END = ENT;
+
+ // convex hull grain sizes for 3 subproblems. Be sure 16*GS < 512Kb
+ const size_t GENERATE_GS = 25000;
+ const size_t FINDEXT_GS = 25000;
+ const size_t DIVIDE_GS = 25000;
+};
+
+namespace util {
+ bool VERBOSE = false;
+ std::vector<std::string> OUTPUT;
+
+ // utility functionality
+ void ParseInputArgs(int argc, char* argv[]) {
+ int numArgs = 1;
+ if(argc>numArgs) {
+ char delim = ':';
+ if(!strcmp(argv[numArgs], "-h")) {
+ std::cout << " Program usage is:" << std::endl
+ << " " << argv[0] << " [NP] [SNT" << delim << "ENT] [-v]"
+ << std::endl << std::endl
+ << " where:" << std::endl
+ << " NP - number of points" << std::endl
+ << " SNT - start with this number of threads" << std::endl
+ << " ENT - end with this number of threads" << std::endl
+ << " -v - turns verbose ON" << std::endl;
+ exit(0);
+ } else {
+ while(argc>numArgs) {
+ char* endptr;
+ if(!strcmp(argv[numArgs], "-v")) {
+ VERBOSE = true;
+ } else if(!strchr(argv[numArgs], delim)) {
+ cfg::MAXPOINTS = strtol(argv[numArgs], &endptr, 0);
+ if(*endptr!='\0') {
+ std::cout << " wrong parameter format for Number of Points" << std::endl;
+ exit(1);
+ }
+ if(cfg::MAXPOINTS<=0) {
+ std::cout
+ << " wrong value set for Number of Points" << std::endl
+ << " using default value: " << std::endl
+ << " Number of Points = " << cfg::NP << std::endl;
+ cfg::MAXPOINTS = cfg::NP;
+ }
+ } else {
+ cfg::NUM_THREADS_START=strtol(argv[numArgs], &endptr, 0);
+ if(*endptr==delim) {
+ cfg::NUM_THREADS_END = strtol(endptr+1, &endptr, 0);
+ } else {
+ std::cout << " wrong parameter format for Number of Threads" << std::endl;
+ exit(1);
+ }
+ if(*endptr!='\0') {
+ std::cout << " wrong parameter format for Number of Threads" << std::endl;
+ exit(1);
+ }
+ if((cfg::NUM_THREADS_START<=0)
+ || (cfg::NUM_THREADS_END<cfg::NUM_THREADS_START)) {
+ std::cout
+ << " wrong values set for Number of Threads" << std::endl
+ << " using default values: " << std::endl
+ << " start NT = " << cfg::SNT << std::endl
+ << " end NT = " << cfg::ENT << std::endl;
+ cfg::NUM_THREADS_START=cfg::SNT;
+ cfg::NUM_THREADS_END =cfg::ENT;
+ }
+ }
+ ++numArgs;
+ }
+ }
+ }
+ }
+
+ template <typename T>
+ struct point {
+ T x;
+ T y;
+ point() : x(T()), y(T()) {}
+ point(T _x, T _y) : x(_x), y(_y) {}
+ point(const point<T>& _P) : x(_P.x), y(_P.y) {}
+ };
+
+ int random(unsigned int& rseed) {
+#if __linux__ || __APPLE__
+ return rand_r(&rseed);
+#elif _WIN32
+ return rand();
+#else
+#error Unknown/unsupported OS?
+#endif // __linux__
+ }
+
+ template < typename T >
+ point<T> GenerateRNDPoint(size_t& count, unsigned int& rseed) {
+ /* generates random points on 2D plane so that the cluster
+ is somewhat cirle shaped */
+ const size_t maxsize=500;
+ T x = random(rseed)*2.0/(double)RAND_MAX - 1;
+ T y = random(rseed)*2.0/(double)RAND_MAX - 1;
+ T r = (x*x + y*y);
+ if(r>1) {
+ count++;
+ if(count>10) {
+ if (random(rseed)/(double)RAND_MAX > 0.5)
+ x /= r;
+ if (random(rseed)/(double)RAND_MAX > 0.5)
+ y /= r;
+ count = 0;
+ }
+ else {
+ x /= r;
+ y /= r;
+ }
+ }
+
+ x = (x+1)*0.5*maxsize;
+ y = (y+1)*0.5*maxsize;
+
+ return point<T>(x,y);
+ }
+
+ template <typename Index>
+ struct edge {
+ Index start;
+ Index end;
+ edge(Index _p1, Index _p2) : start(_p1), end(_p2) {};
+ };
+
+ template <typename T>
+ std::ostream& operator <<(std::ostream& _ostr, point<T> _p) {
+ return _ostr << '(' << _p.x << ',' << _p.y << ')';
+ }
+
+ template <typename T>
+ std::istream& operator >>(std::istream& _istr, point<T> _p) {
+ return _istr >> _p.x >> _p.y;
+ }
+
+ template <typename T>
+ bool operator ==(point<T> p1, point<T> p2) {
+ return (p1.x == p2.x && p1.y == p2.y);
+ }
+
+ template <typename T>
+ bool operator !=(point<T> p1, point<T> p2) {
+ return !(p1 == p2);
+ }
+
+ template <typename T>
+ double cross_product(const point<T>& start, const point<T>& end1, const point<T>& end2) {
+ return ((end1.x-start.x)*(end2.y-start.y)-(end2.x-start.x)*(end1.y-start.y));
+ }
+
+ // Timing functions are based on TBB to always obtain wall-clock time
+ typedef tbb::tick_count my_time_t;
+
+ my_time_t gettime() {
+ return tbb::tick_count::now();
+ }
+
+ double time_diff(my_time_t start, my_time_t end) {
+ return (end-start).seconds();
+ }
+
+ void WriteResults(size_t nthreads, double initTime, double calcTime) {
+ if(VERBOSE) {
+ std::cout << " Step by step hull constuction:" << std::endl;
+ for(size_t i = 0; i < OUTPUT.size(); ++i)
+ std::cout << OUTPUT[i] << std::endl;
+ }
+
+ std::cout
+ << " Number of nodes:" << cfg::MAXPOINTS
+ << " Number of threads:" << nthreads
+ << " Initialization time:" << initTime
+ << " Calculation time:" << calcTime
+ << std::endl;
+ }
+};
+
+#endif // __CONVEX_HULL_H__
diff --git a/examples/parallel_reduce/convex_hull/convex_hull_bench.cpp b/examples/parallel_reduce/convex_hull/convex_hull_bench.cpp
new file mode 100644
index 0000000..5b379f3
--- /dev/null
+++ b/examples/parallel_reduce/convex_hull/convex_hull_bench.cpp
@@ -0,0 +1,631 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "convex_hull.h"
+
+typedef util::point<double> point_t;
+
+#define USETBB 1
+#define USECONCVEC 1
+#define INIT_ONCE 1
+
+#if !USETBB // Serial implementation of Quick Hull algorithm
+
+typedef std::vector< point_t > pointVec_t;
+
+// C++ style serial code
+
+class FillRNDPointsVector : public std::unary_function<point_t&, void> {
+ unsigned int rseed;
+ size_t count;
+public:
+ FillRNDPointsVector() : rseed(1), count(0) {}
+
+ void operator()(point_t& p) {
+ p = util::GenerateRNDPoint<double>(count, rseed);
+ }
+};
+
+void initialize(pointVec_t &points) {
+ points.clear();
+ points.resize(cfg::MAXPOINTS);
+
+ std::for_each(points.begin(), points.end(), FillRNDPointsVector());
+}
+
+class FindXExtremum : public std::unary_function<const point_t&, void> {
+public:
+ typedef enum {
+ minX, maxX
+ } extremumType;
+
+ FindXExtremum(const point_t& frstPoint, extremumType exType_)
+ : extrXPoint(frstPoint), exType(exType_) {}
+
+ void operator()(const point_t& p) {
+ if(closerToExtremum(p))
+ extrXPoint = p;
+ }
+
+ operator point_t () {
+ return extrXPoint;
+ }
+
+private:
+ const extremumType exType;
+ point_t extrXPoint;
+
+ bool closerToExtremum(const point_t &p) const {
+ switch(exType) {
+ case minX:
+ return p.x<extrXPoint.x; break;
+ case maxX:
+ return p.x>extrXPoint.x; break;
+ }
+ }
+};
+
+template <FindXExtremum::extremumType type>
+point_t extremum(const pointVec_t &points) {
+ assert(!points.empty());
+ return std::for_each(points.begin(), points.end(), FindXExtremum(points[0], type));
+}
+
+class SplitByCP : public std::unary_function<const point_t&, void> {
+ pointVec_t &reducedSet;
+ point_t p1, p2;
+ point_t farPoint;
+ double howFar;
+public:
+
+ SplitByCP( point_t _p1, point_t _p2, pointVec_t &_reducedSet)
+ : p1(_p1), p2(_p2), reducedSet(_reducedSet), howFar(0), farPoint(p1) {}
+
+ void operator()(const point_t& p) {
+ double cp;
+ if( (p != p1) && (p != p2) ) {
+ cp = util::cross_product(p1, p2, p);
+ if(cp>0) {
+ reducedSet.push_back(p);
+ if(cp>howFar) {
+ farPoint = p;
+ howFar = cp;
+ }
+ }
+ }
+ }
+
+ operator point_t (){
+ return farPoint;
+ }
+};
+
+point_t divide(const pointVec_t &P, pointVec_t &P_reduced, const point_t &p1, const point_t &p2) {
+ SplitByCP splitByCP(p1, p2, P_reduced);
+ point_t farPoint = std::for_each(P.begin(), P.end(), splitByCP);
+
+ if(util::VERBOSE) {
+ std::stringstream ss;
+ ss << P.size() << " nodes in bucket"<< ", "
+ << "dividing by: [ " << p1 << ", " << p2 << " ], "
+ << "farthest node: " << farPoint;
+ util::OUTPUT.push_back(ss.str());
+ }
+
+ return farPoint;
+}
+
+void divide_and_conquer(const pointVec_t &P, pointVec_t &H, point_t p1, point_t p2) {
+ if (P.size()<2) {
+ H.push_back(p1);
+ H.insert(H.end(), P.begin(), P.end());
+ }
+ else {
+ pointVec_t P_reduced;
+ pointVec_t H1, H2;
+ point_t p_far;
+
+ p_far = divide(P, P_reduced, p1, p2);
+
+ divide_and_conquer(P_reduced, H1, p1, p_far);
+ divide_and_conquer(P_reduced, H2, p_far, p2);
+
+ H.insert(H.end(), H1.begin(), H1.end());
+ H.insert(H.end(), H2.begin(), H2.end());
+ }
+}
+
+void quickhull(const pointVec_t &points, pointVec_t &hull) {
+ hull.clear();
+
+ point_t p_maxx = extremum<FindXExtremum::maxX>(points);
+ point_t p_minx = extremum<FindXExtremum::minX>(points);
+
+ pointVec_t H;
+
+ divide_and_conquer(points, hull, p_maxx, p_minx);
+ divide_and_conquer(points, H, p_minx, p_maxx);
+ hull.insert(hull.end(), H.begin(), H.end());
+}
+
+
+int main(int argc, char* argv[]) {
+ util::ParseInputArgs(argc, argv);
+
+ pointVec_t points;
+ pointVec_t hull;
+ util::my_time_t tm_init, tm_start, tm_end;
+
+ std::cout << "Starting serial version of QUICK HULL algorithm" << std::endl;
+
+ tm_init = util::gettime();
+ initialize(points);
+ tm_start = util::gettime();
+ quickhull(points, hull);
+ tm_end = util::gettime();
+
+ util::WriteResults(1, util::time_diff(tm_init, tm_start),
+ util::time_diff(tm_start, tm_end));
+}
+
+#else // USETBB - parallel version of Quick Hull algorithm
+
+#include "tbb/task_scheduler_init.h"
+#include "tbb/parallel_for.h"
+#include "tbb/parallel_reduce.h"
+#include "tbb/blocked_range.h"
+
+typedef tbb::blocked_range<size_t> range_t;
+
+#if USECONCVEC
+#include "tbb/concurrent_vector.h"
+
+typedef tbb::concurrent_vector<point_t> pointVec_t;
+
+void appendVector(const point_t* src, size_t srcSize, pointVec_t& dest) {
+ std::copy(src, src + srcSize, dest.begin() + dest.grow_by(srcSize));
+}
+
+void appendVector(const pointVec_t& src, pointVec_t& dest) {
+ std::copy(src.begin(), src.end(), dest.begin() + dest.grow_by(src.size()));
+}
+
+#else // USE STD::VECTOR - include spin_mutex.h and lock vector operations
+#include "tbb/spin_mutex.h"
+
+typedef tbb::spin_mutex mutex_t;
+typedef std::vector<point_t> pointVec_t;
+
+void appendVector(mutex_t& insertMutex, const pointVec_t& src, pointVec_t& dest) {
+ mutex_t::scoped_lock lock(insertMutex);
+ dest.insert(dest.end(), src.begin(), src.end());
+}
+
+void appendVector(mutex_t& insertMutex, const point_t* src, size_t srcSize,
+ pointVec_t& dest) {
+ mutex_t::scoped_lock lock(insertMutex);
+ dest.insert(dest.end(), src, src + srcSize);
+}
+
+#endif // USECONCVEC
+
+class FillRNDPointsVector {
+ pointVec_t &points;
+ mutable unsigned int rseed;
+public:
+ static const size_t grainSize = cfg::GENERATE_GS;
+#if !USECONCVEC
+ static mutex_t pushBackMutex;
+#endif // USECONCVEC
+ FillRNDPointsVector(pointVec_t& _points)
+ : points(_points), rseed(1) {}
+
+ FillRNDPointsVector(const FillRNDPointsVector& other)
+ : points(other.points), rseed(other.rseed+1) {}
+
+ void operator()(const range_t& range) const {
+ const size_t i_end = range.end();
+ size_t count = 0;
+ for(size_t i = range.begin(); i != i_end; ++i) {
+#if USECONCVEC
+ points.push_back(util::GenerateRNDPoint<double>(count, rseed));
+#else // Locked push_back to a not thread-safe STD::VECTOR
+ {
+ mutex_t::scoped_lock lock(pushBackMutex);
+ points.push_back(util::GenerateRNDPoint<double>(count, rseed));
+ }
+#endif // USECONCVEC
+ }
+ }
+};
+
+class FillRNDPointsVector_buf {
+ pointVec_t &points;
+ mutable unsigned int rseed;
+public:
+ static const size_t grainSize = cfg::GENERATE_GS;
+#if !USECONCVEC
+ static mutex_t insertMutex;
+#endif // USECONCVEC
+
+ FillRNDPointsVector_buf(pointVec_t& _points)
+ : points(_points), rseed(1) {}
+
+ FillRNDPointsVector_buf(const FillRNDPointsVector_buf& other)
+ : points(other.points), rseed(other.rseed+1) {}
+
+ void operator()(const range_t& range) const {
+ const size_t i_end = range.end();
+ size_t count = 0, j = 0;
+ point_t tmp_vec[grainSize];
+ for(size_t i=range.begin(); i!=i_end; ++i) {
+ tmp_vec[j++] = util::GenerateRNDPoint<double>(count, rseed);
+ }
+#if USECONCVEC
+ appendVector(tmp_vec, j, points);
+#else // USE STD::VECTOR
+ appendVector(insertMutex, tmp_vec, j, points);
+#endif // USECONCVEC
+ }
+};
+
+#if !USECONCVEC
+mutex_t FillRNDPointsVector::pushBackMutex = mutex_t();
+mutex_t FillRNDPointsVector_buf::insertMutex = mutex_t();
+#endif
+
+template<typename BodyType>
+void initialize(pointVec_t &points) {
+ points.clear();
+
+ tbb::parallel_for(range_t(0, cfg::MAXPOINTS, BodyType::grainSize), BodyType(points));
+}
+
+class FindXExtremum {
+public:
+ typedef enum {
+ minX, maxX
+ } extremumType;
+
+ static const size_t grainSize = cfg::FINDEXT_GS;
+
+ FindXExtremum(const pointVec_t& points_, extremumType exType_)
+ : points(points_), exType(exType_), extrXPoint(points[0]) {}
+
+ FindXExtremum(const FindXExtremum& fxex, tbb::split)
+ : points(fxex.points), exType(fxex.exType), extrXPoint(fxex.extrXPoint) {}
+
+ void operator()(const range_t& range) {
+ const size_t i_end = range.end();
+ if(!range.empty()) {
+ for(size_t i = range.begin(); i != i_end; ++i) {
+ if(closerToExtremum(points[i])) {
+ extrXPoint = points[i];
+ }
+ }
+ }
+ }
+
+ void join(const FindXExtremum &rhs) {
+ if(closerToExtremum(rhs.extrXPoint)) {
+ extrXPoint = rhs.extrXPoint;
+ }
+ }
+
+ point_t extremeXPoint() {
+ return extrXPoint;
+ }
+
+private:
+ const pointVec_t &points;
+ const extremumType exType;
+ point_t extrXPoint;
+ bool closerToExtremum(const point_t &p) const {
+ switch(exType) {
+ case minX:
+ return p.x<extrXPoint.x; break;
+ case maxX:
+ return p.x>extrXPoint.x; break;
+ }
+ return false; // avoid warning
+ }
+};
+
+template <FindXExtremum::extremumType type>
+point_t extremum(const pointVec_t &P) {
+ FindXExtremum fxBody(P, type);
+ tbb::parallel_reduce(range_t(0, P.size(), FindXExtremum::grainSize), fxBody);
+ return fxBody.extremeXPoint();
+}
+
+class SplitByCP {
+ const pointVec_t &initialSet;
+ pointVec_t &reducedSet;
+ point_t p1, p2;
+ point_t farPoint;
+ double howFar;
+public:
+ static const size_t grainSize = cfg::DIVIDE_GS;
+#if !USECONCVEC
+ static mutex_t pushBackMutex;
+#endif // USECONCVEC
+
+ SplitByCP( point_t _p1, point_t _p2,
+ const pointVec_t &_initialSet, pointVec_t &_reducedSet)
+ : p1(_p1), p2(_p2),
+ initialSet(_initialSet), reducedSet(_reducedSet),
+ howFar(0), farPoint(p1) {
+ }
+
+ SplitByCP( SplitByCP& sbcp, tbb::split )
+ : p1(sbcp.p1), p2(sbcp.p2),
+ initialSet(sbcp.initialSet), reducedSet(sbcp.reducedSet),
+ howFar(0), farPoint(p1) {}
+
+ void operator()( const range_t& range ) {
+ const size_t i_end = range.end();
+ double cp;
+ for(size_t i=range.begin(); i!=i_end; ++i) {
+ if( (initialSet[i] != p1) && (initialSet[i] != p2) ) {
+ cp = util::cross_product(p1, p2, initialSet[i]);
+ if(cp>0) {
+#if USECONCVEC
+ reducedSet.push_back(initialSet[i]);
+#else // Locked push_back to a not thread-safe STD::VECTOR
+ {
+ mutex_t::scoped_lock lock(pushBackMutex);
+ reducedSet.push_back(initialSet[i]);
+ }
+#endif // USECONCVEC
+ if(cp>howFar) {
+ farPoint = initialSet[i];
+ howFar = cp;
+ }
+ }
+ }
+ }
+ }
+
+ void join(const SplitByCP& rhs) {
+ if(rhs.howFar>howFar) {
+ howFar = rhs.howFar;
+ farPoint = rhs.farPoint;
+ }
+ }
+
+ point_t farthestPoint() const {
+ return farPoint;
+ }
+};
+
+class SplitByCP_buf {
+ const pointVec_t &initialSet;
+ pointVec_t &reducedSet;
+ point_t p1, p2;
+ point_t farPoint;
+ double howFar;
+public:
+ static const size_t grainSize = cfg::DIVIDE_GS;
+#if !USECONCVEC
+ static mutex_t insertMutex;
+#endif // USECONCVEC
+
+ SplitByCP_buf( point_t _p1, point_t _p2,
+ const pointVec_t &_initialSet, pointVec_t &_reducedSet)
+ : p1(_p1), p2(_p2),
+ initialSet(_initialSet), reducedSet(_reducedSet),
+ howFar(0), farPoint(p1) {}
+
+ SplitByCP_buf(SplitByCP_buf& sbcp, tbb::split)
+ : p1(sbcp.p1), p2(sbcp.p2),
+ initialSet(sbcp.initialSet), reducedSet(sbcp.reducedSet),
+ howFar(0), farPoint(p1) {}
+
+ void operator()(const range_t& range) {
+ const size_t i_end = range.end();
+ size_t j = 0;
+ double cp;
+ point_t tmp_vec[grainSize];
+ for(size_t i = range.begin(); i != i_end; ++i) {
+ if( (initialSet[i] != p1) && (initialSet[i] != p2) ) {
+ cp = util::cross_product(p1, p2, initialSet[i]);
+ if(cp>0) {
+ tmp_vec[j++] = initialSet[i];
+ if(cp>howFar) {
+ farPoint = initialSet[i];
+ howFar = cp;
+ }
+ }
+ }
+ }
+
+#if USECONCVEC
+ appendVector(tmp_vec, j, reducedSet);
+#else // USE STD::VECTOR
+ appendVector(insertMutex, tmp_vec, j, reducedSet);
+#endif // USECONCVEC
+ }
+
+ void join(const SplitByCP_buf& rhs) {
+ if(rhs.howFar>howFar) {
+ howFar = rhs.howFar;
+ farPoint = rhs.farPoint;
+ }
+ }
+
+ point_t farthestPoint() const {
+ return farPoint;
+ }
+};
+
+#if !USECONCVEC
+mutex_t SplitByCP::pushBackMutex = mutex_t();
+mutex_t SplitByCP_buf::insertMutex = mutex_t();
+#endif
+
+template <typename BodyType>
+point_t divide(const pointVec_t &P, pointVec_t &P_reduced,
+ const point_t &p1, const point_t &p2) {
+ BodyType body(p1, p2, P, P_reduced);
+ tbb::parallel_reduce(range_t(0, P.size(), BodyType::grainSize), body);
+
+ if(util::VERBOSE) {
+ std::stringstream ss;
+ ss << P.size() << " nodes in bucket"<< ", "
+ << "dividing by: [ " << p1 << ", " << p2 << " ], "
+ << "farthest node: " << body.farthestPoint();
+ util::OUTPUT.push_back(ss.str());
+ }
+
+ return body.farthestPoint();
+}
+
+void divide_and_conquer(const pointVec_t &P, pointVec_t &H,
+ point_t p1, point_t p2, bool buffered) {
+ if (P.size()<2) {
+ H.push_back(p1);
+#if USECONCVEC
+ appendVector(P, H);
+#else // insert into STD::VECTOR
+ H.insert(H.end(), P.begin(), P.end());
+#endif
+ }
+ else {
+ pointVec_t P_reduced;
+ pointVec_t H1, H2;
+ point_t p_far;
+
+ if(buffered) {
+ p_far = divide<SplitByCP_buf>(P, P_reduced, p1, p2);
+ } else {
+ p_far = divide<SplitByCP>(P, P_reduced, p1, p2);
+ }
+
+ divide_and_conquer(P_reduced, H1, p1, p_far, buffered);
+ divide_and_conquer(P_reduced, H2, p_far, p2, buffered);
+
+#if USECONCVEC
+ appendVector(H1, H);
+ appendVector(H2, H);
+#else // insert into STD::VECTOR
+ H.insert(H.end(), H1.begin(), H1.end());
+ H.insert(H.end(), H2.begin(), H2.end());
+#endif
+ }
+}
+
+void quickhull(const pointVec_t &points, pointVec_t &hull, bool buffered) {
+ hull.clear();
+
+ point_t p_maxx = extremum<FindXExtremum::maxX>(points);
+ point_t p_minx = extremum<FindXExtremum::minX>(points);
+
+ pointVec_t H;
+
+ divide_and_conquer(points, hull, p_maxx, p_minx, buffered);
+ divide_and_conquer(points, H, p_minx, p_maxx, buffered);
+#if USECONCVEC
+ appendVector(H, hull);
+#else // STD::VECTOR
+ hull.insert(hull.end(), H.begin(), H.end());
+#endif // USECONCVEC
+}
+
+int main(int argc, char* argv[]) {
+ util::ParseInputArgs(argc, argv);
+
+ pointVec_t points;
+ pointVec_t hull;
+ size_t nthreads;
+ util::my_time_t tm_init, tm_start, tm_end;
+ pointVec_t tmp_points;
+
+#if USECONCVEC
+ std::cout << "Starting TBB unbufferred push_back version of QUICK HULL algorithm" << std::endl;
+#else
+ std::cout << "Starting STL locked unbufferred push_back version of QUICK HULL algorithm" << std::endl;
+#endif // USECONCVEC
+
+ for(nthreads=cfg::NUM_THREADS_START; nthreads<=cfg::NUM_THREADS_END;
+ ++nthreads) {
+ tbb::task_scheduler_init init(nthreads);
+#if INIT_ONCE
+ if(nthreads==cfg::NUM_THREADS_START) {
+ tm_init = util::gettime();
+ initialize<FillRNDPointsVector>(points);
+ }
+ else /* timing generation for stats, but use original data set */ {
+ tm_init = util::gettime();
+ initialize<FillRNDPointsVector>(tmp_points);
+ }
+#else
+ tm_init = util::gettime();
+ initialize<FillRNDPointsVector>(points);
+#endif // INIT_ONCE
+ tm_start = util::gettime();
+ quickhull(points, hull, false);
+ tm_end = util::gettime();
+
+ util::WriteResults(nthreads, util::time_diff(tm_init, tm_start),
+ util::time_diff(tm_start, tm_end));
+ }
+
+#if USECONCVEC
+ std::cout << "Starting TBB bufferred version of QUICK HULL algorithm" << std::endl;
+#else
+ std::cout << "Starting STL locked bufferred version of QUICK HULL algorithm" << std::endl;
+#endif
+
+ for(nthreads=cfg::NUM_THREADS_START; nthreads<=cfg::NUM_THREADS_END;
+ ++nthreads) {
+ tbb::task_scheduler_init init(nthreads);
+#if INIT_ONCE
+ if(nthreads==cfg::NUM_THREADS_START) {
+ tm_init = util::gettime();
+ initialize<FillRNDPointsVector_buf>(points);
+ }
+ else /* timing generation for stats, but use original data set */ {
+ tm_init = util::gettime();
+ initialize<FillRNDPointsVector_buf>(tmp_points);
+ }
+#else
+ tm_init = util::gettime();
+ initialize<FillRNDPointsVector_buf>(points);
+#endif // INIT_ONCE
+ tm_start = util::gettime();
+ quickhull(points, hull, true);
+ tm_end = util::gettime();
+
+ util::WriteResults(nthreads, util::time_diff(tm_init, tm_start),
+ util::time_diff(tm_start, tm_end));
+ }
+
+ return 0;
+}
+
+#endif // USETBB
diff --git a/examples/parallel_reduce/convex_hull/convex_hull_sample.cpp b/examples/parallel_reduce/convex_hull/convex_hull_sample.cpp
new file mode 100644
index 0000000..9c02262
--- /dev/null
+++ b/examples/parallel_reduce/convex_hull/convex_hull_sample.cpp
@@ -0,0 +1,264 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "convex_hull.h"
+
+#include "tbb/task_scheduler_init.h"
+#include "tbb/blocked_range.h"
+#include "tbb/parallel_for.h"
+#include "tbb/parallel_reduce.h"
+#include "tbb/tick_count.h"
+#include "tbb/concurrent_vector.h"
+
+typedef util::point<double> point_t;
+typedef tbb::concurrent_vector< point_t > pointVec_t;
+typedef tbb::blocked_range<size_t> range_t;
+
+void appendVector(const point_t* src, size_t srcSize, pointVec_t& dest) {
+ std::copy(src, src + srcSize, dest.begin() + dest.grow_by(srcSize));
+}
+
+void appendVector(const pointVec_t& src, pointVec_t& dest) {
+ std::copy(src.begin(), src.end(), dest.begin() + dest.grow_by(src.size()));
+}
+
+class FillRNDPointsVector_buf {
+ pointVec_t &points;
+ mutable unsigned int rseed;
+public:
+ static const size_t grainSize = cfg::GENERATE_GS;
+
+ FillRNDPointsVector_buf(pointVec_t& _points)
+ : points(_points), rseed(1) {}
+
+ FillRNDPointsVector_buf(const FillRNDPointsVector_buf& other)
+ : points(other.points), rseed(other.rseed+1) {}
+
+ void operator()(const range_t& range) const {
+ const size_t i_end = range.end();
+ size_t count = 0, j = 0;
+ point_t tmp_vec[grainSize];
+ for(size_t i=range.begin(); i!=i_end; ++i) {
+ tmp_vec[j++] = util::GenerateRNDPoint<double>(count, rseed);
+ }
+ appendVector(tmp_vec, j, points);
+ }
+};
+
+void initialize_buf(pointVec_t &points) {
+ points.clear();
+
+ tbb::parallel_for(range_t(0, cfg::MAXPOINTS,
+ FillRNDPointsVector_buf::grainSize), FillRNDPointsVector_buf(points));
+}
+
+class FindXExtremum {
+public:
+ typedef enum {
+ minX, maxX
+ } extremumType;
+
+ static const size_t grainSize = cfg::FINDEXT_GS;
+
+ FindXExtremum(const pointVec_t& points_, extremumType exType_)
+ : points(points_), exType(exType_), extrXPoint(points[0]) {}
+
+ FindXExtremum(const FindXExtremum& fxex, tbb::split)
+ : points(fxex.points), exType(fxex.exType), extrXPoint(fxex.extrXPoint) {}
+
+ void operator()(const range_t& range) {
+ const size_t i_end = range.end();
+ if(!range.empty()) {
+ for(size_t i = range.begin(); i != i_end; ++i) {
+ if(closerToExtremum(points[i])) {
+ extrXPoint = points[i];
+ }
+ }
+ }
+ }
+
+ void join(const FindXExtremum &rhs) {
+ if(closerToExtremum(rhs.extrXPoint)) {
+ extrXPoint = rhs.extrXPoint;
+ }
+ }
+
+ point_t extremeXPoint() {
+ return extrXPoint;
+ }
+
+private:
+ const pointVec_t &points;
+ const extremumType exType;
+ point_t extrXPoint;
+ bool closerToExtremum(const point_t &p) const {
+ switch(exType) {
+ case minX:
+ return p.x<extrXPoint.x; break;
+ case maxX:
+ return p.x>extrXPoint.x; break;
+ }
+ return false; // avoid warning
+ }
+};
+
+template <FindXExtremum::extremumType type>
+point_t extremum(const pointVec_t &P) {
+ FindXExtremum fxBody(P, type);
+ tbb::parallel_reduce(range_t(0, P.size(), FindXExtremum::grainSize), fxBody);
+ return fxBody.extremeXPoint();
+}
+
+class SplitByCP_buf {
+ const pointVec_t &initialSet;
+ pointVec_t &reducedSet;
+ point_t p1, p2;
+ point_t farPoint;
+ double howFar;
+public:
+ static const size_t grainSize = cfg::DIVIDE_GS;
+
+ SplitByCP_buf( point_t _p1, point_t _p2,
+ const pointVec_t &_initialSet, pointVec_t &_reducedSet)
+ : p1(_p1), p2(_p2),
+ initialSet(_initialSet), reducedSet(_reducedSet),
+ howFar(0), farPoint(p1) {}
+
+ SplitByCP_buf(SplitByCP_buf& sbcp, tbb::split)
+ : p1(sbcp.p1), p2(sbcp.p2),
+ initialSet(sbcp.initialSet), reducedSet(sbcp.reducedSet),
+ howFar(0), farPoint(p1) {}
+
+ void operator()(const range_t& range) {
+ const size_t i_end = range.end();
+ size_t j = 0;
+ double cp;
+ point_t tmp_vec[grainSize];
+ for(size_t i = range.begin(); i != i_end; ++i) {
+ if( (initialSet[i] != p1) && (initialSet[i] != p2) ) {
+ cp = util::cross_product(p1, p2, initialSet[i]);
+ if(cp>0) {
+ tmp_vec[j++] = initialSet[i];
+ if(cp>howFar) {
+ farPoint = initialSet[i];
+ howFar = cp;
+ }
+ }
+ }
+ }
+
+ appendVector(tmp_vec, j, reducedSet);
+ }
+
+ void join(const SplitByCP_buf& rhs) {
+ if(rhs.howFar>howFar) {
+ howFar = rhs.howFar;
+ farPoint = rhs.farPoint;
+ }
+ }
+
+ point_t farthestPoint() const {
+ return farPoint;
+ }
+};
+
+point_t divide_buf(const pointVec_t &P, pointVec_t &P_reduced,
+ const point_t &p1, const point_t &p2) {
+ SplitByCP_buf sbcpb(p1, p2, P, P_reduced);
+ tbb::parallel_reduce(range_t(0, P.size(), SplitByCP_buf::grainSize), sbcpb);
+
+ if(util::VERBOSE) {
+ std::stringstream ss;
+ ss << P.size() << " nodes in bucket"<< ", "
+ << "dividing by: [ " << p1 << ", " << p2 << " ], "
+ << "farthest node: " << sbcpb.farthestPoint();
+ util::OUTPUT.push_back(ss.str());
+ }
+
+ return sbcpb.farthestPoint();
+}
+
+void divide_and_conquer_buf(const pointVec_t &P, pointVec_t &H,
+ point_t p1, point_t p2) {
+ if (P.size()<2) {
+ H.push_back(p1);
+ appendVector(P, H);
+ }
+ else {
+ pointVec_t P_reduced;
+ pointVec_t H1, H2;
+
+ point_t p_far = divide_buf(P, P_reduced, p1, p2);
+
+ divide_and_conquer_buf(P_reduced, H1, p1, p_far);
+ divide_and_conquer_buf(P_reduced, H2, p_far, p2);
+
+ appendVector(H1, H);
+ appendVector(H2, H);
+ }
+}
+
+void quickhull_buf(const pointVec_t &points, pointVec_t &hull) {
+ hull.clear();
+
+ point_t p_maxx = extremum<FindXExtremum::maxX>(points);
+ point_t p_minx = extremum<FindXExtremum::minX>(points);
+
+ pointVec_t H;
+
+ divide_and_conquer_buf(points, hull, p_maxx, p_minx);
+ divide_and_conquer_buf(points, H, p_minx, p_maxx);
+
+ appendVector(H, hull);
+}
+
+int main(int argc, char* argv[]) {
+ util::ParseInputArgs(argc, argv);
+
+ pointVec_t points;
+ pointVec_t hull;
+ size_t nthreads;
+ util::my_time_t tm_init, tm_start, tm_end;
+
+ std::cout << " Starting TBB-bufferred version of QUICK HULL algorithm" << std::endl;
+
+ for(nthreads=cfg::NUM_THREADS_START; nthreads<=cfg::NUM_THREADS_END;
+ ++nthreads) {
+ tbb::task_scheduler_init init(nthreads);
+ tm_init = util::gettime();
+ initialize_buf(points);
+ tm_start = util::gettime();
+ quickhull_buf(points, hull);
+ tm_end = util::gettime();
+
+ util::WriteResults(nthreads, util::time_diff(tm_init, tm_start),
+ util::time_diff(tm_start, tm_end));
+ }
+
+ return 0;
+}
diff --git a/examples/parallel_reduce/convex_hull/index.html b/examples/parallel_reduce/convex_hull/index.html
new file mode 100644
index 0000000..009148b
--- /dev/null
+++ b/examples/parallel_reduce/convex_hull/index.html
@@ -0,0 +1,55 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+Parallel version of convex hull algorithm (quick hull).
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="convex_hull_sample.cpp">convex_hull_sample.cpp</A>
+<DD>Source code for TBB version of example.
+<DT><A HREF="convex_hull_bench.cpp">convex_hull_bench.cpp</A>
+<DD>Source code for version of example that compares serial and TBB buffered and unbuffered implementations.
+<DT><A HREF="convex_hull.h">convex_hull.h</A>
+<DD>Include file for example.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="vc7.1">vc7.1</A>
+<DD>Contains Microsoft* Visual Studio* .NET 2003 workspace for building and running the example.
+<DT><A HREF="vc8">vc8</A>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example.
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+
+<H2>Usage</H2>
+<DL>
+<DT><TT>convex_hull_sample [<I>S</I>] [<I>M</I>[:<I>N</I>]] [-v]</TT>
+<DD><I>S</I> is the number of points (problem size).
+ <I>M:N</I> are a range of numbers of threads to be used.
+ Use the -v option to turn on verbose output.
+<DT>To run a short version of this example, e.g., for use with Intel® Threading Tools:
+<DD>Build a <I>debug</I> version of the example
+ (see the <A HREF=../../index.html#build>build directions</A>).
+ <BR>Run it with a small problem size and the desired number of threads, e.g., <TT>convex_hull_sample 500000 4</TT>.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright © 2005-2007 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
diff --git a/examples/parallel_reduce/convex_hull/vc7.1/convex_hull.sln b/examples/parallel_reduce/convex_hull/vc7.1/convex_hull.sln
new file mode 100644
index 0000000..429292e
--- /dev/null
+++ b/examples/parallel_reduce/convex_hull/vc7.1/convex_hull.sln
@@ -0,0 +1,32 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convex_hull_bench", "convex_hull_bench.vcproj", "{6DF21C04-95F4-4FF0-89F3-3688888E10D5}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convex_hull_sample", "convex_hull_sample.vcproj", "{B4A47D64-981B-4167-AE3D-CDAA8E18D2B3}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {6DF21C04-95F4-4FF0-89F3-3688888E10D5}.Debug.ActiveCfg = Debug|Win32
+ {6DF21C04-95F4-4FF0-89F3-3688888E10D5}.Debug.Build.0 = Debug|Win32
+ {6DF21C04-95F4-4FF0-89F3-3688888E10D5}.Release.ActiveCfg = Release|Win32
+ {6DF21C04-95F4-4FF0-89F3-3688888E10D5}.Release.Build.0 = Release|Win32
+ {B4A47D64-981B-4167-AE3D-CDAA8E18D2B3}.Debug.ActiveCfg = Debug|Win32
+ {B4A47D64-981B-4167-AE3D-CDAA8E18D2B3}.Debug.Build.0 = Debug|Win32
+ {B4A47D64-981B-4167-AE3D-CDAA8E18D2B3}.Release.ActiveCfg = Release|Win32
+ {B4A47D64-981B-4167-AE3D-CDAA8E18D2B3}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionItems) = postSolution
+ ..\index.html = ..\index.html
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/examples/parallel_reduce/convex_hull/vc7.1/convex_hull.suo b/examples/parallel_reduce/convex_hull/vc7.1/convex_hull.suo
new file mode 100644
index 0000000..601009e
Binary files /dev/null and b/examples/parallel_reduce/convex_hull/vc7.1/convex_hull.suo differ
diff --git a/examples/parallel_reduce/convex_hull/vc7.1/convex_hull_bench.vcproj b/examples/parallel_reduce/convex_hull/vc7.1/convex_hull_bench.vcproj
new file mode 100644
index 0000000..6884723
--- /dev/null
+++ b/examples/parallel_reduce/convex_hull/vc7.1/convex_hull_bench.vcproj
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="convex_hull_bench"
+ ProjectGUID="{6DF21C04-95F4-4FF0-89F3-3688888E10D5}"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+ <File
+ RelativePath="..\convex_hull_bench.cpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+ <File
+ RelativePath="..\convex_hull.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/parallel_reduce/convex_hull/vc7.1/convex_hull_sample.vcproj b/examples/parallel_reduce/convex_hull/vc7.1/convex_hull_sample.vcproj
new file mode 100644
index 0000000..346bffc
--- /dev/null
+++ b/examples/parallel_reduce/convex_hull/vc7.1/convex_hull_sample.vcproj
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="convex_hull_sample"
+ ProjectGUID="{B4A47D64-981B-4167-AE3D-CDAA8E18D2B3}"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+ <File
+ RelativePath="..\convex_hull_sample.cpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+ <File
+ RelativePath="..\convex_hull.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/parallel_reduce/convex_hull/vc8/convex_hull.sln b/examples/parallel_reduce/convex_hull/vc8/convex_hull.sln
new file mode 100644
index 0000000..e567081
--- /dev/null
+++ b/examples/parallel_reduce/convex_hull/vc8/convex_hull.sln
@@ -0,0 +1,35 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convex_hull_benchmark", "convex_hull_benchmark.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A252A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "convex_hull_sample", "convex_hull_sample.vcproj", "{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.Build.0 = Debug|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.ActiveCfg = Debug|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.Build.0 = Debug|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.ActiveCfg = Release|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.Build.0 = Release|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.ActiveCfg = Release|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.Build.0 = Release|x64
+ {5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Debug|Win32.Build.0 = Debug|Win32
+ {5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Debug|x64.ActiveCfg = Debug|x64
+ {5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Debug|x64.Build.0 = Debug|x64
+ {5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Release|Win32.ActiveCfg = Release|Win32
+ {5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Release|Win32.Build.0 = Release|Win32
+ {5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Release|x64.ActiveCfg = Release|x64
+ {5F897A77-EBD9-4462-94D4-06E2ADE47F3B}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/examples/parallel_reduce/convex_hull/vc8/convex_hull.suo b/examples/parallel_reduce/convex_hull/vc8/convex_hull.suo
new file mode 100644
index 0000000..2e4ad4c
Binary files /dev/null and b/examples/parallel_reduce/convex_hull/vc8/convex_hull.suo differ
diff --git a/examples/parallel_reduce/convex_hull/vc8/convex_hull_benchmark.vcproj b/examples/parallel_reduce/convex_hull/vc8/convex_hull_benchmark.vcproj
new file mode 100644
index 0000000..0c93fea
--- /dev/null
+++ b/examples/parallel_reduce/convex_hull/vc8/convex_hull_benchmark.vcproj
@@ -0,0 +1,362 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="convex_hull_benchmark"
+ ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A252A}"
+ RootNamespace="convex_hull_benchmark"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy /Y "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy /Y "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy /Y "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy /Y "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\convex_hull_bench.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header files"
+ >
+ <File
+ RelativePath="..\convex_hull.h"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\index.html"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/parallel_reduce/convex_hull/vc8/convex_hull_sample.vcproj b/examples/parallel_reduce/convex_hull/vc8/convex_hull_sample.vcproj
new file mode 100644
index 0000000..c6b6823
--- /dev/null
+++ b/examples/parallel_reduce/convex_hull/vc8/convex_hull_sample.vcproj
@@ -0,0 +1,360 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="convex_hull_sample"
+ ProjectGUID="{5F897A77-EBD9-4462-94D4-06E2ADE47F3B}"
+ RootNamespace="convex_hull_sample"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy /Y "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy /Y "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy /Y "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy /Y "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\convex_hull_sample.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath="..\convex_hull.h"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/parallel_reduce/convex_hull/xcode/convex_hull.xcodeproj/project.pbxproj b/examples/parallel_reduce/convex_hull/xcode/convex_hull.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..ecd0d04
--- /dev/null
+++ b/examples/parallel_reduce/convex_hull/xcode/convex_hull.xcodeproj/project.pbxproj
@@ -0,0 +1,434 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 42;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ A146114A0B94631F000C6B18 /* convex_hull_bench.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14611490B94631F000C6B18 /* convex_hull_bench.cpp */; };
+ A1F593A60B8F042A00073279 /* convex_hull_sample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* convex_hull_sample.cpp */; };
+ A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+ A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+ A1F594FC0B8F4F1000073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+ A1F594FD0B8F4F1800073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 8DD76F690486A84900D96B5E /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 12;
+ dstPath = "";
+ dstSubfolderSpec = 16;
+ files = (
+ A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A1F594F40B8F4E7700073279 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 16;
+ files = (
+ A1F594FD0B8F4F1800073279 /* libtbb.dylib in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ A14611490B94631F000C6B18 /* convex_hull_bench.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = convex_hull_bench.cpp; path = ../convex_hull_bench.cpp; sourceTree = SOURCE_ROOT; };
+ A146114C0B9463CB000C6B18 /* convex_hull.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = convex_hull.h; path = ../convex_hull.h; sourceTree = SOURCE_ROOT; };
+ A1F593A50B8F042A00073279 /* convex_hull_sample.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = convex_hull_sample.cpp; path = ../convex_hull_sample.cpp; sourceTree = SOURCE_ROOT; };
+ A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+ A1F594EB0B8F4B5600073279 /* convex_hull_bench */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = convex_hull_bench; sourceTree = BUILT_PRODUCTS_DIR; };
+ A1F594FA0B8F4EE000073279 /* convex_hull_sample */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = convex_hull_sample; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8DD76F660486A84900D96B5E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A1F594E90B8F4B5600073279 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F594FC0B8F4F1000073279 /* libtbb.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 08FB7794FE84155DC02AAC07 /* convex_hull */ = {
+ isa = PBXGroup;
+ children = (
+ 08FB7795FE84155DC02AAC07 /* Source */,
+ A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+ 1AB674ADFE9D54B511CA2CBB /* Products */,
+ );
+ name = convex_hull;
+ sourceTree = "<group>";
+ };
+ 08FB7795FE84155DC02AAC07 /* Source */ = {
+ isa = PBXGroup;
+ children = (
+ A146114C0B9463CB000C6B18 /* convex_hull.h */,
+ A14611490B94631F000C6B18 /* convex_hull_bench.cpp */,
+ A1F593A50B8F042A00073279 /* convex_hull_sample.cpp */,
+ );
+ name = Source;
+ sourceTree = "<group>";
+ };
+ 1AB674ADFE9D54B511CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ A1F594EB0B8F4B5600073279 /* convex_hull_bench */,
+ A1F594FA0B8F4EE000073279 /* convex_hull_sample */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ A1F593B30B8F06F900073279 /* libtbb.dylib */,
+ );
+ name = "External Frameworks and Libraries";
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8DD76F620486A84900D96B5E /* convex_hull_sample */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "convex_hull_sample" */;
+ buildPhases = (
+ 8DD76F640486A84900D96B5E /* Sources */,
+ 8DD76F660486A84900D96B5E /* Frameworks */,
+ 8DD76F690486A84900D96B5E /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = convex_hull_sample;
+ productInstallPath = "$(HOME)/bin";
+ productName = convex_hull;
+ productReference = A1F594FA0B8F4EE000073279 /* convex_hull_sample */;
+ productType = "com.apple.product-type.tool";
+ };
+ A1F594EA0B8F4B5600073279 /* convex_hull_bench */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = A1F594EE0B8F4B8200073279 /* Build configuration list for PBXNativeTarget "convex_hull_bench" */;
+ buildPhases = (
+ A1F594E80B8F4B5600073279 /* Sources */,
+ A1F594E90B8F4B5600073279 /* Frameworks */,
+ A1F594F40B8F4E7700073279 /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = convex_hull_bench;
+ productName = convex_hull_bench;
+ productReference = A1F594EB0B8F4B5600073279 /* convex_hull_bench */;
+ productType = "com.apple.product-type.tool";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 08FB7793FE84155DC02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "convex_hull" */;
+ hasScannedForEncodings = 1;
+ mainGroup = 08FB7794FE84155DC02AAC07 /* convex_hull */;
+ projectDirPath = "";
+ targets = (
+ 8DD76F620486A84900D96B5E /* convex_hull_sample */,
+ A1F594EA0B8F4B5600073279 /* convex_hull_bench */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8DD76F640486A84900D96B5E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F593A60B8F042A00073279 /* convex_hull_sample.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A1F594E80B8F4B5600073279 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A146114A0B94631F000C6B18 /* convex_hull_bench.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 1DEB923208733DC60010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = convex_hull_sample;
+ ZERO_LINK = NO;
+ };
+ name = Debug;
+ };
+ 1DEB923308733DC60010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = convex_hull_sample;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 1DEB923608733DC60010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Debug;
+ };
+ 1DEB923708733DC60010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Release;
+ };
+ A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = convex_hull_sample;
+ ZERO_LINK = NO;
+ };
+ name = Debug64;
+ };
+ A1F593C70B8F0E6E00073279 /* Release64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = convex_hull_sample;
+ ZERO_LINK = NO;
+ };
+ name = Release64;
+ };
+ A1F593C80B8F0E6E00073279 /* Debug64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-m64",
+ );
+ OTHER_LDFLAGS = "-m64";
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Debug64;
+ };
+ A1F593C90B8F0E6E00073279 /* Release64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-m64",
+ );
+ OTHER_LDFLAGS = "-m64";
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Release64;
+ };
+ A1F594EF0B8F4B8200073279 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PREBINDING = NO;
+ PRODUCT_NAME = convex_hull_bench;
+ ZERO_LINK = NO;
+ };
+ name = Debug;
+ };
+ A1F594F00B8F4B8200073279 /* Debug64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PREBINDING = NO;
+ PRODUCT_NAME = convex_hull_bench;
+ ZERO_LINK = NO;
+ };
+ name = Debug64;
+ };
+ A1F594F10B8F4B8200073279 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PREBINDING = NO;
+ PRODUCT_NAME = convex_hull_bench;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ A1F594F20B8F4B8200073279 /* Release64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PREBINDING = NO;
+ PRODUCT_NAME = convex_hull_bench;
+ ZERO_LINK = NO;
+ };
+ name = Release64;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "convex_hull_sample" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB923208733DC60010E9CD /* Debug */,
+ A1F593C60B8F0E6E00073279 /* Debug64 */,
+ 1DEB923308733DC60010E9CD /* Release */,
+ A1F593C70B8F0E6E00073279 /* Release64 */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "convex_hull" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB923608733DC60010E9CD /* Debug */,
+ A1F593C80B8F0E6E00073279 /* Debug64 */,
+ 1DEB923708733DC60010E9CD /* Release */,
+ A1F593C90B8F0E6E00073279 /* Release64 */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ A1F594EE0B8F4B8200073279 /* Build configuration list for PBXNativeTarget "convex_hull_bench" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ A1F594EF0B8F4B8200073279 /* Debug */,
+ A1F594F00B8F4B8200073279 /* Debug64 */,
+ A1F594F10B8F4B8200073279 /* Release */,
+ A1F594F20B8F4B8200073279 /* Release64 */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/examples/parallel_reduce/index.html b/examples/parallel_reduce/index.html
new file mode 100644
index 0000000..7264a49
--- /dev/null
+++ b/examples/parallel_reduce/index.html
@@ -0,0 +1,27 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory has examples of the template <code>parallel_reduce</code>.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="convex_hull/index.html">convex_hull</A>
+<DD>Parallel version of convex hull algorithm (quick hull).
+<DT><A HREF="primes/index.html">primes</A>
+<DD>Parallel version of the Sieve of Eratosthenes.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright © 2005-2007 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/examples/parallel_reduce/primes/Makefile b/examples/parallel_reduce/primes/Makefile
new file mode 100644
index 0000000..b966160
--- /dev/null
+++ b/examples/parallel_reduce/primes/Makefile
@@ -0,0 +1,45 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# GNU Makefile that builds and runs example.
+PROG=primes
+
+# The C++ compiler
+#CXX=g++
+
+all: release test
+
+release: *.cpp
+ $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb
+
+debug: *.cpp
+ $(CXX) -O0 -g -DTBB_DO_ASSERT $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug
+
+clean:
+ rm -f $(PROG) *.o *.d
+
+test:
+ ./$(PROG) 100000000 0:4
diff --git a/examples/parallel_reduce/primes/Makefile.windows b/examples/parallel_reduce/primes/Makefile.windows
new file mode 100644
index 0000000..036be9e
--- /dev/null
+++ b/examples/parallel_reduce/primes/Makefile.windows
@@ -0,0 +1,45 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+PROG=Primes
+
+# The C++ compiler options
+CXX = cl.exe
+MYCXXFLAGS=/TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
+MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO /OUT:$(PROG).exe $(LDFLAGS)
+
+all: release test
+release:
+ $(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(MYLDFLAGS)
+debug:
+ $(CXX) *.cpp /MDd /Od /Zi /D TBB_DO_ASSERT /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(MYLDFLAGS)
+clean:
+ @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
+test:
+ $(PROG) 100000000 0:4
diff --git a/examples/parallel_reduce/primes/index.html b/examples/parallel_reduce/primes/index.html
new file mode 100644
index 0000000..d47de47
--- /dev/null
+++ b/examples/parallel_reduce/primes/index.html
@@ -0,0 +1,52 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+Parallel version of the Sieve of Eratosthenes.
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="primes.cpp">primes.cpp</A>
+<DD>Source code for example.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="vc7.1">vc7.1</A>
+<DD>Contains Microsoft* Visual Studio* .NET 2003 workspace for building and running the example.
+<DT><A HREF="vc8">vc8</A>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example.
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+
+<H2>Usage</H2>
+<DL>
+<DT><TT>primes [<I>S</I>] [<I>M</I>[:<I>N</I>]] [<I>G</I>]</TT>
+<DD><I>S</I> is the problem size (number of primes).
+ <I>M</I> and <I>N</I> are a range of numbers of threads to be used.
+ <I>G</I> is an optional grain size.
+<DT>To run a short version of this example, e.g., for use with Intel® Threading Tools:
+<DD>Build a <I>debug</I> version of the example
+ (see the <A HREF=../../index.html#build>build directions</A>).
+ <BR>Run it with a small problem size and the desired number of threads, e.g., <TT>primes 100000 4</TT>.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright © 2005-2007 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/examples/parallel_reduce/primes/primes.cpp b/examples/parallel_reduce/primes/primes.cpp
new file mode 100644
index 0000000..dc327aa
--- /dev/null
+++ b/examples/parallel_reduce/primes/primes.cpp
@@ -0,0 +1,400 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+// Example program that computes number of prime numbers up to n,
+// where n is a command line argument. The algorithm here is a
+// fairly efficient version of the sieve of Eratosthenes.
+// The parallel version demonstrates how to use parallel_reduce,
+// and in particular how to exploit lazy splitting.
+
+#include <cassert>
+#include <cstdio>
+#include <cstring>
+#include <math.h>
+#include <cstdlib>
+#include <cctype>
+#include "tbb/parallel_reduce.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tick_count.h"
+
+using namespace std;
+using namespace tbb;
+
+typedef unsigned long Number;
+
+//! If true, then print primes on stdout.
+static bool PrintPrimes = false;
+
+//! Grainsize parameter
+static Number GrainSize = 1000;
+
+class Multiples {
+ inline Number strike( Number start, Number limit, Number stride ) {
+ // Hoist "my_is_composite" into register for sake of speed.
+ bool* is_composite = my_is_composite;
+ assert( stride>=2 );
+ for( ;start<limit; start+=stride )
+ is_composite[start] = true;
+ return start;
+ }
+ //! Window into conceptual sieve
+ bool* my_is_composite;
+
+ //! Indexes into window
+ /** my_striker[k] is an index into my_composite corresponding to
+ an odd multiple multiple of my_factor[k]. */
+ Number* my_striker;
+
+ //! Prime numbers less than m.
+ Number* my_factor;
+public:
+ //! Number of factors in my_factor.
+ Number n_factor;
+ Number m;
+ Multiples( Number n ) :
+ is_forked_copy(false)
+ {
+ m = Number(sqrt(double(n)));
+ // Round up to even
+ m += m&1;
+ my_is_composite = new bool[m/2];
+ my_striker = new Number[m/2];
+ my_factor = new Number[m/2];
+ n_factor = 0;
+ memset( my_is_composite, 0, m/2 );
+ for( Number i=3; i<m; i+=2 ) {
+ if( !my_is_composite[i/2] ) {
+ if( PrintPrimes )
+ printf("%d\n",(int)i);
+ my_striker[n_factor] = strike( i/2, m/2, i );
+ my_factor[n_factor++] = i;
+ }
+ }
+ }
+
+ //! Find primes in range [start,window_size), advancing my_striker as we go.
+ /** Returns number of primes found. */
+ Number find_primes_in_window( Number start, Number window_size ) {
+ bool* is_composite = my_is_composite;
+ memset( is_composite, 0, window_size/2 );
+ for( size_t k=0; k<n_factor; ++k )
+ my_striker[k] = strike( my_striker[k]-m/2, window_size/2, my_factor[k] );
+ Number count = 0;
+ for( Number k=0; k<window_size/2; ++k ) {
+ if( !is_composite[k] ) {
+ if( PrintPrimes )
+ printf("%ld\n",long(start+2*k+1));
+ ++count;
+ }
+ }
+ return count;
+ }
+
+ ~Multiples() {
+ if( !is_forked_copy )
+ delete[] my_factor;
+ delete[] my_striker;
+ delete[] my_is_composite;
+ }
+
+ //------------------------------------------------------------------------
+ // Begin extra members required by parallel version
+ //------------------------------------------------------------------------
+
+ //! True if this instance was forked from another instance.
+ const bool is_forked_copy;
+
+ Multiples( const Multiples& f, split ) :
+ n_factor(f.n_factor),
+ m(f.m),
+ my_is_composite(NULL),
+ my_striker(NULL),
+ my_factor(f.my_factor),
+ is_forked_copy(true)
+ {}
+
+ bool is_initialized() const {
+ return my_is_composite!=NULL;
+ }
+
+ void initialize( Number start ) {
+ assert( start>=1 );
+ my_is_composite = new bool[m/2];
+ my_striker = new Number[m/2];
+ for( size_t k=0; k<n_factor; ++k ) {
+ Number f = my_factor[k];
+ Number p = (start-1)/f*f % m;
+ my_striker[k] = (p&1 ? p+2*f : p+f)/2;
+ assert( m/2<=my_striker[k] );
+ }
+ }
+ //------------------------------------------------------------------------
+ // End extra methods required by parallel version
+ //------------------------------------------------------------------------
+};
+
+//! Count number of primes between 0 and n
+/** This is the serial version. */
+Number SerialCountPrimes( Number n ) {
+ // Two is special case
+ Number count = n>=2;
+ if( n>=3 ) {
+ Multiples multiples(n);
+ count += multiples.n_factor;
+ if( PrintPrimes )
+ printf("---\n");
+ Number window_size = multiples.m;
+ for( Number j=multiples.m; j<=n; j+=window_size ) {
+ if( j+window_size>n+1 )
+ window_size = n+1-j;
+ count += multiples.find_primes_in_window( j, window_size );
+ }
+ }
+ return count;
+}
+
+//! Range of a sieve window.
+class SieveRange {
+ //! Width of full-size window into sieve.
+ const Number my_stride;
+
+ //! Always multiple of my_stride
+ Number my_begin;
+
+ //! One past last number in window.
+ Number my_end;
+
+ //! Width above which it is worth forking.
+ const Number my_grainsize;
+
+ bool assert_okay() const {
+ assert( my_begin%my_stride==0 );
+ assert( my_begin<=my_end );
+ assert( my_stride<=my_grainsize );
+ return true;
+ }
+public:
+ //------------------------------------------------------------------------
+ // Begin signatures required by parallel_reduce
+ //------------------------------------------------------------------------
+ bool is_divisible() const {return my_end-my_begin>my_grainsize;}
+ bool empty() const {return my_end<=my_begin;}
+ SieveRange( SieveRange& r, split ) :
+ my_stride(r.my_stride),
+ my_grainsize(r.my_grainsize),
+ my_end(r.my_end)
+ {
+ assert( r.is_divisible() );
+ assert( r.assert_okay() );
+ Number middle = r.my_begin + (r.my_end-r.my_begin+r.my_stride-1)/2;
+ middle = middle/my_stride*my_stride;
+ my_begin = middle;
+ r.my_end = middle;
+ assert( assert_okay() );
+ assert( r.assert_okay() );
+ }
+ //------------------------------------------------------------------------
+ // End of signatures required by parallel_reduce
+ //------------------------------------------------------------------------
+ Number begin() const {return my_begin;}
+ Number end() const {return my_end;}
+ SieveRange( Number begin, Number end, Number stride, Number grainsize ) :
+ my_begin(begin),
+ my_end(end),
+ my_stride(stride),
+ my_grainsize(grainsize<stride?stride:grainsize)
+ {
+ assert( assert_okay() );
+ }
+};
+
+//! Loop body for parallel_reduce.
+/** parallel_reduce splits the sieve into subsieves.
+ Each subsieve handles a subrange of [0..n]. */
+class Sieve {
+public:
+ //! Prime multiples to consider, and working storage for this subsieve.
+ Multiples multiples;
+
+ //! Number of primes found so far by this subsieve.
+ Number count;
+
+ //! Construct Sieve for counting primes in [0..n].
+ Sieve( Number n ) :
+ multiples(n),
+ count(0)
+ {}
+
+ //------------------------------------------------------------------------
+ // Begin signatures required by parallel_reduce
+ //------------------------------------------------------------------------
+ void operator()( const SieveRange& r ) {
+ Number m = multiples.m;
+ if( multiples.is_initialized() ) {
+ // Simply reuse "multiples" structure from previous window
+ // This works because parallel_reduce always applies
+ // *this from left to right.
+ } else {
+ // Need to initialize "multiples" because *this is a forked copy
+ // that needs to be set up to start at r.begin().
+ multiples.initialize( r.begin() );
+ }
+ Number window_size = m;
+ for( Number j=r.begin(); j<r.end(); j+=window_size ) {
+ assert( j%multiples.m==0 );
+ if( j+window_size>r.end() )
+ window_size = r.end()-j;
+ count += multiples.find_primes_in_window( j, window_size );
+ }
+ }
+ void join( Sieve& other ) {
+ count += other.count;
+ }
+ Sieve( Sieve& other, split ) :
+ multiples(other.multiples,split()),
+ count(0)
+ {}
+ //------------------------------------------------------------------------
+ // End of signatures required by parallel_reduce
+ //------------------------------------------------------------------------
+};
+
+//! Count number of primes between 0 and n
+/** This is the parallel version. */
+Number ParallelCountPrimes( Number n ) {
+ // Two is special case
+ Number count = n>=2;
+ if( n>=3 ) {
+ Sieve s(n);
+ count += s.multiples.n_factor;
+ if( PrintPrimes )
+ printf("---\n");
+ parallel_reduce( SieveRange( s.multiples.m, n, s.multiples.m, GrainSize ), s );
+ count += s.count;
+ }
+ return count;
+}
+
+//------------------------------------------------------------------------
+// Code below this line constitutes the driver that calls SerialCountPrimes
+// and ParallelCountPrimes.
+//------------------------------------------------------------------------
+
+//! A closed range of Number.
+struct NumberRange {
+ Number low;
+ Number high;
+ void set_from_string( const char* s );
+ NumberRange( Number low_, Number high_ ) : low(low_), high(high_) {}
+};
+
+void NumberRange::set_from_string( const char* s ) {
+ char* end;
+ high = low = strtol(s,&end,0);
+ switch( *end ) {
+ case ':':
+ high = strtol(end+1,0,0);
+ break;
+ case '\0':
+ break;
+ default:
+ printf("unexpected character = %c\n",*end);
+ }
+
+}
+
+//! Number of threads to use.
+static NumberRange NThread(0,4);
+
+//! If true, then at end wait for user to hit return
+static bool PauseFlag = false;
+
+//! Parse the command line.
+static Number ParseCommandLine( int argc, char* argv[] ) {
+ Number n = 100000000;
+ int i = 1;
+ if( i<argc && strcmp( argv[i], "pause" )==0 ) {
+ PauseFlag = true;
+ ++i;
+ }
+ if( i<argc && !isdigit(argv[i][0]) ) {
+ // Command line is garbled.
+ fprintf(stderr,"Usage: %s [['pause'] n [nthread [grainsize]]]\n", argv[0]);
+ fprintf(stderr,"where n is a positive integer [%lu]\n",n);
+ fprintf(stderr," nthread is a non-negative integer, or range of the form low:high [%ld:%lu]\n",NThread.low,NThread.high);
+ fprintf(stderr," grainsize is an optional postive integer [%lu]\n",GrainSize);
+ exit(1);
+ }
+ if( i<argc )
+ n = strtol(argv[i++],0,0);
+ if( i<argc )
+ NThread.set_from_string(argv[i++]);
+ if( i<argc )
+ GrainSize = strtol(argv[i++],0,0);
+ return n;
+}
+
+static void WaitForUser() {
+ char c;
+ printf("Press return to continue\n");
+ do {
+ c = getchar();
+ } while( c!='\n' );
+}
+
+int main( int argc, char* argv[] ) {
+ Number n = ParseCommandLine(argc,argv);
+
+ // Try different numbers of threads
+ for( Number p=NThread.low; p<=NThread.high; ++p ) {
+ task_scheduler_init init(task_scheduler_init::deferred);
+ // If p!=0, we are doing a parallel run
+ if( p )
+ init.initialize(p);
+
+ Number count;
+ tick_count t0 = tick_count::now();
+ if( p==0 ) {
+ count = SerialCountPrimes(n);
+ } else {
+ count = ParallelCountPrimes(n);
+ }
+ tick_count t1 = tick_count::now();
+
+ printf("#primes from [2..%lu] = %lu (%.2f sec with ",
+ (unsigned long)n, (unsigned long)count, (t1-t0).seconds());
+ if( p )
+ printf("%lu-way parallelism)\n", p );
+ else
+ printf("serial code)\n");
+ }
+ if( PauseFlag ) {
+ WaitForUser();
+ }
+ return 0;
+}
diff --git a/examples/parallel_reduce/primes/vc7.1/primes.sln b/examples/parallel_reduce/primes/vc7.1/primes.sln
new file mode 100644
index 0000000..0e51661
--- /dev/null
+++ b/examples/parallel_reduce/primes/vc7.1/primes.sln
@@ -0,0 +1,21 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "primes", "primes.vcproj", "{519446A2-AF27-429B-A5DF-625B8F034024}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {519446A2-AF27-429B-A5DF-625B8F034024}.Debug.ActiveCfg = Debug|Win32
+ {519446A2-AF27-429B-A5DF-625B8F034024}.Debug.Build.0 = Debug|Win32
+ {519446A2-AF27-429B-A5DF-625B8F034024}.Release.ActiveCfg = Release|Win32
+ {519446A2-AF27-429B-A5DF-625B8F034024}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/examples/parallel_reduce/primes/vc7.1/primes.suo b/examples/parallel_reduce/primes/vc7.1/primes.suo
new file mode 100644
index 0000000..2e62696
Binary files /dev/null and b/examples/parallel_reduce/primes/vc7.1/primes.suo differ
diff --git a/examples/parallel_reduce/primes/vc7.1/primes.vcproj b/examples/parallel_reduce/primes/vc7.1/primes.vcproj
new file mode 100644
index 0000000..ae6a3f8
--- /dev/null
+++ b/examples/parallel_reduce/primes/vc7.1/primes.vcproj
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="primes"
+ ProjectGUID="{519446A2-AF27-429B-A5DF-625B8F034024}"
+ RootNamespace="primes"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+ <File
+ RelativePath="..\primes.cpp">
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\index.html">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/parallel_reduce/primes/vc8/primes.sln b/examples/parallel_reduce/primes/vc8/primes.sln
new file mode 100644
index 0000000..089aa4f
--- /dev/null
+++ b/examples/parallel_reduce/primes/vc8/primes.sln
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "primes", "primes.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A252A}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|Win32.Build.0 = Debug|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.ActiveCfg = Debug|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A252A}.Debug|x64.Build.0 = Debug|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.ActiveCfg = Release|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|Win32.Build.0 = Release|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.ActiveCfg = Release|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A252A}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/examples/parallel_reduce/primes/vc8/primes.suo b/examples/parallel_reduce/primes/vc8/primes.suo
new file mode 100644
index 0000000..f3a244e
Binary files /dev/null and b/examples/parallel_reduce/primes/vc8/primes.suo differ
diff --git a/examples/parallel_reduce/primes/vc8/primes.vcproj b/examples/parallel_reduce/primes/vc8/primes.vcproj
new file mode 100644
index 0000000..4d37a26
--- /dev/null
+++ b/examples/parallel_reduce/primes/vc8/primes.vcproj
@@ -0,0 +1,352 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="primes"
+ ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A252A}"
+ RootNamespace="primes"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\primes.cpp"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\index.html"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/parallel_reduce/primes/xcode/primes.xcodeproj/project.pbxproj b/examples/parallel_reduce/primes/xcode/primes.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..935eb89
--- /dev/null
+++ b/examples/parallel_reduce/primes/xcode/primes.xcodeproj/project.pbxproj
@@ -0,0 +1,296 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 42;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ A1F593A60B8F042A00073279 /* primes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* primes.cpp */; };
+ A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+ A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 8DD76F690486A84900D96B5E /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 12;
+ dstPath = "";
+ dstSubfolderSpec = 16;
+ files = (
+ A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 8DD76F6C0486A84900D96B5E /* primes */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = primes; sourceTree = BUILT_PRODUCTS_DIR; };
+ A1F593A50B8F042A00073279 /* primes.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = primes.cpp; path = ../primes.cpp; sourceTree = SOURCE_ROOT; };
+ A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8DD76F660486A84900D96B5E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 08FB7794FE84155DC02AAC07 /* primes */ = {
+ isa = PBXGroup;
+ children = (
+ 08FB7795FE84155DC02AAC07 /* Source */,
+ A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+ 1AB674ADFE9D54B511CA2CBB /* Products */,
+ );
+ name = primes;
+ sourceTree = "<group>";
+ };
+ 08FB7795FE84155DC02AAC07 /* Source */ = {
+ isa = PBXGroup;
+ children = (
+ A1F593A50B8F042A00073279 /* primes.cpp */,
+ );
+ name = Source;
+ sourceTree = "<group>";
+ };
+ 1AB674ADFE9D54B511CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8DD76F6C0486A84900D96B5E /* primes */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ A1F593B30B8F06F900073279 /* libtbb.dylib */,
+ );
+ name = "External Frameworks and Libraries";
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8DD76F620486A84900D96B5E /* primes */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "primes" */;
+ buildPhases = (
+ 8DD76F640486A84900D96B5E /* Sources */,
+ 8DD76F660486A84900D96B5E /* Frameworks */,
+ 8DD76F690486A84900D96B5E /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = primes;
+ productInstallPath = "$(HOME)/bin";
+ productName = primes;
+ productReference = 8DD76F6C0486A84900D96B5E /* primes */;
+ productType = "com.apple.product-type.tool";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 08FB7793FE84155DC02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "primes" */;
+ hasScannedForEncodings = 1;
+ mainGroup = 08FB7794FE84155DC02AAC07 /* primes */;
+ projectDirPath = "";
+ targets = (
+ 8DD76F620486A84900D96B5E /* primes */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8DD76F640486A84900D96B5E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F593A60B8F042A00073279 /* primes.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 1DEB923208733DC60010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = primes;
+ ZERO_LINK = NO;
+ };
+ name = Debug;
+ };
+ 1DEB923308733DC60010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = primes;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 1DEB923608733DC60010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Debug;
+ };
+ 1DEB923708733DC60010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Release;
+ };
+ A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = primes;
+ ZERO_LINK = NO;
+ };
+ name = Debug64;
+ };
+ A1F593C70B8F0E6E00073279 /* Release64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = primes;
+ ZERO_LINK = NO;
+ };
+ name = Release64;
+ };
+ A1F593C80B8F0E6E00073279 /* Debug64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-m64",
+ );
+ OTHER_LDFLAGS = "-m64";
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Debug64;
+ };
+ A1F593C90B8F0E6E00073279 /* Release64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-m64",
+ );
+ OTHER_LDFLAGS = "-m64";
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Release64;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "primes" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB923208733DC60010E9CD /* Debug */,
+ A1F593C60B8F0E6E00073279 /* Debug64 */,
+ 1DEB923308733DC60010E9CD /* Release */,
+ A1F593C70B8F0E6E00073279 /* Release64 */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "primes" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB923608733DC60010E9CD /* Debug */,
+ A1F593C80B8F0E6E00073279 /* Debug64 */,
+ 1DEB923708733DC60010E9CD /* Release */,
+ A1F593C90B8F0E6E00073279 /* Release64 */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/examples/parallel_while/index.html b/examples/parallel_while/index.html
new file mode 100644
index 0000000..6054cea
--- /dev/null
+++ b/examples/parallel_while/index.html
@@ -0,0 +1,25 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory has examples of the template <code>parallel_while</code>.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="parallel_preorder/index.html">parallel_preorder</A>
+<DD>Parallel preorder traversal of a graph.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright © 2005-2007 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/examples/parallel_while/parallel_preorder/Graph.cpp b/examples/parallel_while/parallel_preorder/Graph.cpp
new file mode 100644
index 0000000..5f75ec0
--- /dev/null
+++ b/examples/parallel_while/parallel_preorder/Graph.cpp
@@ -0,0 +1,106 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include <cstdio>
+#include "Graph.h"
+
+void Graph::create_random_dag( size_t number_of_nodes ) {
+ my_vertex_set.resize(number_of_nodes);
+ for( size_t k=0; k<number_of_nodes; ++k ) {
+ Cell& c = my_vertex_set[k];
+ int op = int((rand()>>8)%5u);
+ if( op>int(k) ) op = int(k);
+ switch( op ) {
+ default:
+ c.op = OP_VALUE;
+ c.value = Cell::value_type((float)k);
+ break;
+ case 1:
+ c.op = OP_NEGATE;
+ break;
+ case 2:
+ c.op = OP_SUB;
+ break;
+ case 3:
+ c.op = OP_ADD;
+ break;
+ case 4:
+ c.op = OP_MUL;
+ break;
+ }
+ for( int j=0; j<ArityOfOp[c.op]; ++j ) {
+ Cell& input = my_vertex_set[rand()%k];
+ c.input[j] = &input;
+ }
+ }
+}
+
+void Graph::print() {
+ for( size_t k=0; k<my_vertex_set.size(); ++k ) {
+ printf("Cell %d:",int(k));
+ for( size_t j=0; j<my_vertex_set[k].successor.size(); ++j )
+ printf(" %d",int(my_vertex_set[k].successor[j] - &my_vertex_set[0]));
+ printf("\n");
+ }
+}
+
+void Graph::get_root_set( std::vector<Cell*>& root_set ) {
+ for( size_t k=0; k<my_vertex_set.size(); ++k ) {
+ my_vertex_set[k].successor.clear();
+ }
+ root_set.clear();
+ for( size_t k=0; k<my_vertex_set.size(); ++k ) {
+ Cell& c = my_vertex_set[k];
+ c.ref_count = ArityOfOp[c.op];
+ for( int j=0; j<ArityOfOp[c.op]; ++j ) {
+ c.input[j]->successor.push_back(&c);
+ }
+ if( ArityOfOp[c.op]==0 )
+ root_set.push_back(&my_vertex_set[k]);
+ }
+}
+
+void Cell::update() {
+ switch( op ) {
+ case OP_VALUE:
+ break;
+ case OP_NEGATE:
+ value = -(input[0]->value);
+ break;
+ case OP_ADD:
+ value = input[0]->value + input[1]->value;
+ break;
+ case OP_SUB:
+ value = input[0]->value - input[1]->value;
+ break;
+ case OP_MUL:
+ value = input[0]->value * input[1]->value;
+ break;
+ }
+}
+
diff --git a/examples/parallel_while/parallel_preorder/Graph.h b/examples/parallel_while/parallel_preorder/Graph.h
new file mode 100644
index 0000000..290bacc
--- /dev/null
+++ b/examples/parallel_while/parallel_preorder/Graph.h
@@ -0,0 +1,90 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "Matrix.h"
+#include "tbb/atomic.h"
+#include <vector>
+
+namespace TBB = tbb;
+
+enum OpKind {
+ // Use Cell's value
+ OP_VALUE,
+ // Unary negation
+ OP_NEGATE,
+ // Addition
+ OP_ADD,
+ // Subtraction
+ OP_SUB,
+ // Multiplication
+ OP_MUL
+};
+
+static const int ArityOfOp[] = {0,1,2,2,2};
+
+class Cell {
+public:
+ //! Operation for this cell
+ OpKind op;
+
+ //! Inputs to this cell
+ Cell* input[2];
+
+ //! Type of value stored in a Cell
+ typedef Matrix value_type;
+
+ //! Value associated with this Cell
+ value_type value;
+
+ //! Set of cells that use this Cell as an input
+ std::vector<Cell*> successor;
+
+ //! Reference count of number of inputs that are not yet updated.
+ TBB::atomic<int> ref_count;
+
+ //! Update the Cell's value.
+ void update();
+
+ //! Default construtor
+ Cell() {}
+};
+
+//! A directed graph where the vertices are Cells.
+class Graph {
+ std::vector<Cell> my_vertex_set;
+public:
+ //! Create a random acyclic directed graph
+ void create_random_dag( size_t number_of_nodes );
+
+ //! Print the graph
+ void print();
+
+ //! Get set of cells that have no inputs.
+ void get_root_set( std::vector<Cell*>& root_set );
+};
+
diff --git a/examples/parallel_while/parallel_preorder/Makefile b/examples/parallel_while/parallel_preorder/Makefile
new file mode 100644
index 0000000..64d8142
--- /dev/null
+++ b/examples/parallel_while/parallel_preorder/Makefile
@@ -0,0 +1,45 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# GNU Makefile that builds and runs example.
+PROG=parallel_preorder
+
+# The C++ compiler
+#CXX=g++
+
+all: release test
+
+release: *.cpp
+ $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb
+
+debug: *.cpp
+ $(CXX) -O0 -g -DTBB_DO_ASSERT $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug
+
+clean:
+ rm -f $(PROG) *.o *.d
+
+test:
+ ./$(PROG) 1:4
diff --git a/examples/parallel_while/parallel_preorder/Makefile.windows b/examples/parallel_while/parallel_preorder/Makefile.windows
new file mode 100644
index 0000000..8f52240
--- /dev/null
+++ b/examples/parallel_while/parallel_preorder/Makefile.windows
@@ -0,0 +1,45 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+PROG=Parallel_Preorder
+
+# The C++ compiler options
+CXX = cl.exe
+MYCXXFLAGS=/TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CRT_SECURE_NO_DEPRECATE /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
+MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO /OUT:$(PROG).exe $(LDFLAGS)
+
+all: release test
+release:
+ $(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(MYLDFLAGS)
+debug:
+ $(CXX) *.cpp /MDd /Od /Zi /D TBB_DO_ASSERT /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(MYLDFLAGS)
+clean:
+ @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
+test:
+ $(PROG) 1:4
diff --git a/examples/parallel_while/parallel_preorder/Matrix.h b/examples/parallel_while/parallel_preorder/Matrix.h
new file mode 100644
index 0000000..32c4ea5
--- /dev/null
+++ b/examples/parallel_while/parallel_preorder/Matrix.h
@@ -0,0 +1,68 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+class Matrix {
+ static const int n = 10;
+ float array[n][n];
+public:
+ Matrix() {}
+ Matrix( float z ) {
+ for( int i=0; i<n; ++i )
+ for( int j=0; j<n; ++j )
+ array[i][j] = i==j ? z : 0;
+ }
+ friend Matrix operator-( const Matrix& x ) {
+ Matrix result;
+ for( int i=0; i<n; ++i )
+ for( int j=0; j<n; ++j )
+ result.array[i][j] = -x.array[i][j];
+ return result;
+ }
+ friend Matrix operator+( const Matrix& x, const Matrix& y ) {
+ Matrix result;
+ for( int i=0; i<n; ++i )
+ for( int j=0; j<n; ++j )
+ result.array[i][j] = x.array[i][j] + y.array[i][j];
+ return result;
+ }
+ friend Matrix operator-( const Matrix& x, const Matrix& y ) {
+ Matrix result;
+ for( int i=0; i<n; ++i )
+ for( int j=0; j<n; ++j )
+ result.array[i][j] = x.array[i][j] - y.array[i][j];
+ return result;
+ }
+ friend Matrix operator*( const Matrix& x, const Matrix& y ) {
+ Matrix result(0);
+ for( int i=0; i<n; ++i )
+ for( int k=0; k<n; ++k )
+ for( int j=0; j<n; ++j )
+ result.array[i][j] += x.array[i][k] * y.array[k][j];
+ return result;
+ }
+};
diff --git a/examples/parallel_while/parallel_preorder/index.html b/examples/parallel_while/parallel_preorder/index.html
new file mode 100644
index 0000000..d617ed9
--- /dev/null
+++ b/examples/parallel_while/parallel_preorder/index.html
@@ -0,0 +1,93 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+Example that uses parallel_while to do parallel preorder traversal of a sparse graph.
+<P>
+Each vertex in the graph is called a "cell".
+Each cell has a value.
+The value is a matrix.
+Some of the cells have operators
+that compute the cell's value, using other cell's values as input.
+A cell that uses the value of cell x is called a successor of x.
+</P><P>
+The algorithm works as follows.
+<OL>
+<LI> Compute the set of cells that have no inputs. This set is called <TT>root_set</TT>.
+<LI> Each cell has an associated field <TT>ref_count</TT> that is an atomic integer.
+ Initialize <TT>ref_count</TT> to the number of inputs for the Cell.
+<LI> Update each cell in <TT>root_set</TT>, by applying a <TT>parallel_while</TT> to a stream
+ that iterates over <TT>root_set</TT>
+<LI> After updating a cell, for each of its successors
+<OL>
+<LI> Atomically decrement the successor's <TT>ref_count</TT>
+<LI> If the count became zero, add the cell to the set of cells to be updated,
+ by calling <TT>parallel_while::add</TT>.
+</OL>
+</OL>
+</P><P>
+The times printed are for the traversal and update,
+and do not include time for computing the root_set.
+</P>
+<B>NOTE: </B>It is important to understand that this example is unlikely to show speedup
+if the cell values are changed to type "float". The reason is twofold.
+<UL>
+<LI> The smaller value type causes each Cell to be significantly smaller than a cache line,
+ which leads to false sharing conflicts.
+<LI> The time to update the cells becomes very small, and consequently the overhead of
+ parallel_while swamps the useful work.
+</UL>
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="parallel_preorder.cpp">parallel_preorder.cpp</A>
+<DD>Source code for example.
+<DT><A HREF="Graph.cpp">Graph.cpp</A>
+<DD>Source code for example.
+<DT><A HREF="Graph.h">Graph.h</A>
+<DD>Source code for example.
+<DT><A HREF="Matrix.h">Matrix.h</A>
+<DD>Source code for example.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="vc7.1">vc7.1</A>
+<DD>Contains Microsoft* Visual Studio* .NET 2003 workspace for building and running the example.
+<DT><A HREF="vc8">vc8</A>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example.
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+
+<H2>Usage</H2>
+<DL>
+<DT><TT>parallel_preorder [<I>M</I>[:<I>N</I>] [<I>Rounds</I> [<I>'pause'</I>]]]</TT>
+<DD><I>M</I> and <I>N</I> are a range of numbers of threads to be used.
+<DD><I>Rounds</I> is the number of rounds the example runs internally. Default value
+ is 50; reduce it to shorten example run time.
+<DD>If 'pause' is specified, the application will wait for a user to hit return before it exits.
+<DT>To run a short version of this example, e.g., for use with Intel® Threading Tools:
+<DD>Build a <I>debug</I> version of the example
+ (see the <A HREF=../../index.html#build>build directions</A>).
+ <BR>Run it with the desired number of threads and smaller number of rounds, e.g., <TT>parallel_preorder 4 5</TT>.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright © 2005-2007 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/examples/parallel_while/parallel_preorder/parallel_preorder.cpp b/examples/parallel_while/parallel_preorder/parallel_preorder.cpp
new file mode 100644
index 0000000..da17c95
--- /dev/null
+++ b/examples/parallel_while/parallel_preorder/parallel_preorder.cpp
@@ -0,0 +1,188 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/* Example program that shows how to use parallel_while to do parallel preorder
+ traversal of a directed acyclic graph. */
+
+#include "tbb/parallel_while.h"
+#include "tbb/atomic.h"
+#include <vector>
+#include <algorithm>
+#include "Graph.h"
+
+//! Number of trials. Can be changed from command line
+int ntrial = 50;
+
+class Body {
+ tbb::parallel_while<Body>& my_while;
+public:
+ Body( tbb::parallel_while<Body>& w ) : my_while(w) {};
+
+ //------------------------------------------------------------------------
+ // Following signatures required by parallel_while
+ //------------------------------------------------------------------------
+ typedef Cell* argument_type;
+ void operator()( Cell* c ) const {
+ c->update();
+ // Restore ref_count in preparation for subsequent traversal.
+ c->ref_count = ArityOfOp[c->op];
+ for( size_t k=0; k<c->successor.size(); ++k ) {
+ Cell* successor = c->successor[k];
+ if( 0 == --(successor->ref_count) ) {
+ my_while.add( successor );
+ }
+ }
+ }
+};
+
+class Stream {
+ size_t k;
+ const std::vector<Cell*>& my_roots;
+public:
+ Stream( const std::vector<Cell*>& root_set ) : my_roots(root_set), k(0) {}
+ bool pop_if_present( Cell*& item ) {
+ bool result = k<my_roots.size();
+ if( result )
+ item = my_roots[k++];
+ return result;
+ }
+};
+
+void ParallelPreorderTraversal( const std::vector<Cell*>& root_set ) {
+ tbb::parallel_while<Body> w;
+ Stream s(root_set);
+ w.run(s,Body(w));
+}
+
+//------------------------------------------------------------------------
+// Test driver
+//------------------------------------------------------------------------
+
+#include <cctype>
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tick_count.h"
+
+//! A closed range of int.
+struct IntRange {
+ int low;
+ int high;
+ void set_from_string( const char* s );
+ IntRange( int low_, int high_ ) : low(low_), high(high_) {}
+};
+
+void IntRange::set_from_string( const char* s ) {
+ char* end;
+ high = low = strtol(s,&end,0);
+ switch( *end ) {
+ case ':':
+ high = strtol(end+1,0,0);
+ break;
+ case '\0':
+ break;
+ default:
+ printf("unexpected character = %c\n",*end);
+ }
+}
+
+//! Number of threads to use.
+static IntRange NThread(1,4);
+
+//! If true, then at end wait for user to hit return
+static bool PauseFlag = false;
+
+//! Displays usage message
+void Usage(char * argv0) {
+ fprintf(stderr, "Usage: %s [nthread [ntrials ['pause']]]\n", argv0);
+ fprintf(stderr, "where nthread is a non-negative integer, or range of the form low:high [%d:%d]\n", NThread.low, NThread.high);
+ fprintf(stderr, "ntrials is a positive integer. Default value is 50, reduce it (e.g. to 5) to shorten example run time\n");
+ fprintf(stderr, "The application waits for user to hit return if 'pause' is specified\n");
+}
+
+//! Parse the command line.
+static void ParseCommandLine( int argc, char* argv[] ) {
+ int i = 1;
+ if( i<argc && !isdigit(argv[i][0]) ) {
+ // Command line is garbled.
+ Usage(argv[0]);
+ exit(1);
+ }
+ if( i<argc )
+ NThread.set_from_string(argv[i++]);
+ if( i<argc && !isdigit(argv[i][0]) ) {
+ // Command line is garbled.
+ Usage(argv[0]);
+ exit(1);
+ }
+ if (i<argc) {
+ ntrial = strtol(argv[i++], 0, 0);
+ }
+ if (ntrial == 0) {
+ // Command line is garbled.
+ Usage(argv[0]);
+ exit(1);
+ }
+ if (i<argc && strcmp( argv[i], "pause" )==0 ) {
+ PauseFlag = true;
+ }
+}
+
+int main( int argc, char* argv[] ) {
+ ParseCommandLine(argc,argv);
+
+ // Start scheduler with given number of threads.
+ for( int p=NThread.low; p<=NThread.high; ++p ) {
+ tbb::task_scheduler_init init(p);
+ srand(2);
+ tbb::tick_count::interval_t interval;
+ size_t total_root_set_size = 0;
+ for( int trial=0; trial<ntrial; ++trial ) {
+ Graph g;
+ g.create_random_dag(1000);
+ std::vector<Cell*> root_set;
+ g.get_root_set(root_set);
+ total_root_set_size += root_set.size();
+
+ tbb::tick_count t0 = tbb::tick_count::now();
+ for( int i=0; i<10; ++i ) {
+ ParallelPreorderTraversal(root_set);
+ }
+ tbb::tick_count t1 = tbb::tick_count::now();
+
+ interval += t1-t0;
+ }
+ printf("%g seconds using %d threads (average of %g nodes in root_set)\n",interval.seconds(),p,(double)total_root_set_size/ntrial);
+ }
+
+ if (PauseFlag) {
+ printf ("Press return key to exit");
+ char c;
+ scanf("%c", &c);
+ }
+
+ return 0;
+}
diff --git a/examples/parallel_while/parallel_preorder/vc7.1/parallel_preorder.sln b/examples/parallel_while/parallel_preorder/vc7.1/parallel_preorder.sln
new file mode 100644
index 0000000..1cda54a
--- /dev/null
+++ b/examples/parallel_while/parallel_preorder/vc7.1/parallel_preorder.sln
@@ -0,0 +1,21 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "parallel_preorder", "parallel_preorder.vcproj", "{519446A2-AF27-429B-A5DF-625B8F034021}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {519446A2-AF27-429B-A5DF-625B8F034021}.Debug.ActiveCfg = Debug|Win32
+ {519446A2-AF27-429B-A5DF-625B8F034021}.Debug.Build.0 = Debug|Win32
+ {519446A2-AF27-429B-A5DF-625B8F034021}.Release.ActiveCfg = Release|Win32
+ {519446A2-AF27-429B-A5DF-625B8F034021}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/examples/parallel_while/parallel_preorder/vc7.1/parallel_preorder.suo b/examples/parallel_while/parallel_preorder/vc7.1/parallel_preorder.suo
new file mode 100644
index 0000000..ffa0587
Binary files /dev/null and b/examples/parallel_while/parallel_preorder/vc7.1/parallel_preorder.suo differ
diff --git a/examples/parallel_while/parallel_preorder/vc7.1/parallel_preorder.vcproj b/examples/parallel_while/parallel_preorder/vc7.1/parallel_preorder.vcproj
new file mode 100644
index 0000000..7d05a1b
--- /dev/null
+++ b/examples/parallel_while/parallel_preorder/vc7.1/parallel_preorder.vcproj
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="parallel_preorder"
+ ProjectGUID="{519446A2-AF27-429B-A5DF-625B8F034021}"
+ RootNamespace="parallel_preorder"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+ <File
+ RelativePath="..\Graph.cpp">
+ </File>
+ <File
+ RelativePath="..\parallel_preorder.cpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+ <File
+ RelativePath="..\Graph.h">
+ </File>
+ <File
+ RelativePath="..\Matrix.h">
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\index.html">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/parallel_while/parallel_preorder/vc8/parallel_preorder.sln b/examples/parallel_while/parallel_preorder/vc8/parallel_preorder.sln
new file mode 100644
index 0000000..6b466e9
--- /dev/null
+++ b/examples/parallel_while/parallel_preorder/vc8/parallel_preorder.sln
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "parallel_preorder", "parallel_preorder.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A252B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|Win32.Build.0 = Debug|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|x64.ActiveCfg = Debug|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A252B}.Debug|x64.Build.0 = Debug|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|Win32.ActiveCfg = Release|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|Win32.Build.0 = Release|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|x64.ActiveCfg = Release|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A252B}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/examples/parallel_while/parallel_preorder/vc8/parallel_preorder.suo b/examples/parallel_while/parallel_preorder/vc8/parallel_preorder.suo
new file mode 100644
index 0000000..5395b93
Binary files /dev/null and b/examples/parallel_while/parallel_preorder/vc8/parallel_preorder.suo differ
diff --git a/examples/parallel_while/parallel_preorder/vc8/parallel_preorder.vcproj b/examples/parallel_while/parallel_preorder/vc8/parallel_preorder.vcproj
new file mode 100644
index 0000000..59e1fda
--- /dev/null
+++ b/examples/parallel_while/parallel_preorder/vc8/parallel_preorder.vcproj
@@ -0,0 +1,370 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="parallel_preorder"
+ ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A252B}"
+ RootNamespace="parallel_preorder"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\Graph.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\parallel_preorder.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath="..\Graph.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Matrix.h"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\index.html"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/parallel_while/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj b/examples/parallel_while/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..2da175e
--- /dev/null
+++ b/examples/parallel_while/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj
@@ -0,0 +1,304 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 42;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 05593AAB0B8F55D500DE73AB /* parallel_preorder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */; };
+ 05593AA80B8F55D500DE73AB /* Graph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593AA40B8F55D500DE73AB /* Graph.cpp */; };
+ A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+ A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 8DD76F690486A84900D96B5E /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 12;
+ dstPath = "";
+ dstSubfolderSpec = 16;
+ files = (
+ A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 8DD76F6C0486A84900D96B5E /* parallel_preorder */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = parallel_preorder; sourceTree = BUILT_PRODUCTS_DIR; };
+ 05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = parallel_preorder.cpp; path = ../parallel_preorder.cpp; sourceTree = SOURCE_ROOT; };
+ 05593AA40B8F55D500DE73AB /* Graph.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Graph.cpp; path = ../Graph.cpp; sourceTree = SOURCE_ROOT; };
+ 05593AA50B8F55D500DE73AB /* Graph.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Graph.h; path = ../Graph.h; sourceTree = SOURCE_ROOT; };
+ 05593AA60B8F55D500DE73AB /* Matrix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Matrix.h; path = ../Matrix.h; sourceTree = SOURCE_ROOT; };
+ A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8DD76F660486A84900D96B5E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 08FB7794FE84155DC02AAC07 /* parallel_preorder */ = {
+ isa = PBXGroup;
+ children = (
+ 08FB7795FE84155DC02AAC07 /* Source */,
+ A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+ 1AB674ADFE9D54B511CA2CBB /* Products */,
+ );
+ name = parallel_preorder;
+ sourceTree = "<group>";
+ };
+ 08FB7795FE84155DC02AAC07 /* Source */ = {
+ isa = PBXGroup;
+ children = (
+ 05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */,
+ 05593AA40B8F55D500DE73AB /* Graph.cpp */,
+ 05593AA50B8F55D500DE73AB /* Graph.h */,
+ 05593AA60B8F55D500DE73AB /* Matrix.h */,
+ );
+ name = Source;
+ sourceTree = "<group>";
+ };
+ 1AB674ADFE9D54B511CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8DD76F6C0486A84900D96B5E /* parallel_preorder */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ A1F593B30B8F06F900073279 /* libtbb.dylib */,
+ );
+ name = "External Frameworks and Libraries";
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8DD76F620486A84900D96B5E /* parallel_preorder */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "parallel_preorder" */;
+ buildPhases = (
+ 8DD76F640486A84900D96B5E /* Sources */,
+ 8DD76F660486A84900D96B5E /* Frameworks */,
+ 8DD76F690486A84900D96B5E /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = parallel_preorder;
+ productInstallPath = "$(HOME)/bin";
+ productName = parallel_preorder;
+ productReference = 8DD76F6C0486A84900D96B5E /* parallel_preorder */;
+ productType = "com.apple.product-type.tool";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 08FB7793FE84155DC02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "parallel_preorder" */;
+ hasScannedForEncodings = 1;
+ mainGroup = 08FB7794FE84155DC02AAC07 /* parallel_preorder */;
+ projectDirPath = "";
+ targets = (
+ 8DD76F620486A84900D96B5E /* parallel_preorder */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8DD76F640486A84900D96B5E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 05593AA80B8F55D500DE73AB /* Graph.cpp in Sources */,
+ 05593AAB0B8F55D500DE73AB /* parallel_preorder.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 1DEB923208733DC60010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = parallel_preorder;
+ ZERO_LINK = NO;
+ };
+ name = Debug;
+ };
+ 1DEB923308733DC60010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = parallel_preorder;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 1DEB923608733DC60010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Debug;
+ };
+ 1DEB923708733DC60010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Release;
+ };
+ A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = parallel_preorder;
+ ZERO_LINK = NO;
+ };
+ name = Debug64;
+ };
+ A1F593C70B8F0E6E00073279 /* Release64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = parallel_preorder;
+ ZERO_LINK = NO;
+ };
+ name = Release64;
+ };
+ A1F593C80B8F0E6E00073279 /* Debug64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-m64",
+ );
+ OTHER_LDFLAGS = "-m64";
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Debug64;
+ };
+ A1F593C90B8F0E6E00073279 /* Release64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-m64",
+ );
+ OTHER_LDFLAGS = "-m64";
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Release64;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "parallel_preorder" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB923208733DC60010E9CD /* Debug */,
+ A1F593C60B8F0E6E00073279 /* Debug64 */,
+ 1DEB923308733DC60010E9CD /* Release */,
+ A1F593C70B8F0E6E00073279 /* Release64 */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "parallel_preorder" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB923608733DC60010E9CD /* Debug */,
+ A1F593C80B8F0E6E00073279 /* Debug64 */,
+ 1DEB923708733DC60010E9CD /* Release */,
+ A1F593C90B8F0E6E00073279 /* Release64 */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/examples/pipeline/index.html b/examples/pipeline/index.html
new file mode 100644
index 0000000..f6e5be3
--- /dev/null
+++ b/examples/pipeline/index.html
@@ -0,0 +1,25 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory has examples of the template <code>pipeline</code>.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="text_filter/index.html">text_filter</A>
+<DD>A simple text filter.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright © 2005-2007 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/examples/pipeline/text_filter/Makefile b/examples/pipeline/text_filter/Makefile
new file mode 100644
index 0000000..6bae9fb
--- /dev/null
+++ b/examples/pipeline/text_filter/Makefile
@@ -0,0 +1,48 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# GNU Makefile that builds and runs example.
+PROG=text_filter
+
+# The C++ compiler
+#CXX=g++
+
+all: release test
+
+release: *.cpp
+ $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb
+
+debug: *.cpp
+ $(CXX) -O0 -g -DTBB_DO_ASSERT $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug
+
+clean:
+ rm -f $(PROG) *.o *.d input.txt output.txt
+
+test:
+ cat /usr/include/*.h >input.txt
+ ./$(PROG) input.txt output.txt 1
+ ./$(PROG) input.txt output.txt 2
+ ./$(PROG) input.txt output.txt 4
diff --git a/examples/pipeline/text_filter/Makefile.windows b/examples/pipeline/text_filter/Makefile.windows
new file mode 100644
index 0000000..c6b1336
--- /dev/null
+++ b/examples/pipeline/text_filter/Makefile.windows
@@ -0,0 +1,50 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+PROG=Text_Filter
+
+# The C++ compiler options
+CXX = cl.exe
+MYCXXFLAGS=/TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CRT_SECURE_NO_DEPRECATE /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
+MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO /OUT:$(PROG).exe $(LDFLAGS)
+
+all: release test
+release:
+ $(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(MYLDFLAGS)
+debug:
+ $(CXX) *.cpp /MDd /Od /Zi /D TBB_DO_ASSERT /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(MYLDFLAGS)
+clean:
+ @cmd.exe /C del $(PROG).exe input.txt output.txt *.obj *.?db *.manifest
+input.txt:
+ @echo Constructing input.txt
+ @-cmd.exe /C "copy %WINDIR%\*.log input.txt >NUL"
+test: input.txt
+ $(PROG) input.txt output.txt 1
+ $(PROG) input.txt output.txt 2
+ $(PROG) input.txt output.txt 4
diff --git a/examples/pipeline/text_filter/index.html b/examples/pipeline/text_filter/index.html
new file mode 100644
index 0000000..c7b3605
--- /dev/null
+++ b/examples/pipeline/text_filter/index.html
@@ -0,0 +1,56 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+Text filter that demonstrates class pipeline.
+The <A href=" ../../../doc/Tutorial.pdf">Tutorial</A> explains this example in detail.
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="text_filter.cpp">text_filter.cpp</A>
+<DD>Source code for example.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="vc7.1">vc7.1</A>
+<DD>Contains Microsoft* Visual Studio* .NET 2003 workspace for building and running the example.
+<DT><A HREF="vc8">vc8</A>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example.
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+<P></P>
+
+<H2>Usage</H2>
+<DL>
+<DT><TT>text_filter <I>inputfile</I> <I>outputfile</I> <I>N</I></TT>
+<DD>Run the example on the named <I>inputfile</I> and produce the named <I>outputfile</I>.
+ <I>N</I> is the number of threads to be used.
+<DT>To run a short version of this example, e.g., for use with Intel® Threading Tools:
+<DD>Build a <I>debug</I> version of the example
+ (see the <A HREF=../../index.html#build>build directions</A>).
+ <BR>Prepare an <I>inputfile</I> with about 5,000 lines of text (e.g., by concatenating all the index.html
+ files in the examples/ directory tree).
+ <BR>Run it with this <I>inputfile</I> and the desired number of threads,
+ e.g., <TT>text_filter <I>inputfile</I> <I>outputfile</I> 4</TT>.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright © 2005-2007 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/examples/pipeline/text_filter/text_filter.cpp b/examples/pipeline/text_filter/text_filter.cpp
new file mode 100644
index 0000000..b2006d9
--- /dev/null
+++ b/examples/pipeline/text_filter/text_filter.cpp
@@ -0,0 +1,232 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+//
+// Example program that reads a file of text and changes the first letter
+// of each word to upper case.
+//
+#include "tbb/pipeline.h"
+#include "tbb/tick_count.h"
+#include "tbb/task_scheduler_init.h"
+#include <cstring>
+#include <cstdlib>
+#include <cstdio>
+#include <cctype>
+
+using namespace std;
+
+//! Buffer that holds block of characters and last character of previous buffer.
+class MyBuffer {
+ static const size_t buffer_size = 10000;
+ char* my_end;
+ //! storage[0] holds the last character of the previous buffer.
+ char storage[1+buffer_size];
+public:
+ //! Pointer to first character in the buffer
+ char* begin() {return storage+1;}
+ const char* begin() const {return storage+1;}
+ //! Pointer to one past last character in the buffer
+ char* end() const {return my_end;}
+ //! Set end of buffer.
+ void set_end( char* new_ptr ) {my_end=new_ptr;}
+ //! Number of bytes a buffer can hold
+ size_t max_size() const {return buffer_size;}
+ //! Number of bytes appended to buffer.
+ size_t size() const {return my_end-begin();}
+};
+
+class MyInputFilter: public tbb::filter {
+public:
+ static const size_t n_buffer = 8;
+ MyInputFilter( FILE* input_file_ );
+private:
+ FILE* input_file;
+ size_t next_buffer;
+ char last_char_of_previous_buffer;
+ MyBuffer buffer[n_buffer];
+ /*override*/ void* operator()(void*);
+};
+
+MyInputFilter::MyInputFilter( FILE* input_file_ ) :
+ filter(/*is_serial=*/true),
+ next_buffer(0),
+ input_file(input_file_),
+ last_char_of_previous_buffer(' ')
+{
+}
+
+void* MyInputFilter::operator()(void*) {
+ MyBuffer& b = buffer[next_buffer];
+ next_buffer = (next_buffer+1) % n_buffer;
+ size_t n = fread( b.begin(), 1, b.max_size(), input_file );
+ if( !n ) {
+ // end of file
+ return NULL;
+ } else {
+ b.begin()[-1] = last_char_of_previous_buffer;
+ last_char_of_previous_buffer = b.begin()[n-1];
+ b.set_end( b.begin()+n );
+ return &b;
+ }
+}
+
+//! Filter that changes the first letter of each word from lower case to upper case.
+class MyTransformFilter: public tbb::filter {
+public:
+ MyTransformFilter();
+ /*override*/void* operator()( void* item );
+};
+
+MyTransformFilter::MyTransformFilter() :
+ tbb::filter(/*ordered=*/false)
+{}
+
+/*override*/void* MyTransformFilter::operator()( void* item ) {
+ MyBuffer& b = *static_cast<MyBuffer*>(item);
+ int prev_char_is_space = b.begin()[-1]==' ';
+ for( char* s=b.begin(); s!=b.end(); ++s ) {
+ if( prev_char_is_space && islower(*s) )
+ *s = toupper(*s);
+ prev_char_is_space = isspace((unsigned char)*s);
+ }
+ return &b;
+}
+
+//! Filter that writes each buffer to a file.
+class MyOutputFilter: public tbb::filter {
+ FILE* my_output_file;
+public:
+ MyOutputFilter( FILE* output_file );
+ /*override*/void* operator()( void* item );
+};
+
+MyOutputFilter::MyOutputFilter( FILE* output_file ) :
+ tbb::filter(/*is_serial=*/true),
+ my_output_file(output_file)
+{
+}
+
+void* MyOutputFilter::operator()( void* item ) {
+ MyBuffer& b = *static_cast<MyBuffer*>(item);
+ fwrite( b.begin(), 1, b.size(), my_output_file );
+ return NULL;
+}
+
+static int NThread = tbb::task_scheduler_init::automatic;
+static const char* InputFileName = "input.txt";
+static const char* OutputFileName = "output.txt";
+static bool is_number_of_threads_set = false;
+
+void Usage()
+{
+ fprintf( stderr, "Usage:\ttext_filter [input-file [output-file [nthread]]]\n");
+ exit(1);
+}
+
+void ParseCommandLine( int argc, char* argv[] ) {
+ // Parse command line
+ if( argc> 4 ) Usage();
+ if( argc>=2 ) InputFileName = argv[1];
+ if( argc>=3 ) OutputFileName = argv[2];
+ if( argc>=4 ) {
+ NThread = strtol(argv[3],0,0);
+ if( NThread<1 ) {
+ fprintf(stderr,"nthread set to %d, but must be at least 1\n",NThread);
+ exit(1);
+ }
+ is_number_of_threads_set = true; //Number of threads is set explicitly
+ }
+}
+
+void run_pipeline( int nthreads )
+{
+ FILE* input_file = fopen(InputFileName,"r");
+ if( !input_file ) {
+ perror( InputFileName );
+ Usage();
+ }
+ FILE* output_file = fopen(OutputFileName,"w");
+ if( !output_file ) {
+ perror( OutputFileName );
+ exit(1);
+ }
+
+ // Create the pipeline
+ tbb::pipeline pipeline;
+
+ // Create file-reading writing stage and add it to the pipeline
+ MyInputFilter input_filter( input_file );
+ pipeline.add_filter( input_filter );
+
+ // Create capitalization stage and add it to the pipeline
+ MyTransformFilter transform_filter;
+ pipeline.add_filter( transform_filter );
+
+ // Create file-writing stage and add it to the pipeline
+ MyOutputFilter output_filter( output_file );
+ pipeline.add_filter( output_filter );
+
+ // Run the pipeline
+ tbb::tick_count t0 = tbb::tick_count::now();
+ pipeline.run( MyInputFilter::n_buffer );
+ tbb::tick_count t1 = tbb::tick_count::now();
+
+ // Remove filters from pipeline before they are implicitly destroyed.
+ pipeline.clear();
+
+ fclose( output_file );
+ fclose( input_file );
+
+ if (is_number_of_threads_set) {
+ printf("threads = %d time = %g\n", nthreads, (t1-t0).seconds());
+ } else {
+ if ( nthreads == 1 ){
+ printf("serial run time = %g\n", (t1-t0).seconds());
+ } else {
+ printf("parallel run time = %g\n", (t1-t0).seconds());
+ }
+ }
+}
+
+int main( int argc, char* argv[] ) {
+ ParseCommandLine( argc, argv );
+ if (is_number_of_threads_set) {
+ // Start task scheduler
+ tbb::task_scheduler_init init( NThread );
+ run_pipeline (NThread);
+ } else { // Number of threads wasn't set explicitly. Run serial and parallel version
+ { // serial run
+ tbb::task_scheduler_init init_serial(1);
+ run_pipeline (1);
+ }
+ { // parallel run (number of threads is selected automatically)
+ tbb::task_scheduler_init init_parallel;
+ run_pipeline (0);
+ }
+ }
+}
diff --git a/examples/pipeline/text_filter/vc7.1/text_filter.sln b/examples/pipeline/text_filter/vc7.1/text_filter.sln
new file mode 100644
index 0000000..1ca790a
--- /dev/null
+++ b/examples/pipeline/text_filter/vc7.1/text_filter.sln
@@ -0,0 +1,21 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "text_filter", "text_filter.vcproj", "{4A021AFA-E254-4BCE-918D-377DF1C0BEEF}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {4A021AFA-E254-4BCE-918D-377DF1C0BEEF}.Debug.ActiveCfg = Debug|Win32
+ {4A021AFA-E254-4BCE-918D-377DF1C0BEEF}.Debug.Build.0 = Debug|Win32
+ {4A021AFA-E254-4BCE-918D-377DF1C0BEEF}.Release.ActiveCfg = Release|Win32
+ {4A021AFA-E254-4BCE-918D-377DF1C0BEEF}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/examples/pipeline/text_filter/vc7.1/text_filter.suo b/examples/pipeline/text_filter/vc7.1/text_filter.suo
new file mode 100644
index 0000000..022ecbc
Binary files /dev/null and b/examples/pipeline/text_filter/vc7.1/text_filter.suo differ
diff --git a/examples/pipeline/text_filter/vc7.1/text_filter.vcproj b/examples/pipeline/text_filter/vc7.1/text_filter.vcproj
new file mode 100644
index 0000000..82dfad0
--- /dev/null
+++ b/examples/pipeline/text_filter/vc7.1/text_filter.vcproj
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="text_filter"
+ ProjectGUID="{4A021AFA-E254-4BCE-918D-377DF1C0BEEF}"
+ RootNamespace="text_filter"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="Constructing input.txt"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\doc\*.txt"+"$(TBB20_INSTALL_DIR)\doc\html\*.html" "$(OutDir)\input.txt" >NUL"
+ Outputs=""$(OutDir)\input.txt""/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"/>
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="Constructing input.txt"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\doc\*.txt"+"$(TBB20_INSTALL_DIR)\doc\html\*.html" "$(OutDir)\input.txt" >NUL"
+ Outputs=""$(OutDir)\input.txt""/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+ <File
+ RelativePath="..\text_filter.cpp">
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\index.html">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/pipeline/text_filter/vc8/text_filter.sln b/examples/pipeline/text_filter/vc8/text_filter.sln
new file mode 100644
index 0000000..735b680
--- /dev/null
+++ b/examples/pipeline/text_filter/vc8/text_filter.sln
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "text_filter", "text_filter.vcproj", "{C931C7A2-074E-4150-9E7A-39A03250411D}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {C931C7A2-074E-4150-9E7A-39A03250411D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C931C7A2-074E-4150-9E7A-39A03250411D}.Debug|Win32.Build.0 = Debug|Win32
+ {C931C7A2-074E-4150-9E7A-39A03250411D}.Debug|x64.ActiveCfg = Debug|x64
+ {C931C7A2-074E-4150-9E7A-39A03250411D}.Debug|x64.Build.0 = Debug|x64
+ {C931C7A2-074E-4150-9E7A-39A03250411D}.Release|Win32.ActiveCfg = Release|Win32
+ {C931C7A2-074E-4150-9E7A-39A03250411D}.Release|Win32.Build.0 = Release|Win32
+ {C931C7A2-074E-4150-9E7A-39A03250411D}.Release|x64.ActiveCfg = Release|x64
+ {C931C7A2-074E-4150-9E7A-39A03250411D}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/examples/pipeline/text_filter/vc8/text_filter.suo b/examples/pipeline/text_filter/vc8/text_filter.suo
new file mode 100644
index 0000000..c5ebac8
Binary files /dev/null and b/examples/pipeline/text_filter/vc8/text_filter.suo differ
diff --git a/examples/pipeline/text_filter/vc8/text_filter.vcproj b/examples/pipeline/text_filter/vc8/text_filter.vcproj
new file mode 100644
index 0000000..a101498
--- /dev/null
+++ b/examples/pipeline/text_filter/vc8/text_filter.vcproj
@@ -0,0 +1,364 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="text_filter"
+ ProjectGUID="{C931C7A2-074E-4150-9E7A-39A03250411D}"
+ RootNamespace="text_filter"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="Constructing input.txt"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\doc\*.txt"+"$(TBB20_INSTALL_DIR)\doc\html\*.html" input.txt >NUL"
+ Outputs="input.txt"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="Constructing input.txt"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\doc\*.txt"+"$(TBB20_INSTALL_DIR)\doc\html\*.html" input.txt >NUL"
+ Outputs="input.txt"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT;_CRT_SECURE_NO_DEPRECATE"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="Constructing input.txt"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\doc\*.txt"+"$(TBB20_INSTALL_DIR)\doc\html\*.html" input.txt >NUL"
+ Outputs="input.txt"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="Constructing input.txt"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\doc\*.txt"+"$(TBB20_INSTALL_DIR)\doc\html\*.html" input.txt >NUL"
+ Outputs="input.txt"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\text_filter.cpp"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\index.html"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/pipeline/text_filter/xcode/text_filter.xcodeproj/project.pbxproj b/examples/pipeline/text_filter/xcode/text_filter.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..de0763e
--- /dev/null
+++ b/examples/pipeline/text_filter/xcode/text_filter.xcodeproj/project.pbxproj
@@ -0,0 +1,314 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 42;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ A1F593A60B8F042A00073279 /* text_filter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* text_filter.cpp */; };
+ A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+ A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 8DD76F690486A84900D96B5E /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 12;
+ dstPath = "";
+ dstSubfolderSpec = 16;
+ files = (
+ A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 8DD76F6C0486A84900D96B5E /* text_filter */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = text_filter; sourceTree = BUILT_PRODUCTS_DIR; };
+ A1F593A50B8F042A00073279 /* text_filter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = text_filter.cpp; path = ../text_filter.cpp; sourceTree = SOURCE_ROOT; };
+ A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8DD76F660486A84900D96B5E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 08FB7794FE84155DC02AAC07 /* text_filter */ = {
+ isa = PBXGroup;
+ children = (
+ 08FB7795FE84155DC02AAC07 /* Source */,
+ A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+ 1AB674ADFE9D54B511CA2CBB /* Products */,
+ );
+ name = text_filter;
+ sourceTree = "<group>";
+ };
+ 08FB7795FE84155DC02AAC07 /* Source */ = {
+ isa = PBXGroup;
+ children = (
+ A1F593A50B8F042A00073279 /* text_filter.cpp */,
+ );
+ name = Source;
+ sourceTree = "<group>";
+ };
+ 1AB674ADFE9D54B511CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8DD76F6C0486A84900D96B5E /* text_filter */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ A1F593B30B8F06F900073279 /* libtbb.dylib */,
+ );
+ name = "External Frameworks and Libraries";
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8DD76F620486A84900D96B5E /* text_filter */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "text_filter" */;
+ buildPhases = (
+ 8DD76F640486A84900D96B5E /* Sources */,
+ 8DD76F660486A84900D96B5E /* Frameworks */,
+ 8DD76F690486A84900D96B5E /* CopyFiles */,
+ A1F594850B8F293800073279 /* ShellScript */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = text_filter;
+ productInstallPath = "$(HOME)/bin";
+ productName = text_filter;
+ productReference = 8DD76F6C0486A84900D96B5E /* text_filter */;
+ productType = "com.apple.product-type.tool";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 08FB7793FE84155DC02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "text_filter" */;
+ hasScannedForEncodings = 1;
+ mainGroup = 08FB7794FE84155DC02AAC07 /* text_filter */;
+ projectDirPath = "";
+ targets = (
+ 8DD76F620486A84900D96B5E /* text_filter */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ A1F594850B8F293800073279 /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ "$(TARGET_BUILD_DIR)/input.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "cat /usr/include/*.h >$TARGET_BUILD_DIR/input.txt";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8DD76F640486A84900D96B5E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F593A60B8F042A00073279 /* text_filter.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 1DEB923208733DC60010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = text_filter;
+ ZERO_LINK = NO;
+ };
+ name = Debug;
+ };
+ 1DEB923308733DC60010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = text_filter;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 1DEB923608733DC60010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Debug;
+ };
+ 1DEB923708733DC60010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Release;
+ };
+ A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = text_filter;
+ ZERO_LINK = NO;
+ };
+ name = Debug64;
+ };
+ A1F593C70B8F0E6E00073279 /* Release64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = text_filter;
+ ZERO_LINK = NO;
+ };
+ name = Release64;
+ };
+ A1F593C80B8F0E6E00073279 /* Debug64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-m64",
+ );
+ OTHER_LDFLAGS = "-m64";
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Debug64;
+ };
+ A1F593C90B8F0E6E00073279 /* Release64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-m64",
+ );
+ OTHER_LDFLAGS = "-m64";
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Release64;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "text_filter" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB923208733DC60010E9CD /* Debug */,
+ A1F593C60B8F0E6E00073279 /* Debug64 */,
+ 1DEB923308733DC60010E9CD /* Release */,
+ A1F593C70B8F0E6E00073279 /* Release64 */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "text_filter" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB923608733DC60010E9CD /* Debug */,
+ A1F593C80B8F0E6E00073279 /* Debug64 */,
+ 1DEB923708733DC60010E9CD /* Release */,
+ A1F593C90B8F0E6E00073279 /* Release64 */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/examples/task/index.html b/examples/task/index.html
new file mode 100644
index 0000000..3f8ba28
--- /dev/null
+++ b/examples/task/index.html
@@ -0,0 +1,25 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory has examples of how to use the raw task scheduler.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="tree_sum/index.html">tree_sum</A>
+<DD>Sum values in a tree.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright © 2005-2007 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/examples/task/tree_sum/Makefile b/examples/task/tree_sum/Makefile
new file mode 100644
index 0000000..f75fdcc
--- /dev/null
+++ b/examples/task/tree_sum/Makefile
@@ -0,0 +1,46 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# GNU Makefile that builds and runs example.
+PROG=sum_tree
+
+# The C++ compiler
+#CXX=g++
+
+all: release test
+
+release: *.cpp
+ $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb -ltbbmalloc
+
+debug: *.cpp
+ $(CXX) -O0 -g -DTBB_DO_ASSERT $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug -ltbbmalloc_debug
+
+clean:
+ rm -f $(PROG) *.o *.d
+
+test:
+ ./$(PROG)
+ ./$(PROG) -stdmalloc
diff --git a/examples/task/tree_sum/Makefile.windows b/examples/task/tree_sum/Makefile.windows
new file mode 100644
index 0000000..6d08507
--- /dev/null
+++ b/examples/task/tree_sum/Makefile.windows
@@ -0,0 +1,46 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+PROG=Tree_sum
+
+# The C++ compiler options
+CXX = cl.exe
+MYCXXFLAGS=/TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
+MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO /OUT:$(PROG).exe $(LDFLAGS)
+
+all: release test
+release:
+ $(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib tbbmalloc.lib $(MYLDFLAGS)
+debug:
+ $(CXX) *.cpp /MDd /Od /Zi /D TBB_DO_ASSERT /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib tbbmalloc_debug.lib $(MYLDFLAGS)
+clean:
+ @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
+test:
+ $(PROG)
+ $(PROG) -stdmalloc
diff --git a/examples/task/tree_sum/OptimizedParallelSumTree.cpp b/examples/task/tree_sum/OptimizedParallelSumTree.cpp
new file mode 100644
index 0000000..4933beb
--- /dev/null
+++ b/examples/task/tree_sum/OptimizedParallelSumTree.cpp
@@ -0,0 +1,77 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "common.h"
+#include "tbb/task.h"
+
+class OptimizedSumTask: public tbb::task {
+ Value* const sum;
+ TreeNode* root;
+ bool is_continuation;
+ Value x, y;
+public:
+ OptimizedSumTask( TreeNode* root_, Value* sum_ ) : root(root_), sum(sum_), is_continuation(false) {
+ }
+ tbb::task* execute() {
+ tbb::task* next = NULL;
+ if( !is_continuation ) {
+ if( root->node_count<1000 ) {
+ *sum = SerialSumTree(root);
+ } else {
+ // Create tasks before spawning any of them.
+ tbb::task* a = NULL;
+ tbb::task* b = NULL;
+ if( root->left )
+ a = new( allocate_child() ) OptimizedSumTask(root->left,&x);
+ if( root->right )
+ b = new( allocate_child() ) OptimizedSumTask(root->right,&y);
+ recycle_as_continuation();
+ is_continuation = true;
+ set_ref_count( (a!=NULL)+(b!=NULL) );
+ if( a )
+ if( b ) spawn(*b);
+ else
+ a = b;
+ next = a;
+ }
+ } else {
+ *sum = root->value;
+ if( root->left ) *sum += x;
+ if( root->right ) *sum += y;
+ }
+ return next;
+ }
+};
+
+Value OptimizedParallelSumTree( TreeNode* root ) {
+ Value sum;
+ OptimizedSumTask& a = *new(tbb::task::allocate_root()) OptimizedSumTask(root,&sum);
+ tbb::task::spawn_root_and_wait(a);
+ return sum;
+}
+
diff --git a/examples/task/tree_sum/SerialSumTree.cpp b/examples/task/tree_sum/SerialSumTree.cpp
new file mode 100644
index 0000000..450972c
--- /dev/null
+++ b/examples/task/tree_sum/SerialSumTree.cpp
@@ -0,0 +1,38 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "common.h"
+
+Value SerialSumTree( TreeNode* root ) {
+ Value result = root->value;
+ if( root->left )
+ result += SerialSumTree(root->left);
+ if( root->right )
+ result += SerialSumTree(root->right);
+ return result;
+}
diff --git a/examples/task/tree_sum/SimpleParallelSumTree.cpp b/examples/task/tree_sum/SimpleParallelSumTree.cpp
new file mode 100644
index 0000000..99da8eb
--- /dev/null
+++ b/examples/task/tree_sum/SimpleParallelSumTree.cpp
@@ -0,0 +1,70 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "common.h"
+#include "tbb/task.h"
+
+class SimpleSumTask: public tbb::task {
+ Value* const sum;
+ TreeNode* root;
+public:
+ SimpleSumTask( TreeNode* root_, Value* sum_ ) : root(root_), sum(sum_) {}
+ task* execute() {
+ if( root->node_count<1000 ) {
+ *sum = SerialSumTree(root);
+ } else {
+ Value x, y;
+ int count = 1;
+ tbb::task_list list;
+ if( root->left ) {
+ ++count;
+ list.push_back( *new( allocate_child() ) SimpleSumTask(root->left,&x) );
+ }
+ if( root->right ) {
+ ++count;
+ list.push_back( *new( allocate_child() ) SimpleSumTask(root->right,&y) );
+ }
+ // Argument to set_ref_count is one more than size of the list,
+ // because spawn_and_wait_for_all expects an augmented ref_count.
+ set_ref_count(count);
+ spawn_and_wait_for_all(list);
+ *sum = root->value;
+ if( root->left ) *sum += x;
+ if( root->right ) *sum += y;
+ }
+ return NULL;
+ }
+};
+
+Value SimpleParallelSumTree( TreeNode* root ) {
+ Value sum;
+ SimpleSumTask& a = *new(tbb::task::allocate_root()) SimpleSumTask(root,&sum);
+ tbb::task::spawn_root_and_wait(a);
+ return sum;
+}
+
diff --git a/examples/task/tree_sum/common.h b/examples/task/tree_sum/common.h
new file mode 100644
index 0000000..c4531ea
--- /dev/null
+++ b/examples/task/tree_sum/common.h
@@ -0,0 +1,44 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+typedef float Value;
+
+struct TreeNode {
+ //! Pointer to left subtree
+ TreeNode* left;
+ //! Pointer to right subtree
+ TreeNode* right;
+ //! Number of nodes in this subtree, including this node.
+ long node_count;
+ //! Value associated with the node.
+ Value value;
+};
+
+Value SerialSumTree( TreeNode* root );
+Value SimpleParallelSumTree( TreeNode* root );
+Value OptimizedParallelSumTree( TreeNode* root );
diff --git a/examples/task/tree_sum/index.html b/examples/task/tree_sum/index.html
new file mode 100644
index 0000000..29d4e18
--- /dev/null
+++ b/examples/task/tree_sum/index.html
@@ -0,0 +1,77 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory contains a simple example that sums values in a tree.
+The example exhibits some speedup, but not a lot, because it quickly saturates
+the system bus on a multiprocessor. For good speedup, there needs to be
+more computation cycles per memory reference. The point of the example
+is to teach how to use the raw task interface, so the computation is
+deliberately trivial.
+<P>
+The performance of this example is better when objects are allocated
+by the Threading Building Blocks scalable_allocator instead of
+the default "operator new". The reason is that the scalable_allocator typically
+packs small objects more tightly than the default "operator new", resulting in
+a smaller memory footprint, and thus more efficient use of cache and virtual memory.
+In addition, the scalable_allocator performs better for multi-threaded allocations.
+</P>
+<H2>Files</H2>
+<DL>
+<DT><A HREF="SerialSumTree.cpp">SerialSumTree.cpp</A>
+<DD>Sums sequentially.
+<DT><A HREF="SimpleParallelSumTree.cpp">SimpleParallelSumTree.cpp</A><DT>
+<DD>Sums in parallel without any fancy tricks.
+<DT><A HREF="OptimizedParallelSumTree.cpp">OptimizedParallelSumTree.cpp</A><DT>
+<DD>Sums in parallel, using "recycling" and "continuation-passing" tricks.
+ In this case, it is only slightly faster than the simple version.
+<DT><A HREF="common.h">common.h</A>
+<DD>Shared declarations.
+<DT><A HREF="main.cpp">main.cpp</A>
+<DD>Driver.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="vc7.1">vc7.1</A>
+<DD>Contains Microsoft* Visual Studio* .NET 2003 workspace for building and running the example.
+<DT><A HREF="vc8">vc8</A>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example.
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+<P></P>
+
+<H2>Usage</H2>
+<DL>
+<DT><TT>tree_sum [-stdmalloc] <I>S</I> <I>N</I></TT>
+<DD><I>S</I> is the problem size (the number of nodes in the tree).
+ <I>N</I> is the number of threads to be used.
+ <BR>
+ Passing "-stdmalloc" as the 1st parameter causes the default "operator new"
+ to be used for memory allocations instead of the TBB scalable_allocator.
+
+<DT>To run a short version of this example, e.g., for use with Intel® Threading Tools:
+<DD>Build a <I>debug</I> version of the example
+ (see the <A HREF=../../index.html#build>build directions</A>).
+ <BR>Run it with a small problem size and the desired number of threads, e.g., <TT>tree_sum 100000 4</TT>.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright © 2005-2007 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/examples/task/tree_sum/main.cpp b/examples/task/tree_sum/main.cpp
new file mode 100644
index 0000000..5870bd3
--- /dev/null
+++ b/examples/task/tree_sum/main.cpp
@@ -0,0 +1,193 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "common.h"
+#include "tbb/tick_count.h"
+#include "tbb/task.h"
+#include "tbb/task_scheduler_init.h"
+#include <cstdlib>
+#include <cstdio>
+#include <cstring>
+
+// The performance of this example can be significantly better when
+// the objects are allocated by the scalable_allocator instead of the
+// default "operator new". The reason is that the scalable_allocator
+// typically packs small objects more tightly than the default "operator new",
+// resulting in a smaller memory footprint, and thus more efficient use of
+// cache and virtual memory. Also the scalable_allocator works faster for
+// multi-threaded allocations.
+//
+// Pass -stdmalloc as the 1st command line parameter to use the default "operator new"
+// and see the performance difference.
+
+#include "tbb/scalable_allocator.h"
+
+using namespace std;
+
+static double Pi = 3.14159265358979;
+
+const bool tbbmalloc = true;
+const bool stdmalloc = false;
+
+template<bool use_tbbmalloc>
+class TreeMaker {
+
+ class SubTreeCreationTask: public tbb::task {
+ TreeNode*& my_root;
+ bool is_continuation;
+ typedef TreeMaker<use_tbbmalloc> MyTreeMaker;
+
+ public:
+ SubTreeCreationTask( TreeNode*& root, long number_of_nodes ) : my_root(root), is_continuation(false) {
+ my_root = MyTreeMaker::allocate_node();
+ my_root->node_count = number_of_nodes;
+ my_root->value = Value(Pi*number_of_nodes);
+ }
+
+ tbb::task* execute() {
+ tbb::task* next = NULL;
+ if( !is_continuation ) {
+ long subtree_size = my_root->node_count - 1;
+ if( subtree_size<1000 ) { /* grainsize */
+ my_root->left = MyTreeMaker::do_in_one_thread(subtree_size/2);
+ my_root->right = MyTreeMaker::do_in_one_thread(subtree_size - subtree_size/2);
+ } else {
+ // Create tasks before spawning any of them.
+ tbb::task* a = new( allocate_child() ) SubTreeCreationTask(my_root->left,subtree_size/2);
+ tbb::task* b = new( allocate_child() ) SubTreeCreationTask(my_root->right,subtree_size - subtree_size/2);
+ recycle_as_continuation();
+ is_continuation = true;
+ set_ref_count(2);
+ spawn(*b);
+ next = a;
+ }
+ }
+ return next;
+ }
+ };
+
+public:
+ static TreeNode* allocate_node() {
+ return use_tbbmalloc? tbb::scalable_allocator<TreeNode>().allocate(1) : new TreeNode;
+ }
+
+ static TreeNode* do_in_one_thread( long number_of_nodes ) {
+ if( number_of_nodes==0 ) {
+ return NULL;
+ } else {
+ TreeNode* n = allocate_node();
+ n->node_count = number_of_nodes;
+ n->value = Value(Pi*number_of_nodes);
+ --number_of_nodes;
+ n->left = do_in_one_thread( number_of_nodes/2 );
+ n->right = do_in_one_thread( number_of_nodes - number_of_nodes/2 );
+ return n;
+ }
+ }
+
+ static TreeNode* do_in_parallel( long number_of_nodes ) {
+ TreeNode* root_node;
+ SubTreeCreationTask& a = *new(tbb::task::allocate_root()) SubTreeCreationTask(root_node, number_of_nodes);
+ tbb::task::spawn_root_and_wait(a);
+ return root_node;
+ }
+
+ static TreeNode* create_and_time( long number_of_nodes ) {
+ tbb::tick_count t0, t1;
+ TreeNode* root = allocate_node();
+ root->node_count = number_of_nodes;
+ root->value = Value(Pi*number_of_nodes);
+ --number_of_nodes;
+
+ t0 = tbb::tick_count::now();
+ root->left = do_in_one_thread( number_of_nodes/2 );
+ t1 = tbb::tick_count::now();
+ printf ("%24s: time = %.1f msec\n", "half created serially", (t1-t0).seconds()*1000);
+
+ t0 = tbb::tick_count::now();
+ root->right = do_in_parallel( number_of_nodes - number_of_nodes/2 );
+ t1 = tbb::tick_count::now();
+ printf ("%24s: time = %.1f msec\n", "half done in parallel", (t1-t0).seconds()*1000);
+
+ return root;
+ }
+};
+
+int main( int argc, char *argv[] ) {
+ // Parse command line parameters
+ // The format is: <exe_name> [-stdmalloc] [num_of_nodes [num_of_threads]]
+ bool use_tbbmalloc = true;
+ int arg_idx = 1;
+ if( argc>1 && strcmp(argv[1], "-stdmalloc")==0 ) {
+ use_tbbmalloc = false;
+ arg_idx = 2;
+ }
+ long number_of_nodes = argc>arg_idx ? strtol(argv[arg_idx],0,0) : 10000000;
+ ++arg_idx;
+ int nthread = argc>arg_idx ? strtol(argv[arg_idx],0,0) : tbb::task_scheduler_init::automatic;
+
+ // Start up scheduler
+ // For production, no argument should be provided to the constructor, so that
+ // the application gets the number of threads that are physically available.
+ tbb::task_scheduler_init init(nthread);
+
+ TreeNode* root;
+ if( use_tbbmalloc ) {
+ printf("Tree creation using TBB scalable allocator\n");
+ root = TreeMaker<tbbmalloc>::create_and_time( number_of_nodes );
+ } else {
+ printf("Tree creation using standard operator new\n");
+ root = TreeMaker<stdmalloc>::create_and_time( number_of_nodes );
+ }
+
+ // Warm up caches
+ SerialSumTree(root);
+ printf("Calculations:\n");
+ const char* which;
+ for( int i=0; i<3; ++i ) {
+ tbb::tick_count t0 = tbb::tick_count::now();
+ Value result;
+ switch( i ) {
+ case 0:
+ which = "SerialSumTree";
+ result = SerialSumTree(root);
+ break;
+ case 1:
+ which = "SimpleParallelSumTree";
+ result = SimpleParallelSumTree(root);
+ break;
+ case 2:
+ which = "OptimizedParallelSumTree";
+ result = OptimizedParallelSumTree(root);
+ break;
+ }
+ tbb::tick_count t1 = tbb::tick_count::now();
+ printf ("%24s: time = %.1f msec, sum=%g\n", which, (t1-t0).seconds()*1000, result);
+ }
+ return 0;
+}
diff --git a/examples/task/tree_sum/vc7.1/tree_sum.sln b/examples/task/tree_sum/vc7.1/tree_sum.sln
new file mode 100644
index 0000000..2c1d774
--- /dev/null
+++ b/examples/task/tree_sum/vc7.1/tree_sum.sln
@@ -0,0 +1,21 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tree_sum", "tree_sum.vcproj", "{C931C7A2-074E-4150-9E7A-39A03250411D}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {C931C7A2-074E-4150-9E7A-39A03250411D}.Debug.ActiveCfg = Debug|Win32
+ {C931C7A2-074E-4150-9E7A-39A03250411D}.Debug.Build.0 = Debug|Win32
+ {C931C7A2-074E-4150-9E7A-39A03250411D}.Release.ActiveCfg = Release|Win32
+ {C931C7A2-074E-4150-9E7A-39A03250411D}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/examples/task/tree_sum/vc7.1/tree_sum.suo b/examples/task/tree_sum/vc7.1/tree_sum.suo
new file mode 100644
index 0000000..60eb2f2
Binary files /dev/null and b/examples/task/tree_sum/vc7.1/tree_sum.suo differ
diff --git a/examples/task/tree_sum/vc7.1/tree_sum.vcproj b/examples/task/tree_sum/vc7.1/tree_sum.vcproj
new file mode 100644
index 0000000..e1182b1
--- /dev/null
+++ b/examples/task/tree_sum/vc7.1/tree_sum.vcproj
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="tree_sum"
+ ProjectGUID="{C931C7A2-074E-4150-9E7A-39A03250411D}"
+ RootNamespace="tree_sum"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll and tbbmalloc_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll" "$(OutDir)" && copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbbmalloc_debug.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib tbbmalloc.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll and tbbmalloc.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll" "$(OutDir)" && copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbbmalloc.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+ <File
+ RelativePath="..\main.cpp">
+ </File>
+ <File
+ RelativePath="..\OptimizedParallelSumTree.cpp">
+ </File>
+ <File
+ RelativePath="..\SerialSumTree.cpp">
+ </File>
+ <File
+ RelativePath="..\SimpleParallelSumTree.cpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="">
+ <File
+ RelativePath="..\common.h">
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\index.html">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/task/tree_sum/vc8/tree_sum.sln b/examples/task/tree_sum/vc8/tree_sum.sln
new file mode 100644
index 0000000..d417699
--- /dev/null
+++ b/examples/task/tree_sum/vc8/tree_sum.sln
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tree_sum", "tree_sum.vcproj", "{C931C7A2-074E-4150-9E7A-39A03250411E}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|Win32.Build.0 = Debug|Win32
+ {C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.ActiveCfg = Debug|x64
+ {C931C7A2-074E-4150-9E7A-39A03250411E}.Debug|x64.Build.0 = Debug|x64
+ {C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.ActiveCfg = Release|Win32
+ {C931C7A2-074E-4150-9E7A-39A03250411E}.Release|Win32.Build.0 = Release|Win32
+ {C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.ActiveCfg = Release|x64
+ {C931C7A2-074E-4150-9E7A-39A03250411E}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/examples/task/tree_sum/vc8/tree_sum.suo b/examples/task/tree_sum/vc8/tree_sum.suo
new file mode 100644
index 0000000..d03bcea
Binary files /dev/null and b/examples/task/tree_sum/vc8/tree_sum.suo differ
diff --git a/examples/task/tree_sum/vc8/tree_sum.vcproj b/examples/task/tree_sum/vc8/tree_sum.vcproj
new file mode 100644
index 0000000..4eda874
--- /dev/null
+++ b/examples/task/tree_sum/vc8/tree_sum.vcproj
@@ -0,0 +1,368 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="tree_sum"
+ ProjectGUID="{C931C7A2-074E-4150-9E7A-39A03250411E}"
+ RootNamespace="tree_sum"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll and tbbmalloc_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll" "$(OutDir)" && copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbbmalloc_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib tbbmalloc_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll and tbbmalloc_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb_debug.dll" "$(OutDir)" && copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbbmalloc_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib tbbmalloc.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll and tbbmalloc.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb.dll" "$(OutDir)" && copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbbmalloc.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib tbbmalloc.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll and tbbmalloc.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb.dll" "$(OutDir)" && copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbbmalloc.dll" "$(OutDir)""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\common.h"
+ >
+ </File>
+ <File
+ RelativePath="..\main.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\OptimizedParallelSumTree.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\SerialSumTree.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\SimpleParallelSumTree.cpp"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\index.html"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/task/tree_sum/xcode/tree_sum.xcodeproj/project.pbxproj b/examples/task/tree_sum/xcode/tree_sum.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..2e977df
--- /dev/null
+++ b/examples/task/tree_sum/xcode/tree_sum.xcodeproj/project.pbxproj
@@ -0,0 +1,325 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 42;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 05593A100B8F4F4500DE73AB /* common.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 05593A0B0B8F4F4500DE73AB /* common.h */; };
+ 05593A110B8F4F4500DE73AB /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593A0C0B8F4F4500DE73AB /* main.cpp */; };
+ 05593A120B8F4F4500DE73AB /* OptimizedParallelSumTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593A0D0B8F4F4500DE73AB /* OptimizedParallelSumTree.cpp */; };
+ 05593A130B8F4F4500DE73AB /* SerialSumTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593A0E0B8F4F4500DE73AB /* SerialSumTree.cpp */; };
+ 05593A140B8F4F4500DE73AB /* SimpleParallelSumTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593A0F0B8F4F4500DE73AB /* SimpleParallelSumTree.cpp */; };
+ 05593A160B8F4F5D00DE73AB /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 05593A150B8F4F5D00DE73AB /* libtbbmalloc.dylib */; };
+ 05593A170B8F4F6E00DE73AB /* libtbbmalloc.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 05593A150B8F4F5D00DE73AB /* libtbbmalloc.dylib */; };
+ A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+ A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 8DD76F690486A84900D96B5E /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 12;
+ dstPath = "";
+ dstSubfolderSpec = 16;
+ files = (
+ A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,
+ 05593A170B8F4F6E00DE73AB /* libtbbmalloc.dylib in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 05593A4A0B8F51E000DE73AB /* tree_sum */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = tree_sum; sourceTree = BUILT_PRODUCTS_DIR; };
+ 05593A0B0B8F4F4500DE73AB /* common.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = common.h; path = ../common.h; sourceTree = SOURCE_ROOT; };
+ 05593A0C0B8F4F4500DE73AB /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../main.cpp; sourceTree = SOURCE_ROOT; };
+ 05593A0D0B8F4F4500DE73AB /* OptimizedParallelSumTree.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = OptimizedParallelSumTree.cpp; path = ../OptimizedParallelSumTree.cpp; sourceTree = SOURCE_ROOT; };
+ 05593A0E0B8F4F4500DE73AB /* SerialSumTree.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = SerialSumTree.cpp; path = ../SerialSumTree.cpp; sourceTree = SOURCE_ROOT; };
+ 05593A0F0B8F4F4500DE73AB /* SimpleParallelSumTree.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = SimpleParallelSumTree.cpp; path = ../SimpleParallelSumTree.cpp; sourceTree = SOURCE_ROOT; };
+ 05593A150B8F4F5D00DE73AB /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbbmalloc.dylib; sourceTree = "<absolute>"; };
+ A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8DD76F660486A84900D96B5E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,
+ 05593A160B8F4F5D00DE73AB /* libtbbmalloc.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 08FB7794FE84155DC02AAC07 /* tree_sum */ = {
+ isa = PBXGroup;
+ children = (
+ 08FB7795FE84155DC02AAC07 /* Source */,
+ A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+ 1AB674ADFE9D54B511CA2CBB /* Products */,
+ );
+ name = tree_sum;
+ sourceTree = "<group>";
+ };
+ 08FB7795FE84155DC02AAC07 /* Source */ = {
+ isa = PBXGroup;
+ children = (
+ 05593A0B0B8F4F4500DE73AB /* common.h */,
+ 05593A0C0B8F4F4500DE73AB /* main.cpp */,
+ 05593A0D0B8F4F4500DE73AB /* OptimizedParallelSumTree.cpp */,
+ 05593A0E0B8F4F4500DE73AB /* SerialSumTree.cpp */,
+ 05593A0F0B8F4F4500DE73AB /* SimpleParallelSumTree.cpp */,
+ );
+ name = Source;
+ sourceTree = "<group>";
+ };
+ 1AB674ADFE9D54B511CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 05593A4A0B8F51E000DE73AB /* tree_sum */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ 05593A150B8F4F5D00DE73AB /* libtbbmalloc.dylib */,
+ A1F593B30B8F06F900073279 /* libtbb.dylib */,
+ );
+ name = "External Frameworks and Libraries";
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8DD76F620486A84900D96B5E /* tree_sum */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "tree_sum" */;
+ buildPhases = (
+ 8DD76F640486A84900D96B5E /* Sources */,
+ 8DD76F660486A84900D96B5E /* Frameworks */,
+ 8DD76F690486A84900D96B5E /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = tree_sum;
+ productInstallPath = "$(HOME)/bin";
+ productName = tree_sum;
+ productReference = 05593A4A0B8F51E000DE73AB /* tree_sum */;
+ productType = "com.apple.product-type.tool";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 08FB7793FE84155DC02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "tree_sum" */;
+ hasScannedForEncodings = 1;
+ mainGroup = 08FB7794FE84155DC02AAC07 /* tree_sum */;
+ projectDirPath = "";
+ targets = (
+ 8DD76F620486A84900D96B5E /* tree_sum */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8DD76F640486A84900D96B5E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 05593A110B8F4F4500DE73AB /* main.cpp in Sources */,
+ 05593A120B8F4F4500DE73AB /* OptimizedParallelSumTree.cpp in Sources */,
+ 05593A130B8F4F4500DE73AB /* SerialSumTree.cpp in Sources */,
+ 05593A140B8F4F4500DE73AB /* SimpleParallelSumTree.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 1DEB923208733DC60010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_2)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = tree_sum;
+ ZERO_LINK = NO;
+ };
+ name = Debug;
+ };
+ 1DEB923308733DC60010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_2)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = tree_sum;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 1DEB923608733DC60010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Debug;
+ };
+ 1DEB923708733DC60010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Release;
+ };
+ A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_2)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = tree_sum;
+ ZERO_LINK = NO;
+ };
+ name = Debug64;
+ };
+ A1F593C70B8F0E6E00073279 /* Release64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_2)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = tree_sum;
+ ZERO_LINK = NO;
+ };
+ name = Release64;
+ };
+ A1F593C80B8F0E6E00073279 /* Debug64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-m64",
+ );
+ OTHER_LDFLAGS = "-m64";
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Debug64;
+ };
+ A1F593C90B8F0E6E00073279 /* Release64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-m64",
+ );
+ OTHER_LDFLAGS = "-m64";
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Release64;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "tree_sum" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB923208733DC60010E9CD /* Debug */,
+ A1F593C60B8F0E6E00073279 /* Debug64 */,
+ 1DEB923308733DC60010E9CD /* Release */,
+ A1F593C70B8F0E6E00073279 /* Release64 */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "tree_sum" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB923608733DC60010E9CD /* Debug */,
+ A1F593C80B8F0E6E00073279 /* Debug64 */,
+ 1DEB923708733DC60010E9CD /* Release */,
+ A1F593C90B8F0E6E00073279 /* Release64 */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/examples/test_all/fibonacci/Fibonacci.cpp b/examples/test_all/fibonacci/Fibonacci.cpp
new file mode 100644
index 0000000..1f27787
--- /dev/null
+++ b/examples/test_all/fibonacci/Fibonacci.cpp
@@ -0,0 +1,583 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/* Example program that computes Fibonacci numbers in different ways.
+ Arguments are: [ Number [Threads [Repeats]]]
+ The defaults are Number=100 Threads=1:4 Repeats=1.
+
+ The point of this program is to check that the library is working properly.
+ Most of the computations are deliberately silly and not expected to
+ show any speedup on multiprocessors.
+*/
+#include <cstdio>
+#include <cstdlib>
+#include <cassert>
+#include <utility>
+#include "tbb/task.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tick_count.h"
+#include "tbb/blocked_range.h"
+#include "tbb/concurrent_vector.h"
+#include "tbb/concurrent_queue.h"
+#include "tbb/concurrent_hash_map.h"
+#include "tbb/parallel_while.h"
+#include "tbb/parallel_for.h"
+#include "tbb/parallel_reduce.h"
+#include "tbb/parallel_scan.h"
+#include "tbb/pipeline.h"
+#include "tbb/atomic.h"
+#include "tbb/mutex.h"
+#include "tbb/spin_mutex.h"
+#include "tbb/queuing_mutex.h"
+
+using namespace std;
+using namespace tbb;
+
+//! type used for Fibonacci number computations
+typedef long long value;
+
+//! Matrix 2x2 class
+struct Matrix2x2
+{
+ //! Array of values
+ value v[2][2];
+ Matrix2x2() {}
+ Matrix2x2(value v00, value v01, value v10, value v11) {
+ v[0][0] = v00; v[0][1] = v01; v[1][0] = v10; v[1][1] = v11;
+ }
+ Matrix2x2 operator * (const Matrix2x2 &to) const; //< Multiply two Matrices
+};
+//! Default matrix to multiply
+static const Matrix2x2 Matrix1110(1, 1, 1, 0);
+//! Raw arrays matrices multiply
+void Matrix2x2Multiply(const value a[2][2], const value b[2][2], value c[2][2]);
+
+/////////////////////// Serial methods ////////////////////////
+
+//! Plain serial sum
+value SerialFib(int n)
+{
+ if(n < 2)
+ return n;
+ value a = 0, b = 1, sum; int i;
+ for( i = 2; i <= n; i++ )
+ { // n is really index of Fibonacci number
+ sum = a + b; a = b; b = sum;
+ }
+ return sum;
+}
+//! Serial n-1 matrices multiplication
+value SerialMatrixFib(int n)
+{
+ value c[2][2], a[2][2] = {{1, 1}, {1, 0}}, b[2][2] = {{1, 1}, {1, 0}}; int i;
+ for(i = 2; i < n; i++)
+ { // Using condition to prevent copying of values
+ if(i & 1) Matrix2x2Multiply(a, c, b);
+ else Matrix2x2Multiply(a, b, c);
+ }
+ return (i & 1) ? c[0][0] : b[0][0]; // get result from upper left cell
+}
+//! Recursive summing. Just for complete list of serial algorithms, not used
+value SerialRecursiveFib(int n)
+{
+ value result;
+ if(n < 2)
+ result = n;
+ else
+ result = SerialRecursiveFib(n - 1) + SerialRecursiveFib(n - 2);
+ return result;
+}
+//! Introducing of queue method in serial
+value SerialQueueFib(int n)
+{
+ concurrent_queue<Matrix2x2> Q;
+ for(int i = 1; i < n; i++)
+ Q.push(Matrix1110);
+ Matrix2x2 A, B;
+ while(true) {
+ Q.pop(A);
+ if(Q.empty()) break;
+ Q.pop(B);
+ Q.push(A * B);
+ }
+ return A.v[0][0];
+}
+//! Trying to use concurrent_vector
+value SerialVectorFib(int n)
+{
+ concurrent_vector<value> A;
+ A.grow_by(2);
+ A[0] = 0; A[1] = 1;
+ for( int i = 2; i <= n; i++)
+ {
+ A.grow_to_at_least(i+1);
+ A[i] = A[i-1] + A[i-2];
+ }
+ return A[n];
+}
+
+///////////////////// Parallel methods ////////////////////////
+
+// *** Serial shared by mutexes *** //
+
+//! Shared glabals
+value SharedA = 0, SharedB = 1; int SharedI = 1, SharedN;
+
+//! Template task class which computes Fibonacci numbers with shared globals
+template<typename M>
+class SharedSerialFibBody {
+ M &mutex;
+public:
+ SharedSerialFibBody( M &m ) : mutex( m ) {}
+ //! main loop
+ void operator()( const blocked_range<int>& range ) const {
+ for(;;) {
+ typename M::scoped_lock lock( mutex );
+ if(SharedI >= SharedN) break;
+ value sum = SharedA + SharedB;
+ SharedA = SharedB; SharedB = sum;
+ ++SharedI;
+ }
+ }
+};
+
+//! Root function
+template<class M>
+value SharedSerialFib(int n)
+{
+ SharedA = 0; SharedB = 1; SharedI = 1; SharedN = n; M mutex;
+ parallel_for( blocked_range<int>(0,4,1), SharedSerialFibBody<M>( mutex ) );
+ return SharedB;
+}
+
+// *** Serial shared by concurrent hash *** //
+
+//! Hash comparer
+struct IntHashCompare {
+ bool equal( const int j, const int k ) const { return j == k; }
+ unsigned long hash( const int k ) const { return (unsigned long)k; }
+};
+//! NumbersTable type based on concurrent_hash_map
+typedef concurrent_hash_map<int, value, IntHashCompare> NumbersTable;
+//! task for serial method using shared concurrent_hash_map
+class ConcurrentHashSerialFibTask: public task {
+ NumbersTable &Fib;
+ int my_n;
+public:
+ //! constructor
+ ConcurrentHashSerialFibTask( NumbersTable &cht, int n ) : Fib(cht), my_n(n) { }
+ //! executing task
+ /*override*/ task* execute()
+ {
+ for( int i = 2; i <= my_n; ++i ) { // there is no difference in to recycle or to make loop
+ NumbersTable::const_accessor f1, f2; // same as iterators
+ if( !Fib.find(f1, i-1) || !Fib.find(f2, i-2) ) {
+ // Something is seriously wrong, because i-1 and i-2 must have been inserted
+ // earlier by this thread or another thread.
+ assert(0);
+ }
+ value sum = f1->second + f2->second;
+ NumbersTable::accessor fsum;
+ if(Fib.insert(fsum, i)) // inserting. is new element?
+ fsum->second = sum; // new, assign value
+ else
+ assert( fsum->second == sum ); // no, check value
+ }
+ return 0;
+ }
+};
+
+//! Root function
+value ConcurrentHashSerialFib(int n)
+{
+ NumbersTable Fib;
+ { // We need to declare the accessor in a local block before using its values outside the block.
+ NumbersTable::accessor fref;
+ bool okay;
+ okay = Fib.insert(fref, 0); assert(okay); fref->second = 0; // assign initial values
+ okay = Fib.insert(fref, 1); assert(okay); fref->second = 1;
+ // Lifetime of fref ends here, which implicitly releases the write lock on what it points to.
+ }
+ task_list list;
+ // allocate tasks
+ list.push_back(*new(task::allocate_root()) ConcurrentHashSerialFibTask(Fib, n));
+ list.push_back(*new(task::allocate_root()) ConcurrentHashSerialFibTask(Fib, n));
+ task::spawn_root_and_wait(list);
+ NumbersTable::const_accessor fresult;
+ bool okay = Fib.find( fresult, n );
+ assert(okay);
+ return fresult->second;
+}
+
+// *** Queue with parallel_for and parallel_while *** //
+
+//! Stream of matrices
+struct QueueStream {
+ volatile bool producer_is_done;
+ concurrent_queue<Matrix2x2> Queue;
+ //! Get pair of matricies if present
+ bool pop_if_present( pair<Matrix2x2, Matrix2x2> &mm ) {
+ // get first matrix if present
+ if(!Queue.pop_if_present(mm.first)) return false;
+ // get second matrix if present
+ if(!Queue.pop_if_present(mm.second)) {
+ // if not, then push back first matrix
+ Queue.push(mm.first); return false;
+ }
+ return true;
+ }
+};
+
+//! Functor for parallel_for which fills the queue
+struct parallel_forFibBody {
+ QueueStream &my_stream;
+ //! fill functor arguments
+ parallel_forFibBody(QueueStream &s) : my_stream(s) { }
+ //! iterate thorough range
+ void operator()( const blocked_range<int> &range ) const {
+ int i_end = range.end();
+ for( int i = range.begin(); i != i_end; ++i ) {
+ my_stream.Queue.push( Matrix1110 ); // push initial matrix
+ }
+ }
+};
+//! Functor for parallel_while which process the queue
+class parallel_whileFibBody
+{
+ QueueStream &my_stream;
+ parallel_while<parallel_whileFibBody> &my_while;
+public:
+ typedef pair<Matrix2x2, Matrix2x2> argument_type;
+ //! fill functor arguments
+ parallel_whileFibBody(parallel_while<parallel_whileFibBody> &w, QueueStream &s)
+ : my_while(w), my_stream(s) { }
+ //! process pair of matrices
+ void operator() (argument_type mm) const {
+ mm.first = mm.first * mm.second;
+ // note: it can run concurrently with QueueStream::pop_if_present()
+ if(my_stream.Queue.pop_if_present(mm.second))
+ my_while.add( mm ); // now, two matrices available. Add next iteration.
+ else my_stream.Queue.push( mm.first ); // or push back calculated value if queue is empty
+ }
+};
+
+//! Parallel queue's filling task
+struct QueueInsertTask: public task {
+ QueueStream &my_stream;
+ int my_n;
+ //! fill task arguments
+ QueueInsertTask( int n, QueueStream &s ) : my_n(n), my_stream(s) { }
+ //! executing task
+ /*override*/ task* execute() {
+ // Execute of parallel pushing of n-1 initial matrices
+ parallel_for( blocked_range<int>( 1, my_n, 10 ), parallel_forFibBody(my_stream) );
+ my_stream.producer_is_done = true;
+ return 0;
+ }
+};
+//! Parallel queue's processing task
+struct QueueProcessTask: public task {
+ QueueStream &my_stream;
+ //! fill task argument
+ QueueProcessTask( QueueStream &s ) : my_stream(s) { }
+ //! executing task
+ /*override*/ task* execute() {
+ while( !my_stream.producer_is_done || my_stream.Queue.size()>1 ) {
+ parallel_while<parallel_whileFibBody> w; // run while loop in parallel
+ w.run( my_stream, parallel_whileFibBody( w, my_stream ) );
+ }
+ return 0;
+ }
+};
+//! Root function
+value ParallelQueueFib(int n)
+{
+ QueueStream stream;
+ stream.producer_is_done = false;
+ task_list list;
+ list.push_back(*new(task::allocate_root()) QueueInsertTask( n, stream ));
+ list.push_back(*new(task::allocate_root()) QueueProcessTask( stream ));
+ // last runs first - scheduler is as LIFO
+ task::spawn_root_and_wait(list);
+ assert(stream.Queue.size() == 1); // it is easy to lose some work
+ Matrix2x2 M; stream.Queue.pop( M ); // get last matrix
+ return M.v[0][0]; // and result number
+}
+
+// *** Queue with pipeline *** //
+
+//! filter to fills queue
+class InputFilter: public filter {
+ atomic<int> N; //< index of Fibonacci number
+public:
+ concurrent_queue<Matrix2x2> Queue;
+ //! fill filter arguments
+ InputFilter( int n ) : filter(false /*is not serial*/) { N = n; }
+ //! executing filter
+ /*override*/ void* operator()(void*)
+ {
+ int n = --N;
+ if(n <= 0) return 0;
+ Queue.push( Matrix1110 );
+ return n == 1? 0 : &Queue; // one less multiplications
+ }
+};
+//! filter to process queue
+class MultiplyFilter: public filter {
+public:
+ MultiplyFilter( ) : filter(false /*is not serial*/) { }
+ //! executing filter
+ /*override*/ void* operator()(void*p)
+ {
+ concurrent_queue<Matrix2x2> &Queue = *static_cast<concurrent_queue<Matrix2x2> *>(p);
+ Matrix2x2 m1, m2;
+ Queue.pop( m1 ); Queue.pop( m2 ); // get two elements
+ m1 = m1 * m2; // process them
+ Queue.push( m1 ); // and push back
+ return this; // just nothing
+ }
+};
+//! Root function
+value ParallelPipeFib(int n)
+{
+ InputFilter input( n );
+ MultiplyFilter process;
+ // Create the pipeline
+ pipeline pipeline;
+ // add filters
+ pipeline.add_filter( input ); // first
+ pipeline.add_filter( process ); // second
+
+ // Run the pipeline
+ pipeline.run( n ); // must be larger then max threads number
+ pipeline.clear(); // do not forget clear the pipeline
+
+ Matrix2x2 M; input.Queue.pop( M ); // get last element
+ return M.v[0][0]; // get value
+}
+
+// *** parallel_reduce *** //
+
+//! Functor for parallel_reduce
+struct parallel_reduceFibBody {
+ Matrix2x2 sum;
+ int splitted; //< flag to make one less operation for splitted bodies
+ //! Constructor fills sum with initial matrix
+ parallel_reduceFibBody() : sum( Matrix1110 ), splitted(0) { }
+ //! Splitting constructor
+ parallel_reduceFibBody( parallel_reduceFibBody& other, split ) : sum( Matrix1110 ), splitted(1/*note that it is splitted*/) {}
+ //! Join point
+ void join( parallel_reduceFibBody &s ) {
+ sum = sum * s.sum;
+ }
+ //! Process multiplications
+ void operator()( const blocked_range<int> &r ) {
+ for( int k = r.begin() + splitted; k < r.end(); ++k )
+ sum = sum * Matrix1110;
+ splitted = 0; // reset flag, because this method can be reused for next range
+ }
+};
+//! Root function
+value parallel_reduceFib(int n)
+{
+ parallel_reduceFibBody b;
+ parallel_reduce(blocked_range<int>(2, n, 3), b); // do parallel reduce on range [2, n) for b
+ return b.sum.v[0][0];
+}
+
+// *** parallel_scan *** //
+
+//! Functor for parallel_scan
+struct parallel_scanFibBody {
+ Matrix2x2 sum;
+ int first; // flag to make one less operation for first range
+ //! Constructor fills sum with initial matrix
+ parallel_scanFibBody() : sum( Matrix1110 ), first(1) {}
+ //! Splitting constructor
+ parallel_scanFibBody( parallel_scanFibBody &b, split) : sum( Matrix1110 ), first(1) {}
+ //! Join point
+ void reverse_join( parallel_scanFibBody &a ) {
+ sum = sum * a.sum;
+ }
+ //! Assign point
+ void assign( parallel_scanFibBody &b ) {
+ sum = b.sum;
+ }
+ //! Process multiplications. For two tags
+ template<typename T>
+ void operator()( const blocked_range<int> &r, T) {
+ // see tag.is_final_scan() for what tag is used
+ for( int k = r.begin() + first; k < r.end(); ++k )
+ sum = sum * Matrix1110;
+ first = 0; // reset flag, because this method can be reused for next range
+ }
+};
+//! Root function
+value parallel_scanFib(int n)
+{
+ parallel_scanFibBody b;
+ parallel_scan(blocked_range<int>(1/*one less, because body skip first*/, n, 3), b);
+ return b.sum.v[0][0];
+}
+
+// *** Raw tasks *** //
+
+//! task class which computes Fibonacci numbers by Lucas formula
+struct FibTask: public task {
+ const int n;
+ value& sum;
+ value x, y;
+ bool second_phase; //< flag of continuation
+ // task arguments
+ FibTask( int n_, value& sum_ ) :
+ n(n_), sum(sum_), second_phase(false)
+ {}
+ //! Execute task
+ /*override*/ task* execute() {
+ // Using Lucas' formula here
+ if( second_phase ) { // childs finished
+ sum = n&1 ? x*x + y*y : x*x - y*y;
+ return NULL;
+ }
+ if( n <= 2 ) {
+ sum = n!=0;
+ return NULL;
+ } else {
+ recycle_as_continuation(); // repeat this task when childs finish
+ second_phase = true; // mark second phase
+ FibTask& a = *new( allocate_child() ) FibTask( n/2 + 1, x );
+ FibTask& b = *new( allocate_child() ) FibTask( n/2 - 1 + (n&1), y );
+ set_ref_count(2);
+ spawn( a );
+ return &b;
+ }
+ }
+};
+//! Root function
+value ParallelTaskFib(int n) {
+ value sum;
+ FibTask& a = *new(task::allocate_root()) FibTask(n, sum);
+ task::spawn_root_and_wait(a);
+ return sum;
+}
+
+/////////////////////////// Main ////////////////////////////////////////////////////
+
+//! A closed range of int.
+struct IntRange {
+ int low;
+ int high;
+ void set_from_string( const char* s );
+ IntRange( int low_, int high_ ) : low(low_), high(high_) {}
+};
+
+void IntRange::set_from_string( const char* s ) {
+ char* end;
+ high = low = strtol(s,&end,0);
+ switch( *end ) {
+ case ':':
+ high = strtol(end+1,0,0);
+ break;
+ case '\0':
+ break;
+ default:
+ printf("unexpected character = %c\n",*end);
+ }
+}
+
+//! Tick count for start
+static tick_count t0;
+
+typedef value (*MeasureFunc)(int);
+//! Measure ticks count in loop [2..n]
+value Measure(const char *name, MeasureFunc func, int n)
+{
+ value result;
+ printf(name); t0 = tick_count::now();
+ for(int number = 2; number <= n; number++)
+ result = func(number);
+ printf("\t- in %f msec\n", (tick_count::now() - t0).seconds()*1000);
+ return result;
+}
+
+//! program entry
+int main(int argc, char* argv[])
+{
+ int NumbersCount = argc>1 ? strtol(argv[1],0,0) : 100;
+ IntRange NThread(1,4);// Number of threads to use.
+ if(argc>2) NThread.set_from_string(argv[2]);
+ unsigned long ntrial = argc>3? (unsigned long)strtoul(argv[3],0,0) : 1;
+ value result, sum;
+
+ printf("Fibonacci numbers example. Generating %d numbers..\n", NumbersCount);
+
+ result = Measure("Serial loop", SerialFib, NumbersCount);
+ sum = Measure("Serial matrix", SerialMatrixFib, NumbersCount); assert(result == sum);
+ sum = Measure("Serial vector", SerialVectorFib, NumbersCount); assert(result == sum);
+ sum = Measure("Serial queue", SerialQueueFib, NumbersCount); assert(result == sum);
+ // now in parallel
+ for( unsigned long i=0; i<ntrial; ++i ) {
+ for(int threads = NThread.low; threads <= NThread.high; threads++)
+ {
+ task_scheduler_init scheduler_init(threads); printf("Threads number is %d\n", threads);
+
+ sum = Measure("Shared serial (mutex)\t", SharedSerialFib<mutex>, NumbersCount); assert(result == sum);
+ sum = Measure("Shared serial (spin_mutex)", SharedSerialFib<spin_mutex>, NumbersCount); assert(result == sum);
+ sum = Measure("Shared serial (queuing_mutex)", SharedSerialFib<queuing_mutex>, NumbersCount); assert(result == sum);
+ sum = Measure("Shared serial (Conc.HashTable)", ConcurrentHashSerialFib, NumbersCount); assert(result == sum);
+ sum = Measure("Parallel while+for/queue", ParallelQueueFib, NumbersCount); assert(result == sum);
+ sum = Measure("Parallel pipe/queue\t", ParallelPipeFib, NumbersCount); assert(result == sum);
+ sum = Measure("Parallel reduce\t\t", parallel_reduceFib, NumbersCount); assert(result == sum);
+ sum = Measure("Parallel scan\t\t", parallel_scanFib, NumbersCount); assert(result == sum);
+ sum = Measure("Parallel tasks\t\t", ParallelTaskFib, NumbersCount); assert(result == sum);
+ }
+
+ #ifdef __GNUC__
+ printf("Fibonacci number #%d modulo 2^64 is %lld\n\n", NumbersCount, result);
+ #else
+ printf("Fibonacci number #%d modulo 2^64 is %I64d\n\n", NumbersCount, result);
+ #endif
+ }
+ return 0;
+}
+
+// Utils
+
+void Matrix2x2Multiply(const value a[2][2], const value b[2][2], value c[2][2])
+{
+ for( int i = 0; i <= 1; i++)
+ for( int j = 0; j <= 1; j++)
+ c[i][j] = a[i][0]*b[0][j] + a[i][1]*b[1][j];
+}
+
+Matrix2x2 Matrix2x2::operator *(const Matrix2x2 &to) const
+{
+ Matrix2x2 result;
+ Matrix2x2Multiply(v, to.v, result.v);
+ return result;
+}
diff --git a/examples/test_all/fibonacci/Makefile b/examples/test_all/fibonacci/Makefile
new file mode 100644
index 0000000..5e57454
--- /dev/null
+++ b/examples/test_all/fibonacci/Makefile
@@ -0,0 +1,45 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# GNU Makefile that builds and runs example.
+PROG=fibonacci
+
+# The C++ compiler
+#CXX=g++
+
+all: release test
+
+release: *.cpp
+ $(CXX) -O2 -DNDEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb
+
+debug: *.cpp
+ $(CXX) -O0 -g -DTBB_DO_ASSERT $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug
+
+clean:
+ rm -f $(PROG) *.o *.d
+
+test:
+ ./$(PROG) 500
diff --git a/examples/test_all/fibonacci/Makefile.windows b/examples/test_all/fibonacci/Makefile.windows
new file mode 100644
index 0000000..0c7f986
--- /dev/null
+++ b/examples/test_all/fibonacci/Makefile.windows
@@ -0,0 +1,45 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# Common Makefile that builds and runs example.
+
+# Just specify your program basename
+PROG=Fibonacci
+
+# The C++ compiler options
+CXX = cl.exe
+MYCXXFLAGS=/TP /EHsc /W3 /nologo $(TBB_SECURITY_SWITCH) /D _CONSOLE /D _MBCS /D WIN32 $(CXXFLAGS)
+MYLDFLAGS =/INCREMENTAL:NO /NOLOGO /DEBUG /FIXED:NO /OUT:$(PROG).exe $(LDFLAGS)
+
+all: release test
+release:
+ $(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(MYLDFLAGS)
+debug:
+ $(CXX) *.cpp /MDd /Od /Zi /D TBB_DO_ASSERT /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(MYLDFLAGS)
+clean:
+ @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest
+test:
+ $(PROG) 500
diff --git a/examples/test_all/fibonacci/index.html b/examples/test_all/fibonacci/index.html
new file mode 100644
index 0000000..0095280
--- /dev/null
+++ b/examples/test_all/fibonacci/index.html
@@ -0,0 +1,54 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory contains an example that computes Fibonacci numbers in several
+different ways. The purpose of the example is to exercise every include file
+and class in Threading Building Blocks.
+Most of the computations are deliberately silly and not expected to
+show any speedup on multiprocessors.
+<H2>Files</H2>
+<DL>
+<DT><A HREF="Fibonacci.cpp">Fibonacci.cpp</A>
+<DD>Source code for example.
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Makefile for building example.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="vc7.1">vc7.1</A>
+<DD>Contains Microsoft* Visual Studio* .NET 2003 workspace for building and running the example.
+<DT><A HREF="vc8">vc8</A>
+<DD>Contains Microsoft* Visual Studio* 2005 workspace for building and running the example.
+<DT><A HREF="xcode">xcode</A>
+<DD>Contains Xcode* IDE workspace for building and running the example.
+</DL>
+
+<H2>To Build</H2>
+General build directions can be found <A HREF=../../index.html#build>here</A>.
+
+<H2>Usage</H2>
+<DL>
+<DT><TT>fibonacci <I>K</I> [<I>M</I>[:<I>N</I>]] [<I>R</I>]</TT>
+<DD>Calculates the <I>K</I>-th fibonacci number.
+ <I>M</I> and <I>N</I> are a range of numbers of threads to be used.
+ <I>R</I> is the number of times to repeat the calculation.
+<DT>To run a short version of this example, e.g., for use with Intel® Threading Tools:
+<DD>Build a <I>debug</I> version of the example
+ (see the <A HREF=../../index.html#build>build directions</A>).
+ <BR>Run it with a small fibonacci number and the desired number of threads, e.g., <TT>fibonacci 100 4</TT>.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright © 2005-2007 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
diff --git a/examples/test_all/fibonacci/vc7.1/fibonacci.sln b/examples/test_all/fibonacci/vc7.1/fibonacci.sln
new file mode 100644
index 0000000..7fc4219
--- /dev/null
+++ b/examples/test_all/fibonacci/vc7.1/fibonacci.sln
@@ -0,0 +1,21 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Fibonacci", "Fibonacci.vcproj", "{D3A5A89E-2165-45AD-97D4-1AB22D852826}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {D3A5A89E-2165-45AD-97D4-1AB22D852826}.Debug.ActiveCfg = Debug|Win32
+ {D3A5A89E-2165-45AD-97D4-1AB22D852826}.Debug.Build.0 = Debug|Win32
+ {D3A5A89E-2165-45AD-97D4-1AB22D852826}.Release.ActiveCfg = Release|Win32
+ {D3A5A89E-2165-45AD-97D4-1AB22D852826}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/examples/test_all/fibonacci/vc7.1/fibonacci.suo b/examples/test_all/fibonacci/vc7.1/fibonacci.suo
new file mode 100644
index 0000000..74b19c3
Binary files /dev/null and b/examples/test_all/fibonacci/vc7.1/fibonacci.suo differ
diff --git a/examples/test_all/fibonacci/vc7.1/fibonacci.vcproj b/examples/test_all/fibonacci/vc7.1/fibonacci.vcproj
new file mode 100644
index 0000000..40403b2
--- /dev/null
+++ b/examples/test_all/fibonacci/vc7.1/fibonacci.vcproj
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="fibonacci"
+ ProjectGUID="{D3A5A89E-2165-45AD-97D4-1AB22D852826}"
+ RootNamespace="fibonacci"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb_debug.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="TRUE"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc7.1\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc7.1\bin\tbb.dll" "$(OutDir)""/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx">
+ <File
+ RelativePath="..\fibonacci.cpp">
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\index.html">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/test_all/fibonacci/vc8/fibonacci.sln b/examples/test_all/fibonacci/vc8/fibonacci.sln
new file mode 100644
index 0000000..b2cb826
--- /dev/null
+++ b/examples/test_all/fibonacci/vc8/fibonacci.sln
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fibonacci", "fibonacci.vcproj", "{3AA40693-F93D-4D4B-B32E-068F511A252E}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|Win32.Build.0 = Debug|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|x64.ActiveCfg = Debug|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A252E}.Debug|x64.Build.0 = Debug|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|Win32.ActiveCfg = Release|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|Win32.Build.0 = Release|Win32
+ {3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|x64.ActiveCfg = Release|x64
+ {3AA40693-F93D-4D4B-B32E-068F511A252E}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/examples/test_all/fibonacci/vc8/fibonacci.suo b/examples/test_all/fibonacci/vc8/fibonacci.suo
new file mode 100644
index 0000000..dd720db
Binary files /dev/null and b/examples/test_all/fibonacci/vc8/fibonacci.suo differ
diff --git a/examples/test_all/fibonacci/vc8/fibonacci.vcproj b/examples/test_all/fibonacci/vc8/fibonacci.vcproj
new file mode 100644
index 0000000..d5903ca
--- /dev/null
+++ b/examples/test_all/fibonacci/vc8/fibonacci.vcproj
@@ -0,0 +1,352 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="fibonacci"
+ ProjectGUID="{3AA40693-F93D-4D4B-B32E-068F511A252E}"
+ RootNamespace="fibonacci"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE;TBB_DO_ASSERT"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb_debug.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb_debug.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb_debug.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(TEMP)\tbb_examples\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\ia32\vc8\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\ia32\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(TEMP)\tbb_examples\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(TEMP)\tbb_examples\$(SolutionName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TBB20_INSTALL_DIR)\include"
+ PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tbb.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="$(TBB20_INSTALL_DIR)\em64t\vc8\lib"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ FixedBaseAddress="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copying tbb.dll"
+ CommandLine="copy "$(TBB20_INSTALL_DIR)\em64t\vc8\bin\tbb.dll" "$(OutDir)""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\Fibonacci.cpp"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\index.html"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/examples/test_all/fibonacci/xcode/fibonacci.xcodeproj/project.pbxproj b/examples/test_all/fibonacci/xcode/fibonacci.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..4652bc2
--- /dev/null
+++ b/examples/test_all/fibonacci/xcode/fibonacci.xcodeproj/project.pbxproj
@@ -0,0 +1,296 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 42;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ A1F593A60B8F042A00073279 /* Fibonacci.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* Fibonacci.cpp */; };
+ A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+ A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 8DD76F690486A84900D96B5E /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 12;
+ dstPath = "";
+ dstSubfolderSpec = 16;
+ files = (
+ A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 8DD76F6C0486A84900D96B5E /* Fibonacci */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Fibonacci; sourceTree = BUILT_PRODUCTS_DIR; };
+ A1F593A50B8F042A00073279 /* Fibonacci.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Fibonacci.cpp; path = ../Fibonacci.cpp; sourceTree = SOURCE_ROOT; };
+ A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = /Library/Frameworks/TBB.framework/Libraries/libtbb.dylib; sourceTree = "<absolute>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8DD76F660486A84900D96B5E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 08FB7794FE84155DC02AAC07 /* Fibonacci */ = {
+ isa = PBXGroup;
+ children = (
+ 08FB7795FE84155DC02AAC07 /* Source */,
+ A1F593B20B8F06F900073279 /* External Frameworks and Libraries */,
+ 1AB674ADFE9D54B511CA2CBB /* Products */,
+ );
+ name = Fibonacci;
+ sourceTree = "<group>";
+ };
+ 08FB7795FE84155DC02AAC07 /* Source */ = {
+ isa = PBXGroup;
+ children = (
+ A1F593A50B8F042A00073279 /* Fibonacci.cpp */,
+ );
+ name = Source;
+ sourceTree = "<group>";
+ };
+ 1AB674ADFE9D54B511CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8DD76F6C0486A84900D96B5E /* Fibonacci */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ A1F593B30B8F06F900073279 /* libtbb.dylib */,
+ );
+ name = "External Frameworks and Libraries";
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8DD76F620486A84900D96B5E /* Fibonacci */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Fibonacci" */;
+ buildPhases = (
+ 8DD76F640486A84900D96B5E /* Sources */,
+ 8DD76F660486A84900D96B5E /* Frameworks */,
+ 8DD76F690486A84900D96B5E /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Fibonacci;
+ productInstallPath = "$(HOME)/bin";
+ productName = Fibonacci;
+ productReference = 8DD76F6C0486A84900D96B5E /* Fibonacci */;
+ productType = "com.apple.product-type.tool";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 08FB7793FE84155DC02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "Fibonacci" */;
+ hasScannedForEncodings = 1;
+ mainGroup = 08FB7794FE84155DC02AAC07 /* Fibonacci */;
+ projectDirPath = "";
+ targets = (
+ 8DD76F620486A84900D96B5E /* Fibonacci */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8DD76F640486A84900D96B5E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A1F593A60B8F042A00073279 /* Fibonacci.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 1DEB923208733DC60010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = Fibonacci;
+ ZERO_LINK = NO;
+ };
+ name = Debug;
+ };
+ 1DEB923308733DC60010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = Fibonacci;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 1DEB923608733DC60010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Debug;
+ };
+ 1DEB923708733DC60010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Release;
+ };
+ A1F593C60B8F0E6E00073279 /* Debug64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = Fibonacci;
+ ZERO_LINK = NO;
+ };
+ name = Debug64;
+ };
+ A1F593C70B8F0E6E00073279 /* Release64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/TBB.framework/Libraries\"";
+ PRODUCT_NAME = Fibonacci;
+ ZERO_LINK = NO;
+ };
+ name = Release64;
+ };
+ A1F593C80B8F0E6E00073279 /* Debug64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-m64",
+ );
+ OTHER_LDFLAGS = "-m64";
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Debug64;
+ };
+ A1F593C90B8F0E6E00073279 /* Release64 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = i386;
+ GCC_ENABLE_CPP_RTTI = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-m64",
+ );
+ OTHER_LDFLAGS = "-m64";
+ PREBINDING = NO;
+ PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ SYMROOT = "/tmp/tbb-$(USER)";
+ };
+ name = Release64;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Fibonacci" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB923208733DC60010E9CD /* Debug */,
+ A1F593C60B8F0E6E00073279 /* Debug64 */,
+ 1DEB923308733DC60010E9CD /* Release */,
+ A1F593C70B8F0E6E00073279 /* Release64 */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "Fibonacci" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB923608733DC60010E9CD /* Debug */,
+ A1F593C80B8F0E6E00073279 /* Debug64 */,
+ 1DEB923708733DC60010E9CD /* Release */,
+ A1F593C90B8F0E6E00073279 /* Release64 */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}
diff --git a/examples/test_all/index.html b/examples/test_all/index.html
new file mode 100644
index 0000000..05082f6
--- /dev/null
+++ b/examples/test_all/index.html
@@ -0,0 +1,25 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory contains programs that exercise all the components of Threading Building Blocks.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="fibonacci/index.html">fibonacci</A>
+<DD>Compute Fibonacci numbers in different ways.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright © 2005-2007 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/include/index.html b/include/index.html
new file mode 100644
index 0000000..869de18
--- /dev/null
+++ b/include/index.html
@@ -0,0 +1,24 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+Include files for Threading Building Blocks.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="tbb">tbb</A>
+<DD>Include files for Threading Building Blocks.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright © 2005-2007 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
diff --git a/include/tbb/_tbb_windef.h b/include/tbb/_tbb_windef.h
new file mode 100644
index 0000000..e47aa03
--- /dev/null
+++ b/include/tbb/_tbb_windef.h
@@ -0,0 +1,61 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_tbb_windef_H
+#error Do not #include this file directly. Use "#include tbb/tbb_stddef.h" instead.
+#endif /* __TBB_tbb_windef_H */
+
+#if !defined(_MT) || !defined(_DLL)
+# error The library requires dynamic linkage with multithreaded MSVC runtime. \
+ Choose proper project settings or use /MD[d] compiler switch.
+#endif
+
+// Workaround for problem in which MVSC headers fail to define namespace std::.
+namespace std {
+ using ::size_t; using ::ptrdiff_t;
+}
+
+#define __TBB_STRING_AUX(x) #x
+#define __TBB_STRING(x) __TBB_STRING_AUX(x)
+
+// Default setting of TBB_DO_ASSERT
+#ifdef TBB_DO_ASSERT
+# if TBB_DO_ASSERT
+# if !defined(_DEBUG)
+# pragma message(__FILE__ "(" __TBB_STRING(__LINE__) ") : Warning: Recommend using /MDd if compiling with TBB_DO_ASSERT!=0")
+# endif
+# else
+# if defined(_DEBUG)
+# pragma message(__FILE__ "(" __TBB_STRING(__LINE__) ") : Warning: Recommend using /MD if compiling with TBB_DO_ASSERT==0")
+# endif
+# endif
+#else
+# ifdef _DEBUG
+# define TBB_DO_ASSERT 1
+# endif
+#endif
diff --git a/include/tbb/aligned_space.h b/include/tbb/aligned_space.h
new file mode 100644
index 0000000..9c85ce7
--- /dev/null
+++ b/include/tbb/aligned_space.h
@@ -0,0 +1,64 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_aligned_space_H
+#define __TBB_aligned_space_H
+
+#include "tbb_stddef.h"
+
+namespace tbb {
+
+//! Block of space aligned sufficiently to construct an array T with N elements.
+/** The elements are not constructed or destroyed by this class.
+ @ingroup memory_allocation */
+template<typename T,size_t N>
+class aligned_space {
+private:
+ union element_type {
+ size_t s;
+ long z;
+#if _MSC_VER
+ __int64 l;
+#else
+ long long l;
+#endif /* _MSC_VER */
+ long double x;
+ double y;
+ };
+ element_type array[(sizeof(T)*N+sizeof(element_type)-1)/sizeof(element_type)];
+public:
+ //! Pointer to beginning of array
+ T* begin() {return reinterpret_cast<T*>(this);}
+
+ //! Pointer to one past last element in array.
+ T* end() {return begin()+N;}
+};
+
+} // namespace tbb
+
+#endif /* __TBB_aligned_space_H */
diff --git a/include/tbb/atomic.h b/include/tbb/atomic.h
new file mode 100644
index 0000000..4ecceea
--- /dev/null
+++ b/include/tbb/atomic.h
@@ -0,0 +1,372 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_atomic_H
+#define __TBB_atomic_H
+
+#include <cstddef>
+#include "tbb_stddef.h"
+
+#if _MSC_VER
+#define __TBB_LONG_LONG __int64
+#else
+#define __TBB_LONG_LONG long long
+#endif /* _MSC_VER */
+
+#include "tbb_machine.h"
+
+namespace tbb {
+
+//! Specifies memory fencing.
+enum memory_semantics {
+ //! For internal use only.
+ __TBB_full_fence,
+ //! Acquire fence
+ acquire,
+ //! Release fence
+ release
+};
+
+//! @cond INTERNAL
+namespace internal {
+
+template<size_t Size, memory_semantics M>
+struct atomic_traits { // Primary template
+};
+
+template<size_t Size>
+struct atomic_word { // Primary template
+ typedef intptr word;
+};
+
+template<typename I> // Primary template
+struct atomic_base {
+ volatile I my_value;
+};
+
+#if __GNUC__
+#define __TBB_DECL_ATOMIC_FIELD(t,f,a) t f __attribute__ ((aligned(a)));
+#elif defined(__INTEL_COMPILER)||_MSC_VER >= 1300
+#define __TBB_DECL_ATOMIC_FIELD(t,f,a) __declspec(align(a)) t f;
+#else
+#error Do not know syntax for forcing alignment.
+#endif /* __GNUC__ */
+
+template<>
+struct atomic_word<8> { // Specialization
+ typedef int64_t word;
+};
+
+#if _WIN32 && __TBB_x86_64
+// ATTENTION: On 64-bit Windows, we currently have to specialize atomic_word
+// for every size to avoid type conversion warnings
+// See declarations of atomic primitives in machine/windows_em64t.h
+template<>
+struct atomic_word<1> { // Specialization
+ typedef int8_t word;
+};
+template<>
+struct atomic_word<2> { // Specialization
+ typedef int16_t word;
+};
+template<>
+struct atomic_word<4> { // Specialization
+ typedef int32_t word;
+};
+#endif
+
+template<>
+struct atomic_base<uint64_t> { // Specialization
+ __TBB_DECL_ATOMIC_FIELD(volatile uint64_t,my_value,8)
+};
+
+template<>
+struct atomic_base<int64_t> { // Specialization
+ __TBB_DECL_ATOMIC_FIELD(volatile int64_t,my_value,8)
+};
+
+#define __TBB_DECL_FENCED_ATOMIC_PRIMITIVES(S,M) \
+ template<> struct atomic_traits<S,M> { \
+ typedef atomic_word<S>::word word; \
+ inline static word compare_and_swap( volatile void* location, word new_value, word comparand ) {\
+ return __TBB_CompareAndSwap##S##M(location,new_value,comparand); \
+ } \
+ inline static word fetch_and_add( volatile void* location, word addend ) { \
+ return __TBB_FetchAndAdd##S##M(location,addend); \
+ } \
+ inline static word fetch_and_store( volatile void* location, word value ) {\
+ return __TBB_FetchAndStore##S##M(location,value); \
+ } \
+ };
+
+#define __TBB_DECL_ATOMIC_PRIMITIVES(S) \
+ template<memory_semantics M> \
+ struct atomic_traits<S,M> { \
+ typedef atomic_word<S>::word word; \
+ inline static word compare_and_swap( volatile void* location, word new_value, word comparand ) {\
+ return __TBB_CompareAndSwap##S(location,new_value,comparand); \
+ } \
+ inline static word fetch_and_add( volatile void* location, word addend ) { \
+ return __TBB_FetchAndAdd##S(location,addend); \
+ } \
+ inline static word fetch_and_store( volatile void* location, word value ) {\
+ return __TBB_FetchAndStore##S(location,value); \
+ } \
+ };
+
+#if __TBB_DECL_FENCED_ATOMICS
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,__TBB_full_fence)
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,__TBB_full_fence)
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,__TBB_full_fence)
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,__TBB_full_fence)
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,acquire)
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,acquire)
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,acquire)
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,acquire)
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(1,release)
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(2,release)
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(4,release)
+__TBB_DECL_FENCED_ATOMIC_PRIMITIVES(8,release)
+#else
+__TBB_DECL_ATOMIC_PRIMITIVES(1)
+__TBB_DECL_ATOMIC_PRIMITIVES(2)
+__TBB_DECL_ATOMIC_PRIMITIVES(4)
+__TBB_DECL_ATOMIC_PRIMITIVES(8)
+#endif
+
+//! Additive inverse of 1 for type T.
+/** Various compilers issue various warnings if -1 is used with various integer types.
+ The baroque expression below avoids all the warnings (we hope). */
+#define __TBB_MINUS_ONE(T) (T(T(0)-T(1)))
+
+template<typename I, typename D, size_t Step>
+struct atomic_impl: private atomic_base<I> {
+private:
+ typedef typename atomic_word<sizeof(I)>::word word;
+public:
+ typedef I value_type;
+
+ template<memory_semantics M>
+ value_type fetch_and_add( D addend ) {
+ return value_type(internal::atomic_traits<sizeof(value_type),M>::fetch_and_add( &this->my_value, addend*Step ));
+ }
+
+ value_type fetch_and_add( D addend ) {
+ return fetch_and_add<__TBB_full_fence>(addend);
+ }
+
+ template<memory_semantics M>
+ value_type fetch_and_increment() {
+ return fetch_and_add<M>(1);
+ }
+
+ value_type fetch_and_increment() {
+ return fetch_and_add(1);
+ }
+
+ template<memory_semantics M>
+ value_type fetch_and_decrement() {
+ return fetch_and_add<M>(__TBB_MINUS_ONE(D));
+ }
+
+ value_type fetch_and_decrement() {
+ return fetch_and_add(__TBB_MINUS_ONE(D));
+ }
+
+ template<memory_semantics M>
+ value_type fetch_and_store( value_type value ) {
+ return value_type(internal::atomic_traits<sizeof(value_type),M>::fetch_and_store(&this->my_value,word(value)));
+ }
+
+ value_type fetch_and_store( value_type value ) {
+ return fetch_and_store<__TBB_full_fence>(value);
+ }
+
+ template<memory_semantics M>
+ value_type compare_and_swap( value_type value, value_type comparand ) {
+ return value_type(internal::atomic_traits<sizeof(value_type),M>::compare_and_swap(&this->my_value,word(value),word(comparand)));
+ }
+
+ value_type compare_and_swap( value_type value, value_type comparand ) {
+ return compare_and_swap<__TBB_full_fence>(value,comparand);
+ }
+
+ operator value_type() const volatile {
+ return __TBB_load_with_acquire( this->my_value );
+ }
+
+ value_type& _internal_reference() const {
+ return static_cast<value_type&>(this->my_value);
+ }
+
+protected:
+ value_type store_with_release( value_type rhs ) {
+ __TBB_store_with_release(this->my_value,rhs);
+ return rhs;
+ }
+
+public:
+ value_type operator+=( D addend ) {
+ return fetch_and_add(addend)+addend;
+ }
+
+ value_type operator-=( D addend ) {
+ // Additive inverse of addend computed using binary minus,
+ // instead of unary minus, for sake of avoiding compiler warnings.
+ return operator+=(D(0)-addend);
+ }
+
+ value_type operator++() {
+ return fetch_and_add(1)+1;
+ }
+
+ value_type operator--() {
+ return fetch_and_add(__TBB_MINUS_ONE(D))-1;
+ }
+
+ value_type operator++(int) {
+ return fetch_and_add(1);
+ }
+
+ value_type operator--(int) {
+ return fetch_and_add(__TBB_MINUS_ONE(D));
+ }
+};
+
+#if WORDSIZE == 4
+#if defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400
+
+template<>
+inline atomic_impl<__TBB_LONG_LONG,__TBB_LONG_LONG,1>::operator atomic_impl<__TBB_LONG_LONG,__TBB_LONG_LONG,1>::value_type() const volatile {
+ return __TBB_Load8(&this->my_value);
+}
+
+template<>
+inline atomic_impl<unsigned __TBB_LONG_LONG,unsigned __TBB_LONG_LONG,1>::operator atomic_impl<unsigned __TBB_LONG_LONG,unsigned __TBB_LONG_LONG,1>::value_type() const volatile {
+ return __TBB_Load8(&this->my_value);
+}
+
+template<>
+inline atomic_impl<__TBB_LONG_LONG,__TBB_LONG_LONG,1>::value_type atomic_impl<__TBB_LONG_LONG,__TBB_LONG_LONG,1>::store_with_release( value_type rhs ) {
+ __TBB_Store8(&this->my_value,rhs);
+ return rhs;
+}
+
+template<>
+inline atomic_impl<unsigned __TBB_LONG_LONG,unsigned __TBB_LONG_LONG,1>::value_type atomic_impl<unsigned __TBB_LONG_LONG,unsigned __TBB_LONG_LONG,1>::store_with_release( value_type rhs ) {
+ __TBB_Store8(&this->my_value,rhs);
+ return rhs;
+}
+
+#endif /* defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400 */
+#endif
+
+} /* Internal */
+//! @endcond
+
+//! Primary template for atomic.
+/** See the Reference for details.
+ @ingroup synchronization */
+template<typename T>
+struct atomic {
+};
+
+#define __TBB_DECL_ATOMIC(T) \
+ template<> struct atomic<T>: internal::atomic_impl<T,T,1> { \
+ T operator=( T rhs ) {return store_with_release(rhs);} \
+ };
+
+#if defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400
+__TBB_DECL_ATOMIC(__TBB_LONG_LONG)
+__TBB_DECL_ATOMIC(unsigned __TBB_LONG_LONG)
+#else
+// Some old versions of MVSC cannot correctly compile templates with "long long".
+#endif /* defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400 */
+__TBB_DECL_ATOMIC(long)
+__TBB_DECL_ATOMIC(unsigned long)
+__TBB_DECL_ATOMIC(unsigned int)
+__TBB_DECL_ATOMIC(int)
+__TBB_DECL_ATOMIC(unsigned short)
+__TBB_DECL_ATOMIC(short)
+__TBB_DECL_ATOMIC(char)
+__TBB_DECL_ATOMIC(signed char)
+__TBB_DECL_ATOMIC(unsigned char)
+
+#if !defined(_MSC_VER)||defined(_NATIVE_WCHAR_T_DEFINED)
+__TBB_DECL_ATOMIC(wchar_t)
+#endif /* _MSC_VER||!defined(_NATIVE_WCHAR_T_DEFINED) */
+
+template<typename T> struct atomic<T*>: internal::atomic_impl<T*,ptrdiff_t,sizeof(T)> {
+ T* operator=( T* rhs ) {
+ // "this" required here in strict ISO C++ because store_with_release is a dependent name
+ return this->store_with_release(rhs);
+ }
+ T* operator->() const {
+ return (*this);
+ }
+};
+
+template<>
+struct atomic<void*> {
+private:
+ void* volatile my_value;
+
+public:
+ typedef void* value_type;
+
+ template<memory_semantics M>
+ value_type compare_and_swap( value_type value, value_type comparand ) {
+ return value_type(internal::atomic_traits<sizeof(value_type),M>::compare_and_swap(&my_value,internal::intptr(value),internal::intptr(comparand)));
+ }
+
+ value_type compare_and_swap( value_type value, value_type comparand ) {
+ return compare_and_swap<__TBB_full_fence>(value,comparand);
+ }
+
+ template<memory_semantics M>
+ value_type fetch_and_store( value_type value ) {
+ return value_type(internal::atomic_traits<sizeof(value_type),M>::fetch_and_store(&my_value,internal::intptr(value)));
+ }
+
+ value_type fetch_and_store( value_type value ) {
+ return fetch_and_store<__TBB_full_fence>(value);
+ }
+
+ operator value_type() const {
+ return __TBB_load_with_acquire(this->my_value);
+ }
+
+ value_type operator=( value_type rhs ) {
+ __TBB_store_with_release(this->my_value,rhs);
+ return rhs;
+ }
+};
+
+} // namespace tbb
+
+#endif /* __TBB_atomic_H */
diff --git a/include/tbb/blocked_range.h b/include/tbb/blocked_range.h
new file mode 100644
index 0000000..5d9fcf5
--- /dev/null
+++ b/include/tbb/blocked_range.h
@@ -0,0 +1,120 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_blocked_range_H
+#define __TBB_blocked_range_H
+
+#include "tbb_stddef.h"
+
+namespace tbb {
+
+//! A range over which to iterate.
+/** @ingroup algorithms */
+template<typename Value>
+class blocked_range {
+public:
+ //! Type of a value
+ /** Called a const_iterator for sake of algorithms that need to treat a blocked_range
+ as an STL container. */
+ typedef Value const_iterator;
+
+ //! Type for size of a range
+ typedef size_t size_type;
+
+ //! Construct range with default-constructed values for begin and end.
+ /** Requires that Value have a default constructor. */
+ blocked_range() : my_begin(), my_end() {}
+
+ //! Construct range over half-open interval [begin,end), with the given grainsize.
+ blocked_range( Value begin_, Value end_, size_type grainsize_=1 ) :
+ my_end(end_), my_begin(begin_), my_grainsize(grainsize_)
+ {
+ __TBB_ASSERT( my_grainsize>0, "grainsize must be positive" );
+ }
+
+ //! Beginning of range.
+ const_iterator begin() const {return my_begin;}
+
+ //! One past last value in range.
+ const_iterator end() const {return my_end;}
+
+ //! Size of the range
+ /** Unspecified if end()<begin(). */
+ size_type size() const {
+ __TBB_ASSERT( !(end()<begin()), "size() unspecified if end()<begin()" );
+ return size_type(my_end-my_begin);
+ }
+
+ //! The grain size for this range.
+ size_type grainsize() const {return my_grainsize;}
+
+ //------------------------------------------------------------------------
+ // Methods that implement Range concept
+ //------------------------------------------------------------------------
+
+ //! True if range is empty.
+ bool empty() const {return !(my_begin<my_end);}
+
+ //! True if range is divisible.
+ /** Unspecified if end()<begin(). */
+ bool is_divisible() const {return my_grainsize<size();}
+
+ //! Split range.
+ /** The new Range *this has the second half, the old range r has the first half.
+ Unspecified if end()<begin() or !is_divisible(). */
+ blocked_range( blocked_range& r, split ) :
+ my_end(r.my_end),
+ my_begin(do_split(r)),
+ my_grainsize(r.my_grainsize)
+ {}
+
+private:
+ /** NOTE: my_end MUST be declared before my_begin, otherwise the forking constructor will break. */
+ Value my_end;
+ Value my_begin;
+ size_type my_grainsize;
+
+ //! Auxilary function used by forking constructor.
+ /** Using this function lets us not require that Value support assignment or default construction. */
+ static Value do_split( blocked_range& r ) {
+ __TBB_ASSERT( r.is_divisible(), "cannot split blocked_range that is not divisible" );
+ Value middle = r.my_begin + (r.my_end-r.my_begin)/2u;
+ r.my_end = middle;
+ return middle;
+ }
+
+ template<typename RowValue, typename ColValue>
+ friend class blocked_range2d;
+
+ template<typename RowValue, typename ColValue, typename PageValue>
+ friend class blocked_range3d;
+};
+
+} // namespace tbb
+
+#endif /* __TBB_blocked_range_H */
diff --git a/include/tbb/blocked_range2d.h b/include/tbb/blocked_range2d.h
new file mode 100644
index 0000000..bd2c375
--- /dev/null
+++ b/include/tbb/blocked_range2d.h
@@ -0,0 +1,97 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_blocked_range2d_H
+#define __TBB_blocked_range2d_H
+
+#include "tbb_stddef.h"
+#include "blocked_range.h"
+
+namespace tbb {
+
+//! A 2-dimensional range that models the Range concept.
+/** @ingroup algorithms */
+template<typename RowValue, typename ColValue=RowValue>
+class blocked_range2d {
+public:
+ //! Type for size of an iteation range
+ typedef blocked_range<RowValue> row_range_type;
+ typedef blocked_range<ColValue> col_range_type;
+
+private:
+ row_range_type my_rows;
+ col_range_type my_cols;
+
+public:
+
+ blocked_range2d( RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize,
+ ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize ) :
+ my_rows(row_begin,row_end,row_grainsize),
+ my_cols(col_begin,col_end,col_grainsize)
+ {
+ }
+
+ blocked_range2d( RowValue row_begin, RowValue row_end,
+ ColValue col_begin, ColValue col_end ) :
+ my_rows(row_begin,row_end),
+ my_cols(col_begin,col_end)
+ {
+ }
+
+ //! True if range is empty
+ bool empty() const {
+ // Yes, it is a logical OR here, not AND.
+ return my_rows.empty() || my_cols.empty();
+ }
+
+ //! True if range is divisible into two pieces.
+ bool is_divisible() const {
+ return my_rows.is_divisible() || my_cols.is_divisible();
+ }
+
+ blocked_range2d( blocked_range2d& r, split ) :
+ my_rows(r.my_rows),
+ my_cols(r.my_cols)
+ {
+ if( my_rows.size()*double(my_cols.grainsize()) < my_cols.size()*double(my_rows.grainsize()) ) {
+ my_cols.my_begin = col_range_type::do_split(r.my_cols);
+ } else {
+ my_rows.my_begin = row_range_type::do_split(r.my_rows);
+ }
+ }
+
+ //! The rows of the iteration space
+ const row_range_type& rows() const {return my_rows;}
+
+ //! The columns of the iteration space
+ const col_range_type& cols() const {return my_cols;}
+};
+
+} // namespace tbb
+
+#endif /* __TBB_blocked_range2d_H */
diff --git a/include/tbb/blocked_range3d.h b/include/tbb/blocked_range3d.h
new file mode 100644
index 0000000..bbabf11
--- /dev/null
+++ b/include/tbb/blocked_range3d.h
@@ -0,0 +1,116 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_blocked_range3d_H
+#define __TBB_blocked_range3d_H
+
+#include "tbb_stddef.h"
+#include "blocked_range.h"
+
+namespace tbb {
+
+//! A 3-dimensional range that models the Range concept.
+/** @ingroup algorithms */
+template<typename PageValue, typename RowValue=PageValue, typename ColValue=RowValue>
+class blocked_range3d {
+public:
+ //! Type for size of an iteation range
+ typedef blocked_range<PageValue> page_range_type;
+ typedef blocked_range<RowValue> row_range_type;
+ typedef blocked_range<ColValue> col_range_type;
+
+private:
+ page_range_type my_pages;
+ row_range_type my_rows;
+ col_range_type my_cols;
+
+public:
+
+ blocked_range3d( PageValue page_begin, PageValue page_end,
+ RowValue row_begin, RowValue row_end,
+ ColValue col_begin, ColValue col_end ) :
+ my_pages(page_begin,page_end),
+ my_rows(row_begin,row_end),
+ my_cols(col_begin,col_end)
+ {
+ }
+
+ blocked_range3d( PageValue page_begin, PageValue page_end, typename page_range_type::size_type page_grainsize,
+ RowValue row_begin, RowValue row_end, typename row_range_type::size_type row_grainsize,
+ ColValue col_begin, ColValue col_end, typename col_range_type::size_type col_grainsize ) :
+ my_pages(page_begin,page_end,page_grainsize),
+ my_rows(row_begin,row_end,row_grainsize),
+ my_cols(col_begin,col_end,col_grainsize)
+ {
+ }
+
+ //! True if range is empty
+ bool empty() const {
+ // Yes, it is a logical OR here, not AND.
+ return my_pages.empty() || my_rows.empty() || my_cols.empty();
+ }
+
+ //! True if range is divisible into two pieces.
+ bool is_divisible() const {
+ return my_pages.is_divisible() || my_rows.is_divisible() || my_cols.is_divisible();
+ }
+
+ blocked_range3d( blocked_range3d& r, split ) :
+ my_pages(r.my_pages),
+ my_rows(r.my_rows),
+ my_cols(r.my_cols)
+ {
+ if( my_pages.size()*double(my_rows.grainsize()) < my_rows.size()*double(my_pages.grainsize()) ) {
+ if ( my_rows.size()*double(my_cols.grainsize()) < my_cols.size()*double(my_rows.grainsize()) ) {
+ my_cols.my_begin = col_range_type::do_split(r.my_cols);
+ } else {
+ my_rows.my_begin = row_range_type::do_split(r.my_rows);
+ }
+ } else {
+ if ( my_pages.size()*double(my_cols.grainsize()) < my_cols.size()*double(my_pages.grainsize()) ) {
+ my_cols.my_begin = col_range_type::do_split(r.my_cols);
+ } else {
+ my_pages.my_begin = page_range_type::do_split(r.my_pages);
+ }
+ }
+ }
+
+ //! The pages of the iteration space
+ const page_range_type& pages() const {return my_pages;}
+
+ //! The rows of the iteration space
+ const row_range_type& rows() const {return my_rows;}
+
+ //! The columns of the iteration space
+ const col_range_type& cols() const {return my_cols;}
+
+};
+
+} // namespace tbb
+
+#endif /* __TBB_blocked_range3d_H */
diff --git a/include/tbb/cache_aligned_allocator.h b/include/tbb/cache_aligned_allocator.h
new file mode 100644
index 0000000..7a91503
--- /dev/null
+++ b/include/tbb/cache_aligned_allocator.h
@@ -0,0 +1,137 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_cache_aligned_allocator_H
+#define __TBB_cache_aligned_allocator_H
+
+#include <new>
+#include "tbb_stddef.h"
+
+namespace tbb {
+
+//! @cond INTERNAL
+namespace internal {
+ //! Compile-time constant that is upper bound on cache line/sector size.
+ /** It should be used only in situations where having a compile-time upper
+ bound is more useful than a run-time exact answer.
+ @ingroup memory_allocation */
+ const size_t NFS_MaxLineSize = 128;
+
+ //! Cache/sector line size.
+ /** @ingroup memory_allocation */
+ size_t NFS_GetLineSize();
+
+ //! Allocate memory on cache/sector line boundary.
+ /** @ingroup memory_allocation */
+ void* NFS_Allocate( size_t n_element, size_t element_size, void* hint );
+
+ //! Free memory allocated by NFS_Allocate.
+ /** Freeing a NULL pointer is allowed, but has no effect.
+ @ingroup memory_allocation */
+ void NFS_Free( void* );
+}
+//! @endcond
+
+//! Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5
+/** The members are ordered the same way they are in section 20.4.1
+ of the ISO C++ standard.
+ @ingroup memory_allocation */
+template<typename T>
+class cache_aligned_allocator {
+public:
+ typedef T* pointer;
+ typedef const T* const_pointer;
+ typedef T& reference;
+ typedef const T& const_reference;
+ typedef T value_type;
+ typedef size_t size_type;
+ typedef ptrdiff_t difference_type;
+ template<typename U> struct rebind {
+ typedef cache_aligned_allocator<U> other;
+ };
+
+#if _WIN64
+ //! Non-ISO method required by Microsoft's STL containers
+ /** Some versions of Microsoft's container classes seem to require that
+ allocators supply this method. */
+ char* _Charalloc( size_type size ) {
+ return (char*)internal::NFS_Allocate( size, sizeof(T), 0 );
+ }
+#endif /* _WIN64 */
+
+ cache_aligned_allocator() throw() {}
+ cache_aligned_allocator( const cache_aligned_allocator& ) throw() {}
+ template<typename U> cache_aligned_allocator(const cache_aligned_allocator<U>&) throw() {}
+
+ pointer address(reference x) const {return &x;}
+ const_pointer address(const_reference x) const {return &x;}
+
+ //! Allocate space for n objects, starting on a cache/sector line.
+ pointer allocate( size_type n, void* hint=0 ) {
+ return pointer(internal::NFS_Allocate( n, sizeof(T), hint ));
+ }
+
+ //! Free block of memory that starts on a cache line
+ void deallocate( pointer p, size_type ) {
+ internal::NFS_Free(p);
+ }
+
+ //! Largest value for which method allocate might succeed.
+ size_type max_size() const throw() {
+ return (~size_t(0)-internal::NFS_MaxLineSize)/sizeof(T);
+ }
+
+ //! Copy-construct value at location pointed to by p.
+ void construct( pointer p, const T& value ) {new(static_cast<void*>(p)) T(value);}
+
+ //! Destroy value at location pointed to by p.
+ void destroy( pointer p ) {p->~T();}
+};
+
+//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1
+/** @ingroup memory_allocation */
+template<>
+class cache_aligned_allocator<void> {
+public:
+ typedef void* pointer;
+ typedef const void* const_pointer;
+ typedef void value_type;
+ template<typename U> struct rebind {
+ typedef cache_aligned_allocator<U> other;
+ };
+};
+
+template<typename T, typename U>
+inline bool operator==( const cache_aligned_allocator<T>&, const cache_aligned_allocator<U>& ) {return true;}
+
+template<typename T, typename U>
+inline bool operator!=( const cache_aligned_allocator<T>&, const cache_aligned_allocator<U>& ) {return false;}
+
+} // namespace ThreadBuildingBlocks
+
+#endif /* __TBB_cache_aligned_allocator_H */
diff --git a/include/tbb/concurrent_hash_map.h b/include/tbb/concurrent_hash_map.h
new file mode 100644
index 0000000..ac6c649
--- /dev/null
+++ b/include/tbb/concurrent_hash_map.h
@@ -0,0 +1,714 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_concurrent_hash_map_H
+#define __TBB_concurrent_hash_map_H
+
+#include "tbb_stddef.h"
+#include "cache_aligned_allocator.h"
+#include "spin_rw_mutex.h"
+#include "atomic.h"
+#include <iterator>
+#include <utility> // Need std::pair from here
+
+namespace tbb {
+
+//! @cond INTERNAL
+namespace internal {
+ template<typename Value, typename Iterator>
+ class hash_map_range;
+
+ struct hash_map_segment_base {
+ //! Mutex that protects this segment
+ spin_rw_mutex my_mutex;
+
+ // Number of buckets
+ atomic<size_t> my_logical_size;
+
+ // Size of chains
+ /** Always zero or a a power of two */
+ size_t my_physical_size;
+
+ //! True if my_logical_size>=my_physical_size.
+ /** Used to support Intel(R) Thread Checker. */
+ bool internal_grow_predicate() const;
+ };
+
+ //! Meets requirements of a forward iterator for STL */
+ /** Value is either the T or const T type of the container.
+ @ingroup containers */
+ template<typename Container, typename Value>
+ class hash_map_iterator {
+ typedef typename Container::bucket bucket;
+ typedef typename Container::chain chain;
+
+ //! concurrent_hash_map over which we are iterating.
+ Container* my_table;
+
+ //! Pointer to bucket that has current item
+ bucket* my_bucket;
+
+ //! Index into hash table's array for current item
+ size_t my_array_index;
+
+ //! Index of segment that has array for current item
+ size_t my_segment_index;
+
+ template<typename C, typename T, typename U>
+ friend bool operator==( const hash_map_iterator<C,T>& i, const hash_map_iterator<C,U>& j );
+
+ template<typename C, typename T, typename U>
+ friend bool operator!=( const hash_map_iterator<C,T>& i, const hash_map_iterator<C,U>& j );
+
+ template<typename C, typename T, typename U>
+ friend ptrdiff_t operator-( const hash_map_iterator<C,T>& i, const hash_map_iterator<C,U>& j );
+
+ template<typename C, typename U>
+ friend class internal::hash_map_iterator;
+
+ template<typename V, typename I>
+ friend class internal::hash_map_range;
+
+ void advance_to_next_bucket() {
+ size_t i = my_array_index+1;
+ do {
+ while( i<my_table->my_segment[my_segment_index].my_physical_size ) {
+ my_bucket = my_table->my_segment[my_segment_index].my_array[i].bucket_list;
+ if( my_bucket ) goto done;
+ ++i;
+ }
+ i = 0;
+ } while( ++my_segment_index<my_table->n_segment );
+ done:
+ my_array_index = i;
+ }
+ public:
+ //! Construct undefined iterator
+ hash_map_iterator() {}
+ hash_map_iterator( const Container& table, size_t segment_index, size_t array_index=0 );
+ hash_map_iterator( const hash_map_iterator<Container,const Value>& other ) :
+ my_table(other.my_table),
+ my_bucket(other.my_bucket),
+ my_array_index(other.my_array_index),
+ my_segment_index(other.my_segment_index)
+ {}
+ Value& operator*() const {
+ __TBB_ASSERT( my_bucket, "iterator uninitialized or at end of container?" );
+ return my_bucket->item;
+ }
+ Value* operator->() const {return &operator*();}
+ hash_map_iterator& operator++();
+
+ //! Post increment
+ Value* operator++(int) {
+ Value* result = &operator*();
+ operator++();
+ return result;
+ }
+
+ // STL support
+
+ typedef ptrdiff_t difference_type;
+ typedef Value value_type;
+ typedef Value* pointer;
+ typedef Value& reference;
+ typedef std::forward_iterator_tag iterator_category;
+ };
+
+ template<typename Container, typename Value>
+ hash_map_iterator<Container,Value>::hash_map_iterator( const Container& table, size_t segment_index, size_t array_index ) :
+ my_table(const_cast<Container*>(&table)),
+ my_bucket(NULL),
+ my_array_index(array_index),
+ my_segment_index(segment_index)
+ {
+ if( segment_index<my_table->n_segment ) {
+ chain* first_chain = my_table->my_segment[segment_index].my_array;
+ my_bucket = first_chain ? first_chain[my_array_index].bucket_list : NULL;
+ if( !my_bucket ) advance_to_next_bucket();
+ }
+ }
+
+ template<typename Container, typename Value>
+ hash_map_iterator<Container,Value>& hash_map_iterator<Container,Value>::operator++() {
+ my_bucket=my_bucket->next;
+ if( !my_bucket ) advance_to_next_bucket();
+ return *this;
+ }
+
+ template<typename Container, typename T, typename U>
+ bool operator==( const hash_map_iterator<Container,T>& i, const hash_map_iterator<Container,U>& j ) {
+ return i.my_bucket==j.my_bucket;
+ }
+
+ template<typename Container, typename T, typename U>
+ bool operator!=( const hash_map_iterator<Container,T>& i, const hash_map_iterator<Container,U>& j ) {
+ return i.my_bucket!=j.my_bucket;
+ }
+
+ //! Range class used with concurrent_hash_map
+ /** @ingroup containers */
+ template<typename Value, typename Iterator>
+ class hash_map_range{
+ private:
+ Iterator my_begin;
+ Iterator my_end;
+ mutable Iterator my_midpoint;
+ size_t my_grainsize;
+ //! Set my_midpoint to point approximately half way between my_begin and my_end.
+ void set_midpoint() const;
+ public:
+ typedef Value value_type;
+ typedef Value& reference;
+ typedef const Value& const_reference;
+ typedef Iterator iterator;
+ typedef ptrdiff_t difference_type;
+
+ //! True if range is empty.
+ bool empty() const {return my_begin==my_end;}
+
+ //! True if range can be partitioned into two subranges.
+ bool is_divisible() const {
+ return my_midpoint!=my_end;
+ }
+ //! Split range.
+ hash_map_range( hash_map_range& r, split ) :
+ my_end(r.my_end),
+ my_grainsize(r.my_grainsize)
+ {
+ r.my_end = my_begin = r.my_midpoint;
+ set_midpoint();
+ r.set_midpoint();
+ }
+ hash_map_range( const Iterator& begin_, const Iterator& end_, size_t grainsize ) :
+ my_begin(begin_),
+ my_end(end_),
+ my_grainsize(grainsize)
+ {
+ set_midpoint();
+ __TBB_ASSERT( grainsize>0, "grainsize must be positive" );
+ }
+ const Iterator& begin() const {return my_begin;}
+ const Iterator& end() const {return my_end;}
+ };
+
+ template<typename Value, typename Iterator>
+ void hash_map_range<Value,Iterator>::set_midpoint() const {
+ size_t n = my_end.my_segment_index-my_begin.my_segment_index;
+ if( n>1 || (n==1 && my_end.my_array_index>0) ) {
+ // Split by groups of segments
+ my_midpoint = Iterator(*my_begin.my_table,(my_end.my_segment_index+my_begin.my_segment_index)/2u);
+ } else {
+ // Split by groups of buckets
+ size_t m = my_end.my_array_index-my_begin.my_array_index;
+ if( m>my_grainsize ) {
+ my_midpoint = Iterator(*my_begin.my_table,my_begin.my_segment_index,m/2u);
+ } else {
+ my_midpoint = my_end;
+ }
+ }
+ __TBB_ASSERT( my_midpoint.my_segment_index<=my_begin.my_table->n_segment, NULL );
+ }
+} // namespace internal
+//! @endcond
+
+//! Unorderd map from Key to T.
+/** @ingroup containers */
+template<typename Key, typename T, typename HashCompare>
+class concurrent_hash_map {
+public:
+ class const_accessor;
+ class accessor;
+
+ typedef Key key_type;
+ typedef T mapped_type;
+ typedef std::pair<const Key,T> value_type;
+ typedef size_t size_type;
+ typedef ptrdiff_t difference_type;
+
+private:
+ template<typename Container, typename Value>
+ friend class internal::hash_map_iterator;
+
+ template<typename V, typename I>
+ friend class internal::hash_map_range;
+
+ typedef spin_rw_mutex bucket_mutex_t;
+ typedef spin_rw_mutex chain_mutex_t;
+ typedef spin_rw_mutex segment_mutex_t;
+
+ //! Type of a hash code.
+ typedef size_t hashcode_t;
+
+ struct bucket;
+ friend struct bucket;
+
+ //! Basic unit of storage used in chain.
+ struct bucket {
+ //! Next bucket in chain
+ bucket* next;
+ bucket_mutex_t mutex;
+ value_type item;
+ bucket( const Key& key ) : item(key,T()) {}
+ bucket( const Key& key, const T& t ) : item(key,t) {}
+ };
+
+ struct chain;
+ friend struct chain;
+
+ //! A linked-list of buckets.
+ /** Should be zero-initialized before use. */
+ struct chain {
+ void push_front( bucket& b ) {
+ b.next = bucket_list;
+ bucket_list = &b;
+ }
+ chain_mutex_t mutex;
+ bucket* bucket_list;
+ };
+
+ struct segment;
+ friend struct segment;
+
+ //! Segment of the table.
+ /** The table is partioned into disjoint segments to reduce conflicts.
+ A segment should be zero-intialized before use. */
+ struct segment: internal::hash_map_segment_base {
+#if TBB_DO_ASSERT
+ ~segment() {
+ __TBB_ASSERT( !my_array, "should have been cleared earlier" );
+ }
+#endif /* TBB_DO_ASSERT */
+
+ // Pointer to array of chains
+ chain* my_array;
+
+ // Get chain in this segment that corresponds to given hash code.
+ chain& get_chain( hashcode_t hashcode, size_t n_segment_bits ) {
+ return my_array[(hashcode>>n_segment_bits)&(my_physical_size-1)];
+ }
+
+ //! Allocate an array with at least new_size chains.
+ /** "new_size" is rounded up to a power of two that occupies at least one cache line.
+ Does not deallocate the old array. Overwrites my_array. */
+ void allocate_array( size_t new_size ) {
+ size_t n=(internal::NFS_GetLineSize()+sizeof(chain)-1)/sizeof(chain);
+ __TBB_ASSERT((n&(n-1))==0, NULL);
+ while( n<new_size ) n<<=1;
+ chain* array = cache_aligned_allocator<chain>().allocate( n );
+ memset( array, 0, n*sizeof(chain) );
+ my_array = array;
+ my_physical_size = n;
+ }
+ };
+
+ segment& get_segment( hashcode_t hashcode ) {
+ return my_segment[hashcode&n_segment-1];
+ }
+
+ HashCompare my_hash_compare;
+
+ //! Log2 of n_segment
+ /** Placed after my_hash_compare for sake of efficient packing. */
+ unsigned char n_segment_bits;
+
+ //! Number of segments
+ size_t n_segment;
+
+ segment* my_segment;
+
+ bucket* search_list( const Key& key, chain& c ) {
+ bucket* b = c.bucket_list;
+ while( b&& !my_hash_compare.equal(key,b->item.first) )
+ b=b->next;
+ return b;
+ }
+
+ bucket* remove_from_list( const Key& key, chain& c ) {
+ bucket** p = &c.bucket_list;
+ bucket* b=*p;
+ while( b && !my_hash_compare.equal(key,b->item.first ) ) {
+ p = &b->next;
+ b= *p;
+ }
+ if( b )
+ *p = b->next;
+ return b;
+ }
+
+ //! Grow segment for which caller has acquired a write lock.
+ void grow_segment( segment_mutex_t::scoped_lock& segment_lock, segment& s );
+
+ enum operation {
+ op_insert,
+ op_find,
+ op_remove
+ };
+
+ //! Does heavy lifting for "find" and "insert".
+ bool lookup( const_accessor* result, const Key& key, bool write, operation op );
+
+ //! Perform initialization on behalf of a constructor
+ void initialize() {
+ n_segment_bits = 6;
+ n_segment = size_t(1)<<n_segment_bits;
+ my_segment = cache_aligned_allocator<segment>().allocate(n_segment);
+ memset( my_segment, 0, sizeof(segment)*n_segment );
+ }
+
+ //! Copy "source" to *this, where *this must start out empty.
+ void internal_copy( const concurrent_hash_map& source );
+public:
+ friend class const_accessor;
+
+ //! Combines data access, locking, and garbage collection.
+ class const_accessor {
+ friend class concurrent_hash_map;
+ friend class accessor;
+ void operator=( const accessor& ) const; // Deny access
+ const_accessor( const accessor& ); // Deny access
+ public:
+ //! Type of value
+ typedef const std::pair<const Key,T> value_type;
+
+ //! True if result is empty.
+ bool empty() const {return !my_bucket;}
+
+ //! Set to null
+ void release() {
+ if( my_bucket ) {
+ my_lock.release();
+ my_bucket = NULL;
+ }
+ }
+
+ //! Return reference to associated value in hash table.
+ const value_type& operator*() const {
+ __TBB_ASSERT( my_bucket, "attempt to deference empty result" );
+ return my_bucket->item;
+ }
+
+ //! Return pointer to associated value in hash table.
+ const value_type* operator->() const {
+ return &operator*();
+ }
+
+ //! Create empty result
+ const_accessor() : my_bucket(NULL) {}
+
+ //! Destroy result after releasing the underlying reference.
+ ~const_accessor() {
+ my_bucket = NULL; // my_lock.release() is called in scoped_lock destructor
+ }
+ private:
+ bucket* my_bucket;
+ bucket_mutex_t::scoped_lock my_lock;
+ };
+
+ //! Allows write access to elements and combines data access, locking, and garbage collection.
+ class accessor: public const_accessor {
+ public:
+ //! Type of value
+ typedef std::pair<const Key,T> value_type;
+
+ //! Return reference to associated value in hash table.
+ value_type& operator*() const {
+ __TBB_ASSERT( this->my_bucket, "attempt to deference empty result" );
+ return this->my_bucket->item;
+ }
+
+ //! Return pointer to associated value in hash table.
+ value_type* operator->() const {
+ return &operator*();
+ }
+ };
+
+ //! Construct empty table.
+ concurrent_hash_map();
+
+ //! Copy constructor
+ concurrent_hash_map( const concurrent_hash_map& table ) {
+ initialize();
+ internal_copy(table);
+ }
+
+ //! Assignment
+ concurrent_hash_map& operator=( const concurrent_hash_map& table ) {
+ if( this!=&table ) {
+ clear();
+ internal_copy(table);
+ }
+ return *this;
+ }
+
+ //! Clear table
+ void clear();
+
+ //! Clear table and destroy it.
+ ~concurrent_hash_map();
+
+ //------------------------------------------------------------------------
+ // concurrent map operations
+ //------------------------------------------------------------------------
+
+ //! Find item and acquire a read lock on the item.
+ /** Return true if item is found, false otherwise. */
+ bool find( const_accessor& result, const Key& key ) const {
+ return const_cast<concurrent_hash_map*>(this)->lookup(&result,key,/*write=*/false,op_find);
+ }
+
+ //! Find item and acquire a write lock on the item.
+ /** Return true if item is found, false otherwise. */
+ bool find( accessor& result, const Key& key ) {
+ return lookup(&result,key,/*write=*/true,op_find);
+ }
+
+ //! Insert item (if not already present) and acquire a read lock on the item.
+ /** Returns true if item is new. */
+ bool insert( const_accessor& result, const Key& key ) {
+ return lookup(&result,key,/*write=*/false,op_insert);
+ }
+
+ //! Insert item (if not already present) and acquire a write lock on the item.
+ /** Returns true if item is new. */
+ bool insert( accessor& result, const Key& key ) {
+ return lookup(&result,key,/*write=*/true,op_insert);
+ }
+
+ //! Erase item.
+ /** Return true if item was erased. */
+ bool erase( const Key& key ) {
+ return lookup(NULL,key,/*write=*/true,op_remove);
+ }
+
+ //------------------------------------------------------------------------
+ // Parallel algorithm support
+ //------------------------------------------------------------------------
+ typedef internal::hash_map_iterator<concurrent_hash_map,value_type> iterator;
+ typedef internal::hash_map_iterator<concurrent_hash_map,const value_type> const_iterator;
+
+ typedef internal::hash_map_range<value_type,iterator> range_type;
+ typedef internal::hash_map_range<const value_type,const_iterator> const_range_type;
+
+ range_type range( size_type grainsize ) {
+ return range_type( begin(), end(), grainsize );
+ }
+
+ const_range_type range( size_type grainsize ) const {
+ return const_range_type( begin(), end(), grainsize );
+ }
+
+ //------------------------------------------------------------------------
+ // STL support
+ //------------------------------------------------------------------------
+ iterator begin() {return iterator(*this,0);}
+ iterator end() {return iterator(*this,n_segment);}
+ const_iterator begin() const {return const_iterator(*this,0);}
+ const_iterator end() const {return const_iterator(*this,n_segment);}
+
+ //! Number of items in table.
+ /** Be aware that this method is relatively slow compared to the
+ typical size() method for an STL container. */
+ size_type size() const;
+
+ //! True if size()==0.
+ bool empty() const;
+
+ //! Upper bound on size.
+ size_type max_size() const {return (~size_type(0))/sizeof(bucket);}
+};
+
+template<typename Key, typename T, typename HashCompare>
+typename concurrent_hash_map<Key,T,HashCompare>::size_type concurrent_hash_map<Key,T,HashCompare>::size() const {
+ size_type result = 0;
+ for( size_t k=0; k<n_segment; ++k )
+ result += my_segment[k].my_logical_size;
+ return result;
+}
+
+template<typename Key, typename T, typename HashCompare>
+bool concurrent_hash_map<Key,T,HashCompare>::empty() const {
+ for( size_t k=0; k<n_segment; ++k )
+ if( my_segment[k].my_logical_size )
+ return false;
+ return true;
+}
+
+template<typename Key, typename T, typename HashCompare>
+bool concurrent_hash_map<Key,T,HashCompare>::lookup( const_accessor* result, const Key& key, bool write, operation op ) {
+ if( result && result->my_bucket )
+ result->release();
+ hashcode_t h = my_hash_compare.hash( key );
+ bucket* b = NULL;
+ bucket* b_temp = NULL;
+ bool return_value = false;
+ {
+ segment& s = get_segment(h);
+#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT
+ bool grow = op==op_insert && s.internal_grow_predicate();
+#else
+ bool grow = op==op_insert && s.my_logical_size >= s.my_physical_size;
+#endif /* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT */
+ segment_mutex_t::scoped_lock segment_lock( s.my_mutex, /*write=*/grow );
+ if( grow ) {
+ // Load factor is too high
+ grow_segment(segment_lock,s);
+ }
+ {
+ if( !s.my_array ) {
+ __TBB_ASSERT( op!=op_insert, NULL );
+ goto done;
+ }
+ __TBB_ASSERT( (s.my_physical_size&s.my_physical_size-1)==0, NULL );
+ chain& c = s.get_chain(h,n_segment_bits);
+ chain_mutex_t::scoped_lock chain_lock( c.mutex, /*write=*/false );
+ b = search_list(key,c);
+ if( b ) {
+ if( op==op_find )
+ return_value = true;
+ else if( op==op_remove ) {
+ return_value = true;
+ chain_lock.upgrade_to_writer();
+ bucket_mutex_t::scoped_lock item_lock( b->mutex, true );
+ b_temp = remove_from_list(key,c);
+ --s.my_logical_size;
+ goto delete_temp;
+ }
+ } else {
+ if( op==op_insert ) {
+ // Search failed
+ b_temp = new bucket(key);
+
+ if( !chain_lock.upgrade_to_writer() ) {
+ // Rerun search_list, in case another thread inserted the item during the upgrade.
+ b = search_list(key,c);
+ }
+ if( !b ) {
+ return_value = true;
+ b = b_temp;
+ b_temp = NULL;
+ c.push_front( *b );
+ ++s.my_logical_size;
+ }
+ }
+ }
+ if( b ) {
+ result->my_lock.acquire(b->mutex,write);
+ result->my_bucket = b;
+ }
+ }
+ }
+delete_temp:
+ if( b_temp ) {
+ {
+ // Get write lock after slicing from list, to ensure no one else
+ // is currently using *b
+ bucket_mutex_t::scoped_lock item_lock( b_temp->mutex, /*write=*/true );
+ }
+ delete b_temp;
+ }
+done:
+ return return_value;
+}
+
+template<typename Key, typename T, typename HashCompare>
+void concurrent_hash_map<Key,T,HashCompare>::clear() {
+ for( size_t i=0; i<n_segment; ++i ) {
+ segment& s = my_segment[i];
+ if( chain* array = s.my_array ) {
+ size_t n = s.my_physical_size;
+ s.my_array = NULL;
+ s.my_physical_size = 0;
+ s.my_logical_size = 0;
+ for( size_t j=0; j<n; ++j ) {
+ while( bucket* b = array[j].bucket_list ) {
+ array[j].bucket_list = b->next;
+ delete b;
+ }
+ }
+ cache_aligned_allocator<chain>().deallocate( array, n );
+ }
+ }
+}
+
+template<typename Key, typename T, typename HashCompare>
+void concurrent_hash_map<Key,T,HashCompare>::grow_segment( segment_mutex_t::scoped_lock& segment_lock, segment& s ) {
+ // Following is second check in a double-check.
+ if( s.my_logical_size >= s.my_physical_size ) {
+ chain* old_array = s.my_array;
+ size_t old_size = s.my_physical_size;
+ s.allocate_array( s.my_logical_size );
+ for( size_t k=0; k<old_size; ++k )
+ while( bucket* b = old_array[k].bucket_list ) {
+ old_array[k].bucket_list = b->next;
+ hashcode_t h = my_hash_compare.hash( b->item.first );
+ __TBB_ASSERT( &get_segment(h)==&s, "hash function changed?" );
+ s.get_chain(h,n_segment_bits).push_front(*b);
+ }
+ cache_aligned_allocator<chain>().deallocate( old_array, old_size );
+ }
+ segment_lock.downgrade_to_reader();
+}
+
+template<typename Key, typename T, typename HashCompare>
+void concurrent_hash_map<Key,T,HashCompare>::internal_copy( const concurrent_hash_map<Key,T,HashCompare>& source ) {
+ __TBB_ASSERT( n_segment==source.n_segment, NULL );
+ for( size_t i=0; i<n_segment; ++i ) {
+ segment& s = source.my_segment[i];
+ __TBB_ASSERT( !my_segment[i].my_array, "caller should have cleared" );
+ if( s.my_logical_size ) {
+ segment& d = my_segment[i];
+ d.my_logical_size = s.my_logical_size;
+ d.allocate_array( s.my_logical_size );
+ size_t s_size = s.my_physical_size;
+ chain* s_array = s.my_array;
+ for( size_t k=0; k<s_size; ++k )
+ for( bucket* b = s_array[k].bucket_list; b; b=b->next ) {
+ hashcode_t h = my_hash_compare.hash( b->item.first );
+ __TBB_ASSERT( &get_segment(h)==&d, "hash function changed?" );
+ bucket* b_new = new bucket(b->item.first,b->item.second);
+ d.get_chain(h,n_segment_bits).push_front(*b_new);
+ }
+ }
+ }
+}
+
+template<typename Key, typename T, typename HashCompare>
+concurrent_hash_map<Key,T,HashCompare>::concurrent_hash_map() {
+ initialize();
+}
+
+template<typename Key, typename T, typename HashCompare>
+concurrent_hash_map<Key,T,HashCompare>::~concurrent_hash_map() {
+ clear();
+ cache_aligned_allocator<segment>().deallocate( my_segment, n_segment );
+}
+
+} // namespace tbb
+
+#endif /* __TBB_concurrent_hash_map_H */
diff --git a/include/tbb/concurrent_queue.h b/include/tbb/concurrent_queue.h
new file mode 100644
index 0000000..abb221c
--- /dev/null
+++ b/include/tbb/concurrent_queue.h
@@ -0,0 +1,328 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_concurrent_queue_H
+#define __TBB_concurrent_queue_H
+
+#include "tbb_stddef.h"
+#include <new>
+
+namespace tbb {
+
+template<typename T> class concurrent_queue;
+
+//! @cond INTERNAL
+namespace internal {
+
+class concurrent_queue_rep;
+class concurrent_queue_iterator_rep;
+class concurrent_queue_iterator_base;
+template<typename Container, typename Value> class concurrent_queue_iterator;
+
+//! For internal use only.
+/** Type-independent portion of concurrent_queue.
+ @ingroup containers */
+class concurrent_queue_base: no_copy {
+ //! Internal representation
+ concurrent_queue_rep* my_rep;
+
+ friend class concurrent_queue_rep;
+ friend struct micro_queue;
+ friend class concurrent_queue_iterator_rep;
+ friend class concurrent_queue_iterator_base;
+protected:
+ //! Prefix on a page
+ struct page {
+ page* next;
+ uintptr mask;
+ };
+
+ //! Capacity of the queue
+ ptrdiff_t my_capacity;
+
+ //! Always a power of 2
+ size_t items_per_page;
+
+ //! Size of an item
+ size_t item_size;
+private:
+ virtual void copy_item( page& dst, size_t index, const void* src ) = 0;
+ virtual void assign_and_destroy_item( void* dst, page& src, size_t index ) = 0;
+protected:
+ concurrent_queue_base( size_t item_size );
+ virtual ~concurrent_queue_base();
+
+ //! Enqueue item at tail of queue
+ void internal_push( const void* src );
+
+ //! Dequeue item from head of queue
+ void internal_pop( void* dst );
+
+ //! Attempt to enqueue item onto queue.
+ bool internal_push_if_not_full( const void* src );
+
+ //! Attempt to dequeue item from queue.
+ /** NULL if there was no item to dequeue. */
+ bool internal_pop_if_present( void* dst );
+
+ //! Get size of queue
+ ptrdiff_t internal_size() const;
+
+ void internal_set_capacity( ptrdiff_t capacity, size_t element_size );
+};
+
+//! Type-independent portion of concurrent_queue_iterator.
+/** @ingroup containers */
+class concurrent_queue_iterator_base {
+ //! Concurrentconcurrent_queue over which we are iterating.
+ /** NULL if one past last element in queue. */
+ concurrent_queue_iterator_rep* my_rep;
+
+ template<typename C, typename T, typename U>
+ friend bool operator==( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j );
+
+ template<typename C, typename T, typename U>
+ friend bool operator!=( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j );
+protected:
+ //! Pointer to current item
+ mutable void* my_item;
+
+ //! Default constructor
+ concurrent_queue_iterator_base() : my_rep(NULL), my_item(NULL) {}
+
+ //! Copy constructor
+ concurrent_queue_iterator_base( const concurrent_queue_iterator_base& i ) : my_rep(NULL), my_item(NULL) {
+ assign(i);
+ }
+
+ //! Construct iterator pointing to head of queue.
+ concurrent_queue_iterator_base( const concurrent_queue_base& queue );
+
+ //! Assignment
+ void assign( const concurrent_queue_iterator_base& i );
+
+ //! Advance iterator one step towards tail of queue.
+ void advance();
+
+ //! Destructor
+ ~concurrent_queue_iterator_base();
+};
+
+//! Meets requirements of a forward iterator for STL.
+/** Value is either the T or const T type of the container.
+ @ingroup containers */
+template<typename Container, typename Value>
+class concurrent_queue_iterator: public concurrent_queue_iterator_base {
+#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)
+ template<typename T>
+ friend class ::tbb::concurrent_queue;
+#else
+public: // workaround for MSVC
+#endif
+ //! Construct iterator pointing to head of queue.
+ concurrent_queue_iterator( const concurrent_queue_base& queue ) :
+ concurrent_queue_iterator_base(queue)
+ {
+ }
+public:
+ concurrent_queue_iterator() {}
+
+ /** If Value==Container::value_type, then this routine is the copy constructor.
+ If Value==const Container::value_type, then this routine is a conversion constructor. */
+ concurrent_queue_iterator( const concurrent_queue_iterator<Container,typename Container::value_type>& other ) :
+ concurrent_queue_iterator_base(other)
+ {}
+
+ //! Iterator assignment
+ concurrent_queue_iterator& operator=( const concurrent_queue_iterator& other ) {
+ assign(other);
+ return *this;
+ }
+
+ //! Reference to current item
+ Value& operator*() const {
+ return *static_cast<Value*>(my_item);
+ }
+
+ Value* operator->() const {return &operator*();}
+
+ //! Advance to next item in queue
+ concurrent_queue_iterator& operator++() {
+ advance();
+ return *this;
+ }
+
+ //! Post increment
+ Value* operator++(int) {
+ Value* result = &operator*();
+ operator++();
+ return result;
+ }
+}; // concurrent_queue_iterator
+
+template<typename C, typename T, typename U>
+bool operator==( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j ) {
+ return i.my_item==j.my_item;
+}
+
+template<typename C, typename T, typename U>
+bool operator!=( const concurrent_queue_iterator<C,T>& i, const concurrent_queue_iterator<C,U>& j ) {
+ return i.my_item!=j.my_item;
+}
+
+} // namespace internal;
+//! @endcond
+
+//! A high-performance thread-safe queue.
+/** Multiple threads may each push and pop concurrently.
+ Assignment and copy construction are not allowed.
+ @ingroup containers */
+template<typename T>
+class concurrent_queue: public internal::concurrent_queue_base {
+ template<typename Container, typename Value> friend class internal::concurrent_queue_iterator;
+
+ //! Class used to ensure exception-safety of method "pop"
+ class destroyer {
+ T& my_value;
+ public:
+ destroyer( T& value ) : my_value(value) {}
+ ~destroyer() {my_value.~T();}
+ };
+
+ T& get_ref( page& page, size_t index ) {
+ __TBB_ASSERT( index<items_per_page, NULL );
+ return static_cast<T*>(static_cast<void*>(&page+1))[index];
+ }
+
+ /*override*/ virtual void copy_item( page& dst, size_t index, const void* src ) {
+ new( &get_ref(dst,index) ) T(*static_cast<const T*>(src));
+ }
+
+ /*override*/ virtual void assign_and_destroy_item( void* dst, page& src, size_t index ) {
+ T& from = get_ref(src,index);
+ destroyer d(from);
+ *static_cast<T*>(dst) = from;
+ }
+
+public:
+ //! Element type in the queue.
+ typedef T value_type;
+
+ //! Reference type
+ typedef T& reference;
+
+ //! Const reference type
+ typedef const T& const_reference;
+
+ //! Integral type for representing size of the queue.
+ /** Notice that the size_type is a signed integral type.
+ This is because the size can be negative if there are pending pops without corresponding pushes. */
+ typedef std::ptrdiff_t size_type;
+
+ //! Difference type for iterator
+ typedef std::ptrdiff_t difference_type;
+
+ //! Construct empty queue
+ concurrent_queue() :
+ concurrent_queue_base( sizeof(T) )
+ {
+ }
+
+ //! Destroy queue
+ ~concurrent_queue();
+
+ //! Enqueue an item at tail of queue.
+ void push( const T& source ) {
+ internal_push( &source );
+ }
+
+ //! Dequeue item from head of queue.
+ /** Block until an item becomes available, and then dequeue it. */
+ void pop( T& destination ) {
+ internal_pop( &destination );
+ }
+
+ //! Enqueue an item at tail of queue if queue is not already full.
+ /** Does not wait for queue to become not full.
+ Returns true if item is pushed; false if queue was already full. */
+ bool push_if_not_full( const T& source ) {
+ return internal_push_if_not_full( &source );
+ }
+
+ //! Attempt to dequeue an item from head of queue.
+ /** Does not wait for item to become available.
+ Returns true if successful; false otherwise. */
+ bool pop_if_present( T& destination ) {
+ return internal_pop_if_present( &destination );
+ }
+
+ //! Return number of pushes minus number of pops.
+ /** Note that the result can be negative if there are pops waiting for the
+ corresponding pushes. The result can also exceed capacity() if there
+ are push operations in flight. */
+ size_type size() const {return internal_size();}
+
+ //! Equivalent to size()==0.
+ bool empty() const {return size()==0;}
+
+ //! Maximum number of allowed elements
+ size_type capacity() const {
+ return my_capacity;
+ }
+
+ //! Set the capacity
+ /** Setting the capacity to 0 causes subsequent push_if_not_full operations to always fail,
+ and subsequent push operations to block forever. */
+ void set_capacity( size_type capacity ) {
+ internal_set_capacity( capacity, sizeof(T) );
+ }
+
+ typedef internal::concurrent_queue_iterator<concurrent_queue,T> iterator;
+ typedef internal::concurrent_queue_iterator<concurrent_queue,const T> const_iterator;
+
+ //------------------------------------------------------------------------
+ // The iterators are intended only for debugging. They are slow and not thread safe.
+ //------------------------------------------------------------------------
+ iterator begin() {return iterator(*this);}
+ iterator end() {return iterator();}
+ const_iterator begin() const {return const_iterator(*this);}
+ const_iterator end() const {return const_iterator();}
+
+};
+
+template<typename T>
+concurrent_queue<T>::~concurrent_queue() {
+ while( !empty() ) {
+ T value;
+ internal_pop(&value);
+ }
+}
+
+} // namespace tbb
+
+#endif /* __TBB_concurrent_queue_H */
diff --git a/include/tbb/concurrent_vector.h b/include/tbb/concurrent_vector.h
new file mode 100644
index 0000000..66a795c
--- /dev/null
+++ b/include/tbb/concurrent_vector.h
@@ -0,0 +1,512 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_concurrent_vector_H
+#define __TBB_concurrent_vector_H
+
+#include "tbb_stddef.h"
+#include <iterator>
+#include <new>
+#include "atomic.h"
+#include "cache_aligned_allocator.h"
+#include "blocked_range.h"
+
+#include "tbb_machine.h"
+
+namespace tbb {
+
+template<typename T>
+class concurrent_vector;
+
+//! @cond INTERNAL
+namespace internal {
+
+ //! Base class of concurrent vector implementation.
+ /** @ingroup containers */
+ class concurrent_vector_base {
+ protected:
+ typedef unsigned long segment_index_t;
+
+ //! Log2 of "min_segment_size".
+ static const int lg_min_segment_size = 4;
+
+ //! Minimum size (in physical items) of a segment.
+ static const int min_segment_size = segment_index_t(1)<<lg_min_segment_size;
+
+ static segment_index_t segment_index_of( size_t index ) {
+ uintptr i = index|1<<(lg_min_segment_size-1);
+ uintptr j = __TBB_Log2(i);
+ return segment_index_t(j-(lg_min_segment_size-1));
+ }
+
+ static segment_index_t segment_base( segment_index_t k ) {
+ return min_segment_size>>1<<k & -min_segment_size;
+ }
+
+ static segment_index_t segment_size( segment_index_t k ) {
+ segment_index_t result = k==0 ? min_segment_size : min_segment_size/2<<k;
+ __TBB_ASSERT( result==segment_base(k+1)-segment_base(k), NULL );
+ return result;
+ }
+
+ typedef size_t size_type;
+
+ void internal_reserve( size_type n, size_type element_size, size_type max_size );
+
+ size_type internal_capacity() const;
+
+ //! Requested size of vector
+ atomic<size_type> my_early_size;
+
+ /** Can be zero-initialized. */
+ struct segment_t {
+ /** Declared volatile because in weak memory model, must have ld.acq/st.rel */
+ void* volatile array;
+#if TBB_DO_ASSERT
+ ~segment_t() {
+ __TBB_ASSERT( !array, "should have been set to NULL by clear" );
+ }
+#endif /* TBB_DO_ASSERT */
+ };
+
+ atomic<segment_t*> my_segment;
+
+ segment_t my_storage[2];
+
+ concurrent_vector_base() {
+ my_early_size = 0;
+ my_storage[0].array = NULL;
+ my_storage[1].array = NULL;
+ my_segment = my_storage;
+ }
+
+ //! An operation on an n-lement array starting at begin.
+ typedef void(*internal_array_op1)(void* begin, size_type n );
+
+ //! An operation on n-element destination array and n-element source array.
+ typedef void(*internal_array_op2)(void* dst, const void* src, size_type n );
+
+ void internal_grow_to_at_least( size_type new_size, size_type element_size, internal_array_op1 init );
+ void internal_grow( size_type start, size_type finish, size_type element_size, internal_array_op1 init );
+ size_type internal_grow_by( size_type delta, size_type element_size, internal_array_op1 init );
+ void* internal_push_back( size_type element_size, size_type& index );
+ void internal_clear( internal_array_op1 destroy, bool reclaim_storage );
+ void internal_copy( const concurrent_vector_base& src, size_type element_size, internal_array_op2 copy );
+ void internal_assign( const concurrent_vector_base& src, size_type element_size,
+ internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy );
+private:
+ //! Private functionality that does not cross DLL boundary.
+ class helper;
+
+ friend class helper;
+ };
+
+ //! Meets requirements of a forward iterator for STL and a Value for a blocked_range.*/
+ /** Value is either the T or const T type of the container.
+ @ingroup containers */
+ template<typename Container, typename Value>
+ class vector_iterator
+#if defined(_WIN64) && defined(_MSC_VER)
+ // Ensure that Microsoft's internal template function _Val_type works correctly.
+ : public std::iterator<std::random_access_iterator_tag,Value>
+#endif /* defined(_WIN64) && defined(_MSC_VER) */
+ {
+ //! concurrent_vector over which we are iterating.
+ Container* my_vector;
+
+ //! Index into the vector
+ size_t my_index;
+
+ //! Caches my_vector->internal_subscript(my_index)
+ /** NULL if cached value is not available */
+ mutable Value* my_item;
+
+ template<typename C, typename T, typename U>
+ friend bool operator==( const vector_iterator<C,T>& i, const vector_iterator<C,U>& j );
+
+ template<typename C, typename T, typename U>
+ friend bool operator<( const vector_iterator<C,T>& i, const vector_iterator<C,U>& j );
+
+ template<typename C, typename T, typename U>
+ friend ptrdiff_t operator-( const vector_iterator<C,T>& i, const vector_iterator<C,U>& j );
+
+ template<typename C, typename U>
+ friend class internal::vector_iterator;
+
+#if !defined(_MSC_VER) || defined(__INTEL_COMPILER)
+ template<typename T>
+ friend class tbb::concurrent_vector;
+#else
+public: // workaround for MSVC
+#endif
+
+ vector_iterator( const Container& vector, size_t index ) :
+ my_vector(const_cast<Container*>(&vector)),
+ my_index(index),
+ my_item(NULL)
+ {}
+
+ public:
+ //! Default constructor
+ vector_iterator() : my_vector(NULL), my_index(~size_t(0)), my_item(NULL) {}
+
+ vector_iterator( const vector_iterator<Container,typename Container::value_type>& other ) :
+ my_vector(other.my_vector),
+ my_index(other.my_index),
+ my_item(other.my_item)
+ {}
+
+ vector_iterator operator+( ptrdiff_t offset ) const {
+ return vector_iterator( *my_vector, my_index+offset );
+ }
+ friend vector_iterator operator+( ptrdiff_t offset, const vector_iterator& v ) {
+ return vector_iterator( *v.my_vector, v.my_index+offset );
+ }
+ vector_iterator operator+=( ptrdiff_t offset ) {
+ my_index+=offset;
+ my_item = NULL;
+ return *this;
+ }
+ vector_iterator operator-( ptrdiff_t offset ) const {
+ return vector_iterator( *my_vector, my_index-offset );
+ }
+ vector_iterator operator-=( ptrdiff_t offset ) {
+ my_index-=offset;
+ my_item = NULL;
+ return *this;
+ }
+ Value& operator*() const {
+ Value* item = my_item;
+ if( !item ) {
+ item = my_item = &my_vector->internal_subscript(my_index);
+ }
+ __TBB_ASSERT( item==&my_vector->internal_subscript(my_index), "corrupt cache" );
+ return *item;
+ }
+ Value& operator[]( ptrdiff_t k ) const {
+ return my_vector->internal_subscript(my_index+k);
+ }
+ Value* operator->() const {return &operator*();}
+
+ //! Pre increment
+ vector_iterator& operator++() {
+ size_t k = ++my_index;
+ if( my_item ) {
+ // Following test uses 2's-complement wizardry and fact that
+ // min_segment_size is a power of 2.
+ if( (k& k-concurrent_vector<Container>::min_segment_size)==0 ) {
+ // k is a power of two that is at least k-min_segment_size
+ my_item= NULL;
+ } else {
+ ++my_item;
+ }
+ }
+ return *this;
+ }
+
+ //! Pre decrement
+ vector_iterator& operator--() {
+ __TBB_ASSERT( my_index>0, "operator--() applied to iterator already at beginning of concurrent_vector" );
+ size_t k = my_index--;
+ if( my_item ) {
+ // Following test uses 2's-complement wizardry and fact that
+ // min_segment_size is a power of 2.
+ if( (k& k-concurrent_vector<Container>::min_segment_size)==0 ) {
+ // k is a power of two that is at least k-min_segment_size
+ my_item= NULL;
+ } else {
+ --my_item;
+ }
+ }
+ return *this;
+ }
+
+ //! Post increment
+ vector_iterator operator++(int) {
+ vector_iterator result = *this;
+ operator++();
+ return result;
+ }
+
+ //! Post decrement
+ vector_iterator operator--(int) {
+ vector_iterator result = *this;
+ operator--();
+ return result;
+ }
+
+ // STL support
+
+ typedef ptrdiff_t difference_type;
+ typedef Value value_type;
+ typedef Value* pointer;
+ typedef Value& reference;
+ typedef std::random_access_iterator_tag iterator_category;
+ };
+
+ template<typename Container, typename T, typename U>
+ bool operator==( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {
+ return i.my_index==j.my_index;
+ }
+
+ template<typename Container, typename T, typename U>
+ bool operator!=( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {
+ return !(i==j);
+ }
+
+ template<typename Container, typename T, typename U>
+ bool operator<( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {
+ return i.my_index<j.my_index;
+ }
+
+ template<typename Container, typename T, typename U>
+ bool operator>( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {
+ return j<i;
+ }
+
+ template<typename Container, typename T, typename U>
+ bool operator>=( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {
+ return !(i<j);
+ }
+
+ template<typename Container, typename T, typename U>
+ bool operator<=( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {
+ return !(j<i);
+ }
+
+ template<typename Container, typename T, typename U>
+ ptrdiff_t operator-( const vector_iterator<Container,T>& i, const vector_iterator<Container,U>& j ) {
+ return ptrdiff_t(i.my_index)-ptrdiff_t(j.my_index);
+ }
+
+} // namespace internal
+//! @endcond
+
+//! Concurrent vector
+/** @ingroup containers */
+template<typename T>
+class concurrent_vector: private internal::concurrent_vector_base {
+public:
+ using internal::concurrent_vector_base::size_type;
+private:
+ template<typename I>
+ class generic_range_type: public blocked_range<I> {
+ public:
+ typedef T value_type;
+ typedef T& reference;
+ typedef const T& const_reference;
+ typedef I iterator;
+ typedef ptrdiff_t difference_type;
+ generic_range_type( I begin_, I end_, size_t grainsize ) : blocked_range<I>(begin_,end_,grainsize) {}
+ generic_range_type( generic_range_type& r, split ) : blocked_range<I>(r,split()) {}
+ };
+
+ template<typename C, typename U>
+ friend class internal::vector_iterator;
+public:
+ typedef T& reference;
+ typedef const T& const_reference;
+
+ //! Construct empty vector.
+ concurrent_vector() {}
+
+ //! Copy a vector.
+ concurrent_vector( const concurrent_vector& vector ) {internal_copy(vector,sizeof(T),©_array);}
+
+ //! Assignment
+ concurrent_vector& operator=( const concurrent_vector& vector ) {
+ if( this!=&vector )
+ internal_assign(vector,sizeof(T),&destroy_array,&assign_array,©_array);
+ return *this;
+ }
+
+ //! Clear and destroy vector.
+ ~concurrent_vector() {internal_clear(&destroy_array,/*reclaim_storage=*/true);}
+
+ //------------------------------------------------------------------------
+ // Concurrent operations
+ //------------------------------------------------------------------------
+ //! Grow by "delta" elements.
+ /** Returns old size. */
+ size_type grow_by( size_type delta ) {
+ return delta ? internal_grow_by( delta, sizeof(T), &initialize_array ) : my_early_size;
+ }
+
+ //! Grow array until it has at least n elements.
+ void grow_to_at_least( size_type n ) {
+ if( my_early_size<n )
+ internal_grow_to_at_least( n, sizeof(T), &initialize_array );
+ };
+
+ //! Push item
+ size_type push_back( const_reference item ) {
+ size_type k;
+ new( internal_push_back(sizeof(T),k) ) T(item);
+ return k;
+ }
+
+ //! Get reference to element at given index.
+ /** This method is thread-safe for concurrent reads, and also while growing the vector,
+ as long as the calling thread has checked that index<size(). */
+ reference operator[]( size_type index ) {
+ return internal_subscript(index);
+ }
+
+ //! Get const reference to element at given index.
+ const_reference operator[]( size_type index ) const {
+ return internal_subscript(index);
+ }
+
+ //------------------------------------------------------------------------
+ // Parallel algorithm support
+ //------------------------------------------------------------------------
+ typedef internal::vector_iterator<concurrent_vector,T> iterator;
+ typedef internal::vector_iterator<concurrent_vector,const T> const_iterator;
+
+#if !defined(_MSC_VER) || _CPPLIB_VER>=300
+ // Assume ISO standard definition of std::reverse_iterator
+ typedef std::reverse_iterator<iterator> reverse_iterator;
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+#else
+ // Use non-standard std::reverse_iterator
+ typedef std::reverse_iterator<iterator,T,T&,T*> reverse_iterator;
+ typedef std::reverse_iterator<const_iterator,T,const T&,const T*> const_reverse_iterator;
+#endif /* defined(_MSC_VER) && (_MSC_VER<1300) */
+
+ typedef generic_range_type<iterator> range_type;
+ typedef generic_range_type<const_iterator> const_range_type;
+
+ range_type range( size_t grainsize = 1 ) {
+ return range_type( begin(), end(), grainsize );
+ }
+
+ const_range_type range( size_t grainsize = 1 ) const {
+ return const_range_type( begin(), end(), grainsize );
+ }
+
+ //------------------------------------------------------------------------
+ // Capacity
+ //------------------------------------------------------------------------
+ //! Return size of vector.
+ size_type size() const {return my_early_size;}
+
+ //! Return size of vector.
+ bool empty() const {return !my_early_size;}
+
+ //! Maximum size to which array can grow without allocating more memory.
+ size_type capacity() const {return internal_capacity();}
+
+ //! Allocate enough space to grow to size n without having to allocate more memory later.
+ /** Like most of the methods provided for STL compatibility, this method is *not* thread safe.
+ The capacity afterwards may be bigger than the requested reservation. */
+ void reserve( size_type n ) {
+ if( n )
+ internal_reserve(n, sizeof(T), max_size());
+ }
+
+ //! Upper bound on argument to reserve.
+ size_type max_size() const {return (~size_t(0))/sizeof(T);}
+
+ //------------------------------------------------------------------------
+ // STL support
+ //------------------------------------------------------------------------
+
+ typedef T value_type;
+ typedef ptrdiff_t difference_type;
+
+ iterator begin() {return iterator(*this,0);}
+ iterator end() {return iterator(*this,size());}
+ const_iterator begin() const {return const_iterator(*this,0);}
+ const_iterator end() const {return const_iterator(*this,size());}
+
+ reverse_iterator rbegin() {return reverse_iterator(end());}
+ reverse_iterator rend() {return reverse_iterator(begin());}
+ const_reverse_iterator rbegin() const {return const_reverse_iterator(end());}
+ const_reverse_iterator rend() const {return const_reverse_iterator(begin());}
+
+ //! Not thread safe
+ /** Does not change capacity. */
+ void clear() {internal_clear(&destroy_array,/*reclaim_storage=*/false);}
+private:
+ //! Get reference to element at given index.
+ T& internal_subscript( size_type index ) const;
+
+ //! Construct n instances of T, starting at "begin".
+ static void initialize_array( void* begin, size_type n );
+
+ //! Construct n instances of T, starting at "begin".
+ static void copy_array( void* dst, const void* src, size_type n );
+
+ //! Assign n instances of T, starting at "begin".
+ static void assign_array( void* dst, const void* src, size_type n );
+
+ //! Destroy n instances of T, starting at "begin".
+ static void destroy_array( void* begin, size_type n );
+};
+
+template<typename T>
+T& concurrent_vector<T>::internal_subscript( size_type index ) const {
+ __TBB_ASSERT( index<size(), "index out of bounds" );
+ segment_index_t k = segment_index_of( index );
+ size_type j = index-segment_base(k);
+ return static_cast<T*>(my_segment[k].array)[j];
+}
+
+template<typename T>
+void concurrent_vector<T>::initialize_array( void* begin, size_type n ) {
+ T* array = static_cast<T*>(begin);
+ for( size_type j=0; j<n; ++j )
+ new( &array[j] ) T();
+}
+
+template<typename T>
+void concurrent_vector<T>::copy_array( void* dst, const void* src, size_type n ) {
+ T* d = static_cast<T*>(dst);
+ const T* s = static_cast<const T*>(src);
+ for( size_type j=0; j<n; ++j )
+ new( &d[j] ) T(s[j]);
+}
+
+template<typename T>
+void concurrent_vector<T>::assign_array( void* dst, const void* src, size_type n ) {
+ T* d = static_cast<T*>(dst);
+ const T* s = static_cast<const T*>(src);
+ for( size_type j=0; j<n; ++j )
+ d[j] = s[j];
+}
+
+template<typename T>
+void concurrent_vector<T>::destroy_array( void* begin, size_type n ) {
+ T* array = static_cast<T*>(begin);
+ for( size_type j=n; j>0; --j )
+ array[j-1].~T();
+}
+
+} // namespace tbb
+
+#endif /* __TBB_concurrent_vector_H */
diff --git a/include/tbb/machine/linux_em64t.h b/include/tbb/machine/linux_em64t.h
new file mode 100644
index 0000000..acd13d0
--- /dev/null
+++ b/include/tbb/machine/linux_em64t.h
@@ -0,0 +1,159 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_machine_H
+#error Do not include this file directly; include tbb_machine.h instead
+#endif
+
+#include <stdint.h>
+#include <unistd.h>
+#include <sched.h>
+
+#define __TBB_WORDSIZE 8
+#define __TBB_BIG_ENDIAN 0
+
+//! Load with acquire semantics, both for hardware and compiler.
+template<typename T>
+inline T __TBB_load_with_acquire_via_explicit_fence(const volatile T& location) {
+ T tmp = location;
+ __asm__ __volatile__("": : :"memory");
+ return tmp;
+}
+
+//! Store with release semantics, both for hardware and compiler.
+template<typename T, typename V>
+inline void __TBB_store_with_release_via_explicit_fence(volatile T& location, V value) {
+ __asm__ __volatile__("": : :"memory");
+ location = value;
+}
+
+#define __TBB_load_with_acquire __TBB_load_with_acquire_via_explicit_fence
+#define __TBB_store_with_release __TBB_store_with_release_via_explicit_fence
+
+#define __MACHINE_DECL_ATOMICS(S,T,X) \
+static inline T __TBB_machine_cmpswp##S (volatile void *ptr, T value, T comparand ) \
+{ \
+ T result; \
+ \
+ __asm__ __volatile__("lock\ncmpxchg" X " %2,%1" \
+ : "=a"(result), "=m"(*(T *)ptr) \
+ : "q"(value), "0"(comparand) \
+ : "memory"); \
+ return result; \
+} \
+ \
+static inline T __TBB_machine_fetchadd##S(volatile void *ptr, T addend) \
+{ \
+ T result; \
+ __asm__ __volatile__("lock\nxadd" X " %0,%1" \
+ : "=r"(result),"=m"(*(T *)ptr) \
+ : "0"(addend) \
+ : "memory"); \
+ return result; \
+} \
+ \
+static inline T __TBB_machine_fetchstore##S(volatile void *ptr, T value) \
+{ \
+ T result; \
+ __asm__ __volatile__("lock\nxchg" X " %0,%1" \
+ : "=r"(result),"=m"(*(T *)ptr) \
+ : "0"(value) \
+ : "memory"); \
+ return result; \
+} \
+
+__MACHINE_DECL_ATOMICS(1,int8_t,"")
+__MACHINE_DECL_ATOMICS(2,int16_t,"")
+__MACHINE_DECL_ATOMICS(4,int32_t,"")
+__MACHINE_DECL_ATOMICS(8,int64_t,"q")
+
+static inline int64_t __TBB_machine_lg( uint64_t x ) {
+ int64_t j;
+ __asm__ ("bsr %1,%0" : "=r"(j) : "r"(x));
+ return j;
+}
+
+static inline void __TBB_machine_or( volatile void *ptr, uint64_t addend ) {
+ __asm__ __volatile__("lock\norq %1,%0" : "=m"(*(uint64_t *)ptr) : "r"(addend) : "memory");
+}
+
+static inline void __TBB_machine_pause( int32_t delay ) {
+ for (int32_t i = 0; i < delay; i++) {
+ __asm__ __volatile__("pause;");
+ }
+ return;
+}
+
+// Machine specific atomic operations
+
+#define __TBB_CompareAndSwap1(P,V,C) __TBB_machine_cmpswp1(P,V,C)
+#define __TBB_CompareAndSwap2(P,V,C) __TBB_machine_cmpswp2(P,V,C)
+#define __TBB_CompareAndSwap4(P,V,C) __TBB_machine_cmpswp4(P,V,C)
+#define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cmpswp8(P,V,C)
+#define __TBB_CompareAndSwapW(P,V,C) __TBB_machine_cmpswp8(P,V,C)
+
+#define __TBB_FetchAndAdd1(P,V) __TBB_machine_fetchadd1(P,V)
+#define __TBB_FetchAndAdd2(P,V) __TBB_machine_fetchadd2(P,V)
+#define __TBB_FetchAndAdd4(P,V) __TBB_machine_fetchadd4(P,V)
+#define __TBB_FetchAndAdd8(P,V) __TBB_machine_fetchadd8(P,V)
+#define __TBB_FetchAndAddW(P,V) __TBB_machine_fetchadd8(P,V)
+
+#define __TBB_FetchAndStore1(P,V) __TBB_machine_fetchstore1(P,V)
+#define __TBB_FetchAndStore2(P,V) __TBB_machine_fetchstore2(P,V)
+#define __TBB_FetchAndStore4(P,V) __TBB_machine_fetchstore4(P,V)
+#define __TBB_FetchAndStore8(P,V) __TBB_machine_fetchstore8(P,V)
+#define __TBB_FetchAndStoreW(P,V) __TBB_machine_fetchstore8(P,V)
+
+#define __TBB_Store8(P,V) (*P = V)
+#define __TBB_Load8(P) (*P)
+
+#define __TBB_AtomicOR(P,V) __TBB_machine_or(P,V)
+
+// Definition of other functions
+#define __TBB_Yield() sched_yield()
+#define __TBB_Pause(V) __TBB_machine_pause(V)
+#define __TBB_Log2(V) __TBB_machine_lg(V)
+
+// Special atomic functions
+#define __TBB_FetchAndAddWrelease(P,V) __TBB_FetchAndAddW(P,V)
+#define __TBB_FetchAndIncrementWacquire(P) __TBB_FetchAndAddW(P,1)
+#define __TBB_FetchAndDecrementWrelease(P) __TBB_FetchAndAddW(P,-1)
+
+// Definition of Lock functions
+#undef __TBB_TryLockByte
+#undef __TBB_LockByte
+
+#define __TBB_cpuid
+static inline void __TBB_x86_cpuid( int32_t buffer[4], int32_t mode ) {
+ // NOTE: gcc sometimes fails to compile the following asm. But icc always succeeds.
+ __asm__ ("cpuid" : "=a"(buffer[0]),
+ "=b"(buffer[1]),
+ "=c"(buffer[2]),
+ "=d"(buffer[3]) : "0"(mode) : "memory" );
+}
+
diff --git a/include/tbb/machine/linux_ia32.h b/include/tbb/machine/linux_ia32.h
new file mode 100644
index 0000000..75698fe
--- /dev/null
+++ b/include/tbb/machine/linux_ia32.h
@@ -0,0 +1,224 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_machine_H
+#error Do not include this file directly; include tbb_machine.h instead
+#endif
+
+#include <stdint.h>
+#include <unistd.h>
+#include <sched.h>
+
+#define __TBB_WORDSIZE 4
+#define __TBB_BIG_ENDIAN 0
+
+
+#define __MACHINE_DECL_ATOMICS(S,T,X) \
+static inline T __TBB_machine_cmpswp##S (volatile void *ptr, T value, T comparand ) \
+{ \
+ T result; \
+ \
+ __asm__ __volatile__("lock\ncmpxchg" X " %2,%1" \
+ : "=a"(result), "=m"(*(T *)ptr) \
+ : "q"(value), "0"(comparand) \
+ : "memory"); \
+ return result; \
+} \
+ \
+static inline T __TBB_machine_fetchadd##S(volatile void *ptr, T addend) \
+{ \
+ T result; \
+ __asm__ __volatile__("lock\nxadd" X " %0,%1" \
+ : "=r"(result), "=m"(*(T *)ptr) \
+ : "0"(addend) \
+ : "memory"); \
+ return result; \
+} \
+ \
+static inline T __TBB_machine_fetchstore##S(volatile void *ptr, T value) \
+{ \
+ T result; \
+ __asm__ __volatile__("lock\nxchg" X " %0,%1" \
+ : "=r"(result), "=m"(*(T *)ptr) \
+ : "0"(value) \
+ : "memory"); \
+ return result; \
+} \
+
+__MACHINE_DECL_ATOMICS(1,int8_t,"")
+__MACHINE_DECL_ATOMICS(2,int16_t,"")
+__MACHINE_DECL_ATOMICS(4,int32_t,"l")
+
+static int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t comparand )
+{
+ const int32_t comparand_lo = (int32_t)comparand;
+ const int32_t comparand_hi = *(int32_t*)((intptr_t)&comparand+sizeof(int32_t));
+ int64_t result;
+ // EBX register saved for compliancy with position-independent code (PIC) rules on IA32
+ __asm__ __volatile__ (
+ "pushl %%ebx\n\t"
+ "movl (%%ecx),%%ebx\n\t"
+ "movl 4(%%ecx),%%ecx\n\t"
+ "lock\ncmpxchg8b (%2)\n\t"
+ "popl %%ebx"
+ : "=A"(result), "=m"(*(int64_t *)ptr)
+ : "S"(ptr),
+ "a"(comparand_lo),
+ "d"(comparand_hi),
+ "c"(&value)
+ : "memory", "esp");
+ return result;
+}
+
+static inline int32_t __TBB_machine_lg( uint32_t x ) {
+ int32_t j;
+ __asm__ ("bsr %1,%0" : "=r"(j) : "r"(x));
+ return j;
+}
+
+static inline void __TBB_machine_or( volatile void *ptr, uint32_t addend ) {
+ __asm__ __volatile__("lock\norl %1,%0" : "=m"(*(uint32_t *)ptr) : "r"(addend) : "memory");
+}
+
+static inline void __TBB_machine_pause( int32_t delay ) {
+ for (int32_t i = 0; i < delay; i++) {
+ __asm__ __volatile__("pause;");
+ }
+ return;
+}
+
+static inline int64_t __TBB_machine_load8 (const volatile void *ptr) {
+ int64_t result;
+ __asm__ __volatile__ ( "fildq %1\n\t"
+ "fistpq %0" : "=m"(result) : "m"(*(uint64_t *)ptr), "m"(result) : "memory" );
+ return result;
+}
+
+static inline void __TBB_machine_store8 (volatile void *ptr, int64_t value) {
+ __asm__ __volatile__ ( "fildq %1\n\t"
+ "fistpq (%2)" : "=m"(*(int64_t *)ptr) : "m"(value), "r"(ptr) : "memory" );
+}
+
+template <typename T, size_t S>
+struct __TBB_machine_load_store {
+ static inline T load_with_acquire(const volatile T& location) {
+ T to_return = location;
+ __asm__ __volatile__("" : : : "memory" ); // Compiler fence to keep operations from migrating upwards
+ return to_return;
+ }
+
+ static inline void store_with_release(volatile T &location, T value) {
+ __asm__ __volatile__("" : : : "memory" ); // Compiler fence to keep operations from migrating upwards
+ location = value;
+ }
+};
+
+template <typename T>
+struct __TBB_machine_load_store<T,8> {
+ static inline T load_with_acquire(const volatile T& location) {
+ T to_return = __TBB_machine_load8((volatile void *)&location);
+ __asm__ __volatile__("" : : : "memory" ); // Compiler fence to keep operations from migrating upwards
+ return to_return;
+ }
+
+ static inline void store_with_release(volatile T &location, T value) {
+ __asm__ __volatile__("" : : : "memory" ); // Compiler fence to keep operations from migrating downwards
+ __TBB_machine_store8((volatile void *)&location,(int64_t)value);
+ }
+};
+
+template<typename T>
+inline T __TBB_machine_load_with_acquire(const volatile T &location) {
+ return __TBB_machine_load_store<T,sizeof(T)>::load_with_acquire(location);
+}
+
+template<typename T, typename V>
+inline void __TBB_machine_store_with_release(volatile T &location, V value) {
+ __TBB_machine_load_store<T,sizeof(T)>::store_with_release(location,value);
+}
+
+#define __TBB_load_with_acquire(L) __TBB_machine_load_with_acquire((L))
+#define __TBB_store_with_release(L,V) __TBB_machine_store_with_release((L),(V))
+
+// Machine specific atomic operations
+
+#define __TBB_CompareAndSwap1(P,V,C) __TBB_machine_cmpswp1(P,V,C)
+#define __TBB_CompareAndSwap2(P,V,C) __TBB_machine_cmpswp2(P,V,C)
+#define __TBB_CompareAndSwap4(P,V,C) __TBB_machine_cmpswp4(P,V,C)
+#define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cmpswp8(P,V,C)
+#define __TBB_CompareAndSwapW(P,V,C) __TBB_machine_cmpswp4(P,V,C)
+
+#define __TBB_FetchAndAdd1(P,V) __TBB_machine_fetchadd1(P,V)
+#define __TBB_FetchAndAdd2(P,V) __TBB_machine_fetchadd2(P,V)
+#define __TBB_FetchAndAdd4(P,V) __TBB_machine_fetchadd4(P,V)
+#define __TBB_FetchAndAddW(P,V) __TBB_machine_fetchadd4(P,V)
+
+#define __TBB_FetchAndStore1(P,V) __TBB_machine_fetchstore1(P,V)
+#define __TBB_FetchAndStore2(P,V) __TBB_machine_fetchstore2(P,V)
+#define __TBB_FetchAndStore4(P,V) __TBB_machine_fetchstore4(P,V)
+#define __TBB_FetchAndStoreW(P,V) __TBB_machine_fetchstore4(P,V)
+
+#define __TBB_Store8(P,V) __TBB_machine_store8(P,V)
+#define __TBB_Load8(P) __TBB_machine_load8(P)
+
+#define __TBB_AtomicOR(P,V) __TBB_machine_or(P,V)
+
+
+// Those we chose not to implement (they will be implemented generically using CMPSWP8)
+#undef __TBB_FetchAndAdd8
+#undef __TBB_FetchAndStore8
+
+// Definition of other functions
+#define __TBB_Yield() sched_yield()
+#define __TBB_Pause(V) __TBB_machine_pause(V)
+#define __TBB_Log2(V) __TBB_machine_lg(V)
+
+// Special atomic functions
+#define __TBB_FetchAndAddWrelease(P,V) __TBB_FetchAndAddW(P,V)
+#define __TBB_FetchAndIncrementWacquire(P) __TBB_FetchAndAddW(P,1)
+#define __TBB_FetchAndDecrementWrelease(P) __TBB_FetchAndAddW(P,-1)
+
+// Definition of Lock functions
+#undef __TBB_TryLockByte
+#undef __TBB_LockByte
+
+#define __TBB_cpuid
+static inline void __TBB_x86_cpuid( int32_t buffer[4], int32_t mode ) {
+ // EBX register saved for compliancy with position-independent code (PIC) rules on IA32
+ __asm__ ("pushl %%ebx\n\t"
+ "cpuid\n\t"
+ "movl %%ebx,%1\n\t"
+ "popl %%ebx"
+ : "=a"(buffer[0]),
+ "=S"(buffer[1]),
+ "=c"(buffer[2]),
+ "=d"(buffer[3])
+ : "0"(mode)
+ : "memory" );
+}
+
diff --git a/include/tbb/machine/linux_itanium.h b/include/tbb/machine/linux_itanium.h
new file mode 100644
index 0000000..31e89fb
--- /dev/null
+++ b/include/tbb/machine/linux_itanium.h
@@ -0,0 +1,179 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_machine_H
+#error Do not include this file directly; include tbb_machine.h instead
+#endif
+
+#include <stdint.h>
+#include <unistd.h>
+#include <sched.h>
+#include <ia64intrin.h>
+
+#define __TBB_WORDSIZE 8
+#define __TBB_BIG_ENDIAN 0
+#define __TBB_DECL_FENCED_ATOMICS 1
+
+// Most of the functions will be in a .s file
+
+extern "C" {
+ int8_t __TBB_machine_cmpswp1__TBB_full_fence (volatile void *ptr, int8_t value, int8_t comparand);
+ int8_t __TBB_machine_fetchadd1__TBB_full_fence (volatile void *ptr, int8_t addend);
+ int8_t __TBB_machine_fetchadd1acquire(volatile void *ptr, int8_t addend);
+ int8_t __TBB_machine_fetchadd1release(volatile void *ptr, int8_t addend);
+ int8_t __TBB_machine_fetchstore1acquire(volatile void *ptr, int8_t value);
+ int8_t __TBB_machine_fetchstore1release(volatile void *ptr, int8_t value);
+
+ int16_t __TBB_machine_cmpswp2__TBB_full_fence (volatile void *ptr, int16_t value, int16_t comparand);
+ int16_t __TBB_machine_fetchadd2__TBB_full_fence (volatile void *ptr, int16_t addend);
+ int16_t __TBB_machine_fetchadd2acquire(volatile void *ptr, int16_t addend);
+ int16_t __TBB_machine_fetchadd2release(volatile void *ptr, int16_t addend);
+ int16_t __TBB_machine_fetchstore2acquire(volatile void *ptr, int16_t value);
+ int16_t __TBB_machine_fetchstore2release(volatile void *ptr, int16_t value);
+
+ int32_t __TBB_machine_fetchstore4__TBB_full_fence (volatile void *ptr, int32_t value);
+ int32_t __TBB_machine_fetchstore4acquire(volatile void *ptr, int32_t value);
+ int32_t __TBB_machine_fetchstore4release(volatile void *ptr, int32_t value);
+ int32_t __TBB_machine_fetchadd4acquire(volatile void *ptr, int32_t addend);
+ int32_t __TBB_machine_fetchadd4release(volatile void *ptr, int32_t addend);
+
+ int64_t __TBB_machine_cmpswp8__TBB_full_fence (volatile void *ptr, int64_t value, int64_t comparand);
+ int64_t __TBB_machine_fetchstore8__TBB_full_fence (volatile void *ptr, int64_t value);
+ int64_t __TBB_machine_fetchstore8acquire(volatile void *ptr, int64_t value);
+ int64_t __TBB_machine_fetchstore8release(volatile void *ptr, int64_t value);
+ int64_t __TBB_machine_fetchadd8acquire(volatile void *ptr, int64_t addend);
+ int64_t __TBB_machine_fetchadd8release(volatile void *ptr, int64_t addend);
+
+ int8_t __TBB_machine_cmpswp1acquire(volatile void *ptr, int8_t value, int8_t comparand);
+ int8_t __TBB_machine_cmpswp1release(volatile void *ptr, int8_t value, int8_t comparand);
+ int8_t __TBB_machine_fetchstore1__TBB_full_fence (volatile void *ptr, int8_t value);
+
+ int16_t __TBB_machine_cmpswp2acquire(volatile void *ptr, int16_t value, int16_t comparand);
+ int16_t __TBB_machine_cmpswp2release(volatile void *ptr, int16_t value, int16_t comparand);
+ int16_t __TBB_machine_fetchstore2__TBB_full_fence (volatile void *ptr, int16_t value);
+
+ int32_t __TBB_machine_cmpswp4__TBB_full_fence (volatile void *ptr, int32_t value, int32_t comparand);
+ int32_t __TBB_machine_cmpswp4acquire(volatile void *ptr, int32_t value, int32_t comparand);
+ int32_t __TBB_machine_cmpswp4release(volatile void *ptr, int32_t value, int32_t comparand);
+ int32_t __TBB_machine_fetchadd4__TBB_full_fence (volatile void *ptr, int32_t value);
+
+ int64_t __TBB_machine_cmpswp8acquire(volatile void *ptr, int64_t value, int64_t comparand);
+ int64_t __TBB_machine_cmpswp8release(volatile void *ptr, int64_t value, int64_t comparand);
+ int64_t __TBB_machine_fetchadd8__TBB_full_fence (volatile void *ptr, int64_t value);
+
+ int64_t __TBB_machine_lg(uint64_t value);
+ void __TBB_machine_pause(int32_t delay);
+ bool __TBB_machine_trylockbyte( volatile unsigned char &ptr );
+ int64_t __TBB_machine_lockbyte( volatile unsigned char &ptr );
+}
+
+#define __TBB_CompareAndSwap1(P,V,C) __TBB_machine_cmpswp1__TBB_full_fence(P,V,C)
+#define __TBB_CompareAndSwap2(P,V,C) __TBB_machine_cmpswp2__TBB_full_fence(P,V,C)
+
+#define __TBB_FetchAndAdd1(P,V) __TBB_machine_fetchadd1__TBB_full_fence(P,V)
+#define __TBB_FetchAndAdd1acquire(P,V) __TBB_machine_fetchadd1acquire(P,V)
+#define __TBB_FetchAndAdd1release(P,V) __TBB_machine_fetchadd1release(P,V)
+#define __TBB_FetchAndAdd2(P,V) __TBB_machine_fetchadd2__TBB_full_fence(P,V)
+#define __TBB_FetchAndAdd2acquire(P,V) __TBB_machine_fetchadd2acquire(P,V)
+#define __TBB_FetchAndAdd2release(P,V) __TBB_machine_fetchadd2release(P,V)
+#define __TBB_FetchAndAdd4acquire(P,V) __TBB_machine_fetchadd4acquire(P,V)
+#define __TBB_FetchAndAdd4release(P,V) __TBB_machine_fetchadd4release(P,V)
+#define __TBB_FetchAndAdd8acquire(P,V) __TBB_machine_fetchadd8acquire(P,V)
+#define __TBB_FetchAndAdd8release(P,V) __TBB_machine_fetchadd8release(P,V)
+
+#define __TBB_FetchAndStore1acquire(P,V) __TBB_machine_fetchstore1acquire(P,V)
+#define __TBB_FetchAndStore1release(P,V) __TBB_machine_fetchstore1release(P,V)
+#define __TBB_FetchAndStore2acquire(P,V) __TBB_machine_fetchstore2acquire(P,V)
+#define __TBB_FetchAndStore2release(P,V) __TBB_machine_fetchstore2release(P,V)
+#define __TBB_FetchAndStore4acquire(P,V) __TBB_machine_fetchstore4acquire(P,V)
+#define __TBB_FetchAndStore4release(P,V) __TBB_machine_fetchstore4release(P,V)
+#define __TBB_FetchAndStore8acquire(P,V) __TBB_machine_fetchstore8acquire(P,V)
+#define __TBB_FetchAndStore8release(P,V) __TBB_machine_fetchstore8release(P,V)
+
+#define __TBB_CompareAndSwap1acquire(P,V,C) __TBB_machine_cmpswp1acquire(P,V,C)
+#define __TBB_CompareAndSwap1release(P,V,C) __TBB_machine_cmpswp1release(P,V,C)
+#define __TBB_CompareAndSwap2acquire(P,V,C) __TBB_machine_cmpswp2acquire(P,V,C)
+#define __TBB_CompareAndSwap2release(P,V,C) __TBB_machine_cmpswp2release(P,V,C)
+#define __TBB_CompareAndSwap4(P,V,C) __TBB_machine_cmpswp4__TBB_full_fence(P,V,C)
+#define __TBB_CompareAndSwap4acquire(P,V,C) __TBB_machine_cmpswp4acquire(P,V,C)
+#define __TBB_CompareAndSwap4release(P,V,C) __TBB_machine_cmpswp4release(P,V,C)
+#define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cmpswp8__TBB_full_fence(P,V,C)
+#define __TBB_CompareAndSwap8acquire(P,V,C) __TBB_machine_cmpswp8acquire(P,V,C)
+#define __TBB_CompareAndSwap8release(P,V,C) __TBB_machine_cmpswp8release(P,V,C)
+
+#define __TBB_FetchAndAdd4(P,V) __TBB_machine_fetchadd4__TBB_full_fence(P,V)
+#define __TBB_FetchAndAdd8(P,V) __TBB_machine_fetchadd8__TBB_full_fence(P,V)
+
+#define __TBB_FetchAndStore1(P,V) __TBB_machine_fetchstore1__TBB_full_fence(P,V)
+#define __TBB_FetchAndStore2(P,V) __TBB_machine_fetchstore2__TBB_full_fence(P,V)
+#define __TBB_FetchAndStore4(P,V) __TBB_machine_fetchstore4__TBB_full_fence(P,V)
+#define __TBB_FetchAndStore8(P,V) __TBB_machine_fetchstore8__TBB_full_fence(P,V)
+
+#define __TBB_FetchAndIncrementWacquire(P) __TBB_FetchAndAdd8acquire(P,1)
+#define __TBB_FetchAndDecrementWrelease(P) __TBB_FetchAndAdd8release(P,-1)
+
+#ifndef __INTEL_COMPILER
+template<typename T, typename V>
+inline void __TBB_store_with_release_via_explicit_fence(volatile T& location, V value) {
+ __asm__ __volatile__("": : :"memory");
+ location = value;
+}
+
+//! Load with acquire semantics, both for hardware and compiler.
+/** Even though GCC imbues volatile loads with acquire semantics,
+ it sometimes hoists loads over the acquire fence. We use
+ an explicit memory fence to prevent such incorrect hoisting. */
+template<typename T>
+inline T __TBB_load_with_acquire_via_explicit_fence(const volatile T& location) {
+ T tmp = location;
+ __asm__ __volatile__("": : :"memory");
+ return tmp;
+}
+#define __TBB_load_with_acquire(L) __TBB_load_with_acquire_via_explicit_fence(L)
+#define __TBB_store_with_release(L,V) __TBB_store_with_release_via_explicit_fence(L,V)
+#endif
+
+// Special atomic functions
+#define __TBB_CompareAndSwapW(P,V,C) __TBB_CompareAndSwap8(P,V,C)
+#define __TBB_FetchAndStoreW(P,V) __TBB_FetchAndStore8(P,V)
+#define __TBB_FetchAndAddW(P,V) __TBB_FetchAndAdd8(P,V)
+#define __TBB_FetchAndAddWrelease(P,V) __TBB_FetchAndAdd8release(P,V)
+
+// Not needed
+#undef __TBB_Store8
+#undef __TBB_Load8
+
+// Definition of Lock functions
+#define __TBB_TryLockByte(P) __TBB_machine_trylockbyte(P)
+#define __TBB_LockByte(P) __TBB_machine_lockbyte(P)
+
+// Definition of other utility functions
+#define __TBB_Yield() sched_yield()
+#define __TBB_Pause(V) __TBB_machine_pause(V)
+#define __TBB_Log2(V) __TBB_machine_lg(V)
+
diff --git a/include/tbb/machine/mac_ppc.h b/include/tbb/machine/mac_ppc.h
new file mode 100644
index 0000000..831ce27
--- /dev/null
+++ b/include/tbb/machine/mac_ppc.h
@@ -0,0 +1,98 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_machine_H
+#error Do not include this file directly; include tbb_machine.h instead
+#endif
+
+#define __TBB_WORDSIZE 8
+#define __TBB_BIG_ENDIAN 1
+
+#include <stdint.h>
+#include <unistd.h>
+
+#include <sched.h>
+
+inline int32_t __TBB_machine_cmpswp4 (volatile void *ptr, int32_t value, int32_t comparand )
+{
+ int32_t result;
+
+ __asm__ __volatile__("0: lwarx %0,0,%1\n\t" /* load w/ reservation */
+ "cmpw %0,%3\n\t" /* compare against comparand */
+ "bne- 1f\n\t" /* exit if not same */
+ "stwcx. %2,0,%1\n\t" /* store new_value */
+ "bne- 0b\n" /* retry if reservation lost */
+ "1:" /* the exit */
+ : "=&r"(result)
+ : "r"(ptr), "r"(value), "r"(comparand)
+ : "cr0");
+ return result;
+}
+
+#if defined(powerpc64) || defined(__powerpc64__) || defined(__ppc64__)
+
+inline int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t comparand )
+{
+ int64_t result;
+ __asm__ __volatile__("0: ldarx %0,0,%1\n\t" /* load w/ reservation */
+ "cmpd %0,%3\n\t" /* compare against comparand */
+ "bne- 1f\n\t" /* exit if not same */
+ "stdcx. %2,0,%1\n\t" /* store new_value */
+ "bne- 0b\n" /* retry if reservation lost */
+ "1:" /* the exit */
+ : "=&b"(result)
+ : "r"(ptr), "r"(value), "r"(comparand)
+ : "cr0");
+ return result;
+}
+
+#else
+#error This configuratioin is not supported yet
+
+inline int64_t __TBB_machine_cmpswp8 (volatile void *ptr, int64_t value, int64_t comparand )
+{
+ int64_t result;
+ __asm__ __volatile__("0: ldarx %0,0,%1\n\t" /* load w/ reservation */
+ "cmpd %0,%3\n\t" /* compare against comparand */
+ "bne- 1f\n\t" /* exit if not same */
+ "stdcx. %2,0,%1\n\t" /* store new_value */
+ "bne- 0b\n" /* retry if reservation lost */
+ "1:" /* the exit */
+ : "=&b"(result)
+ : "r"(ptr), "r"(value), "r"(comparand)
+ : "cr0");
+ return result;
+}
+
+#endif
+
+#define __TBB_CompareAndSwap4(P,V,C) __TBB_machine_cmpswp4(P,V,C)
+#define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cmpswp8(P,V,C)
+#define __TBB_CompareAndSwapW(P,V,C) __TBB_machine_cmpswp8(P,V,C)
+#define __TBB_Yield() sched_yield()
+
diff --git a/include/tbb/machine/windows_em64t.h b/include/tbb/machine/windows_em64t.h
new file mode 100644
index 0000000..637defc
--- /dev/null
+++ b/include/tbb/machine/windows_em64t.h
@@ -0,0 +1,153 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_machine_H
+#error Do not include this file directly; include tbb_machine.h instead
+#endif
+
+#include <windows.h>
+
+#if defined(__INTEL_COMPILER)
+#define _ReadWriteBarrier() __asm { __asm nop }
+#elif _MSC_VER >= 1300
+extern "C" void _ReadWriteBarrier();
+#pragma intrinsic(_ReadWriteBarrier)
+#endif
+
+#define __TBB_WORDSIZE 8
+#define __TBB_BIG_ENDIAN 0
+
+// ATTENTION: if you ever change argument types in machine-specific primitives,
+// please take care of atomic_word<> specializations in tbb/atomic.h
+extern "C" {
+ __int8 __TBB_machine_cmpswp1 (volatile void *ptr, __int8 value, __int8 comparand );
+ __int8 __TBB_machine_fetchadd1 (volatile void *ptr, __int8 addend );
+ __int8 __TBB_machine_fetchstore1 (volatile void *ptr, __int8 value );
+ __int16 __TBB_machine_cmpswp2 (volatile void *ptr, __int16 value, __int16 comparand );
+ __int16 __TBB_machine_fetchadd2 (volatile void *ptr, __int16 addend );
+ __int16 __TBB_machine_fetchstore2 (volatile void *ptr, __int16 value );
+ void __TBB_machine_pause (__int32 delay );
+}
+
+template <typename T>
+static inline T __TBB_machine_load_with_acquire(const volatile T& location) {
+ T to_return = location;
+ _ReadWriteBarrier();
+ return to_return;
+}
+
+template <typename T, typename V>
+static inline void __TBB_machine_store_with_release(volatile T &location, V value) {
+ _ReadWriteBarrier();
+ location = value;
+}
+
+#define __TBB_load_with_acquire(L) __TBB_machine_load_with_acquire((L))
+#define __TBB_store_with_release(L,V) __TBB_machine_store_with_release((L),(V))
+
+
+#if !__INTEL_COMPILER
+extern "C" unsigned char _BitScanReverse64( unsigned long* i, unsigned __int64 w );
+#pragma intrinsic(_BitScanReverse64)
+#endif
+
+inline __int64 __TBB_machine_lg( unsigned __int64 i ) {
+#if __INTEL_COMPILER
+ unsigned __int64 j;
+ __asm
+ {
+ bsr rax, i
+ mov j, rax
+ }
+#else
+ unsigned long j;
+ _BitScanReverse64( &j, i );
+#endif
+ return j;
+}
+
+inline void __TBB_machine_OR( volatile void *operand, uintptr_t addend ) {
+ InterlockedOr64((LONGLONG *)operand, addend);
+}
+
+#define __TBB_CompareAndSwap1(P,V,C) __TBB_machine_cmpswp1(P,V,C)
+#define __TBB_CompareAndSwap2(P,V,C) __TBB_machine_cmpswp2(P,V,C)
+#define __TBB_CompareAndSwap4(P,V,C) InterlockedCompareExchange( (LONG *) P , V , C )
+#define __TBB_CompareAndSwap8(P,V,C) InterlockedCompareExchange64( (LONGLONG *) P , V , C )
+#define __TBB_CompareAndSwapW(P,V,C) InterlockedCompareExchange64( (LONGLONG *) P , V , C )
+
+#define __TBB_FetchAndAdd1(P,V) __TBB_machine_fetchadd1(P,V)
+#define __TBB_FetchAndAdd2(P,V) __TBB_machine_fetchadd2(P,V)
+#define __TBB_FetchAndAdd4(P,V) ( InterlockedAdd((LONG *) P , V ) - V )
+#define __TBB_FetchAndAdd8(P,V) ( InterlockedAdd64((LONGLONG *) P , V ) - V )
+#define __TBB_FetchAndAddW(P,V) ( InterlockedAdd64((LONGLONG *) P , V ) - V )
+
+#define __TBB_FetchAndStore1(P,V) __TBB_machine_fetchstore1(P,V)
+#define __TBB_FetchAndStore2(P,V) __TBB_machine_fetchstore2(P,V)
+#define __TBB_FetchAndStore4(P,V) InterlockedExchange((LONG *) P , V )
+#define __TBB_FetchAndStore8(P,V) InterlockedExchange64((LONGLONG *) P , V )
+#define __TBB_FetchAndStoreW(P,V) InterlockedExchange64((LONGLONG *) P , V )
+
+// Not used if wordsize == 8
+#undef __TBB_Store8
+#undef __TBB_Load8
+
+#if __INTEL_COMPILER<1010
+#define __TBB_AtomicOR(P,V) __TBB_machine_OR(P,V)
+#else
+// icl 10.1 incorrectly compiles InterlockedOr64, so use default definition of __TBB_AtomicOR instead.
+#endif
+
+// Definition of other functions
+#define __TBB_Yield() Sleep(0)
+#define __TBB_Pause(V) __TBB_machine_pause(V)
+#define __TBB_Log2(V) __TBB_machine_lg(V)
+
+#if !__INTEL_COMPILER
+extern "C" void __cpuid( int cpuinfo[4], int mode );
+#pragma intrinsic(__cpuid)
+#endif
+
+#define __TBB_cpuid
+inline void __TBB_x86_cpuid( __int32 buffer[4], __int32 mode ) {
+#if __INTEL_COMPILER
+ __asm
+ {
+ mov eax,mode
+ cpuid
+ mov rdi,buffer
+ mov [rdi+0],eax
+ mov [rdi+4],ebx
+ mov [rdi+8],ecx
+ mov [rdi+12],edx
+ }
+#else
+ __cpuid(buffer, mode);
+#endif
+}
+
diff --git a/include/tbb/machine/windows_ia32.h b/include/tbb/machine/windows_ia32.h
new file mode 100644
index 0000000..28c442c
--- /dev/null
+++ b/include/tbb/machine/windows_ia32.h
@@ -0,0 +1,221 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_machine_H
+#error Do not include this file directly; include tbb_machine.h instead
+#endif
+
+#include <windows.h>
+
+#if !defined(__INTEL_COMPILER)
+#if _MSC_VER >= 1300
+extern "C" void _ReadWriteBarrier();
+#pragma intrinsic(_ReadWriteBarrier)
+#endif
+#endif
+
+#define __TBB_WORDSIZE 4
+#define __TBB_BIG_ENDIAN 0
+
+extern "C" {
+ __int64 __TBB_machine_cmpswp8 (volatile void *ptr, __int64 value, __int64 comparand );
+ __int64 __TBB_machine_fetchadd8 (volatile void *ptr, __int64 addend );
+ __int64 __TBB_machine_fetchstore8 (volatile void *ptr, __int64 value );
+ void __TBB_machine_store8 (volatile void *ptr, __int64 value );
+ __int64 __TBB_machine_load8 (const volatile void *ptr);
+ bool __TBB_machine_trylockbyte ( volatile unsigned char& flag );
+}
+
+template <typename T, size_t S>
+struct __TBB_machine_load_store {
+ static inline T load_with_acquire(const volatile T& location) {
+#if !defined(__INTEL_COMPILER) && _MSC_VER >= 1300
+ T to_return = location;
+ _ReadWriteBarrier();
+ return to_return;
+#else
+ return location;
+#endif
+ }
+
+ static inline void store_with_release(T &location, T value) {
+#if !defined(__INTEL_COMPILER) && _MSC_VER >= 1300
+ _ReadWriteBarrier();
+#endif
+ const_cast<T volatile&>(location) = value;
+ }
+};
+
+template <typename T>
+struct __TBB_machine_load_store<T,8> {
+ static inline T load_with_acquire(const volatile T& location) {
+ return __TBB_machine_load8((volatile void *)&location);
+ }
+
+ static inline void store_with_release(T &location, T value) {
+ __TBB_machine_store8((volatile void *)&location,(int64_t)value);
+ }
+};
+
+template<typename T>
+inline T __TBB_machine_load_with_acquire(const volatile T &location) {
+ return __TBB_machine_load_store<T,sizeof(T)>::load_with_acquire(location);
+}
+
+template<typename T, typename V>
+inline void __TBB_machine_store_with_release(T& location, V value) {
+ __TBB_machine_load_store<T,sizeof(T)>::store_with_release(location,value);
+}
+
+#define __TBB_load_with_acquire(L) __TBB_machine_load_with_acquire((L))
+#define __TBB_store_with_release(L,V) __TBB_machine_store_with_release((L),(V))
+
+
+#define DEFINE_ATOMICS(S,T,A,C) \
+static inline T __TBB_machine_cmpswp##S ( volatile void * ptr, T value, T comparand ) { \
+ T result; \
+ volatile T *p = (T *)ptr; \
+ __asm \
+ { \
+ __asm mov edx, p \
+ __asm mov C , value \
+ __asm mov A , comparand \
+ __asm lock cmpxchg [edx], C \
+ __asm mov result, A \
+ } \
+ __TBB_load_with_acquire(*(T *)ptr); \
+ return result; \
+} \
+\
+static inline T __TBB_machine_fetchadd##S ( volatile void * ptr, T addend ) { \
+ T result; \
+ volatile T *p = (T *)ptr; \
+ __asm \
+ { \
+ __asm mov edx, p \
+ __asm mov A, addend \
+ __asm lock xadd [edx], A \
+ __asm mov result, A \
+ } \
+ __TBB_load_with_acquire(*(T *)ptr); \
+ return result; \
+}\
+\
+static inline T __TBB_machine_fetchstore##S ( volatile void * ptr, T value ) { \
+ T result; \
+ volatile T *p = (T *)ptr; \
+ __asm \
+ { \
+ __asm mov edx, p \
+ __asm mov A, value \
+ __asm lock xchg [edx], A \
+ __asm mov result, A \
+ } \
+ __TBB_load_with_acquire(*(T *)ptr); \
+ return result; \
+}
+
+DEFINE_ATOMICS(1, __int8, al, cl)
+DEFINE_ATOMICS(2, __int16, ax, cx)
+DEFINE_ATOMICS(4, __int32, eax, ecx)
+
+static inline __int32 __TBB_machine_lg( unsigned __int64 i ) {
+ unsigned __int32 j;
+ __asm
+ {
+ bsr eax, i
+ mov j, eax
+ }
+ return j;
+}
+
+static inline void __TBB_machine_OR( volatile void *operand, unsigned __int32 addend ) {
+ __asm
+ {
+ mov eax, addend
+ mov edx, [operand]
+ lock or [edx], eax
+ }
+}
+
+static inline void __TBB_machine_pause (__int32 delay ) {
+ _asm
+ {
+ mov eax, delay
+ L1:
+ pause
+ add eax, -1
+ jne L1
+ }
+ return;
+}
+
+#define __TBB_CompareAndSwap1(P,V,C) __TBB_machine_cmpswp1(P,V,C)
+#define __TBB_CompareAndSwap2(P,V,C) __TBB_machine_cmpswp2(P,V,C)
+#define __TBB_CompareAndSwap4(P,V,C) __TBB_machine_cmpswp4(P,V,C)
+#define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cmpswp8(P,V,C)
+#define __TBB_CompareAndSwapW(P,V,C) __TBB_machine_cmpswp4(P,V,C)
+
+#define __TBB_FetchAndAdd1(P,V) __TBB_machine_fetchadd1(P,V)
+#define __TBB_FetchAndAdd2(P,V) __TBB_machine_fetchadd2(P,V)
+#define __TBB_FetchAndAdd4(P,V) __TBB_machine_fetchadd4(P,V)
+#define __TBB_FetchAndAdd8(P,V) __TBB_machine_fetchadd8(P,V)
+#define __TBB_FetchAndAddW(P,V) __TBB_machine_fetchadd4(P,V)
+
+#define __TBB_FetchAndStore1(P,V) __TBB_machine_fetchstore1(P,V)
+#define __TBB_FetchAndStore2(P,V) __TBB_machine_fetchstore2(P,V)
+#define __TBB_FetchAndStore4(P,V) __TBB_machine_fetchstore4(P,V)
+#define __TBB_FetchAndStore8(P,V) __TBB_machine_fetchstore8(P,V)
+#define __TBB_FetchAndStoreW(P,V) __TBB_machine_fetchstore4(P,V)
+
+// Should define this:
+#define __TBB_Store8(P,V) __TBB_machine_store8(P,V)
+#define __TBB_Load8(P) __TBB_machine_load8(P)
+#define __TBB_AtomicOR(P,V) __TBB_machine_OR(P,V)
+
+// Definition of other functions
+#define __TBB_Yield() Sleep(0)
+#define __TBB_Pause(V) __TBB_machine_pause(V)
+#define __TBB_Log2(V) __TBB_machine_lg(V)
+
+#define __TBB_TryLockByte(F) __TBB_machine_trylockbyte(F)
+
+#define __TBB_cpuid
+static inline void __TBB_x86_cpuid( __int32 buffer[4], __int32 mode ) {
+ __asm
+ {
+ mov eax,mode
+ cpuid
+ mov edi,buffer
+ mov [edi+0],eax
+ mov [edi+4],ebx
+ mov [edi+8],ecx
+ mov [edi+12],edx
+ }
+}
+
diff --git a/include/tbb/machine/windows_ia32_inline.h b/include/tbb/machine/windows_ia32_inline.h
new file mode 100644
index 0000000..89eca84
--- /dev/null
+++ b/include/tbb/machine/windows_ia32_inline.h
@@ -0,0 +1,176 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_machine_H
+#error Do not include this file directly; include tbb_machine.h instead
+#endif
+
+#include <windows.h>
+
+#define __TBB_WORDSIZE 4
+#define __TBB_BIG_ENDIAN 0
+
+#define DEFINE_ATOMICS(S,T,A,C) \
+static inline T __TBB_machine_cmpswp##S ( volatile void * ptr, T value, T comparand ) { \
+ T result; \
+ T *p = (T *)ptr; \
+ __asm \
+ { \
+ __asm mov edx, p \
+ __asm mov C , value \
+ __asm mov A , comparand \
+ __asm lock cmpxchg [edx], C \
+ __asm mov result, A \
+ } \
+ return result; \
+} \
+\
+static inline T __TBB_machine_fetchadd##S ( volatile void * ptr, T addend ) { \
+ T result; \
+ T *p = (T *)ptr; \
+ __asm \
+ { \
+ __asm mov edx, p \
+ __asm mov A, addend \
+ __asm lock xadd [edx], A \
+ __asm mov result, A \
+ } \
+ return result; \
+}\
+\
+static inline T __TBB_machine_fetchstore##S ( volatile void * ptr, T value ) { \
+ T result; \
+ T *p = (T *)ptr; \
+ __asm \
+ { \
+ __asm mov edx, p \
+ __asm mov A, value \
+ __asm lock xchg [edx], A \
+ __asm mov result, A \
+ } \
+ return result; \
+}
+
+DEFINE_ATOMICS(1, __int8, al, cl)
+DEFINE_ATOMICS(2, __int16, ax, cx)
+DEFINE_ATOMICS(4, __int32, eax, ecx)
+
+static inline __int64 __TBB_machine_cmpswp8 (volatile void *ptr, __int64 value, __int64 comparand ) {
+ __int32 comparand_lo = comparand;
+ __int32 comparand_hi = comparand>>32;
+ __int32 value_lo = value;
+ __int32 value_hi = value>>32;
+
+ __int64 *p = (__int64 *)ptr;
+
+ // EDX:EAX is comparand, ECX:EBX is value, EDX:EAX is result
+ __asm
+ {
+ mov edx, comparand_hi
+ mov eax, comparand_lo
+ mov ecx, value_hi
+ mov ebx, value_lo
+ lock cmpxchg8b [p]
+ }
+}
+
+
+static inline __int32 __TBB_machine_lg( unsigned __int64 i ) {
+ unsigned __int32 j;
+ __asm
+ {
+ bsr eax, i
+ mov j, eax
+ }
+ return j;
+}
+
+static inline void __TBB_machine_OR( volatile void *operand, unsigned __int32 addend ) {
+ __asm
+ {
+ mov eax, addend
+ mov edx, [operand]
+ lock or [edx], eax
+ }
+}
+
+static inline void __TBB_machine_pause (__int32 delay ) {
+ _asm
+ {
+ mov eax, delay
+ L1:
+ pause
+ add eax, -1
+ jne L1
+ }
+ return;
+}
+
+#define __TBB_CompareAndSwap1(P,V,C) __TBB_machine_cmpswp1(P,V,C)
+#define __TBB_CompareAndSwap2(P,V,C) __TBB_machine_cmpswp2(P,V,C)
+#define __TBB_CompareAndSwap4(P,V,C) __TBB_machine_cmpswp4(P,V,C)
+#define __TBB_CompareAndSwap8(P,V,C) __TBB_machine_cmpswp8(P,V,C)
+#define __TBB_CompareAndSwapW(P,V,C) __TBB_machine_cmpswp4(P,V,C)
+
+#define __TBB_FetchAndAdd1(P,V) __TBB_machine_fetchadd1(P,V)
+#define __TBB_FetchAndAdd2(P,V) __TBB_machine_fetchadd2(P,V)
+#define __TBB_FetchAndAdd4(P,V) __TBB_machine_fetchadd4(P,V)
+#undef __TBB_FetchAndAdd8
+#define __TBB_FetchAndAddW(P,V) __TBB_machine_fetchadd4(P,V)
+
+#define __TBB_FetchAndStore1(P,V) __TBB_machine_fetchstore1(P,V)
+#define __TBB_FetchAndStore2(P,V) __TBB_machine_fetchstore2(P,V)
+#define __TBB_FetchAndStore4(P,V) __TBB_machine_fetchstore4(P,V)
+#undef __TBB_FetchAndStore8
+#define __TBB_FetchAndStoreW(P,V) __TBB_machine_fetchstore4(P,V)
+
+// Should define this:
+#undef __TBB_Store8
+#undef __TBB_Load8
+
+#define __TBB_AtomicOR(P,V) __TBB_machine_OR(P,V)
+
+// Definition of other functions
+#define __TBB_Yield() Sleep(0)
+#define __TBB_Pause(V) __TBB_machine_pause(V)
+#define __TBB_Log2(V) __TBB_machine_lg(V)
+
+#define __TBB_cpuid
+static inline void __TBB_x86_cpuid( __int32 buffer[4], __int32 mode ) {
+ __asm
+ {
+ mov eax,mode
+ cpuid
+ mov edi,buffer
+ mov [edi+0],eax
+ mov [edi+4],ebx
+ mov [edi+8],ecx
+ mov [edi+12],edx
+ }
+}
+
diff --git a/include/tbb/mutex.h b/include/tbb/mutex.h
new file mode 100644
index 0000000..7956eee
--- /dev/null
+++ b/include/tbb/mutex.h
@@ -0,0 +1,193 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_mutex_H
+#define __TBB_mutex_H
+
+#if _WIN32||_WIN64
+#include <windows.h>
+#if !defined(_WIN32_WINNT)
+// The following Windows API function is declared explicitly;
+// otherwise any user would have to specify /D_WIN32_WINNT=0x0400
+extern "C" BOOL WINAPI TryEnterCriticalSection( LPCRITICAL_SECTION );
+#elif _WIN32_WINNT<0x0400
+// If earlier WINNT target is explicitly specified, no try_acquire is possible
+#define __TBB_mutex_NO_TRY_ACQUIRE
+#endif
+
+#else /* if not _WIN32||_WIN64 */
+#include <pthread.h>
+namespace tbb { namespace internal {
+// Use this internal TBB function to throw an exception
+extern void handle_perror( int error_code, const char* what );
+} } //namespaces
+#endif /* _WIN32||_WIN64 */
+
+#include <stdio.h>
+#include "tbb_stddef.h"
+
+namespace tbb {
+
+//! Wrapper around the platform's native reader-writer lock.
+/** For testing purposes only.
+ @ingroup synchronization */
+class mutex {
+public:
+ //! Construct unacquired mutex.
+ mutex() {
+#if TBB_DO_ASSERT
+ internal_construct();
+#else
+ #if _WIN32||_WIN64
+ InitializeCriticalSection(&impl);
+ #else
+ int error_code = pthread_mutex_init(&impl,NULL);
+ if( error_code )
+ tbb::internal::handle_perror(error_code,"mutex: pthread_mutex_init failed");
+ #endif /* _WIN32||_WIN64*/
+#endif /* TBB_DO_ASSERT */
+ };
+
+ ~mutex() {
+#if TBB_DO_ASSERT
+ internal_destroy();
+#else
+ #if _WIN32||_WIN64
+ DeleteCriticalSection(&impl);
+ #else
+ pthread_mutex_destroy(&impl);
+
+ #endif /* _WIN32||_WIN64 */
+#endif /* TBB_DO_ASSERT */
+ };
+
+ class scoped_lock;
+ friend class scoped_lock;
+
+ //! The scoped locking pattern
+ /** It helps to avoid the common problem of forgetting to release lock.
+ It also nicely provides the "node" for queuing locks. */
+ class scoped_lock : private internal::no_copy {
+ public:
+ //! Construct lock that has not acquired a mutex.
+ scoped_lock() : my_mutex(NULL) {};
+
+ //! Acquire lock on given mutex.
+ /** Upon entry, *this should not be in the "have acquired a mutex" state. */
+ scoped_lock( mutex& mutex ) {
+ acquire( mutex );
+ }
+
+ //! Release lock (if lock is held).
+ ~scoped_lock() {
+ if( my_mutex )
+ release();
+ }
+
+ //! Acquire lock on given mutex.
+ void acquire( mutex& mutex ) {
+#if TBB_DO_ASSERT
+ internal_acquire(mutex);
+#else
+ my_mutex = &mutex;
+ #if _WIN32||_WIN64
+ EnterCriticalSection(&mutex.impl);
+ #else
+ pthread_mutex_lock(&mutex.impl);
+ #endif /* _WIN32||_WIN64 */
+#endif /* TBB_DO_ASSERT */
+ }
+
+#ifndef __TBB_mutex_NO_TRY_ACQUIRE
+ //! Try acquire lock on given mutex.
+ bool try_acquire( mutex& mutex ) {
+#if TBB_DO_ASSERT
+ return internal_try_acquire (mutex);
+#else
+ bool result;
+ #if _WIN32||_WIN64
+ result = TryEnterCriticalSection(&mutex.impl)!=0;
+ #else
+ result = pthread_mutex_trylock(&mutex.impl)==0;
+ #endif /* _WIN32||_WIN64 */
+ if( result )
+ my_mutex = &mutex;
+ return result;
+#endif /* TBB_DO_ASSERT */
+ }
+#endif /* __TBB_mutex_NO_TRY_ACQUIRE */
+
+ //! Release lock
+ void release() {
+#if TBB_DO_ASSERT
+ internal_release ();
+#else
+ #if _WIN32||_WIN64
+ LeaveCriticalSection(&my_mutex->impl);
+ #else
+ pthread_mutex_unlock(&my_mutex->impl);
+ #endif /* _WIN32||_WIN64 */
+ my_mutex = NULL;
+#endif /* TBB_DO_ASSERT */
+ }
+
+ private:
+ //! The pointer to the current mutex to work
+ mutex* my_mutex;
+
+ //! All checks from acquire using mutex.state were moved here
+ void internal_acquire( mutex& m );
+
+ //! All checks from try_acquire using mutex.state were moved here
+ bool internal_try_acquire( mutex& m );
+
+ //! All checks from release using mutex.state were moved here
+ void internal_release();
+ };
+
+private:
+#if _WIN32||_WIN64
+ CRITICAL_SECTION impl;
+ enum state_t {
+ INITIALIZED=0x1234,
+ DESTROYED=0x789A
+ } state;
+#else
+ pthread_mutex_t impl;
+#endif /* _WIN32||_WIN64 */
+
+ //! All checks from mutex constructor using mutex.state were moved here
+ void internal_construct();
+
+ //! All checks from mutex destructor using mutex.state were moved here
+ void internal_destroy();
+};
+
+} // namespace tbb
+
+#endif /* __TBB_mutex_H */
diff --git a/include/tbb/parallel_for.h b/include/tbb/parallel_for.h
new file mode 100644
index 0000000..0f6914b
--- /dev/null
+++ b/include/tbb/parallel_for.h
@@ -0,0 +1,119 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_parallel_for_H
+#define __TBB_parallel_for_H
+
+#include "task.h"
+#include "partitioner.h"
+#include <new>
+
+namespace tbb {
+
+//! @cond INTERNAL
+namespace internal {
+
+ //! Task type used in parallel_for
+ /** @ingroup algorithms */
+ template<typename Range, typename Body, typename Partitioner=simple_partitioner>
+ class start_for: public task {
+ Range my_range;
+ const Body my_body;
+ Partitioner my_partitioner;
+ /*override*/ task* execute();
+ public:
+
+ start_for( const Range& range, const Body& body, const Partitioner &partitioner ) :
+ my_range(range),
+ my_body(body),
+ my_partitioner(partitioner)
+ {
+ }
+ };
+
+ template<typename Range, typename Body, typename Partitioner>
+ task* start_for<Range,Body,Partitioner>::execute() {
+ if( my_partitioner.should_execute_range(my_range, *this) ) {
+ my_body( my_range );
+ return NULL;
+ } else {
+ empty_task& c = *new( allocate_continuation() ) empty_task;
+ recycle_as_child_of(c);
+ c.set_ref_count(2);
+ start_for& b = *new( c.allocate_child() ) start_for(Range(my_range,split()),my_body,Partitioner(my_partitioner,split()));
+ c.spawn(b);
+ return this;
+ }
+ }
+
+} // namespace internal
+//! @endcond
+
+
+//! Parallel iteration over range.
+/** The body b must allow: \n
+ b(r) Apply function to range r. \n
+ r must define: \n
+ r.is_divisible() True if range should be divided \n
+ r.empty() True if range is empty \n
+ R r2(r,split()) Split range into r2 and r. \n
+ @ingroup algorithms */
+template<typename Range, typename Body>
+void parallel_for( const Range& range, const Body& body ) {
+ if( !range.empty() ) {
+ typedef typename internal::start_for<Range,Body> start_type;
+ start_type& a = *new(task::allocate_root()) start_type(range,body,simple_partitioner());
+ task::spawn_root_and_wait(a);
+ }
+}
+
+//! Parallel iteration over range using a partitioner.
+/** The body b must allow: \n
+ b(r) Apply function to range r. \n
+ r must define: \n
+ r.is_divisible() True if range can be divided \n
+ r.empty() True if range is empty \n
+ R r2(r,split()) Split range into r2 and r. \n
+ The partitioner p must define: \n
+ p.should_execute_range(r,t) True if r should be executed to completion without further splits. \n
+ P p2(p,split()) Split the partitioner into p2 and p. \n
+ @ingroup algorithms */
+template<typename Range, typename Body, typename Partitioner>
+void parallel_for( const Range& range, const Body& body, const Partitioner &partitioner ) {
+ if( !range.empty() ) {
+ typedef typename internal::start_for<Range,Body,Partitioner> start_type;
+ start_type& a = *new(task::allocate_root()) start_type(range,body,partitioner);
+ task::spawn_root_and_wait(a);
+ }
+}
+
+
+} // namespace tbb
+
+#endif /* __TBB_parallel_for_H */
+
diff --git a/include/tbb/parallel_reduce.h b/include/tbb/parallel_reduce.h
new file mode 100644
index 0000000..1dfe417
--- /dev/null
+++ b/include/tbb/parallel_reduce.h
@@ -0,0 +1,155 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_parallel_reduce_H
+#define __TBB_parallel_reduce_H
+
+#include "task.h"
+#include "aligned_space.h"
+#include "partitioner.h"
+#include <new>
+
+namespace tbb {
+
+//! @cond INTERNAL
+namespace internal {
+
+ //! Task type use to combine the partial results of parallel_reduce.
+ /** @ingroup algorithms */
+ template<typename Body>
+ class finish_reduce: public task {
+ Body* const my_body;
+ Body* right_zombie;
+ aligned_space<Body,1> zombie_space;
+ finish_reduce( Body* body ) :
+ my_body(body),
+ right_zombie(NULL)
+ {
+ }
+ task* execute() {
+ if( Body* s = right_zombie ) {
+ // Right child was stolen.
+ __TBB_ASSERT( my_body!=s, NULL );
+ my_body->join( *s );
+ s->~Body();
+ }
+ return NULL;
+ }
+ template<typename Range,typename Body_, typename Partitioner>
+ friend class start_reduce;
+ };
+
+ //! Task type use to split the work of parallel_reduce.
+ /** @ingroup algorithms */
+ template<typename Range, typename Body, typename Partitioner=simple_partitioner>
+ class start_reduce: public task {
+ typedef finish_reduce<Body> finish_type;
+ Body* my_body;
+ Range my_range;
+ Partitioner my_partitioner;
+ /*override*/ task* execute();
+ template<typename Body_>
+ friend class finish_reduce;
+ public:
+ start_reduce( const Range& range, Body* body, const Partitioner &partitioner ) :
+ my_body(body),
+ my_range(range),
+ my_partitioner(partitioner)
+ {
+ }
+ };
+
+ template<typename Range, typename Body, typename Partitioner>
+ task* start_reduce<Range,Body,Partitioner>::execute() {
+ Body* body = my_body;
+ if( is_stolen_task() ) {
+ finish_reduce<Body>* p = static_cast<finish_type*>(parent() );
+ body = new( p->zombie_space.begin() ) Body(*body,split());
+ my_body = p->right_zombie = body;
+ }
+ task* next_task = NULL;
+ if ( my_partitioner.should_execute_range(my_range, *this))
+ (*my_body)( my_range );
+ else {
+ finish_reduce<Body>& c = *new( allocate_continuation()) finish_type(body);
+ recycle_as_child_of(c);
+ c.set_ref_count(2);
+ start_reduce& b = *new( c.allocate_child() ) start_reduce(Range(my_range,split()), body, Partitioner(my_partitioner,split()));
+ c.spawn(b);
+ next_task = this;
+ }
+ return next_task;
+ }
+} // namespace internal
+//! @endcond
+
+
+//! Parallel iteration with reduction
+/**
+ * Type Body must have the following signatures: \n
+ * operator()( const Range& r ); \n
+ * Body( Body& b, split ); (be aware that b may have concurrent accesses) \n
+ * void join( Body& ); \n
+ * ~Body
+ * @ingroup algorithms
+ */
+template<typename Range, typename Body>
+void parallel_reduce( const Range& range, Body& body ) {
+ if( !range.empty() ) {
+ typedef typename internal::start_reduce<Range,Body> start_type;
+ start_type& a = *new(task::allocate_root()) start_type(range,&body,simple_partitioner());
+ task::spawn_root_and_wait( a );
+ }
+}
+
+//! Parallel iteration with reduction using a partitioner.
+/**
+ * Type Body must have the following signatures: \n
+ * operator()( const Range& r ); \n
+ * Body( Body& b, split ); (be aware that b may have concurrent accesses) \n
+ * void join( Body& ); \n
+ * ~Body
+ * The partitioner p must define: \n
+ * p.should_execute_range(r,t) True if r should be executed to completion without further splits. \n
+ * P p2(p,split()) Split the partitioner into p2 and p. \n
+ * @ingroup algorithms
+ */
+template<typename Range, typename Body, typename Partitioner>
+void parallel_reduce( const Range& range, Body& body, const Partitioner &partitioner ) {
+ if( !range.empty() ) {
+ typedef typename internal::start_reduce<Range,Body,Partitioner> start_type;
+ start_type& a = *new(task::allocate_root()) start_type(range,&body,partitioner);
+ task::spawn_root_and_wait( a );
+ }
+}
+
+
+} // namespace tbb
+
+#endif /* __TBB_parallel_reduce_H */
+
diff --git a/include/tbb/parallel_scan.h b/include/tbb/parallel_scan.h
new file mode 100644
index 0000000..ff0749e
--- /dev/null
+++ b/include/tbb/parallel_scan.h
@@ -0,0 +1,340 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_parallel_scan_H
+#define __TBB_parallel_scan_H
+
+#include "task.h"
+#include "aligned_space.h"
+#include <new>
+#include "partitioner.h"
+
+namespace tbb {
+
+//! Used to indicate that the initial scan is being performed.
+/** @ingroup algorithms */
+struct pre_scan_tag {
+ static bool is_final_scan() {return false;}
+};
+
+//! Used to indicate that the final scan is being performed.
+/** @ingroup algorithms */
+struct final_scan_tag {
+ static bool is_final_scan() {return true;}
+};
+
+//! @cond INTERNAL
+namespace internal {
+
+ //! Performs final scan for a leaf
+ /** @ingroup algorithms */
+ template<typename Range, typename Body>
+ class final_sum: public task {
+ public:
+ Body body;
+ private:
+ aligned_space<Range,1> range;
+ //! Where to put result of last subrange, or NULL if not last subrange.
+ Body* stuff_last;
+ public:
+ final_sum( Body& body_ ) :
+ body(body_,split())
+ {
+ poison_pointer(stuff_last);
+ }
+ ~final_sum() {
+ range.begin()->~Range();
+ }
+ void finish_construction( const Range& range_, Body* stuff_last_ ) {
+ new( range.begin() ) Range(range_);
+ stuff_last = stuff_last_;
+ }
+ private:
+ /*override*/ task* execute() {
+ body( *range.begin(), final_scan_tag() );
+ if( stuff_last )
+ stuff_last->assign(body);
+ return NULL;
+ }
+ };
+
+ //! Split work to be done in the scan.
+ /** @ingroup algorithms */
+ template<typename Range, typename Body>
+ class sum_node: public task {
+ typedef final_sum<Range,Body> final_sum_type;
+ public:
+ final_sum_type *incoming;
+ final_sum_type *body;
+ Body *stuff_last;
+ private:
+ final_sum_type *left_sum;
+ sum_node *left;
+ sum_node *right;
+ bool left_is_final;
+ Range range;
+ sum_node( const Range range_, bool left_is_final_ ) :
+ left_sum(NULL),
+ left(NULL),
+ right(NULL),
+ left_is_final(left_is_final_),
+ range(range_)
+ {
+ // Poison fields that will be set by second pass.
+ poison_pointer(body);
+ poison_pointer(incoming);
+ }
+ task* create_child( const Range& range, final_sum_type& f, sum_node* n, final_sum_type* incoming, Body* stuff_last ) {
+ if( !n ) {
+ f.recycle_as_child_of( *this );
+ f.finish_construction( range, stuff_last );
+ return &f;
+ } else {
+ n->body = &f;
+ n->incoming = incoming;
+ n->stuff_last = stuff_last;
+ return n;
+ }
+ }
+ /*override*/ task* execute() {
+ if( body ) {
+ if( incoming )
+ left_sum->body.reverse_join( incoming->body );
+ recycle_as_continuation();
+ sum_node& c = *this;
+ task* b = c.create_child(Range(range,split()),*left_sum,right,left_sum,stuff_last);
+ task* a = left_is_final ? NULL : c.create_child(range,*body,left,incoming,NULL);
+ set_ref_count( (a!=NULL)+(b!=NULL) );
+ body = NULL;
+ if( a ) spawn(*b);
+ else a = b;
+ return a;
+ } else {
+ return NULL;
+ }
+ }
+ template<typename Range_,typename Body_,typename Partitioner_>
+ friend class start_scan;
+
+ template<typename Range_,typename Body_>
+ friend class finish_scan;
+ };
+
+ //! Combine partial results
+ /** @ingroup algorithms */
+ template<typename Range, typename Body>
+ class finish_scan: public task {
+ typedef sum_node<Range,Body> sum_node_type;
+ typedef final_sum<Range,Body> final_sum_type;
+ final_sum_type** const sum;
+ sum_node_type*& return_slot;
+ public:
+ final_sum_type* right_zombie;
+ sum_node_type& result;
+
+ /*override*/ task* execute() {
+ __TBB_ASSERT( result.ref_count()==(result.left!=NULL)+(result.right!=NULL), NULL );
+ if( result.left )
+ result.left_is_final = false;
+ if( right_zombie && sum )
+ ((*sum)->body).reverse_join(result.left_sum->body);
+ __TBB_ASSERT( !return_slot, NULL );
+ if( right_zombie || result.right ) {
+ return_slot = &result;
+ } else {
+ destroy( result );
+ }
+ if( right_zombie && !sum && !result.right ) destroy(*right_zombie);
+ return NULL;
+ }
+
+ finish_scan( sum_node_type*& return_slot_, final_sum_type** sum_, sum_node_type& result_ ) :
+ sum(sum_),
+ return_slot(return_slot_),
+ right_zombie(NULL),
+ result(result_)
+ {
+ __TBB_ASSERT( !return_slot, NULL );
+ }
+ };
+
+ //! Initial task to split the work
+ /** @ingroup algorithms */
+ template<typename Range, typename Body, typename Partitioner=simple_partitioner>
+ class start_scan: public task {
+ typedef sum_node<Range,Body> sum_node_type;
+ typedef final_sum<Range,Body> final_sum_type;
+ final_sum_type* body;
+ /** Non-null if caller is requesting total. */
+ final_sum_type** sum;
+ sum_node_type** return_slot;
+ /** Null if computing root. */
+ sum_node_type* parent_sum;
+ bool is_final;
+ bool is_right_child;
+ Range range;
+ Partitioner partitioner;
+ /*override*/ task* execute();
+ public:
+ start_scan(
+ sum_node_type*& return_slot_, const Range& range_, final_sum_type& body_, const Partitioner& partitioner_,
+ final_sum_type**sum_, bool is_final_, sum_node_type* parent_sum_
+ ) :
+ body(&body_),
+ sum(sum_),
+ return_slot(&return_slot_),
+ parent_sum(parent_sum_),
+ is_final(is_final_),
+ is_right_child(false),
+ range(range_),
+ partitioner(partitioner_)
+ {
+ __TBB_ASSERT( !*return_slot, NULL );
+ }
+ };
+
+ template<typename Range, typename Body, typename Partitioner>
+ task* start_scan<Range,Body,Partitioner>::execute() {
+ typedef internal::finish_scan<Range,Body> finish_pass1_type;
+ finish_pass1_type* p = parent_sum ? static_cast<finish_pass1_type*>( parent() ) : NULL;
+ // Inspecting p->result.left_sum would ordinarily be a race condition.
+ // But we inspect it only if we are not a stolen task, in which case we
+ // know that task assigning to p->result.left_sum has completed.
+ bool treat_as_stolen = is_right_child && (is_stolen_task() || body!=p->result.left_sum);
+ if( treat_as_stolen ) {
+ // Invocation is for right child that has been really stolen or needs to be virtually stolen
+ p->right_zombie = body = new( allocate_root() ) final_sum_type(body->body);
+ is_final = false;
+ }
+ task* next_task = NULL;
+ if( is_right_child && !treat_as_stolen || partitioner.should_execute_range(range, *this) ) {
+ if( is_final )
+ (body->body)( range, final_scan_tag() );
+ else if( sum )
+ (body->body)( range, pre_scan_tag() );
+ if( sum )
+ *sum = body;
+ __TBB_ASSERT( !*return_slot, NULL );
+ } else {
+ sum_node_type* result;
+ if( parent_sum )
+ result = new(allocate_additional_child_of(*parent_sum)) sum_node_type(range,/*left_is_final=*/is_final);
+ else
+ result = new(task::allocate_root()) sum_node_type(range,/*left_is_final=*/is_final);
+ finish_pass1_type& c = *new( allocate_continuation()) finish_pass1_type(*return_slot,sum,*result);
+ // Split off right child
+ start_scan& b = *new( c.allocate_child() ) start_scan(
+ /*return_slot=*/result->right,
+ /*range=*/Range(range,split()),
+ /*body=*/ *body,
+ /*partitioner=*/ Partitioner(partitioner,split()),
+ sum,
+ is_final,
+ result);
+ b.is_right_child = true;
+ // Left child is recycling of *this. Must recycle this before spawning b,
+ // otherwise b might complete and decrement c.ref_count() to zero, which
+ // would cause c.execute() to run prematurely.
+ recycle_as_child_of(c);
+ c.set_ref_count(2);
+ c.spawn(b);
+ sum = &result->left_sum;
+ return_slot = &result->left;
+ is_right_child = false;
+ next_task = this;
+ parent_sum = result;
+ __TBB_ASSERT( !*return_slot, NULL );
+ }
+ return next_task;
+ }
+} // namespace internal
+//! @endcond
+
+//! Parallel prefix
+/**
+ * Type Body must have the following signatures: \n
+ * void operator( const Range& r, pre_scan_tag ); \n
+ * void operator( const Range& r, final_scan_tag ); \n
+ * Body( const Body& b, split ); (be aware that b may have concurrent accesses) \n
+ * void reverse_join( const Body& ); \n
+ * void assign( const Body& ); \n
+ * ~Body \n
+ * The partitioner p must define: \n
+ * p.should_execute_range(r,t) True if r should be executed to completion without further splits. \n
+ * P p2(p,split()) Split the partitioner into p2 and p. \n
+ * @ingroup algorithms
+ */
+template<typename Range, typename Body, typename Partitioner>
+void parallel_scan( const Range& range, Body& body, const Partitioner& partitioner ) {
+ if( !range.empty() ) {
+ typedef internal::start_scan<Range,Body,Partitioner> start_pass1_type;
+ internal::sum_node<Range,Body>* root = NULL;
+ typedef internal::final_sum<Range,Body> final_sum_type;
+ final_sum_type* temp_body = new(task::allocate_root()) final_sum_type( body );
+ start_pass1_type& pass1 = *new(task::allocate_root()) start_pass1_type(
+ /*return_slot=*/root,
+ range,
+ *temp_body,
+ partitioner,
+ /*sum=*/NULL,
+ /*is_final=*/true,
+ /*parent_sum=*/NULL);
+ task::spawn_root_and_wait( pass1 );
+ if( root ) {
+ root->body = temp_body;
+ root->incoming = NULL;
+ root->stuff_last = &body;
+ task::spawn_root_and_wait( *root );
+ } else {
+ body.assign(temp_body->body);
+ temp_body->finish_construction( range, NULL );
+ temp_body->destroy(*temp_body);
+ }
+ }
+}
+
+//! Parallel prefix with default partitioner
+/**
+ * Type Body must have the following signatures: \n
+ * void operator( const Range& r, pre_scan_tag ); \n
+ * void operator( const Range& r, final_scan_tag ); \n
+ * Body( const Body& b, split ); (be aware that b may have concurrent accesses) \n
+ * void reverse_join( const Body& ); \n
+ * void assign( const Body& ); \n
+ * ~Body
+ * @ingroup algorithms
+ */
+template<typename Range, typename Body>
+inline void parallel_scan( const Range& range, Body& body ) {
+ parallel_scan( range, body, simple_partitioner() );
+}
+
+} // namespace tbb
+
+#endif /* __TBB_parallel_scan_H */
+
diff --git a/include/tbb/parallel_sort.h b/include/tbb/parallel_sort.h
new file mode 100644
index 0000000..bb3dfa7
--- /dev/null
+++ b/include/tbb/parallel_sort.h
@@ -0,0 +1,154 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_parallel_sort_H
+#define __TBB_parallel_sort_H
+
+#include "parallel_for.h"
+#include <algorithm>
+#include <iterator>
+#include <functional>
+
+namespace tbb {
+
+//! @cond INTERNAL
+namespace internal {
+
+//! Range used in quicksort to split elements into subranges based on a value.
+/** The split operation selects a splitter and places all elements less than or equal to the value in the first range and the remaining elements in the second range.
+ @ingroup algorithms */
+template<typename RandomAccessIterator, typename Compare>
+struct quick_sort_range {
+ static const size_t grainsize = 500;
+ const Compare ∁
+ RandomAccessIterator begin;
+ size_t size;
+
+ quick_sort_range( RandomAccessIterator begin_, size_t size_, const Compare &comp_ ) :
+ comp(comp_), begin(begin_), size(size_) {}
+
+ bool empty() const {return size==0;}
+ bool is_divisible() const {return size>=grainsize;}
+
+ quick_sort_range( quick_sort_range& range, split ) : comp(range.comp) {
+ RandomAccessIterator array = range.begin;
+ RandomAccessIterator key0 = range.begin;
+ size_t m = range.size/2u;
+ std::swap ( array[0], array[m] );
+
+ size_t i=0;
+ size_t j=range.size;
+ // Partition interval [i+1,j-1] with key *key0.
+ for(;;) {
+ __TBB_ASSERT( i<j, NULL );
+ // Loop must terminate since array[l]==*key0.
+ do {
+ --j;
+ __TBB_ASSERT( i<=j, "bad ordering relation?" );
+ } while( comp( *key0, array[j] ));
+ do {
+ __TBB_ASSERT( i<=j, NULL );
+ if( i==j ) goto partition;
+ ++i;
+ } while( comp( array[i],*key0 ));
+ if( i==j ) goto partition;
+ std::swap( array[i], array[j] );
+ }
+partition:
+ // Put the partition key were it belongs
+ std::swap( array[j], *key0 );
+ // array[l..j) is less or equal to key.
+ // array(j..r) is greater or equal to key.
+ // array[j] is equal to key
+ i=j+1;
+ begin = array+i;
+ size = range.size-i;
+ range.size = j;
+ }
+};
+
+//! Body class used to sort elements in a range that is smaller than the grainsize.
+/** @ingroup algorithms */
+template<typename RandomAccessIterator, typename Compare>
+struct quick_sort_body {
+ void operator()( const quick_sort_range<RandomAccessIterator,Compare>& range ) const {
+ //SerialQuickSort( range.begin, range.size, range.comp );
+ std::sort( range.begin, range.begin + range.size, range.comp );
+ }
+};
+
+//! Wrapper method to initiate the sort by calling parallel_for.
+/** @ingroup algorithms */
+template<typename RandomAccessIterator, typename Compare>
+void parallel_quick_sort( RandomAccessIterator begin, RandomAccessIterator end, const Compare& comp ) {
+ parallel_for( quick_sort_range<RandomAccessIterator,Compare>(begin, end-begin, comp ), quick_sort_body<RandomAccessIterator,Compare>() );
+}
+
+} // namespace internal
+//! @endcond
+
+//! Sorts the data in [begin,end) using the given comparator
+/*! The compare function object is used for all comparisons between elements during sorting.
+ The compare object must define a bool operator() function.
+ @ingroup algorithms
+*/
+template<typename RandomAccessIterator, typename Compare>
+void parallel_sort( RandomAccessIterator begin, RandomAccessIterator end, const Compare& comp) {
+ const int min_parallel_size = 500;
+ if( end > begin ) {
+ if (end - begin < min_parallel_size) {
+ std::sort(begin, end, comp);
+ } else {
+ internal::parallel_quick_sort(begin, end, comp);
+ }
+ }
+}
+
+//! Sorts the data in [begin,end) with a default comparator
+/*! The std::less<RandomAccessIterator> class is used for all comparisons during sorting.
+ @ingroup algorithms
+*/
+template<typename RandomAccessIterator>
+inline void parallel_sort( RandomAccessIterator begin, RandomAccessIterator end ) {
+ parallel_sort( begin, end, std::less< typename std::iterator_traits<RandomAccessIterator>::value_type >() );
+}
+
+//! Sorts the data in [begin,end) with a default comparator
+/*! The std::less<RandomAccessIterator> class is used for all comparisons during sorting.
+ @ingroup algorithms
+*/
+template<typename T>
+inline void parallel_sort( T * begin, T * end ) {
+ parallel_sort( begin, end, std::less< T >() );
+}
+
+
+} // namespace tbb
+
+#endif
+
diff --git a/include/tbb/parallel_while.h b/include/tbb/parallel_while.h
new file mode 100644
index 0000000..879223e
--- /dev/null
+++ b/include/tbb/parallel_while.h
@@ -0,0 +1,197 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_parallel_while
+#define __TBB_parallel_while
+
+#include "task.h"
+#include <new>
+
+namespace tbb {
+
+template<typename Body>
+class parallel_while;
+
+//! @cond INTERNAL
+namespace internal {
+
+ template<typename Stream, typename Body> class while_task;
+
+ //! For internal use only.
+ /** Executes one iteration of a while.
+ @ingroup algorithms */
+ template<typename Body>
+ class while_iteration_task: public task {
+ const Body& my_body;
+ typename Body::argument_type my_value;
+ /*override*/ task* execute() {
+ my_body(my_value);
+ return NULL;
+ }
+ while_iteration_task( const typename Body::argument_type& value, const Body& body ) :
+ my_body(body), my_value(value)
+ {}
+ template<typename Body_> friend class while_group_task;
+ friend class tbb::parallel_while<Body>;
+ };
+
+ //! For internal use only
+ /** Unpacks a block of iterations.
+ @ingroup algorithms */
+ template<typename Body>
+ class while_group_task: public task {
+ static const size_t max_arg_size = 4;
+ const Body& my_body;
+ size_t size;
+ typename Body::argument_type my_arg[max_arg_size];
+ while_group_task( const Body& body ) : my_body(body), size(0) {}
+ /*override*/ task* execute() {
+ typedef while_iteration_task<Body> iteration_type;
+ __TBB_ASSERT( size>0, NULL );
+ task_list list;
+ task* t;
+ size_t k=0;
+ for(;;) {
+ t = new( allocate_child() ) iteration_type(my_arg[k],my_body);
+ if( ++k==size ) break;
+ list.push_back(*t);
+ }
+ set_ref_count(int(k+1));
+ spawn(list);
+ spawn_and_wait_for_all(*t);
+ return NULL;
+ }
+ template<typename Stream, typename Body_> friend class while_task;
+ };
+
+ //! For internal use only.
+ /** Gets block of iterations from a stream and packages them into a while_group_task.
+ @ingroup algorithms */
+ template<typename Stream, typename Body>
+ class while_task: public task {
+ Stream& my_stream;
+ const Body& my_body;
+ empty_task& my_barrier;
+ /*override*/ task* execute() {
+ typedef while_group_task<Body> block_type;
+ block_type& t = *new( allocate_additional_child_of(my_barrier) ) block_type(my_body);
+ size_t k=0;
+ while( my_stream.pop_if_present(t.my_arg[k]) ) {
+ if( ++k==block_type::max_arg_size ) {
+ // There might be more iterations.
+ recycle_to_reexecute();
+ break;
+ }
+ }
+ if( k==0 ) {
+ destroy(t);
+ return NULL;
+ } else {
+ t.size = k;
+ return &t;
+ }
+ }
+ while_task( Stream& stream, const Body& body, empty_task& barrier ) :
+ my_stream(stream),
+ my_body(body),
+ my_barrier(barrier)
+ {}
+ friend class tbb::parallel_while<Body>;
+ };
+
+} // namespace internal
+//! @endcond
+
+//! Parallel iteration over a stream, with optional addition of more work.
+/** The Body b has the requirement: \n
+ "b(v)" \n
+ "b.argument_type" \n
+ where v is an argument_type
+ @ingroup algorithms */
+template<typename Body>
+class parallel_while: internal::no_copy {
+public:
+ //! Construct empty non-running parallel while.
+ parallel_while() : my_body(NULL), my_barrier(NULL) {}
+
+ //! Destructor cleans up data members before returning.
+ ~parallel_while() {
+ if( my_barrier ) {
+ my_barrier->destroy(*my_barrier);
+ my_barrier = NULL;
+ }
+ }
+
+ //! Type of items
+ typedef typename Body::argument_type value_type;
+
+ //! Apply body.apply to each item in the stream.
+ /** A Stream s has the requirements \n
+ "S::value_type" \n
+ "s.pop_if_present(value) is convertible to bool */
+ template<typename Stream>
+ void run( Stream& stream, const Body& body );
+
+
+ //! Add a work item while running.
+ /** Should be executed only by body.apply or a thread spawned therefrom. */
+ void add( const value_type& item );
+
+private:
+ const Body* my_body;
+ empty_task* my_barrier;
+};
+
+template<typename Body>
+template<typename Stream>
+void parallel_while<Body>::run( Stream& stream, const Body& body ) {
+ using namespace internal;
+ empty_task& barrier = *new( task::allocate_root() ) empty_task();
+ my_body = &body;
+ my_barrier = &barrier;
+ my_barrier->set_ref_count(2);
+
+ while_task<Stream,Body>& w = *new( my_barrier->allocate_child() ) while_task<Stream,Body>( stream, body, barrier );
+ my_barrier->spawn_and_wait_for_all(w);
+ my_barrier->destroy(*my_barrier);
+ my_barrier = NULL;
+ my_body = NULL;
+}
+
+
+template<typename Body>
+void parallel_while<Body>::add( const value_type& item ) {
+ __TBB_ASSERT(my_barrier,"attempt to add to parallel_while that is not running");
+ typedef internal::while_iteration_task<Body> iteration_type;
+ iteration_type& i = *new( task::self().allocate_additional_child_of(*my_barrier) ) iteration_type(item,*my_body);
+ task::self().spawn( i );
+}
+
+} // namespace
+
+#endif /* __TBB_parallel_while */
diff --git a/include/tbb/partitioner.h b/include/tbb/partitioner.h
new file mode 100644
index 0000000..e79e1db
--- /dev/null
+++ b/include/tbb/partitioner.h
@@ -0,0 +1,80 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_partitioner_H
+#define __TBB_partitioner_H
+
+#include "task.h"
+
+namespace tbb {
+
+namespace internal {
+size_t get_initial_auto_partitioner_divisor();
+}
+
+//! A simple partitioner
+/** Divides the range until the range is not divisible.
+ @ingroup algorithms */
+class simple_partitioner {
+public:
+ simple_partitioner() {}
+ simple_partitioner(simple_partitioner &partitioner, split) {}
+
+ template <typename Range>
+ inline bool should_execute_range(const Range &r, const task &t) {
+ return !r.is_divisible();
+ }
+};
+
+//! An auto partitioner
+/** The range is initial divided into several large chunks.
+ Chunks are further subdivided into VICTIM_CHUNKS pieces if they are stolen and divisible.
+ @ingroup algorithms */
+class auto_partitioner {
+ size_t num_chunks;
+ static const size_t VICTIM_CHUNKS = 4;
+
+public:
+ auto_partitioner() : num_chunks(internal::get_initial_auto_partitioner_divisor()) {
+ }
+
+ auto_partitioner(auto_partitioner &partitioner, split) : num_chunks(partitioner.num_chunks/2) {
+ partitioner.num_chunks /= 2;
+ }
+
+ template <typename Range>
+ inline bool should_execute_range(const Range &r, const task &t) {
+ if (t.is_stolen_task() && num_chunks < VICTIM_CHUNKS)
+ num_chunks = VICTIM_CHUNKS;
+ return !r.is_divisible() || num_chunks == 1;
+ }
+};
+
+}
+
+#endif
diff --git a/include/tbb/pipeline.h b/include/tbb/pipeline.h
new file mode 100644
index 0000000..fdff3aa
--- /dev/null
+++ b/include/tbb/pipeline.h
@@ -0,0 +1,136 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_pipeline_H
+#define __TBB_pipeline_H
+
+#include "task.h"
+#include "spin_mutex.h"
+#include <cstddef>
+
+namespace tbb {
+
+class pipeline;
+class filter;
+
+//! @cond INTERNAL
+namespace internal {
+
+typedef unsigned long Token;
+class stage_task;
+class ordered_buffer;
+
+} // namespace internal
+//! @endcond
+
+//! A stage in a pipeline.
+/** @ingroup algorithms */
+class filter {
+private:
+ //! Value used to mark "not in pipeline"
+ static filter* not_in_pipeline() {return reinterpret_cast<filter*>(internal::intptr(-1));}
+protected:
+ filter( bool is_serial_ ) :
+ next_filter_in_pipeline(not_in_pipeline()),
+ input_buffer(NULL),
+ my_is_serial(is_serial_)
+ {}
+public:
+ //! True if filter must receive stream in order.
+ bool is_serial() const {return my_is_serial;}
+
+ //! Operate on an item from the input stream, and return item for output stream.
+ /** Returns NULL if filter is a sink. */
+ virtual void* operator()( void* item ) = 0;
+
+ //! Destroy filter.
+ /** If the filter was added to a pipeline, the pipeline must be destroyed first. */
+ virtual ~filter();
+
+private:
+ //! Pointer to next filter in the pipeline.
+ filter* next_filter_in_pipeline;
+
+ //! Input buffer for filter that requires serial input; NULL otherwise. */
+ internal::ordered_buffer* input_buffer;
+
+ friend class internal::stage_task;
+ friend class pipeline;
+
+ //! Internal storage for is_serial()
+ bool my_is_serial;
+};
+
+//! A processing pipeling that applies filters to items.
+/** @ingroup algorithms */
+class pipeline {
+public:
+ //! Construct empty pipeline.
+ pipeline();
+
+ //! Destroy pipeline.
+ virtual ~pipeline();
+
+ //! Add filter to end of pipeline.
+ void add_filter( filter& filter );
+
+ //! Run the pipeline to completion.
+ void run( size_t max_number_of_live_tokens );
+
+ //! Remove all filters from the pipeline
+ void clear();
+
+private:
+ friend class internal::stage_task;
+
+ //! Pointer to first filter in the pipeline.
+ filter* filter_list;
+
+ //! Pointer to location where address of next filter to be added should be stored.
+ filter** filter_end;
+
+ //! task who's reference count is used to determine when all stages are done.
+ empty_task* end_counter;
+
+ //! Mutex protecting token_counter and end_of_input.
+ spin_mutex input_mutex;
+
+ //! Number of tokens created so far.
+ internal::Token token_counter;
+
+ //! False until fetch_input returns NULL.
+ bool end_of_input;
+
+ //! Attempt to fetch a new input item and put it in the pipeline.
+ /** "self" is used only for sake of providing the contextual "this" for task::allocate_child_of. */
+ void inject_token( task& self );
+};
+
+} // tbb
+
+#endif /* __TBB_pipeline_H */
diff --git a/include/tbb/queuing_mutex.h b/include/tbb/queuing_mutex.h
new file mode 100644
index 0000000..41c013a
--- /dev/null
+++ b/include/tbb/queuing_mutex.h
@@ -0,0 +1,106 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_queuing_mutex_H
+#define __TBB_queuing_mutex_H
+
+#include <cstring>
+#include "atomic.h"
+
+namespace tbb {
+
+//! Queuing lock with local-only spinning.
+/** @ingroup synchronization */
+class queuing_mutex {
+public:
+ //! Construct unacquired mutex.
+ queuing_mutex() {
+ q_tail = NULL;
+ };
+
+ //! The scoped locking pattern
+ /** It helps to avoid the common problem of forgetting to release lock.
+ It also nicely provides the "node" for queuing locks. */
+ class scoped_lock : private internal:: no_copy {
+ //! Initialize fields to mean "no lock held".
+ void initialize() {
+ mutex = NULL;
+#if TBB_DO_ASSERT
+ internal::poison_pointer(next);
+#endif /* TBB_DO_ASSERT */
+ }
+ public:
+ //! Construct lock that has not acquired a mutex.
+ /** Equivalent to zero-initialization of *this. */
+ scoped_lock() {initialize();}
+
+ //! Acquire lock on given mutex.
+ /** Upon entry, *this should not be in the "have acquired a mutex" state. */
+ scoped_lock( queuing_mutex& m ) {
+ initialize();
+ acquire(m);
+ }
+
+ //! Release lock (if lock is held).
+ ~scoped_lock() {
+ if( mutex ) release();
+ }
+
+ //! Acquire lock on given mutex.
+ void acquire( queuing_mutex& m );
+
+ //! Acquire lock on given mutex if free (i.e. non-blocking)
+ bool try_acquire( queuing_mutex& m );
+
+ //! Release lock.
+ void release();
+
+ private:
+ //! The pointer to the mutex owned, or NULL if not holding a mutex.
+ queuing_mutex* mutex;
+
+ //! The pointer to the next competitor for a mutex
+ scoped_lock *next;
+
+ //! The local spin-wait variable
+ /** Inverted (0 - blocked, 1 - acquired the mutex) for the sake of
+ zero-initialization. Defining it as an entire word instead of
+ a byte seems to help performance slightly. */
+ internal::uintptr going;
+ };
+
+ friend class scoped_lock;
+private:
+ //! The last competitor requesting the lock
+ atomic<scoped_lock*> q_tail;
+
+};
+
+} // namespace tbb
+
+#endif /* __TBB_queuing_mutex_H */
diff --git a/include/tbb/queuing_rw_mutex.h b/include/tbb/queuing_rw_mutex.h
new file mode 100644
index 0000000..0410aa8
--- /dev/null
+++ b/include/tbb/queuing_rw_mutex.h
@@ -0,0 +1,164 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_queuing_rw_mutex_H
+#define __TBB_queuing_rw_mutex_H
+
+#include <cstring>
+#include "atomic.h"
+
+namespace tbb {
+
+//! Reader-writer lock with local-only spinning.
+/** Adapted from Krieger, Stumm, et al. pseudocode at
+ http://www.eecg.toronto.edu/parallel/pubs_abs.html#Krieger_etal_ICPP93
+ @ingroup synchronization */
+class queuing_rw_mutex {
+public:
+ //! Construct unacquired mutex.
+ queuing_rw_mutex() {
+ q_tail = NULL;
+ };
+
+ //! Destructor asserts if the mutex is acquired, i.e. q_tail is non-NULL
+ ~queuing_rw_mutex() {
+#if TBB_DO_ASSERT
+ __TBB_ASSERT( !q_tail, "destruction of an acquired mutex");
+#endif
+ };
+
+ class scoped_lock;
+ friend class scoped_lock;
+
+ //! The scoped locking pattern
+ /** It helps to avoid the common problem of forgetting to release lock.
+ It also nicely provides the "node" for queuing locks. */
+ class scoped_lock : private internal::no_copy {
+ /** Request type constants for scoped_lock::state */
+ enum state_t {
+ STATE_NONE = 0,
+ STATE_WRITER = 1,
+ STATE_READER = 1<<1,
+ STATE_READER_UNBLOCKNEXT = 1<<2,
+ STATE_COMBINED_WAITINGREADER = STATE_READER | STATE_READER_UNBLOCKNEXT,
+ STATE_ACTIVEREADER = 1<<3,
+ STATE_COMBINED_READER = STATE_COMBINED_WAITINGREADER | STATE_ACTIVEREADER,
+ STATE_UPGRADE_REQUESTED = 1<<4,
+ STATE_UPGRADE_WAITING = 1<<5,
+ STATE_UPGRADE_LOSER = 1<<6,
+ STATE_COMBINED_UPGRADING = STATE_UPGRADE_WAITING | STATE_UPGRADE_LOSER
+#if TBB_DO_ASSERT
+ ,STATE_INVALID
+#endif /* TBB_DO_ASSERT */
+ };
+
+ //! Initialize fields
+ void initialize() {
+ mutex = NULL;
+#if TBB_DO_ASSERT
+ state = STATE_INVALID;
+ internal::poison_pointer(next);
+ internal::poison_pointer(prev);
+#endif /* TBB_DO_ASSERT */
+ }
+ public:
+ //! Construct lock that has not acquired a mutex.
+ /** Equivalent to zero-initialization of *this. */
+ scoped_lock() {initialize();}
+
+ //! Acquire lock on given mutex.
+ /** Upon entry, *this should not be in the "have acquired a mutex" state. */
+ scoped_lock( queuing_rw_mutex& m, bool write=true ) {
+ initialize();
+ acquire(m,write);
+ }
+
+ //! Release lock (if lock is held).
+ ~scoped_lock() {
+ if( mutex ) release();
+ }
+
+ //! Acquire lock on given mutex.
+ void acquire( queuing_rw_mutex& m, bool write=true );
+
+ //! Try acquire lock on given mutex.
+ bool try_acquire( queuing_rw_mutex& m, bool write=true );
+
+ //! Release lock.
+ void release();
+
+ //! Upgrade reader to become a writer.
+ /** Returns true if the upgrade happened without re-acquiring the lock and false if opposite */
+ bool upgrade_to_writer();
+
+ //! Downgrade writer to become a reader.
+ bool downgrade_to_reader();
+
+ private:
+ //! The pointer to the current mutex to work
+ queuing_rw_mutex* mutex;
+
+ //! The pointer to the previous and next competitors for a mutex
+ scoped_lock * prev, * next;
+
+ //! State of the request: reader, writer, active reader, other service states
+ atomic<unsigned char> state;
+
+ //! The local spin-wait variable
+ /** Corresponds to "spin" in the pseudocode but inverted for the sake of zero-initialization */
+ unsigned char going;
+
+ //! A tiny internal lock
+ unsigned char internal_lock;
+
+ //! Acquire the internal lock
+ void acquire_internal_lock();
+
+ //! Try to acquire the internal lock
+ /** Returns true if lock was successfully acquired. */
+ bool try_acquire_internal_lock();
+
+ //! Release the internal lock
+ void release_internal_lock();
+
+ //! Wait for internal lock to be released
+ void wait_for_release_of_internal_lock();
+
+ //! A helper function
+ void unblock_or_wait_on_internal_lock( uintptr_t );
+ };
+
+private:
+ //! The last competitor requesting the lock
+ atomic<scoped_lock*> q_tail;
+
+};
+
+} // namespace tbb
+
+#endif /* __TBB_queuing_rw_mutex_H */
diff --git a/include/tbb/scalable_allocator.h b/include/tbb/scalable_allocator.h
new file mode 100644
index 0000000..e022924
--- /dev/null
+++ b/include/tbb/scalable_allocator.h
@@ -0,0 +1,140 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_scalable_allocator_H
+#define __TBB_scalable_allocator_H
+
+#include <stddef.h> // Need ptrdiff_t and size_t from here.
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+//! The "malloc" analogue to allocate block of memory of size bytes.
+/** @ingroup memory_allocation */
+void * scalable_malloc (size_t size);
+
+//! The "free" analogue to discard a previously allocated piece of memory
+/** @ingroup memory_allocation */
+void scalable_free (void* ptr);
+
+//! The "realloc" analogue complementing scalable_malloc
+/** @ingroup memory_allocation */
+void * scalable_realloc (void* ptr, size_t size);
+
+//! The "calloc" analogue complementing scalable_malloc
+/** @ingroup memory_allocation */
+void * scalable_calloc (size_t nobj, size_t size);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif /* __cplusplus */
+
+#ifdef __cplusplus
+
+#include <new> // To use new with the placement argument
+
+namespace tbb {
+
+//! Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5
+/** The members are ordered the same way they are in section 20.4.1
+ of the ISO C++ standard.
+ @ingroup memory_allocation */
+template<typename T>
+class scalable_allocator {
+public:
+ typedef T* pointer;
+ typedef const T* const_pointer;
+ typedef T& reference;
+ typedef const T& const_reference;
+ typedef T value_type;
+ typedef size_t size_type;
+ typedef ptrdiff_t difference_type;
+ template<class U> struct rebind {
+ typedef scalable_allocator<U> other;
+ };
+
+#if _WIN64
+ //! Non-ISO method required by Microsoft's STL containers
+ /** Microsoft's container classes coming with Platform SDK
+ seem to require that allocators supply this method. */
+ void* _Charalloc( size_type size ) {
+ return scalable_malloc( size );
+ }
+#endif /* _WIN64 */
+
+ scalable_allocator() throw() {}
+ scalable_allocator( const scalable_allocator& ) throw() {}
+ template<typename U> scalable_allocator(const scalable_allocator<U>&) throw() {}
+
+ pointer address(reference x) const {return &x;}
+ const_pointer address(const_reference x) const {return &x;}
+
+ //! Allocate space for n objects, starting on a cache/sector line.
+ pointer allocate( size_type n, void* hint=0 ) {
+ return static_cast<pointer>( scalable_malloc( n * sizeof(value_type) ) );
+ }
+
+ //! Free block of memory that starts on a cache line
+ void deallocate( pointer p, size_type ) {
+ scalable_free( p );
+ }
+
+ //! Largest value for which method allocate might succeed.
+ size_type max_size() const throw() {
+ size_type absolutemax = static_cast<size_type>(-1) / sizeof (T);
+ return (absolutemax > 0 ? absolutemax : 1);
+ }
+ void construct( pointer p, const T& val ) { new(static_cast<void*>(p)) T(val); }
+ void destroy( pointer p ) {(static_cast<T*>(p))->~T();}
+};
+
+//! Analogous to std::allocator<void>, as defined in ISO C++ Standard, Section 20.4.1
+/** @ingroup memory_allocation */
+template<>
+class scalable_allocator<void> {
+public:
+ typedef void* pointer;
+ typedef const void* const_pointer;
+ typedef void value_type;
+ template<class U> struct rebind {
+ typedef scalable_allocator<U> other;
+ };
+};
+
+template<typename T, typename U>
+inline bool operator==( const scalable_allocator<T>&, const scalable_allocator<U>& ) {return true;}
+
+template<typename T, typename U>
+inline bool operator!=( const scalable_allocator<T>&, const scalable_allocator<U>& ) {return false;}
+
+} // namespace tbb
+
+#endif /* __cplusplus */
+
+#endif /* __TBB_scalable_allocator_H */
diff --git a/include/tbb/spin_mutex.h b/include/tbb/spin_mutex.h
new file mode 100644
index 0000000..e5208bb
--- /dev/null
+++ b/include/tbb/spin_mutex.h
@@ -0,0 +1,137 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_spin_mutex_H
+#define __TBB_spin_mutex_H
+
+#include <cstddef>
+#include "tbb_stddef.h"
+#include "tbb/tbb_machine.h"
+
+namespace tbb {
+
+//! A lock that occupies a single byte.
+/** A spin_mutex is a spin mutex that fits in a single byte.
+ It should be used only for locking short critical sections
+ (typically <20 instructions) when fairness is not an issue.
+ If zero-initialized, the mutex is considered unheld.
+ @ingroup synchronization */
+class spin_mutex {
+ //! 0 if lock is released, 1 if lock is acquired.
+ volatile unsigned char flag;
+
+public:
+ //! Construct unacquired lock.
+ /** Equivalent to zero-initialization of *this. */
+ spin_mutex() : flag(0) {}
+
+ //! Represents acquisition of a mutex.
+ class scoped_lock : private internal::no_copy {
+ private:
+ //! Points to currently held mutex, or NULL if no lock is held.
+ spin_mutex* my_mutex;
+
+ //! Value to store into spin_mutex::flag to unlock the mutex.
+ internal::uintptr my_unlock_value;
+
+ //! Like acquire, but with ITT instrumentation.
+ void internal_acquire( spin_mutex& m );
+
+ //! Like try_acquire, but with ITT instrumentation.
+ bool internal_try_acquire( spin_mutex& m );
+
+ //! Like release, but with ITT instrumentation.
+ void internal_release();
+
+ public:
+ //! Construct without without acquiring a mutex.
+ scoped_lock() : my_mutex(NULL), my_unlock_value(0) {}
+
+ //! Construct and acquire lock on a mutex.
+ scoped_lock( spin_mutex& m ) {
+#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT
+ my_mutex=NULL;
+ internal_acquire(m);
+#else
+ my_unlock_value = __TBB_LockByte(m.flag);
+ my_mutex=&m;
+#endif /* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT*/
+ }
+
+ //! Acquire lock.
+ void acquire( spin_mutex& m ) {
+#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT
+ internal_acquire(m);
+#else
+ my_unlock_value = __TBB_LockByte(m.flag);
+ my_mutex = &m;
+#endif /* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT*/
+ }
+
+ //! Try acquiring lock (non-blocking)
+ bool try_acquire( spin_mutex& m ) {
+#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT
+ return internal_try_acquire(m);
+#else
+ bool result = __TBB_TryLockByte(m.flag);
+ if( result ) {
+ my_unlock_value = 0;
+ my_mutex = &m;
+ }
+ return result;
+#endif /* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT*/
+ }
+
+ //! Release lock
+ void release() {
+#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT
+ internal_release();
+#else
+ my_mutex->flag = static_cast<unsigned char>(my_unlock_value);
+ my_mutex = NULL;
+#endif /* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT */
+ }
+
+ //! Destroy lock. If holding a lock, releases the lock first.
+ ~scoped_lock() {
+ if( my_mutex ) {
+#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT
+ internal_release();
+#else
+ my_mutex->flag = static_cast<unsigned char>(my_unlock_value);
+#endif /* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT */
+ }
+ }
+ };
+
+ friend class scoped_lock;
+};
+
+} // namespace tbb
+
+#endif /* __TBB_spin_mutex_H */
diff --git a/include/tbb/spin_rw_mutex.h b/include/tbb/spin_rw_mutex.h
new file mode 100644
index 0000000..1af9312
--- /dev/null
+++ b/include/tbb/spin_rw_mutex.h
@@ -0,0 +1,185 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_spin_rw_mutex_H
+#define __TBB_spin_rw_mutex_H
+
+#include "tbb_stddef.h"
+
+namespace tbb {
+
+//! Fast, unfair, spinning reader-writer lock with backoff and writer-preference
+/** @ingroup synchronization */
+class spin_rw_mutex {
+ //! @cond INTERNAL
+
+ //! Present so that 1.0 headers work with 1.1 dynamic library.
+ static void internal_itt_releasing(spin_rw_mutex *);
+
+ //! Internal acquire write lock.
+ static bool internal_acquire_writer(spin_rw_mutex *);
+
+ //! Out of line code for releasing a write lock.
+ /** This code is has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */
+ static void internal_release_writer(spin_rw_mutex *);
+
+ //! Internal acquire read lock.
+ static void internal_acquire_reader(spin_rw_mutex *);
+
+ //! Internal upgrade reader to become a writer.
+ static bool internal_upgrade(spin_rw_mutex *);
+
+ //! Out of line code for downgrading a writer to a reader.
+ /** This code is has debug checking and instrumentation for Intel(R) Thread Checker and Intel(R) Thread Profiler. */
+ static void internal_downgrade(spin_rw_mutex *);
+
+ //! Internal release read lock.
+ static void internal_release_reader(spin_rw_mutex *);
+
+ //! Internal try_acquire write lock.
+ static bool internal_try_acquire_writer(spin_rw_mutex *);
+
+ //! Internal try_acquire read lock.
+ static bool internal_try_acquire_reader(spin_rw_mutex *);
+
+ //! @endcond
+public:
+ //! Construct unacquired mutex.
+ spin_rw_mutex() : state(0) {}
+
+#if TBB_DO_ASSERT
+ //! Destructor asserts if the mutex is acquired, i.e. state is zero.
+ ~spin_rw_mutex() {
+ __TBB_ASSERT( !state, "destruction of an acquired mutex");
+ };
+#endif /* TBB_DO_ASSERT */
+
+ //! The scoped locking pattern
+ /** It helps to avoid the common problem of forgetting to release lock.
+ It also nicely provides the "node" for queuing locks. */
+ class scoped_lock : private internal::no_copy {
+ public:
+ //! Construct lock that has not acquired a mutex.
+ /** Equivalent to zero-initialization of *this. */
+ scoped_lock() : mutex(NULL) {}
+
+ //! Acquire lock on given mutex.
+ /** Upon entry, *this should not be in the "have acquired a mutex" state. */
+ scoped_lock( spin_rw_mutex& m, bool write = true ) : mutex(NULL) {
+ acquire(m, write);
+ }
+
+ //! Release lock (if lock is held).
+ ~scoped_lock() {
+ if( mutex ) release();
+ }
+
+ //! Acquire lock on given mutex.
+ void acquire( spin_rw_mutex& m, bool write = true ) {
+ __TBB_ASSERT( !mutex, "holding mutex already" );
+ is_writer = write;
+ mutex = &m;
+ if( write ) internal_acquire_writer(mutex);
+ else internal_acquire_reader(mutex);
+ }
+
+ //! Upgrade reader to become a writer.
+ /** Returns true if the upgrade happened without re-acquiring the lock and false if opposite */
+ bool upgrade_to_writer() {
+ __TBB_ASSERT( mutex, "lock is not acquired" );
+ __TBB_ASSERT( !is_writer, "not a reader" );
+ is_writer = true;
+ return internal_upgrade(mutex);
+ }
+
+ //! Release lock.
+ void release() {
+ __TBB_ASSERT( mutex, "lock is not acquired" );
+ spin_rw_mutex *m = mutex;
+ mutex = NULL;
+ if( is_writer ) {
+#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT
+ internal_release_writer(m);
+#else
+ m->state = 0;
+#endif /* TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT */
+ } else {
+ internal_release_reader(m);
+ }
+ };
+
+ //! Downgrade writer to become a reader.
+ bool downgrade_to_reader() {
+#if TBB_DO_THREADING_TOOLS||TBB_DO_ASSERT
+ __TBB_ASSERT( mutex, "lock is not acquired" );
+ __TBB_ASSERT( is_writer, "not a writer" );
+ internal_downgrade(mutex);
+#else
+ mutex->state = 4; // Bit 2 - reader, 00..00100
+#endif
+ is_writer = false;
+
+ return true;
+ }
+
+ //! Try acquire lock on given mutex.
+ bool try_acquire( spin_rw_mutex& m, bool write = true ) {
+ __TBB_ASSERT( !mutex, "holding mutex already" );
+ bool result;
+ is_writer = write;
+ result = write? internal_try_acquire_writer(&m)
+ : internal_try_acquire_reader(&m);
+ if( result ) mutex = &m;
+ return result;
+ }
+
+ private:
+ //! The pointer to the current mutex that is held, or NULL if no mutex is held.
+ spin_rw_mutex* mutex;
+
+ //! True if holding a writer lock, false if holding a reader lock.
+ /** Not defined if not holding a lock. */
+ bool is_writer;
+ };
+
+private:
+ typedef internal::uintptr state_t;
+ static const state_t WRITER = 1;
+ static const state_t WRITER_PENDING = 2;
+ static const state_t READERS = ~(WRITER | WRITER_PENDING);
+ static const state_t ONE_READER = 4;
+ static const state_t BUSY = WRITER | READERS;
+ /** Bit 0 = writer is holding lock
+ Bit 1 = request by a writer to acquire lock (hint to readers to wait)
+ Bit 2..N = number of readers holding lock */
+ volatile state_t state;
+};
+
+} // namespace ThreadingBuildingBlocks
+
+#endif /* __TBB_spin_rw_mutex_H */
diff --git a/include/tbb/task.h b/include/tbb/task.h
new file mode 100644
index 0000000..42c131c
--- /dev/null
+++ b/include/tbb/task.h
@@ -0,0 +1,492 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_task_H
+#define __TBB_task_H
+
+#include "tbb_stddef.h"
+
+namespace tbb {
+
+class task;
+class task_list;
+
+//! @cond INTERNAL
+namespace internal {
+
+ class scheduler {
+ public:
+ //! For internal use only
+ virtual void spawn( task& first, task*& next ) = 0;
+
+ //! For internal use only
+ virtual void wait_for_all( task& parent, task* child ) = 0;
+
+ //! For internal use only
+ virtual void spawn_root_and_wait( task& first, task*& next ) = 0;
+
+ //! Pure virtual destructor;
+ // Have to have it just to shut up overzealous compilation warnings
+ virtual ~scheduler() = 0;
+ };
+
+ typedef intptr reference_count;
+
+ class allocate_root_proxy {
+ public:
+ static task& allocate( size_t size );
+ static void free( task& );
+ };
+
+ class allocate_continuation_proxy {
+ public:
+ task& allocate( size_t size ) const;
+ void free( task& ) const;
+ };
+
+ class allocate_child_proxy {
+ public:
+ task& allocate( size_t size ) const;
+ void free( task& ) const;
+ };
+
+ class allocate_additional_child_of_proxy {
+ task& self;
+ task& parent;
+ public:
+ allocate_additional_child_of_proxy( task& self_, task& parent_ ) : self(self_), parent(parent_) {}
+ task& allocate( size_t size ) const;
+ void free( task& ) const;
+ };
+
+
+ //! Memory prefix to a task object.
+ /** This class is internal to the library.
+ Do not reference it directly, except within the library itself.
+ @ingroup task_scheduling */
+ class task_prefix {
+ private:
+ friend class tbb::task;
+ friend class tbb::task_list;
+ friend class internal::scheduler;
+ friend class internal::allocate_root_proxy;
+ friend class internal::allocate_child_proxy;
+ friend class internal::allocate_continuation_proxy;
+ friend class internal::allocate_additional_child_of_proxy;
+
+ //! The scheduler that allocated the task, or NULL if task is big.
+ /** Small tasks are pooled by the scheduler that allocated the task.
+ If a scheduler needs to free a small task allocated by another scheduler,
+ it returns the task to that other scheduler. This policy avoids
+ memory space blowup issues for memory allocators that allocate from
+ thread-specific pools. */
+ scheduler* origin;
+
+ //! scheduler that owns the task.
+ scheduler* owner;
+
+ //! task whose reference count includes me.
+ /** In the "blocking style" of programming, this field points to the parent task.
+ In the "continuation-passing style" of programming, this field points to the
+ continuation of the parent. */
+ tbb::task* parent;
+
+ //! Reference count used for synchronization.
+ /** In the "continuation-passing style" of programming, this field is
+ the difference of the number of allocated children minus the
+ number of children that have completed.
+ In the "blocking style" of programming, this field is one more than the difference. */
+ reference_count ref_count;
+
+ //! Scheduling depth
+ int depth;
+
+ //! A task::state_type, stored as a byte for compactness.
+ unsigned char state;
+
+ //! If non-zero, this task is a "big" task.
+ unsigned char is_big;
+
+#if TBB_DO_ASSERT
+ //! Used for internal debugging.
+ /** Zero if production version of library is linked. */
+ unsigned char debug_state;
+#else
+ //! Reserved for internal use
+ unsigned char reserved0;
+#endif /* TBB_DO_ASSERT */
+
+ //! Reserved for future use
+ unsigned char reserved1;
+
+ //! "next" field for list of task
+ /** Assembly coded routine Gettask presumes this field is the last field
+ in the prefix. */
+ tbb::task* next;
+
+ //! task corresponding to this task_prefix.
+ tbb::task& task() {return *reinterpret_cast<tbb::task*>(this+1);}
+ };
+
+} // namespace internal
+//! @endcond
+
+
+//! Base class for user-defined tasks.
+/** @ingroup task_scheduling */
+class task: internal::no_copy {
+ //! Set reference count
+ void internal_set_ref_count( int count );
+
+protected:
+ //! Default constructor.
+ task() {}
+
+public:
+ //! Destructor.
+ virtual ~task() {}
+
+ //! Should be overriden by derived classes.
+ virtual task* execute() = 0;
+
+ //! Enumeration of task states that the scheduler considers.
+ enum state_type {
+ //! task is running, and will be destroyed after method execute() completes.
+ executing,
+ //! task to be rescheduled.
+ reexecute,
+ //! task is in ready pool, or is going to be put there, or was just taken off.
+ ready,
+ //! task object is freshly allocated or recycled.
+ allocated,
+ //! task object is on free list, or is going to be put there, or was just taken off.
+ freed,
+ //! task to be recycled as continuation
+ recycle
+ };
+
+ //------------------------------------------------------------------------
+ // Allocating tasks
+ //------------------------------------------------------------------------
+
+ //! Returns proxy for overloaded new that allocates a root task.
+ static internal::allocate_root_proxy allocate_root() {
+ return internal::allocate_root_proxy();
+ }
+
+ //! Returns proxy for overloaded new that allocates a continuation task of *this.
+ /** The continuation's parent becomes the parent of *this. */
+ internal::allocate_continuation_proxy& allocate_continuation() {
+ return *reinterpret_cast<internal::allocate_continuation_proxy*>(this);
+ }
+
+ //! Returns proxy for overloaded new that allocates a child task of *this.
+ internal::allocate_child_proxy& allocate_child() {
+ return *reinterpret_cast<internal::allocate_child_proxy*>(this);
+ }
+
+ //! Like allocate_child, except that task's parent becomes "t", not this.
+ /** Typically used in conjunction with schedule_to_reexecute to implement while loops.
+ Atomically increments the reference count of t.parent() */
+ internal::allocate_additional_child_of_proxy allocate_additional_child_of( task& t ) {
+ return internal::allocate_additional_child_of_proxy(*this,t);
+ }
+
+ //! Destroy a task.
+ /** Usually, calling this method is unnecessary, because a task is
+ implicitly deleted after its execute() method runs. However,
+ sometimes a task needs to be explicitly deallocated, such as
+ when a root task is used as the parent in spawn_and_wait_for_all. */
+ void destroy( task& victim );
+
+ //------------------------------------------------------------------------
+ // Recycling of tasks
+ //------------------------------------------------------------------------
+
+ //! Change this to be a continuation of its former self.
+ /** Not recommended to use due to possibility to cause a crash in some scenario.
+ Can be deprecated later */
+ void recycle_as_continuation() {
+ __TBB_ASSERT( prefix().state==executing, "execute not running?" );
+ prefix().state = allocated;
+ }
+
+ //! Recommended to use, safe variant of recycle_as_continuation
+ /** For safety, it requires additional increment of ref_count. */
+ void recycle_as_safe_continuation() {
+ __TBB_ASSERT( prefix().state==executing, "execute not running?" );
+ prefix().state = recycle;
+ }
+
+ //! Change this to be a child of new_parent.
+ void recycle_as_child_of( task& new_parent ) {
+ internal::task_prefix& p = prefix();
+ __TBB_ASSERT( prefix().state==executing||prefix().state==allocated, "execute not running, or already recycled" );
+ __TBB_ASSERT( prefix().ref_count==0, "no child tasks allowed when recycled as a child" );
+ __TBB_ASSERT( p.parent==NULL, "parent must be null" );
+ __TBB_ASSERT( new_parent.prefix().state<=recycle, "corrupt parent's state" );
+ __TBB_ASSERT( new_parent.prefix().state!=freed, "parent already freed" );
+ p.state = allocated;
+ p.parent = &new_parent;
+ p.depth = new_parent.prefix().depth+1;
+ }
+
+ //! Schedule this for reexecution after current execute() returns.
+ /** Requires that this.execute() be running. */
+ void recycle_to_reexecute() {
+ __TBB_ASSERT( prefix().state==executing, "execute not running, or already recycled" );
+ __TBB_ASSERT( prefix().ref_count==0, "no child tasks allowed when recycled for reexecution" );
+ prefix().state = reexecute;
+ }
+
+ //! A scheduling depth.
+ /** Guaranteed to be a signed integral type. */
+ typedef internal::intptr depth_type;
+
+ //! Scheduling depth
+ depth_type depth() const {return prefix().depth;}
+
+ //! Set scheduling depth to given value.
+ /** The depth must be non-negative */
+ void set_depth( depth_type new_depth ) {
+ __TBB_ASSERT( state()!=ready, "cannot change depth of ready task" );
+ __TBB_ASSERT( new_depth>=0, "depth cannot be negative" );
+ __TBB_ASSERT( new_depth==int(new_depth), "integer overflow error");
+ prefix().depth = int(new_depth);
+ }
+
+ //! Change scheduling depth by given amount.
+ /** The resulting depth must be non-negative. */
+ void add_to_depth( int delta ) {
+ __TBB_ASSERT( state()!=ready, "cannot change depth of ready task" );
+ __TBB_ASSERT( prefix().depth>=-delta, "depth cannot be negative" );
+ prefix().depth+=delta;
+ }
+
+ //------------------------------------------------------------------------
+ // Spawning and blocking
+ //------------------------------------------------------------------------
+
+ //! Set reference count
+ void set_ref_count( int count ) {
+#if TBB_DO_ASSERT
+ internal_set_ref_count(count);
+#else
+ prefix().ref_count = count;
+#endif /* TBB_DO_ASSERT */
+ }
+
+ //! Schedule task for execution when a worker becomes available.
+ /** After all children spawned so far finish their method task::execute,
+ their parent's method task::execute may start running. Therefore, it
+ is important to ensure that at least one child has not completed until
+ the parent is ready to run. */
+ void spawn( task& child ) {
+ __TBB_ASSERT( is_owned_by_current_thread(), "'this' not owned by current thread" );
+ prefix().owner->spawn( child, child.prefix().next );
+ }
+
+ //! Spawn multiple tasks and clear list.
+ /** All of the tasks must be at the same depth. */
+ void spawn( task_list& list );
+
+ //! Similar to spawn followed by wait_for_all, but more efficient.
+ void spawn_and_wait_for_all( task& child ) {
+ __TBB_ASSERT( is_owned_by_current_thread(), "'this' not owned by current thread" );
+ prefix().owner->wait_for_all( *this, &child );
+ }
+
+ //! Similar to spawn followed by wait_for_all, but more efficient.
+ void spawn_and_wait_for_all( task_list& list );
+
+ //! Spawn task allocated by allocate_root, wait for it to complete, and deallocate it.
+ /** The thread that calls spawn_root_and_wait must be the same thread
+ that allocated the task. */
+ static void spawn_root_and_wait( task& root ) {
+ __TBB_ASSERT( root.is_owned_by_current_thread(), "root not owned by current thread" );
+ root.prefix().owner->spawn_root_and_wait( root, root.prefix().next );
+ }
+
+ //! Spawn root tasks on list and wait for all of them to finish.
+ /** If there are more tasks than worker threads, the tasks are spawned in
+ order of front to back. */
+ static void spawn_root_and_wait( task_list& root_list );
+
+ //! Wait for reference count to become one, and set reference count to zero.
+ /** Works on tasks while waiting. */
+ void wait_for_all() {
+ __TBB_ASSERT( is_owned_by_current_thread(), "'this' not owned by current thread" );
+ prefix().owner->wait_for_all( *this, NULL );
+ }
+
+ //! The task() current being run by this thread.
+ static task& self();
+
+ //! task on whose behalf this task is working, or NULL if this is a root.
+ task* parent() const {return prefix().parent;}
+
+ //! True if task is owned by different thread than thread that owns its parent.
+ bool is_stolen_task() const {
+ internal::task_prefix& p = prefix();
+ internal::task_prefix& q = parent()->prefix();
+ return p.owner!=q.owner;
+ }
+
+
+ //------------------------------------------------------------------------
+ // Debugging
+ //------------------------------------------------------------------------
+
+ //! Current execution state
+ state_type state() const {return state_type(prefix().state);}
+
+ //! The internal reference count.
+ int ref_count() const {
+#if TBB_DO_ASSERT
+ internal::reference_count ref_count = prefix().ref_count;
+ __TBB_ASSERT( ref_count==int(ref_count), "integer overflow error");
+#endif
+ return int(prefix().ref_count);
+ }
+
+ //! True if this task is owned by the calling thread; false otherwise.
+ bool is_owned_by_current_thread() const;
+
+private:
+ friend class task_list;
+ friend class internal::scheduler;
+ friend class internal::allocate_root_proxy;
+ friend class internal::allocate_continuation_proxy;
+ friend class internal::allocate_child_proxy;
+ friend class internal::allocate_additional_child_of_proxy;
+
+ //! Get reference to corresponding task_prefix.
+ internal::task_prefix& prefix() const {
+ return reinterpret_cast<internal::task_prefix*>(const_cast<task*>(this))[-1];
+ }
+};
+
+//! task that does nothing. Useful for synchronization.
+/** @ingroup task_scheduling */
+class empty_task: public task {
+ /*override*/ task* execute() {
+ return NULL;
+ }
+};
+
+//! A list of children.
+/** Used for method task::spawn_children
+ @ingroup task_scheduling */
+class task_list: internal::no_copy {
+private:
+ task* first;
+ task** next_ptr;
+ friend class task;
+public:
+ //! Construct empty list
+ task_list() : first(NULL), next_ptr(&first) {}
+
+ //! Destroys the list, but does not destroy the task objects.
+ ~task_list() {}
+
+ //! True if list if empty; false otherwise.
+ bool empty() const {return !first;}
+
+ //! Push task onto back of list.
+ void push_back( task& task ) {
+ task.prefix().next = NULL;
+ *next_ptr = &task;
+ next_ptr = &task.prefix().next;
+ }
+
+ //! Pop the front task from the list.
+ task& pop_front() {
+ __TBB_ASSERT( !empty(), "attempt to pop item from empty task_list" );
+ task* result = first;
+ first = result->prefix().next;
+ if( !first ) next_ptr = &first;
+ return *result;
+ }
+ //! Clear the list
+ void clear() {
+ first=NULL;
+ next_ptr=&first;
+ }
+};
+
+inline void task::spawn( task_list& list ) {
+ __TBB_ASSERT( is_owned_by_current_thread(), "'this' not owned by current thread" );
+ if( task* t = list.first ) {
+ prefix().owner->spawn( *t, *list.next_ptr );
+ list.clear();
+ }
+}
+
+inline void task::spawn_root_and_wait( task_list& root_list ) {
+ if( task* t = root_list.first ) {
+ __TBB_ASSERT( t->is_owned_by_current_thread(), "'this' not owned by current thread" );
+ t->prefix().owner->spawn_root_and_wait( *t, *root_list.next_ptr );
+ root_list.clear();
+ }
+}
+
+} // namespace tbb
+
+inline void *operator new( size_t bytes, const tbb::internal::allocate_root_proxy& p ) {
+ return &p.allocate(bytes);
+}
+
+inline void operator delete( void* task, const tbb::internal::allocate_root_proxy& p ) {
+ p.free( *static_cast<tbb::task*>(task) );
+}
+
+inline void *operator new( size_t bytes, const tbb::internal::allocate_continuation_proxy& p ) {
+ return &p.allocate(bytes);
+}
+
+inline void operator delete( void* task, const tbb::internal::allocate_continuation_proxy& p ) {
+ p.free( *static_cast<tbb::task*>(task) );
+}
+
+inline void *operator new( size_t bytes, const tbb::internal::allocate_child_proxy& p ) {
+ return &p.allocate(bytes);
+}
+
+inline void operator delete( void* task, const tbb::internal::allocate_child_proxy& p ) {
+ p.free( *static_cast<tbb::task*>(task) );
+}
+
+inline void *operator new( size_t bytes, const tbb::internal::allocate_additional_child_of_proxy& p ) {
+ return &p.allocate(bytes);
+}
+
+inline void operator delete( void* task, const tbb::internal::allocate_additional_child_of_proxy& p ) {
+ p.free( *static_cast<tbb::task*>(task) );
+}
+
+#endif /* __TBB_task_H */
diff --git a/include/tbb/task_scheduler_init.h b/include/tbb/task_scheduler_init.h
new file mode 100644
index 0000000..568b2a1
--- /dev/null
+++ b/include/tbb/task_scheduler_init.h
@@ -0,0 +1,88 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_task_scheduler_init_H
+#define __TBB_task_scheduler_init_H
+
+#include "tbb_stddef.h"
+
+namespace tbb {
+
+//! @cond INTERNAL
+namespace internal {
+ //! Internal to library. Should not be used by clients.
+ /** @ingroup task_scheduling */
+ class scheduler;
+} // namespace internal
+//! @endcond
+
+//! Class representing reference to tbb scheduler.
+/** A thread must construct a task_scheduler_init, and keep it alive,
+ during the time that it uses the services of class task.
+ @ingroup task_scheduling */
+class task_scheduler_init: internal::no_copy {
+ /** NULL if not currently initialized. */
+ internal::scheduler* my_scheduler;
+public:
+ //! Typedef for number of threads that is automatic.
+ static const int automatic = -1;
+
+ //! Argument to initialize() or constructor that causes initialization to be deferred.
+ static const int deferred = -2;
+
+ //! Ensure that scheduler exists for this thread
+ /** A value of -1 lets tbb decide on the number
+ of threads, which is typically the number of hardware threads.
+ For production code, the default value of -1 should be used,
+ particularly if the client code is mixed with third party clients
+ that might also use tbb.
+
+ The number_of_threads is ignored if any other task_scheduler_inits
+ currently exist. A thread may construct multiple task_scheduler_inits.
+ Doing so does no harm because the underlying scheduler is reference counted. */
+ void initialize( int number_of_threads=automatic );
+
+ //! Inverse of method initialize.
+ void terminate();
+
+ //! Shorthand for default constructor followed by call to intialize(number_of_threads).
+ task_scheduler_init( int number_of_threads=automatic ) : my_scheduler(NULL) {
+ initialize( number_of_threads );
+ }
+
+ //! Destroy scheduler for this thread if thread has no other live task_scheduler_inits.
+ ~task_scheduler_init() {
+ if( my_scheduler )
+ terminate();
+ internal::poison_pointer( my_scheduler );
+ }
+};
+
+} // namespace tbb
+
+#endif /* __TBB_task_scheduler_init_H */
diff --git a/include/tbb/tbb_machine.h b/include/tbb/tbb_machine.h
new file mode 100644
index 0000000..2e4d1d4
--- /dev/null
+++ b/include/tbb/tbb_machine.h
@@ -0,0 +1,495 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_machine_H
+#define __TBB_machine_H
+
+#if _WIN32||_WIN64
+// define the parts of stdint.h that are needed
+typedef __int8 int8_t;
+typedef __int16 int16_t;
+typedef __int32 int32_t;
+typedef __int64 int64_t;
+typedef unsigned __int8 uint8_t;
+typedef unsigned __int16 uint16_t;
+typedef unsigned __int32 uint32_t;
+typedef unsigned __int64 uint64_t;
+#else
+#include <stdint.h>
+#endif
+
+#include <cstdio>
+#include <assert.h>
+#include "tbb/tbb_stddef.h"
+
+#if _WIN32||_WIN64
+
+#if defined(_M_IX86)
+#include "tbb/machine/windows_ia32.h"
+#elif defined(_M_AMD64)
+#include "tbb/machine/windows_em64t.h"
+#else
+#error Unsupported platform
+#endif
+
+#elif __linux__
+
+#if __i386__
+#include "tbb/machine/linux_ia32.h"
+#elif __x86_64__
+#include "tbb/machine/linux_em64t.h"
+#elif __ia64__
+#include "tbb/machine/linux_itanium.h"
+#endif
+
+#elif __APPLE__
+
+#if __i386__
+#include "tbb/machine/linux_ia32.h"
+#elif __x86_64__
+#include "tbb/machine/linux_em64t.h"
+#elif __POWERPC__
+#include "tbb/machine/mac_ppc.h"
+#endif
+
+#endif
+
+#if !defined(__TBB_CompareAndSwap4) || !defined(__TBB_CompareAndSwap8) || !defined(__TBB_Yield)
+#error Minimal requirements for tbb_machine.h not satisfied
+#endif
+
+#if defined(TBB_DO_ASSERT)
+#define WORDSIZE __TBB_WORDSIZE
+#endif
+
+#ifndef __TBB_load_with_acquire
+ //! This definition works for compilers that insert acquire fences for volatile loads, and load T atomically.
+ template<typename T>
+ inline T __TBB_load_with_acquire(T const volatile& location) {
+ return location;
+ }
+#endif
+
+#ifndef __TBB_store_with_release
+ //! This definition works only for compilers that insert release fences for volatile stores, and store T atomically.
+ template<typename T, typename V>
+ inline void __TBB_store_with_release(volatile T &location, V const& value) {
+ location = value;
+ }
+#endif
+
+#ifndef __TBB_Pause
+ inline void __TBB_Pause(int32_t) {
+ __TBB_Yield();
+ }
+#endif
+
+namespace tbb {
+namespace internal {
+
+//! Class that implements exponential backoff.
+/** See implementation of SpinwaitWhileEq for an example. */
+class AtomicBackoff {
+ //! Time delay, in units of "pause" instructions.
+ /** Should be equal to approximately the number of "pause" instructions
+ that take the same time as an context switch. */
+ static const int32_t LOOPS_BEFORE_YIELD = 16;
+ int32_t count;
+public:
+ AtomicBackoff() : count(1) {}
+
+ //! Pause for a while.
+ void pause() {
+ if( count<=LOOPS_BEFORE_YIELD ) {
+ __TBB_Pause(count);
+ // Pause twice as long the next time.
+ count*=2;
+ } else {
+ // Pause is so long that we might as well yield CPU to scheduler.
+ __TBB_Yield();
+ }
+ }
+ void reset() {
+ count = 1;
+ }
+};
+
+template<size_t S, typename T>
+inline intptr_t __TBB_MaskedCompareAndSwap (volatile int32_t *ptr, T value, T comparand ) {
+ volatile T *base = (T *)( (uintptr_t)(__TBB_load_with_acquire(ptr)) & ~(uintptr_t)(0x3) );
+#if __TBB_BIG_ENDIAN
+ uint8_t bitoffset = ( (4-S) - ( (uint8_t *)ptr - (uint8_t *)base) ) * 8;
+#else
+ uint8_t bitoffset = ( (uint8_t *)ptr - (uint8_t *)base ) * 8;
+#endif
+ uint32_t mask = ( (1<<(S*8) ) - 1)<<bitoffset;
+ uint32_t tmp, result = *(uint32_t *)base;
+ if ( (T)( (result & mask) >> bitoffset) == (uint32_t)comparand ) {
+ tmp = result;
+ uint32_t new_value = ( result & ~mask ) | ( value << bitoffset );
+ result = __TBB_CompareAndSwap4( base, new_value, tmp );
+ if ( result != tmp && ( (T)( (result & mask) >> bitoffset) == comparand ) ) {
+ AtomicBackoff b;
+ do {
+ b.pause();
+ tmp = result;
+ uint32_t new_value = ( result & ~mask ) | ( value << bitoffset );
+ result = __TBB_CompareAndSwap4( base, new_value, tmp );
+ } while ( result != tmp && ( (T)( (result & mask) >> bitoffset) == comparand ) );
+ }
+ }
+ intptr_t to_return;
+ __TBB_store_with_release(to_return, (T)( (result & mask) >> bitoffset));
+ return to_return;
+}
+
+template<size_t S, typename T>
+inline T __TBB_CompareAndSwapGeneric (volatile void *ptr, T value, T comparand ) {
+ return __TBB_CompareAndSwapW((T *)ptr,value,comparand);
+}
+
+template<>
+inline uint8_t __TBB_CompareAndSwapGeneric <1,uint8_t> (volatile void *ptr, uint8_t value, uint8_t comparand ) {
+#ifdef __TBB_CompareAndSwap1
+ return __TBB_CompareAndSwap1(ptr,value,comparand);
+#else
+ return __TBB_MaskedCompareAndSwap<1,uint8_t>((volatile int32_t *)ptr,value,comparand);
+#endif
+}
+
+template<>
+inline uint16_t __TBB_CompareAndSwapGeneric <2,uint16_t> (volatile void *ptr, uint16_t value, uint16_t comparand ) {
+#ifdef __TBB_CompareAndSwap2
+ return __TBB_CompareAndSwap2(ptr,value,comparand);
+#else
+ return __TBB_MaskedCompareAndSwap<2,uint16_t>((volatile int32_t *)ptr,value,comparand);
+#endif
+}
+
+template<>
+inline uint32_t __TBB_CompareAndSwapGeneric <4,uint32_t> (volatile void *ptr, uint32_t value, uint32_t comparand ) {
+ return __TBB_CompareAndSwap4(ptr,value,comparand);
+}
+
+template<>
+inline uint64_t __TBB_CompareAndSwapGeneric <8,uint64_t> (volatile void *ptr, uint64_t value, uint64_t comparand ) {
+ return __TBB_CompareAndSwap8(ptr,value,comparand);
+}
+
+template<size_t S, typename T>
+inline T __TBB_FetchAndAddGeneric (volatile void *ptr, T addend) {
+ T result = __TBB_load_with_acquire(*reinterpret_cast<volatile T *>(ptr));
+ T tmp = result;
+ result = __TBB_CompareAndSwapGeneric<S,T> ( ptr, result+addend, result );
+ if (tmp != result) {
+ AtomicBackoff b;
+ do {
+ b.pause();
+ tmp = result;
+ result = __TBB_CompareAndSwapGeneric<S,T> ( ptr, result+addend, result );
+ } while ( tmp != result);
+ }
+ intptr_t to_return;
+ __TBB_store_with_release(to_return, result);
+ return to_return;
+}
+
+template<size_t S, typename T>
+inline T __TBB_FetchAndStoreGeneric (volatile void *ptr, T value) {
+ T result;
+ T tmp = __TBB_load_with_acquire(*reinterpret_cast<volatile T *>(ptr));
+ result = __TBB_CompareAndSwapGeneric<S,T> ( ptr, value, tmp );
+ if ( tmp != result ) {
+ AtomicBackoff b;
+ do {
+ b.pause();
+ tmp = result;
+ result = __TBB_CompareAndSwapGeneric<S,T> ( ptr, value, tmp );
+ } while ( tmp != result );
+ }
+ intptr_t to_return;
+ __TBB_store_with_release(to_return, result);
+ return to_return;
+}
+
+}
+}
+
+#ifndef __TBB_CompareAndSwap1
+#define __TBB_CompareAndSwap1 tbb::internal::__TBB_CompareAndSwapGeneric<1,uint8_t>
+#endif
+
+#ifndef __TBB_CompareAndSwap2
+#define __TBB_CompareAndSwap2 tbb::internal::__TBB_CompareAndSwapGeneric<2,uint16_t>
+#endif
+
+#ifndef __TBB_CompareAndSwapW
+#define __TBB_CompareAndSwapW tbb::internal::__TBB_CompareAndSwapGeneric<sizeof(ptrdiff_t),ptrdiff_t>
+#endif
+
+#ifndef __TBB_FetchAndAdd1
+#define __TBB_FetchAndAdd1 tbb::internal::__TBB_FetchAndAddGeneric<1,uint8_t>
+#endif
+
+#ifndef __TBB_FetchAndAdd2
+#define __TBB_FetchAndAdd2 tbb::internal::__TBB_FetchAndAddGeneric<2,uint16_t>
+#endif
+
+#ifndef __TBB_FetchAndAdd4
+#define __TBB_FetchAndAdd4 tbb::internal::__TBB_FetchAndAddGeneric<4,uint32_t>
+#endif
+
+#ifndef __TBB_FetchAndAdd8
+#define __TBB_FetchAndAdd8 tbb::internal::__TBB_FetchAndAddGeneric<8,uint64_t>
+#endif
+
+#ifndef __TBB_FetchAndAddW
+#define __TBB_FetchAndAddW tbb::internal::__TBB_FetchAndAddGeneric<sizeof(ptrdiff_t),ptrdiff_t>
+#endif
+
+#ifndef __TBB_FetchAndStore1
+#define __TBB_FetchAndStore1 tbb::internal::__TBB_FetchAndStoreGeneric<1,uint8_t>
+#endif
+
+#ifndef __TBB_FetchAndStore2
+#define __TBB_FetchAndStore2 tbb::internal::__TBB_FetchAndStoreGeneric<2,uint16_t>
+#endif
+
+#ifndef __TBB_FetchAndStore4
+#define __TBB_FetchAndStore4 tbb::internal::__TBB_FetchAndStoreGeneric<4,uint32_t>
+#endif
+
+#ifndef __TBB_FetchAndStore8
+#define __TBB_FetchAndStore8 tbb::internal::__TBB_FetchAndStoreGeneric<8,uint64_t>
+#endif
+
+#ifndef __TBB_FetchAndStoreW
+#define __TBB_FetchAndStoreW tbb::internal::__TBB_FetchAndStoreGeneric<sizeof(ptrdiff_t),ptrdiff_t>
+#endif
+
+#if __TBB_DECL_FENCED_ATOMICS
+
+#ifndef __TBB_CompareAndSwap1__TBB_full_fence
+#define __TBB_CompareAndSwap1__TBB_full_fence __TBB_CompareAndSwap1
+#endif
+#ifndef __TBB_CompareAndSwap1acquire
+#define __TBB_CompareAndSwap1acquire __TBB_CompareAndSwap1__TBB_full_fence
+#endif
+#ifndef __TBB_CompareAndSwap1release
+#define __TBB_CompareAndSwap1release __TBB_CompareAndSwap1__TBB_full_fence
+#endif
+
+#ifndef __TBB_CompareAndSwap2__TBB_full_fence
+#define __TBB_CompareAndSwap2__TBB_full_fence __TBB_CompareAndSwap2
+#endif
+#ifndef __TBB_CompareAndSwap2acquire
+#define __TBB_CompareAndSwap2acquire __TBB_CompareAndSwap2__TBB_full_fence
+#endif
+#ifndef __TBB_CompareAndSwap2release
+#define __TBB_CompareAndSwap2release __TBB_CompareAndSwap2__TBB_full_fence
+#endif
+
+#ifndef __TBB_CompareAndSwap4__TBB_full_fence
+#define __TBB_CompareAndSwap4__TBB_full_fence __TBB_CompareAndSwap4
+#endif
+#ifndef __TBB_CompareAndSwap4acquire
+#define __TBB_CompareAndSwap4acquire __TBB_CompareAndSwap4__TBB_full_fence
+#endif
+#ifndef __TBB_CompareAndSwap4release
+#define __TBB_CompareAndSwap4release __TBB_CompareAndSwap4__TBB_full_fence
+#endif
+
+#ifndef __TBB_CompareAndSwap8__TBB_full_fence
+#define __TBB_CompareAndSwap8__TBB_full_fence __TBB_CompareAndSwap8
+#endif
+#ifndef __TBB_CompareAndSwap8acquire
+#define __TBB_CompareAndSwap8acquire __TBB_CompareAndSwap8__TBB_full_fence
+#endif
+#ifndef __TBB_CompareAndSwap8release
+#define __TBB_CompareAndSwap8release __TBB_CompareAndSwap8__TBB_full_fence
+#endif
+
+#ifndef __TBB_FetchAndAdd1__TBB_full_fence
+#define __TBB_FetchAndAdd1__TBB_full_fence __TBB_FetchAndAdd1
+#endif
+#ifndef __TBB_FetchAndAdd1acquire
+#define __TBB_FetchAndAdd1acquire __TBB_FetchAndAdd1__TBB_full_fence
+#endif
+#ifndef __TBB_FetchAndAdd1release
+#define __TBB_FetchAndAdd1release __TBB_FetchAndAdd1__TBB_full_fence
+#endif
+
+#ifndef __TBB_FetchAndAdd2__TBB_full_fence
+#define __TBB_FetchAndAdd2__TBB_full_fence __TBB_FetchAndAdd2
+#endif
+#ifndef __TBB_FetchAndAdd2acquire
+#define __TBB_FetchAndAdd2acquire __TBB_FetchAndAdd2__TBB_full_fence
+#endif
+#ifndef __TBB_FetchAndAdd2release
+#define __TBB_FetchAndAdd2release __TBB_FetchAndAdd2__TBB_full_fence
+#endif
+
+#ifndef __TBB_FetchAndAdd4__TBB_full_fence
+#define __TBB_FetchAndAdd4__TBB_full_fence __TBB_FetchAndAdd4
+#endif
+#ifndef __TBB_FetchAndAdd4acquire
+#define __TBB_FetchAndAdd4acquire __TBB_FetchAndAdd4__TBB_full_fence
+#endif
+#ifndef __TBB_FetchAndAdd4release
+#define __TBB_FetchAndAdd4release __TBB_FetchAndAdd4__TBB_full_fence
+#endif
+
+#ifndef __TBB_FetchAndAdd8__TBB_full_fence
+#define __TBB_FetchAndAdd8__TBB_full_fence __TBB_FetchAndAdd8
+#endif
+#ifndef __TBB_FetchAndAdd8acquire
+#define __TBB_FetchAndAdd8acquire __TBB_FetchAndAdd8__TBB_full_fence
+#endif
+#ifndef __TBB_FetchAndAdd8release
+#define __TBB_FetchAndAdd8release __TBB_FetchAndAdd8__TBB_full_fence
+#endif
+
+#ifndef __TBB_FetchAndStore1__TBB_full_fence
+#define __TBB_FetchAndStore1__TBB_full_fence __TBB_FetchAndStore1
+#endif
+#ifndef __TBB_FetchAndStore1acquire
+#define __TBB_FetchAndStore1acquire __TBB_FetchAndStore1__TBB_full_fence
+#endif
+#ifndef __TBB_FetchAndStore1release
+#define __TBB_FetchAndStore1release __TBB_FetchAndStore1__TBB_full_fence
+#endif
+
+#ifndef __TBB_FetchAndStore2__TBB_full_fence
+#define __TBB_FetchAndStore2__TBB_full_fence __TBB_FetchAndStore2
+#endif
+#ifndef __TBB_FetchAndStore2acquire
+#define __TBB_FetchAndStore2acquire __TBB_FetchAndStore2__TBB_full_fence
+#endif
+#ifndef __TBB_FetchAndStore2release
+#define __TBB_FetchAndStore2release __TBB_FetchAndStore2__TBB_full_fence
+#endif
+
+#ifndef __TBB_FetchAndStore4__TBB_full_fence
+#define __TBB_FetchAndStore4__TBB_full_fence __TBB_FetchAndStore4
+#endif
+#ifndef __TBB_FetchAndStore4acquire
+#define __TBB_FetchAndStore4acquire __TBB_FetchAndStore4__TBB_full_fence
+#endif
+#ifndef __TBB_FetchAndStore4release
+#define __TBB_FetchAndStore4release __TBB_FetchAndStore4__TBB_full_fence
+#endif
+
+#ifndef __TBB_FetchAndStore8__TBB_full_fence
+#define __TBB_FetchAndStore8__TBB_full_fence __TBB_FetchAndStore8
+#endif
+#ifndef __TBB_FetchAndStore8acquire
+#define __TBB_FetchAndStore8acquire __TBB_FetchAndStore8__TBB_full_fence
+#endif
+#ifndef __TBB_FetchAndStore8release
+#define __TBB_FetchAndStore8release __TBB_FetchAndStore8__TBB_full_fence
+#endif
+
+#endif // __TBB_DECL_FENCED_ATOMICS
+
+// Special atomic functions
+#ifndef __TBB_FetchAndAddWrelease
+#define __TBB_FetchAndAddWrelease __TBB_FetchAndAddW
+#endif
+
+#ifndef __TBB_FetchAndIncrementWacquire
+#define __TBB_FetchAndIncrementWacquire(P) __TBB_FetchAndAddW(P,1)
+#endif
+
+#ifndef __TBB_FetchAndDecrementWrelease
+#define __TBB_FetchAndDecrementWrelease(P) __TBB_FetchAndAddW(P,(-1))
+#endif
+
+#ifndef __TBB_Store8
+inline void __TBB_Store8 (volatile void *ptr, int64_t value) {
+ int64_t result = *(int64_t *)ptr;
+ int64_t tmp;
+ tmp = result;
+ result = __TBB_CompareAndSwap8(ptr,value,result);
+ if ( tmp != result ) {
+ tbb::internal::AtomicBackoff b;
+ do {
+ b.pause();
+ tmp = result;
+ result = __TBB_CompareAndSwap8(ptr,value,result);
+ } while ( tmp != result );
+ }
+}
+#endif
+
+#ifndef __TBB_Load8
+inline int64_t __TBB_Load8 (const volatile void *ptr) {
+ int64_t result = *(int64_t *)ptr;
+ result = __TBB_CompareAndSwap8((volatile void *)ptr,result,result);
+ return result;
+}
+#endif
+
+#ifndef __TBB_Log2
+inline intptr_t __TBB_Log2( uintptr_t x ) {
+ long result = -1;
+ for(; x; x>>=1 ) ++result;
+ return result;
+}
+#endif
+
+#ifndef __TBB_AtomicOR
+inline void __TBB_AtomicOR( volatile void *operand, uintptr_t addend ) {
+ uintptr_t result, tmp;
+ do {
+ tmp = *(uintptr_t *)operand;
+ result = __TBB_CompareAndSwapW(operand, tmp|addend, tmp);
+ } while (result != tmp);
+ }
+#endif
+
+#ifndef __TBB_TryLockByte
+inline bool __TBB_TryLockByte( volatile unsigned char &flag ) {
+ volatile void *f = &flag;
+ return ( __TBB_CompareAndSwap1(f,1,0) == 0);
+}
+#endif
+
+#ifndef __TBB_LockByte
+inline uintptr_t __TBB_LockByte( volatile unsigned char& flag ) {
+ if ( !__TBB_TryLockByte(flag) ) {
+ tbb::internal::AtomicBackoff b;
+ do {
+ b.pause();
+ } while ( !__TBB_TryLockByte(flag) );
+ }
+ return 0;
+}
+#endif
+
+#endif
+
diff --git a/include/tbb/tbb_stddef.h b/include/tbb/tbb_stddef.h
new file mode 100644
index 0000000..b5d1d79
--- /dev/null
+++ b/include/tbb/tbb_stddef.h
@@ -0,0 +1,174 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_tbb_stddef_H
+#define __TBB_tbb_stddef_H
+
+// Define groups for Doxygen documentation
+/**
+ * @defgroup algorithms Algorithms
+ * @defgroup containers Containers
+ * @defgroup memory_allocation Memory Allocation
+ * @defgroup synchronization Synchronization
+ * @defgroup timing Timing
+ * @defgroup task_scheduling Task Scheduling
+ */
+
+// Simple text that is displayed on the main page of Doxygen documentation.
+/**
+ * \mainpage Main Page
+ *
+ * Click the tabs above for information about the
+ * <a href="./annotated.html">Classes</a> in the library or the
+ * <a href="./modules.html">Modules</a> to which they belong. The
+ * <a href="./files.html">Files</a> tab shows which files contain the library
+ * components.
+ */
+
+// Define preprocessor symbols used to determine architecture
+#if _WIN32||_WIN64
+# if defined(_M_AMD64)
+# define __TBB_x86_64 1
+# elif defined(_M_IA64)
+# define __TBB_ipf 1
+# elif defined(_M_IX86)
+# define __TBB_x86_32 1
+# endif
+#else /* Assume generic Unix */
+# if !__linux__ && !__APPLE__
+# define __TBB_generic_os 1
+# endif
+# if __x86_64__
+# define __TBB_x86_64 1
+# elif __ia64__
+# define __TBB_ipf 1
+# elif __i386__
+# define __TBB_x86_32 1
+# else
+# define __TBB_generic_arch 1
+# endif
+#endif
+
+#include <cstddef> /* Need size_t and ptrdiff_t from here. */
+
+#if _WIN32||_WIN64
+#define __TBB_tbb_windef_H
+#include "_tbb_windef.h"
+#undef __TBB_tbb_windef_H
+#endif /* _WIN32||_WIN64 */
+
+namespace tbb {
+ //! Type for an assertion handler
+ typedef void(*assertion_handler_type)( const char* filename, int line, const char* expression, const char * comment );
+}
+
+#if TBB_DO_ASSERT
+
+//! Assert that x is true.
+/** If x is false, print assertion failure message.
+ If the comment argument is not NULL, it is printed as part of the failure message.
+ The comment argument has no other effect. */
+#define __TBB_ASSERT(predicate,message) ((predicate)?((void)0):tbb::assertion_failure(__FILE__,__LINE__,#predicate,message))
+#define __TBB_ASSERT_EX __TBB_ASSERT
+
+namespace tbb {
+ //! Set assertion handler and return previous value of it.
+ assertion_handler_type set_assertion_handler( assertion_handler_type new_handler );
+
+ //! Process an assertion failure.
+ /** Normally called from __TBB_ASSERT macro.
+ If assertion handler is null, print message for assertion failure and abort.
+ Otherwise call the assertion handler. */
+ void assertion_failure( const char* filename, int line, const char* expression, const char* comment );
+} // namespace tbb
+
+#else
+
+//! No-op version of __TBB_ASSERT.
+#define __TBB_ASSERT(predicate,comment) ((void)0)
+//! "Extended" version is useful to suppress warnings if a variable is only used with an assert
+#define __TBB_ASSERT_EX(predicate,comment) ((void)(1 && (predicate)))
+
+#endif /* TBB_DO_ASSERT */
+
+//! The namespace tbb contains all components of the library.
+namespace tbb {
+
+//! Dummy type that distinguishs splitting constructor from copy constructor.
+/**
+ * See description of parallel_for and parallel_reduce for example usages.
+ * @ingroup algorithms
+ */
+class split {
+};
+
+/**
+ * @cond INTERNAL
+ * @brief Identifiers declared inside namespace internal should never be used directly by client code.
+ */
+namespace internal {
+
+//! An unsigned integral type big enough to hold a pointer.
+/** There's no guarantee by the C++ standard that a size_t is really big enough,
+ but it happens to be for all platforms of interest. */
+typedef size_t uintptr;
+
+//! A signed integral type big enough to hold a pointer.
+/** There's no guarantee by the C++ standard that a ptrdiff_t is really big enough,
+ but it happens to be for all platforms of interest. */
+typedef ptrdiff_t intptr;
+
+#if TBB_DO_ASSERT
+//! Set p to invalid pointer value.
+template<typename T>
+inline void poison_pointer( T* volatile & p ) {
+ p = reinterpret_cast<T*>(-1);
+}
+#else
+template<typename T>
+inline void poison_pointer( T* ) {/*do nothing*/}
+#endif /* TBB_DO_ASSERT */
+
+//! Base class for types that should not be copied or assigned.
+class no_copy {
+ //! Deny copy construction
+ no_copy( const no_copy& );
+
+ // Deny assignment
+ void operator=( const no_copy& );
+public:
+ //! Allow default construction
+ no_copy() {}
+};
+
+} // internal
+//! @endcond
+
+} // tbb
+
+#endif /* __TBB_tbb_stddef_H */
diff --git a/include/tbb/tick_count.h b/include/tbb/tick_count.h
new file mode 100644
index 0000000..cf51360
--- /dev/null
+++ b/include/tbb/tick_count.h
@@ -0,0 +1,137 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef __TBB_tick_count_H
+#define __TBB_tick_count_H
+
+#include "tbb_stddef.h"
+
+#if _WIN32||_WIN64
+#include <windows.h>
+#elif __linux__
+#include <ctime>
+#include <stdio.h>
+#else /* generic Unix */
+#include <sys/time.h>
+#endif /* (choice of OS) */
+
+namespace tbb {
+
+//! Absolute timestamp
+/** @ingroup timing */
+class tick_count {
+public:
+ //! Relative time interval.
+ class interval_t {
+ long long value;
+ explicit interval_t( long long value_ ) : value(value_) {}
+ public:
+ //! Construct a time interval representing zero time duration
+ interval_t() : value(0) {};
+
+ //! Return the length of a time interval in seconds
+ double seconds() const;
+
+ friend class tbb::tick_count;
+
+ //! Extract the intervals from the tick_counts and subtract them.
+ friend interval_t operator-( const tick_count& t1, const tick_count& t0 );
+
+ //! Add two intervals.
+ friend interval_t operator+( const interval_t& i, const interval_t& j ) {
+ return interval_t(i.value+j.value);
+ }
+
+ //! Subtract two intervals.
+ friend interval_t operator-( const interval_t& i, const interval_t& j ) {
+ return interval_t(i.value-j.value);
+ }
+
+ //! Accumulation operator
+ interval_t& operator+=( const interval_t& i ) {value += i.value; return *this;}
+
+ //! Subtraction operator
+ interval_t& operator-=( const interval_t& i ) {value -= i.value; return *this;}
+ };
+
+ //! Return current time.
+ static tick_count now();
+
+ //! Subtract two timestamps to get the time interval between
+ friend interval_t operator-( const tick_count& t1, const tick_count& t0 );
+
+private:
+ long long my_count;
+};
+
+inline tick_count tick_count::now() {
+ tick_count result;
+#if _WIN32||_WIN64
+ LARGE_INTEGER qpcnt;
+ QueryPerformanceCounter(&qpcnt);
+ result.my_count = qpcnt.QuadPart;
+#elif __linux__
+ struct timespec ts;
+#if TBB_DO_ASSERT
+ int status =
+#endif /* TBB_DO_ASSERT */
+ clock_gettime( CLOCK_REALTIME, &ts );
+ __TBB_ASSERT( status==0, "CLOCK_REALTIME not supported" );
+ result.my_count = static_cast<long long>(1000000000UL)*static_cast<long long>(ts.tv_sec) + static_cast<long long>(ts.tv_nsec);
+#else /* generic Unix */
+ struct timeval tv;
+#if TBB_DO_ASSERT
+ int status =
+#endif /* TBB_DO_ASSERT */
+ gettimeofday(&tv, NULL);
+ __TBB_ASSERT( status==0, "gettimeofday failed" );
+ result.my_count = static_cast<long long>(1000000)*static_cast<long long>(tv.tv_sec) + static_cast<long long>(tv.tv_usec);
+#endif /*(choice of OS) */
+ return result;
+}
+
+inline tick_count::interval_t operator-( const tick_count& t1, const tick_count& t0 ) {
+ return tick_count::interval_t( t1.my_count-t0.my_count );
+}
+
+inline double tick_count::interval_t::seconds() const {
+#if _WIN32||_WIN64
+ LARGE_INTEGER qpfreq;
+ QueryPerformanceFrequency(&qpfreq);
+ return value/(double)qpfreq.QuadPart;
+#elif __linux__
+ return value*1E-9;
+#else /* generic Unix */
+ return value*1E-6;
+#endif /* (choice of OS) */
+}
+
+} // namespace tbb
+
+#endif /* __TBB_tick_count_H */
+
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..0da6198
--- /dev/null
+++ b/index.html
@@ -0,0 +1,40 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+Top level directory for Threading Building Blocks (TBB).
+<P>
+To build TBB, use the <A HREF=Makefile>top-level Makefile</A>; see also the <A HREF=build/index.html#build>build directions</A>.
+To port TBB to a new platform, operating system or architecture, see the <A HREF=build/index.html#port>porting directions</A>.
+</P>
+
+<H2>Files</H2>
+<DL>
+<DT><A HREF="Makefile">Makefile</A>
+<DD>Top-level Makefile for TBB. See also the <A HREF=build/index.html#build>build directions</A>.
+</DL>
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="include/index.html">include</A>
+<DD>Include files required for compiling code that uses the library.
+<DT><A HREF="examples/index.html">examples</A>
+<DD>Examples of how to use the library.
+<DT><A HREF="src/index.html">src</A>
+<DD>Source code for the library.
+<DT><A HREF="build/index.html">build</A>
+<DD>Internal Makefile infrastructure for TBB. Do not use directly; see the <A HREF=build/index.html#build>build directions</A>.
+</DL>
+
+<HR>
+<p></p>
+Copyright © 2005-2007 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
+
diff --git a/src/index.html b/src/index.html
new file mode 100644
index 0000000..2b3e3f7
--- /dev/null
+++ b/src/index.html
@@ -0,0 +1,28 @@
+<HTML>
+<BODY>
+
+<H2>Overview</H2>
+This directory contains the source code and unit tests for Threading Building Blocks.
+
+<H2>Directories</H2>
+<DL>
+<DT><A HREF="tbb">tbb</A>
+<DD>Source code for TBB.
+<DT><A HREF="tbbmalloc">tbbmalloc</A>
+<DD>Source code for TBB scalable memory allocator.
+<DT><A HREF="test">test</A>
+<DD>Source code for unit tests.
+</DL>
+
+<HR>
+<A HREF="../index.html">Up to parent directory</A>
+<p></p>
+Copyright © 2005-2007 Intel Corporation. All Rights Reserved.
+<p></p>
+Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
+registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+<p></p>
+* Other names and brands may be claimed as the property of others.
+</BODY>
+</HTML>
diff --git a/src/tbb/Makefile b/src/tbb/Makefile
new file mode 100644
index 0000000..1c5c9be
--- /dev/null
+++ b/src/tbb/Makefile
@@ -0,0 +1,45 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+tbb_root?=../..
+include $(tbb_root)/build/common.inc
+
+all: release debug
+
+release debug:
+ @-$(MD) "$(work_dir)_$@"
+ $(MAKE) -C "$(work_dir)_$@" -r -f $(tbb_root)/build/Makefile.tbb cfg=$@
+
+clean: clean_release clean_debug
+
+clean_release:
+ @-$(RM) $(work_dir)_release$(SLASH)*.*
+ @-rmdir "$(work_dir)_release"
+
+clean_debug:
+ @-$(RM) $(work_dir)_debug$(SLASH)*.*
+ @-rmdir "$(work_dir)_debug"
+
diff --git a/src/tbb/cache_aligned_allocator.cpp b/src/tbb/cache_aligned_allocator.cpp
new file mode 100644
index 0000000..2c9b151
--- /dev/null
+++ b/src/tbb/cache_aligned_allocator.cpp
@@ -0,0 +1,169 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "tbb/cache_aligned_allocator.h"
+#include "tbb_misc.h"
+#include <cstdlib>
+
+#if _WIN32||_WIN64
+#include <windows.h>
+#else
+#include <dlfcn.h>
+#endif /* _WIN32||_WIN64 */
+
+namespace tbb {
+
+namespace internal {
+
+//! Dummy routine used for first indirect call via MallocHandler.
+static void* DummyMalloc( size_t size );
+
+//! Dummy routine used for first indirect call via FreeHandler.
+static void DummyFree( void * ptr );
+
+//! Handler for memory allocation
+static void* (*MallocHandler)( size_t size ) = &DummyMalloc;
+
+//! Handler for memory deallocation
+static void (*FreeHandler)( void* pointer ) = &DummyFree;
+
+//! Table describing the how to link the handlers.
+static const DynamicLinkDescriptor MallocLinkTable[] = {
+ {"scalable_malloc",ADDRESS_OF_HANDLER(&MallocHandler)},
+ {"scalable_free",ADDRESS_OF_HANDLER(&FreeHandler)}
+};
+
+#if TBB_DO_ASSERT
+#define DEBUG_SUFFIX "_debug"
+#else
+#define DEBUG_SUFFIX
+#endif /* TBB_DO_ASSERT */
+
+// MALLOCLIB_NAME is the name of the TBB memory allocator library.
+#if _WIN32||_WIN64
+#define MALLOCLIB_NAME "tbbmalloc" DEBUG_SUFFIX ".dll"
+#elif __APPLE__
+#define MALLOCLIB_NAME "libtbbmalloc" DEBUG_SUFFIX ".dylib"
+#elif __linux__
+#define MALLOCLIB_NAME "libtbbmalloc" DEBUG_SUFFIX ".so"
+#else
+#error Unknown OS
+#endif
+
+//! Initialize the allocation/free handler pointers.
+/** Caller is responsible for ensuring this routine is called exactly once.
+ The routine attempts to dynamically link with the TBB memory allocator.
+ If that allocator is not found, it links to malloc and free. */
+void initialize_cache_aligned_allocator() {
+ __TBB_ASSERT( MallocHandler==&DummyMalloc, NULL );
+ bool success = FillDynamicLinks( MALLOCLIB_NAME, MallocLinkTable, 2 );
+ if( !success ) {
+ // If unsuccessful, set the handlers to the default routines.
+ // This must be done now, and not before FillDynanmicLinks runs, because if other
+ // threads call the handlers, we want them to go through the DoOneTimeInitializations logic,
+ // which forces them to wait.
+ FreeHandler = &free;
+ MallocHandler = &malloc;
+ }
+ PrintExtraVersionInfo( "ALLOCATOR", success?"scalable_malloc":"malloc" );
+}
+
+//! Defined in task.cpp
+extern void DoOneTimeInitializations();
+
+//! Executed on very first call throught MallocHandler
+static void* DummyMalloc( size_t size ) {
+ DoOneTimeInitializations();
+ __TBB_ASSERT( MallocHandler!=&DummyMalloc, NULL );
+ return (*MallocHandler)( size );
+}
+
+//! Executed on very first call throught FreeHandler
+static void DummyFree( void * ptr ) {
+ DoOneTimeInitializations();
+ __TBB_ASSERT( FreeHandler!=&DummyFree, NULL );
+ (*FreeHandler)( ptr );
+}
+
+static size_t NFS_LineSize = 128;
+
+size_t NFS_GetLineSize() {
+ return NFS_LineSize;
+}
+
+//! Requests for blocks this size and higher are handled via malloc/free,
+const size_t BigSize = 4096;
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+#pragma warning( push )
+// unary minus operator applied to unsigned type, result still unsigned
+#pragma warning( disable: 4146 )
+#endif /* _MSC_VER && !defined(__INTEL_COMPILER) */
+
+void* NFS_Allocate( size_t n, size_t element_size, void* hint ) {
+ using namespace internal;
+ size_t m = NFS_LineSize;
+ __TBB_ASSERT( m<=NFS_MaxLineSize, "illegal value for NFS_LineSize" );
+ __TBB_ASSERT( (m & m-1)==0, "must be power of two" );
+ size_t bytes = n*element_size;
+ unsigned char* base;
+ if( bytes<n || bytes+m<bytes || !(base=(unsigned char*)(bytes>=BigSize?malloc(m+bytes):(*MallocHandler)(m+bytes))) ) {
+ // Overflow
+ throw std::bad_alloc();
+ }
+ // Round up to next line
+ unsigned char* result = (unsigned char*)((uintptr)(base+m)&-m);
+ // Record where block actually starts. Use low order bit to record whether we used malloc or MallocHandler.
+ ((uintptr*)result)[-1] = uintptr(base)|(bytes>=BigSize);
+ return result;
+}
+
+void NFS_Free( void* p ) {
+ if( p ) {
+ __TBB_ASSERT( (uintptr)p>=0x4096, "attempt to free block not obtained from cache_aligned_allocator" );
+ using namespace internal;
+ // Recover where block actually starts
+ unsigned char* base = ((unsigned char**)p)[-1];
+ __TBB_ASSERT( (void*)((uintptr)(base+NFS_LineSize)&-NFS_LineSize)==p, "not allocated by NFS_Allocate?" );
+ if( uintptr(base)&1 ) {
+ // Is a big block - use free
+ free(base-1);
+ } else {
+ // Is a small block - use scalable allocator
+ (*FreeHandler)( base );
+ }
+ }
+}
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+#pragma warning( pop )
+#endif /* _MSC_VER && !defined(__INTEL_COMPILER) */
+
+} // namespace internal
+
+} // namespace tbb
diff --git a/src/tbb/concurrent_hash_map.cpp b/src/tbb/concurrent_hash_map.cpp
new file mode 100644
index 0000000..89cb69d
--- /dev/null
+++ b/src/tbb/concurrent_hash_map.cpp
@@ -0,0 +1,45 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "tbb/concurrent_hash_map.h"
+
+namespace tbb {
+
+namespace internal {
+
+bool hash_map_segment_base::internal_grow_predicate() const {
+ // Intel(R) Thread Checker considers the following reads to be races, so we hide them in the
+ // library so that Intel(R) Thread Checker will ignore them. The reads are used in a double-check
+ // context, so the program is nonetheless correct despite the race.
+ return my_logical_size>=my_physical_size;
+}
+
+} // namespace internal
+
+} // namespace tbb
+
diff --git a/src/tbb/concurrent_queue.cpp b/src/tbb/concurrent_queue.cpp
new file mode 100644
index 0000000..47cac2c
--- /dev/null
+++ b/src/tbb/concurrent_queue.cpp
@@ -0,0 +1,370 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "tbb/concurrent_queue.h"
+#include "tbb/cache_aligned_allocator.h"
+#include "tbb/spin_mutex.h"
+#include "tbb/atomic.h"
+#include "tbb_misc.h"
+#include <cstring>
+#include <stdio.h>
+
+#define RECORD_EVENTS 0
+
+
+namespace tbb {
+
+namespace internal {
+
+class concurrent_queue_rep;
+
+//! A queue using simple locking.
+/** For efficient, this class has no constructor.
+ The caller is expected to zero-initialize it. */
+struct micro_queue {
+ typedef concurrent_queue_base::page page;
+ typedef size_t ticket;
+
+ atomic<page*> head_page;
+ atomic<ticket> head_counter;
+
+ atomic<page*> tail_page;
+ atomic<ticket> tail_counter;
+
+ spin_mutex page_mutex;
+
+ class push_finalizer {
+ ticket my_ticket;
+ micro_queue& my_queue;
+ public:
+ push_finalizer( micro_queue& queue, ticket k ) :
+ my_ticket(k), my_queue(queue)
+ {}
+ ~push_finalizer() {
+ my_queue.tail_counter = my_ticket;
+ }
+ };
+
+ void push( const void* item, ticket k, concurrent_queue_base& base );
+
+ class pop_finalizer {
+ ticket my_ticket;
+ micro_queue& my_queue;
+ page* my_page;
+ public:
+ pop_finalizer( micro_queue& queue, ticket k, page* p ) :
+ my_ticket(k), my_queue(queue), my_page(p)
+ {}
+ ~pop_finalizer() {
+ page* p = my_page;
+ if( p ) {
+ spin_mutex::scoped_lock lock( my_queue.page_mutex );
+ page* q = p->next;
+ my_queue.head_page = q;
+ if( !q ) {
+ my_queue.tail_page = NULL;
+ }
+ }
+ my_queue.head_counter = my_ticket;
+ if( p )
+ operator delete(p);
+ }
+ };
+
+ bool pop( void* dst, ticket k, concurrent_queue_base& base );
+};
+
+//! Internal representation of a ConcurrentQueue.
+/** For efficient, this class has no constructor.
+ The caller is expected to zero-initialize it. */
+class concurrent_queue_rep {
+public:
+ typedef size_t ticket;
+
+private:
+ friend struct micro_queue;
+
+ //! Approximately n_queue/golden ratio
+ static const size_t phi = 3;
+
+public:
+ //! Must be power of 2
+ static const size_t n_queue = 8;
+
+ //! Map ticket to an array index
+ static size_t index( ticket k ) {
+ return k*phi%n_queue;
+ }
+
+ atomic<ticket> head_counter;
+ char pad1[NFS_MaxLineSize-sizeof(size_t)];
+
+ atomic<ticket> tail_counter;
+ char pad2[NFS_MaxLineSize-sizeof(ticket)];
+ micro_queue array[n_queue];
+
+ micro_queue& choose( ticket k ) {
+ // The formula here approximates LRU in a cache-oblivious way.
+ return array[index(k)];
+ }
+
+ //! Value for effective_capacity that denotes unbounded queue.
+ static const ptrdiff_t infinite_capacity = ptrdiff_t(~size_t(0)/2);
+};
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+#pragma warning( push )
+// unary minus operator applied to unsigned type, result still unsigned
+#pragma warning( disable: 4146 )
+#endif /* _MSC_VER && !defined(__INTEL_COMPILER) */
+
+//------------------------------------------------------------------------
+// micro_queue
+//------------------------------------------------------------------------
+void micro_queue::push( const void* item, ticket k, concurrent_queue_base& base ) {
+ k &= -concurrent_queue_rep::n_queue;
+ page* p = NULL;
+ size_t index = (k/concurrent_queue_rep::n_queue & base.items_per_page-1);
+ if( !index ) {
+ size_t n = sizeof(page) + base.items_per_page*base.item_size;
+ p = static_cast<page*>(operator new( n ));
+ p->mask = 0;
+ p->next = NULL;
+ }
+ {
+ push_finalizer finalizer( *this, k+concurrent_queue_rep::n_queue );
+ SpinwaitUntilEq( tail_counter, k );
+ if( p ) {
+ spin_mutex::scoped_lock lock( page_mutex );
+ if( page* q = tail_page )
+ q->next = p;
+ else
+ head_page = p;
+ tail_page = p;
+ } else {
+ p = tail_page;
+ }
+ base.copy_item( *p, index, item );
+ // If no exception was thrown, mark item as present.
+ p->mask |= uintptr(1)<<index;
+ }
+}
+
+bool micro_queue::pop( void* dst, ticket k, concurrent_queue_base& base ) {
+ k &= -concurrent_queue_rep::n_queue;
+ SpinwaitUntilEq( head_counter, k );
+ SpinwaitWhileEq( tail_counter, k );
+ page& p = *head_page;
+ __TBB_ASSERT( &p, NULL );
+ size_t index = (k/concurrent_queue_rep::n_queue & base.items_per_page-1);
+ bool success = false;
+ {
+ pop_finalizer finalizer( *this, k+concurrent_queue_rep::n_queue, index==base.items_per_page-1 ? &p : NULL );
+ if( p.mask & uintptr(1)<<index ) {
+ success = true;
+ base.assign_and_destroy_item( dst, p, index );
+ }
+ }
+ return success;
+}
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+#pragma warning( pop )
+#endif /* _MSC_VER && !defined(__INTEL_COMPILER) */
+
+//------------------------------------------------------------------------
+// concurrent_queue_base
+//------------------------------------------------------------------------
+concurrent_queue_base::concurrent_queue_base( size_t item_size ) {
+ items_per_page = item_size<=8 ? 32 :
+ item_size<=16 ? 16 :
+ item_size<=32 ? 8 :
+ item_size<=64 ? 4 :
+ item_size<=128 ? 2 :
+ 1;
+ my_capacity = size_t(-1)/(item_size>1 ? item_size : 2);
+ my_rep = cache_aligned_allocator<concurrent_queue_rep>().allocate(1);
+ __TBB_ASSERT( (size_t)my_rep % NFS_GetLineSize()==0, "alignment error" );
+ __TBB_ASSERT( (size_t)&my_rep->head_counter % NFS_GetLineSize()==0, "alignment error" );
+ __TBB_ASSERT( (size_t)&my_rep->tail_counter % NFS_GetLineSize()==0, "alignment error" );
+ __TBB_ASSERT( (size_t)&my_rep->array % NFS_GetLineSize()==0, "alignment error" );
+ memset(my_rep,0,sizeof(concurrent_queue_rep));
+ this->item_size = item_size;
+}
+
+concurrent_queue_base::~concurrent_queue_base() {
+ cache_aligned_allocator<concurrent_queue_rep>().deallocate(my_rep,1);
+}
+
+void concurrent_queue_base::internal_push( const void* src ) {
+ concurrent_queue_rep& r = *my_rep;
+ concurrent_queue_rep::ticket k = r.tail_counter++;
+ ptrdiff_t e = my_capacity;
+ if( e<concurrent_queue_rep::infinite_capacity ) {
+ ExponentialBackoff backoff;
+ for(;;) {
+ if( (ptrdiff_t)(k-r.head_counter)<e ) break;
+ backoff.pause();
+ e = const_cast<volatile ptrdiff_t&>(my_capacity);
+ }
+ }
+ r.choose(k).push(src,k,*this);
+}
+
+void concurrent_queue_base::internal_pop( void* dst ) {
+ concurrent_queue_rep& r = *my_rep;
+ concurrent_queue_rep::ticket k;
+ do {
+ k = r.head_counter++;
+ } while( !r.choose(k).pop(dst,k,*this) );
+}
+
+bool concurrent_queue_base::internal_pop_if_present( void* dst ) {
+ concurrent_queue_rep& r = *my_rep;
+ concurrent_queue_rep::ticket k;
+ do {
+ ExponentialBackoff backoff;
+ for(;;) {
+ k = r.head_counter;
+ if( r.tail_counter<=k ) {
+ // Queue is empty
+ return false;
+ }
+ // Queue had item with ticket k when we looked. Attempt to get that item.
+ if( r.head_counter.compare_and_swap(k+1,k)==k ) {
+ break;
+ }
+ // Another thread snatched the item, so pause and retry.
+ backoff.pause();
+ }
+ } while( !r.choose(k).pop(dst,k,*this) );
+ return true;
+}
+
+bool concurrent_queue_base::internal_push_if_not_full( const void* src ) {
+ concurrent_queue_rep& r = *my_rep;
+ ExponentialBackoff backoff;
+ concurrent_queue_rep::ticket k;
+ for(;;) {
+ k = r.tail_counter;
+ if( (ptrdiff_t)(k-r.head_counter)>=my_capacity ) {
+ // Queue is full
+ return false;
+ }
+ // Queue had empty slot with ticket k when we looked. Attempt to claim that slot.
+ if( r.tail_counter.compare_and_swap(k+1,k)==k )
+ break;
+ // Another thread claimed the slot, so pause and retry.
+ backoff.pause();
+ }
+ r.choose(k).push(src,k,*this);
+ return true;
+}
+
+ptrdiff_t concurrent_queue_base::internal_size() const {
+ __TBB_ASSERT( sizeof(ptrdiff_t)<=sizeof(size_t), NULL );
+ return ptrdiff_t(my_rep->tail_counter-my_rep->head_counter);
+}
+
+void concurrent_queue_base::internal_set_capacity( ptrdiff_t capacity, size_t item_size ) {
+ my_capacity = capacity<0 ? concurrent_queue_rep::infinite_capacity : capacity;
+}
+
+//------------------------------------------------------------------------
+// concurrent_queue_iterator_rep
+//------------------------------------------------------------------------
+class concurrent_queue_iterator_rep {
+public:
+ typedef concurrent_queue_rep::ticket ticket;
+ ticket head_counter;
+ const concurrent_queue_base& my_queue;
+ concurrent_queue_base::page* array[concurrent_queue_rep::n_queue];
+ concurrent_queue_iterator_rep( const concurrent_queue_base& queue ) :
+ head_counter(queue.my_rep->head_counter),
+ my_queue(queue)
+ {
+ const concurrent_queue_rep& rep = *queue.my_rep;
+ for( size_t k=0; k<concurrent_queue_rep::n_queue; ++k )
+ array[k] = rep.array[k].head_page;
+ }
+ //! Get pointer to kth element
+ void* choose( size_t k ) {
+ if( k==my_queue.my_rep->tail_counter )
+ return NULL;
+ else {
+ concurrent_queue_base::page* p = array[concurrent_queue_rep::index(k)];
+ __TBB_ASSERT(p,NULL);
+ size_t i = k/concurrent_queue_rep::n_queue & my_queue.items_per_page-1;
+ return static_cast<unsigned char*>(static_cast<void*>(p+1)) + my_queue.item_size*i;
+ }
+ }
+};
+
+//------------------------------------------------------------------------
+// concurrent_queue_iterator_base
+//------------------------------------------------------------------------
+concurrent_queue_iterator_base::concurrent_queue_iterator_base( const concurrent_queue_base& queue ) {
+ my_rep = new concurrent_queue_iterator_rep(queue);
+ my_item = my_rep->choose(my_rep->head_counter);
+}
+
+void concurrent_queue_iterator_base::assign( const concurrent_queue_iterator_base& other ) {
+ if( my_rep!=other.my_rep ) {
+ if( my_rep ) {
+ delete my_rep;
+ my_rep = NULL;
+ }
+ if( other.my_rep ) {
+ my_rep = new concurrent_queue_iterator_rep( *other.my_rep );
+ }
+ }
+ my_item = other.my_item;
+}
+
+void concurrent_queue_iterator_base::advance() {
+ __TBB_ASSERT( my_item, "attempt to increment iterator past end of queue" );
+ size_t k = my_rep->head_counter;
+ const concurrent_queue_base& queue = my_rep->my_queue;
+ __TBB_ASSERT( my_item==my_rep->choose(k), NULL );
+ size_t i = k/concurrent_queue_rep::n_queue & queue.items_per_page-1;
+ if( i==queue.items_per_page-1 ) {
+ concurrent_queue_base::page*& root = my_rep->array[concurrent_queue_rep::index(k)];
+ root = root->next;
+ }
+ my_rep->head_counter = k+1;
+ my_item = my_rep->choose(k+1);
+}
+
+concurrent_queue_iterator_base::~concurrent_queue_iterator_base() {
+ delete my_rep;
+ my_rep = NULL;
+}
+
+} // namespace internal
+
+} // namespace tbb
diff --git a/src/tbb/concurrent_vector.cpp b/src/tbb/concurrent_vector.cpp
new file mode 100644
index 0000000..951c291
--- /dev/null
+++ b/src/tbb/concurrent_vector.cpp
@@ -0,0 +1,260 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "tbb/concurrent_vector.h"
+#include "tbb_misc.h"
+#include <stdexcept>
+#include "itt_notify.h"
+#include "tbb/task.h"
+
+
+namespace tbb {
+
+namespace internal {
+
+void concurrent_vector_base::internal_grow_to_at_least( size_type new_size, size_type element_size, internal_array_op1 init ) {
+ size_type e = my_early_size;
+ while( e<new_size ) {
+ size_type f = my_early_size.compare_and_swap(new_size,e);
+ if( f==e ) {
+ internal_grow( e, new_size, element_size, init );
+ return;
+ }
+ e = f;
+ }
+}
+
+class concurrent_vector_base::helper {
+ static void extend_segment( concurrent_vector_base& v );
+public:
+ static segment_index_t find_segment_end( const concurrent_vector_base& v ) {
+ const size_t pointers_per_long_segment = sizeof(void*)==4 ? 32 : 64;
+ const size_t pointers_per_short_segment = 2;
+ //unsigned u = v.my_segment==v.my_storage ? pointers_per_short_segment : pointers_per_long_segment;
+ segment_index_t u = v.my_segment==(&(v.my_storage[0])) ? pointers_per_short_segment : pointers_per_long_segment;
+ segment_index_t k = 0;
+ while( k<u && v.my_segment[k].array )
+ ++k;
+ return k;
+ }
+ static void extend_segment_if_necessary( concurrent_vector_base& v, size_t k ) {
+ const size_t pointers_per_short_segment = 2;
+ if( k>=pointers_per_short_segment && v.my_segment==v.my_storage ) {
+ extend_segment(v);
+ }
+ }
+};
+
+void concurrent_vector_base::helper::extend_segment( concurrent_vector_base& v ) {
+ const size_t pointers_per_long_segment = sizeof(void*)==4 ? 32 : 64;
+ segment_t* s = (segment_t*)NFS_Allocate( pointers_per_long_segment, sizeof(segment_t), NULL );
+ memset( s, 0, pointers_per_long_segment*sizeof(segment_t) );
+ // If other threads are trying to set pointers in the short segment, wait for them to finish their
+ // assigments before we copy the short segment to the long segment.
+ ExponentialBackoff backoff;
+ while( !v.my_storage[0].array || !v.my_storage[1].array ) {
+ backoff.pause();
+ }
+ s[0] = v.my_storage[0];
+ s[1] = v.my_storage[1];
+ if( v.my_segment.compare_and_swap( s, v.my_storage )!=v.my_storage )
+ NFS_Free(s);
+}
+
+concurrent_vector_base::size_type concurrent_vector_base::internal_capacity() const {
+ return segment_base( helper::find_segment_end(*this) );
+}
+
+void concurrent_vector_base::internal_reserve( size_type n, size_type element_size, size_type max_size ) {
+ if( n>max_size ) {
+ throw std::length_error("argument to ConcurrentVector::reserve exceeds ConcurrentVector::max_size()");
+ }
+ for( segment_index_t k = helper::find_segment_end(*this); segment_base(k)<n; ++k ) {
+ helper::extend_segment_if_necessary(*this,k);
+ size_t m = segment_size(k);
+ __TBB_ASSERT( !my_segment[k].array, "concurrent operation during reserve(...)?" );
+ my_segment[k].array = NFS_Allocate( m, element_size, NULL );
+ }
+}
+
+void concurrent_vector_base::internal_copy( const concurrent_vector_base& src, size_type element_size, internal_array_op2 copy ) {
+ size_type n = src.my_early_size;
+ my_early_size = n;
+ my_segment = my_storage;
+ if( n ) {
+ size_type b;
+ for( segment_index_t k=0; (b=segment_base(k))<n; ++k ) {
+ helper::extend_segment_if_necessary(*this,k);
+ size_t m = segment_size(k);
+ __TBB_ASSERT( !my_segment[k].array, "concurrent operation during copy construction?" );
+ my_segment[k].array = NFS_Allocate( m, element_size, NULL );
+ if( m>n-b ) m = n-b;
+ copy( my_segment[k].array, src.my_segment[k].array, m );
+ }
+ }
+}
+
+void concurrent_vector_base::internal_assign( const concurrent_vector_base& src, size_type element_size, internal_array_op1 destroy, internal_array_op2 assign, internal_array_op2 copy ) {
+ size_type n = src.my_early_size;
+ while( my_early_size>n ) {
+ segment_index_t k = segment_index_of( my_early_size-1 );
+ size_type b=segment_base(k);
+ size_type new_end = b>=n ? b : n;
+ __TBB_ASSERT( my_early_size>new_end, NULL );
+ destroy( (char*)my_segment[k].array+element_size*(new_end-b), my_early_size-new_end );
+ my_early_size = new_end;
+ }
+ size_type dst_initialized_size = my_early_size;
+ my_early_size = n;
+ size_type b;
+ for( segment_index_t k=0; (b=segment_base(k))<n; ++k ) {
+ helper::extend_segment_if_necessary(*this,k);
+ size_t m = segment_size(k);
+ if( !my_segment[k].array )
+ my_segment[k].array = NFS_Allocate( m, element_size, NULL );
+ if( m>n-b ) m = n-b;
+ size_type a = 0;
+ if( dst_initialized_size>b ) {
+ a = dst_initialized_size-b;
+ if( a>m ) a = m;
+ assign( my_segment[k].array, src.my_segment[k].array, a );
+ m -= a;
+ a *= element_size;
+ }
+ if( m>0 )
+ copy( (char*)my_segment[k].array+a, (char*)src.my_segment[k].array+a, m );
+ }
+ __TBB_ASSERT( src.my_early_size==n, "detected use of ConcurrentVector::operator= with right side that was concurrently modified" );
+}
+
+void* concurrent_vector_base::internal_push_back( size_type element_size, size_type& index ) {
+ __TBB_ASSERT( sizeof(my_early_size)==sizeof(reference_count), NULL );
+ //size_t tmp = __TBB_FetchAndIncrementWacquire(*(tbb::internal::reference_count*)&my_early_size);
+ size_t tmp = __TBB_FetchAndIncrementWacquire((tbb::internal::reference_count*)&my_early_size);
+ index = tmp;
+ segment_index_t k_old = segment_index_of( tmp );
+ size_type base = segment_base(k_old);
+ helper::extend_segment_if_necessary(*this,k_old);
+ segment_t& s = my_segment[k_old];
+ void* array = s.array;
+ if( !array ) {
+ // FIXME - consider factoring this out and share with internal_grow_by
+ if( base==tmp ) {
+ __TBB_ASSERT( !s.array, NULL );
+ size_t n = segment_size(k_old);
+ array = NFS_Allocate( n, element_size, NULL );
+ ITT_NOTIFY( sync_releasing, &s.array );
+ s.array = array;
+ } else {
+ ITT_NOTIFY(sync_prepare, &s.array);
+ internal::SpinwaitWhileEq( s.array, (void*)0 );
+ ITT_NOTIFY(sync_acquired, &s.array);
+ array = s.array;
+ }
+ }
+ size_type j_begin = tmp-base;
+ return (void*)((char*)array+element_size*j_begin);
+}
+
+concurrent_vector_base::size_type concurrent_vector_base::internal_grow_by( size_type delta, size_type element_size, internal_array_op1 init ) {
+ size_type result = my_early_size.fetch_and_add(delta);
+ internal_grow( result, result+delta, element_size, init );
+ return result;
+}
+
+void concurrent_vector_base::internal_grow( const size_type start, size_type finish, size_type element_size, internal_array_op1 init ) {
+ __TBB_ASSERT( start<finish, "start must be less than finish" );
+ size_t tmp = start;
+ do {
+ segment_index_t k_old = segment_index_of( tmp );
+ size_type base = segment_base(k_old);
+ size_t n = segment_size(k_old);
+ helper::extend_segment_if_necessary(*this,k_old);
+ segment_t& s = my_segment[k_old];
+ void* array = s.array;
+ if( !array ) {
+ if( base==tmp ) {
+ __TBB_ASSERT( !s.array, NULL );
+ array = NFS_Allocate( n, element_size, NULL );
+ ITT_NOTIFY( sync_releasing, &s.array );
+ s.array = array;
+ } else {
+ ITT_NOTIFY(sync_prepare, &s.array);
+ internal::SpinwaitWhileEq( s.array, (void*)0 );
+ ITT_NOTIFY(sync_acquired, &s.array);
+ array = s.array;
+ }
+ }
+ size_type j_begin = tmp-base;
+ size_type j_end = n > finish-base ? finish-base : n;
+ (*init)( (void*)((char*)array+element_size*j_begin), j_end-j_begin );
+ tmp = base+j_end;
+ } while( tmp<finish );
+}
+
+void concurrent_vector_base::internal_clear( internal_array_op1 destroy, bool reclaim_storage ) {
+ // Set "my_early_size" early, so that subscripting errors can be caught.
+ // FIXME - doing so may be hurting exception saftey
+ __TBB_ASSERT( my_segment, NULL );
+ size_type finish = my_early_size;
+ my_early_size = 0;
+ while( finish>0 ) {
+ segment_index_t k_old = segment_index_of(finish-1);
+ segment_t& s = my_segment[k_old];
+ __TBB_ASSERT( s.array, NULL );
+ size_type base = segment_base(k_old);
+ size_type j_end = finish-base;
+ __TBB_ASSERT( j_end, NULL );
+ (*destroy)( s.array, j_end );
+ finish = base;
+ }
+
+ // Free the arrays
+ if( reclaim_storage ) {
+ size_t k = helper::find_segment_end(*this);
+ while( k>0 ) {
+ --k;
+ segment_t& s = my_segment[k];
+ void* array = s.array;
+ s.array = NULL;
+ NFS_Free( array );
+ }
+ // Clear short segment.
+ my_storage[0].array = NULL;
+ my_storage[1].array = NULL;
+ segment_t* s = my_segment;
+ if( s!=my_storage ) {
+ my_segment = my_storage;
+ NFS_Free( s );
+ }
+ }
+}
+
+} // namespace internal
+
+} // tbb
diff --git a/src/tbb/em64t-masm/atomic_support.asm b/src/tbb/em64t-masm/atomic_support.asm
new file mode 100644
index 0000000..79f606a
--- /dev/null
+++ b/src/tbb/em64t-masm/atomic_support.asm
@@ -0,0 +1,80 @@
+; Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+;
+; This file is part of Threading Building Blocks.
+;
+; Threading Building Blocks is free software; you can redistribute it
+; and/or modify it under the terms of the GNU General Public License
+; version 2 as published by the Free Software Foundation.
+;
+; Threading Building Blocks 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 General Public License for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with Threading Building Blocks; if not, write to the Free Software
+; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+;
+; As a special exception, you may use this file as part of a free software
+; library without restriction. Specifically, if other files instantiate
+; templates or use macros or inline functions from this file, or you compile
+; this file and link it with other files to produce an executable, this
+; file does not by itself cause the resulting executable to be covered by
+; the GNU General Public License. This exception does not however
+; invalidate any other reasons why the executable file might be covered by
+; the GNU General Public License.
+
+; DO NOT EDIT - AUTOMATICALLY GENERATED FROM .s FILE
+.code
+ ALIGN 8
+ PUBLIC __TBB_machine_fetchadd1
+__TBB_machine_fetchadd1:
+ mov rax,rdx
+ lock xadd [rcx],al
+ ret
+.code
+ ALIGN 8
+ PUBLIC __TBB_machine_fetchstore1
+__TBB_machine_fetchstore1:
+ mov rax,rdx
+ lock xchg [rcx],al
+ ret
+.code
+ ALIGN 8
+ PUBLIC __TBB_machine_cmpswp1
+__TBB_machine_cmpswp1:
+ mov rax,r8
+ lock cmpxchg [rcx],dl
+ ret
+.code
+ ALIGN 8
+ PUBLIC __TBB_machine_fetchadd2
+__TBB_machine_fetchadd2:
+ mov rax,rdx
+ lock xadd [rcx],ax
+ ret
+.code
+ ALIGN 8
+ PUBLIC __TBB_machine_fetchstore2
+__TBB_machine_fetchstore2:
+ mov rax,rdx
+ lock xchg [rcx],ax
+ ret
+.code
+ ALIGN 8
+ PUBLIC __TBB_machine_cmpswp2
+__TBB_machine_cmpswp2:
+ mov rax,r8
+ lock cmpxchg [rcx],dx
+ ret
+.code
+ ALIGN 8
+ PUBLIC __TBB_machine_pause
+__TBB_machine_pause:
+L1:
+ dw 090f3H; pause
+ add ecx,-1
+ jne L1
+ ret
+end
+
diff --git a/src/tbb/em64t-tbb-mac-export.txt b/src/tbb/em64t-tbb-mac-export.txt
new file mode 100644
index 0000000..24b57ce
--- /dev/null
+++ b/src/tbb/em64t-tbb-mac-export.txt
@@ -0,0 +1,127 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# cache_aligned_allocator.cpp
+__ZN3tbb8internal12NFS_AllocateEmmPv
+__ZN3tbb8internal15NFS_GetLineSizeEv
+__ZN3tbb8internal8NFS_FreeEPv
+
+# Task.cpp
+__ZN3tbb19task_scheduler_init10initializeEi
+__ZN3tbb19task_scheduler_init9terminateEv
+__ZN3tbb4task22internal_set_ref_countEi
+__ZN3tbb4task22spawn_and_wait_for_allERNS_9task_listE
+__ZN3tbb4task4selfEv
+__ZN3tbb4task7destroyERS0_
+__ZNK3tbb4task26is_owned_by_current_threadEv
+__ZN3tbb8internal19allocate_root_proxy4freeERNS_4taskE
+__ZN3tbb8internal19allocate_root_proxy8allocateEm
+__ZNK3tbb8internal20allocate_child_proxy4freeERNS_4taskE
+__ZNK3tbb8internal20allocate_child_proxy8allocateEm
+__ZNK3tbb8internal27allocate_continuation_proxy4freeERNS_4taskE
+__ZNK3tbb8internal27allocate_continuation_proxy8allocateEm
+__ZNK3tbb8internal34allocate_additional_child_of_proxy4freeERNS_4taskE
+__ZNK3tbb8internal34allocate_additional_child_of_proxy8allocateEm
+
+# tbb_misc.cpp
+__ZN3tbb17assertion_failureEPKciS1_S1_
+__ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E
+__ZN3tbb8internal36get_initial_auto_partitioner_divisorEv
+__ZN3tbb8internal13handle_perrorEiPKc
+
+# Pipeline.cpp
+__ZTIN3tbb6filterE
+__ZTVN3tbb6filterE
+__ZN3tbb6filterD2Ev
+__ZN3tbb8pipeline10add_filterERNS_6filterE
+__ZN3tbb8pipeline12inject_tokenERNS_4taskE
+__ZN3tbb8pipeline3runEm
+__ZN3tbb8pipeline5clearEv
+__ZN3tbb8pipelineC1Ev
+__ZN3tbb8pipelineD1Ev
+
+# ReaderWriterMutex.cpp
+__ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv
+__ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv
+__ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b
+__ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv
+__ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b
+
+# spin_rw_mutex.cpp
+__ZN3tbb13spin_rw_mutex16internal_upgradeEPS0_
+__ZN3tbb13spin_rw_mutex22internal_itt_releasingEPS0_
+__ZN3tbb13spin_rw_mutex23internal_acquire_readerEPS0_
+__ZN3tbb13spin_rw_mutex23internal_acquire_writerEPS0_
+__ZN3tbb13spin_rw_mutex18internal_downgradeEPS0_
+__ZN3tbb13spin_rw_mutex23internal_release_readerEPS0_
+__ZN3tbb13spin_rw_mutex23internal_release_writerEPS0_
+__ZN3tbb13spin_rw_mutex27internal_try_acquire_readerEPS0_
+__ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_
+
+# SpinMutex.cpp
+__ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_
+__ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv
+__ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_
+
+# mutex.cpp
+__ZN3tbb5mutex11scoped_lock16internal_acquireERS0_
+__ZN3tbb5mutex11scoped_lock16internal_releaseEv
+__ZN3tbb5mutex11scoped_lock20internal_try_acquireERS0_
+__ZN3tbb5mutex16internal_destroyEv
+__ZN3tbb5mutex18internal_constructEv
+
+# QueuingMutex.cpp
+__ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_
+__ZN3tbb13queuing_mutex11scoped_lock7releaseEv
+__ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_
+
+# concurrent_hash_map
+__ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv
+
+# ConcurrentQueue.cpp
+__ZN3tbb8internal21concurrent_queue_base12internal_popEPv
+__ZN3tbb8internal21concurrent_queue_base13internal_pushEPKv
+__ZN3tbb8internal21concurrent_queue_base21internal_set_capacityElm
+__ZN3tbb8internal21concurrent_queue_base23internal_pop_if_presentEPv
+__ZN3tbb8internal21concurrent_queue_base25internal_push_if_not_fullEPKv
+__ZN3tbb8internal21concurrent_queue_baseC2Em
+__ZN3tbb8internal21concurrent_queue_baseD2Ev
+__ZTIN3tbb8internal21concurrent_queue_baseE
+__ZN3tbb8internal30concurrent_queue_iterator_base6assignERKS1_
+__ZN3tbb8internal30concurrent_queue_iterator_base7advanceEv
+__ZN3tbb8internal30concurrent_queue_iterator_baseC2ERKNS0_21concurrent_queue_baseE
+__ZN3tbb8internal30concurrent_queue_iterator_baseD2Ev
+__ZNK3tbb8internal21concurrent_queue_base13internal_sizeEv
+
+# ConcurrentVector.cpp
+__ZN3tbb8internal22concurrent_vector_base13internal_copyERKS1_mPFvPvPKvmE
+__ZN3tbb8internal22concurrent_vector_base14internal_clearEPFvPvmEb
+__ZN3tbb8internal22concurrent_vector_base15internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_
+__ZN3tbb8internal22concurrent_vector_base16internal_grow_byEmmPFvPvmE
+__ZN3tbb8internal22concurrent_vector_base16internal_reserveEmmm
+__ZN3tbb8internal22concurrent_vector_base18internal_push_backEmRm
+__ZN3tbb8internal22concurrent_vector_base25internal_grow_to_at_leastEmmPFvPvmE
+__ZNK3tbb8internal22concurrent_vector_base17internal_capacityEv
diff --git a/src/tbb/em64t-tbb.def b/src/tbb/em64t-tbb.def
new file mode 100644
index 0000000..989a6d1
--- /dev/null
+++ b/src/tbb/em64t-tbb.def
@@ -0,0 +1,139 @@
+; Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+;
+; This file is part of Threading Building Blocks.
+;
+; Threading Building Blocks is free software; you can redistribute it
+; and/or modify it under the terms of the GNU General Public License
+; version 2 as published by the Free Software Foundation.
+;
+; Threading Building Blocks 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 General Public License for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with Threading Building Blocks; if not, write to the Free Software
+; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+;
+; As a special exception, you may use this file as part of a free software
+; library without restriction. Specifically, if other files instantiate
+; templates or use macros or inline functions from this file, or you compile
+; this file and link it with other files to produce an executable, this
+; file does not by itself cause the resulting executable to be covered by
+; the GNU General Public License. This exception does not however
+; invalidate any other reasons why the executable file might be covered by
+; the GNU General Public License.
+
+; This file is organized with a section for each .cpp file.
+; Each of these sections is in alphabetical order.
+
+EXPORTS
+
+; Assembly-language support that is called directly by clients
+__TBB_machine_cmpswp1
+__TBB_machine_fetchadd1
+__TBB_machine_fetchstore1
+__TBB_machine_cmpswp2
+__TBB_machine_fetchadd2
+__TBB_machine_fetchstore2
+__TBB_machine_pause
+
+; cache_aligned_allocator.cpp
+?NFS_Allocate at internal@tbb@@YAPEAX_K0PEAX at Z
+?NFS_GetLineSize at internal@tbb@@YA_KXZ
+?NFS_Free at internal@tbb@@YAXPEAX at Z
+
+; task.cpp
+?allocate at allocate_additional_child_of_proxy@internal at tbb@@QEBAAEAVtask at 3@_K at Z
+?allocate at allocate_child_proxy@internal at tbb@@QEBAAEAVtask at 3@_K at Z
+?allocate at allocate_continuation_proxy@internal at tbb@@QEBAAEAVtask at 3@_K at Z
+?allocate at allocate_root_proxy@internal at tbb@@SAAEAVtask at 3@_K at Z
+?destroy at task@tbb@@QEAAXAEAV12@@Z
+?free at allocate_additional_child_of_proxy@internal at tbb@@QEBAXAEAVtask at 3@@Z
+?free at allocate_child_proxy@internal at tbb@@QEBAXAEAVtask at 3@@Z
+?free at allocate_continuation_proxy@internal at tbb@@QEBAXAEAVtask at 3@@Z
+?free at allocate_root_proxy@internal at tbb@@SAXAEAVtask at 3@@Z
+?initialize at task_scheduler_init@tbb@@QEAAXH at Z
+?internal_set_ref_count at task@tbb@@AEAAXH at Z
+?is_owned_by_current_thread at task@tbb@@QEBA_NXZ
+?self at task@tbb@@SAAEAV12 at XZ
+?spawn_and_wait_for_all at task@tbb@@QEAAXAEAVtask_list at 2@@Z
+?terminate at task_scheduler_init@tbb@@QEAAXXZ
+
+; tbb_misc.cpp
+?assertion_failure at tbb@@YAXPEBDH00 at Z
+?get_initial_auto_partitioner_divisor at internal@tbb@@YA_KXZ
+?handle_perror at internal@tbb@@YAXHPEBD at Z
+?set_assertion_handler at tbb@@YAP6AXPEBDH00 at ZP6AX0H00@Z at Z
+
+; pipeline.cpp
+??_7pipeline at tbb@@6B@
+??0pipeline at tbb@@QEAA at XZ
+??1filter at tbb@@UEAA at XZ
+??1pipeline at tbb@@UEAA at XZ
+?add_filter at pipeline@tbb@@QEAAXAEAVfilter at 2@@Z
+?clear at pipeline@tbb@@QEAAXXZ
+?inject_token at pipeline@tbb@@AEAAXAEAVtask at 2@@Z
+?run at pipeline@tbb@@QEAAX_K at Z
+
+; queuing_rw_mutex.cpp
+?acquire at scoped_lock@queuing_rw_mutex at tbb@@QEAAXAEAV23 at _N@Z
+?downgrade_to_reader at scoped_lock@queuing_rw_mutex at tbb@@QEAA_NXZ
+?release at scoped_lock@queuing_rw_mutex at tbb@@QEAAXXZ
+?upgrade_to_writer at scoped_lock@queuing_rw_mutex at tbb@@QEAA_NXZ
+?try_acquire at scoped_lock@queuing_rw_mutex at tbb@@QEAA_NAEAV23 at _N@Z
+
+; spin_rw_mutex.cpp
+?internal_itt_releasing at spin_rw_mutex@tbb@@CAXPEAV12@@Z
+?internal_acquire_writer at spin_rw_mutex@tbb@@CA_NPEAV12@@Z
+?internal_acquire_reader at spin_rw_mutex@tbb@@CAXPEAV12@@Z
+?internal_downgrade at spin_rw_mutex@tbb@@CAXPEAV12@@Z
+?internal_upgrade at spin_rw_mutex@tbb@@CA_NPEAV12@@Z
+?internal_release_reader at spin_rw_mutex@tbb@@CAXPEAV12@@Z
+?internal_release_writer at spin_rw_mutex@tbb@@CAXPEAV12@@Z
+?internal_try_acquire_writer at spin_rw_mutex@tbb@@CA_NPEAV12@@Z
+?internal_try_acquire_reader at spin_rw_mutex@tbb@@CA_NPEAV12@@Z
+
+; spin_mutex.cpp
+?internal_acquire at scoped_lock@spin_mutex at tbb@@AEAAXAEAV23@@Z
+?internal_release at scoped_lock@spin_mutex at tbb@@AEAAXXZ
+?internal_try_acquire at scoped_lock@spin_mutex at tbb@@AEAA_NAEAV23@@Z
+
+; mutex.cpp
+?internal_acquire at scoped_lock@mutex at tbb@@AEAAXAEAV23@@Z
+?internal_release at scoped_lock@mutex at tbb@@AEAAXXZ
+?internal_try_acquire at scoped_lock@mutex at tbb@@AEAA_NAEAV23@@Z
+?internal_construct at mutex@tbb@@AEAAXXZ
+?internal_destroy at mutex@tbb@@AEAAXXZ
+
+; queuing_mutex.cpp
+?acquire at scoped_lock@queuing_mutex at tbb@@QEAAXAEAV23@@Z
+?release at scoped_lock@queuing_mutex at tbb@@QEAAXXZ
+?try_acquire at scoped_lock@queuing_mutex at tbb@@QEAA_NAEAV23@@Z
+
+; concurrent_hash_map.cpp
+?internal_grow_predicate at hash_map_segment_base@internal at tbb@@QEBA_NXZ
+
+; ConcurrentQueue.cpp
+??0concurrent_queue_base at internal@tbb@@IEAA at _K@Z
+??0concurrent_queue_iterator_base at internal@tbb@@IEAA at AEBVconcurrent_queue_base@12@@Z
+??1concurrent_queue_base at internal@tbb@@MEAA at XZ
+??1concurrent_queue_iterator_base at internal@tbb@@IEAA at XZ
+?advance at concurrent_queue_iterator_base@internal at tbb@@IEAAXXZ
+?assign at concurrent_queue_iterator_base@internal at tbb@@IEAAXAEBV123@@Z
+?internal_pop at concurrent_queue_base@internal at tbb@@IEAAXPEAX at Z
+?internal_pop_if_present at concurrent_queue_base@internal at tbb@@IEAA_NPEAX at Z
+?internal_push at concurrent_queue_base@internal at tbb@@IEAAXPEBX at Z
+?internal_push_if_not_full at concurrent_queue_base@internal at tbb@@IEAA_NPEBX at Z
+?internal_set_capacity at concurrent_queue_base@internal at tbb@@IEAAX_J_K at Z
+?internal_size at concurrent_queue_base@internal at tbb@@IEBA_JXZ
+
+; ConcurrentVector.cpp
+?internal_assign at concurrent_vector_base@internal at tbb@@IEAAXAEBV123 at _KP6AXPEAX1@ZP6AX2PEBX1 at Z5@Z
+?internal_capacity at concurrent_vector_base@internal at tbb@@IEBA_KXZ
+?internal_clear at concurrent_vector_base@internal at tbb@@IEAAXP6AXPEAX_K at Z_N@Z
+?internal_copy at concurrent_vector_base@internal at tbb@@IEAAXAEBV123 at _KP6AXPEAXPEBX1@Z at Z
+?internal_grow_by at concurrent_vector_base@internal at tbb@@IEAA_K_K0P6AXPEAX0 at Z@Z
+?internal_grow_to_at_least at concurrent_vector_base@internal at tbb@@IEAAX_K0P6AXPEAX0 at Z@Z
+?internal_push_back at concurrent_vector_base@internal at tbb@@IEAAPEAX_KAEA_K at Z
+?internal_reserve at concurrent_vector_base@internal at tbb@@IEAAX_K00 at Z
diff --git a/src/tbb/gate.h b/src/tbb/gate.h
new file mode 100644
index 0000000..c6b92f1
--- /dev/null
+++ b/src/tbb/gate.h
@@ -0,0 +1,224 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef _TBB_Gate_H
+#define _TBB_Gate_H
+
+#define IMPROVED_GATING 0
+namespace tbb {
+
+namespace internal {
+
+#if NO_GATE
+
+//! Dummy implementation for experiments
+class Gate {
+public:
+ void open() {}
+ void close() {}
+ void wait() {}
+};
+
+#elif USE_WINTHREAD
+
+class Gate {
+#if IMPROVED_GATING
+public:
+ typedef intptr state_t;
+private:
+ //! If state==0, then thread executing wait() suspend until state becomes non-zero.
+ state_t state;
+#else
+ intptr count;
+#endif /* IMPROVED_GATING */
+ CRITICAL_SECTION critical_section;
+ HANDLE event;
+public:
+ //! Initialize with count=0
+ Gate() :
+#if IMPROVED_GATING
+ state(0)
+#else
+ count(0)
+#endif /* IMPROVED_GATING */
+ {
+ event = CreateEvent( NULL, true, false, NULL );
+ InitializeCriticalSection( &critical_section );
+ }
+ ~Gate() {
+#if !IMPROVED_GATING
+ __TBB_ASSERT( count==0, NULL );
+#endif /* !IMPROVED_GATING */
+ CloseHandle( event );
+ DeleteCriticalSection( &critical_section );
+ }
+#if IMPROVED_GATING
+ //! Get current state of gate
+ state_t get_state() const {
+ return state;
+ }
+ //! Update state=value if state==comparand (flip==false) or state!=comparand (flip==true)
+ void try_update( intptr value, intptr comparand, bool flip=false ) {
+ __TBB_ASSERT( comparand!=0 || value!=0, "either value or comparand must be non-zero" );
+ EnterCriticalSection( &critical_section );
+ state_t old = state;
+ if( flip ? old!=comparand : old==comparand ) {
+ state = value;
+ if( !old )
+ SetEvent( event );
+ else if( !value )
+ ResetEvent( event );
+ }
+ LeaveCriticalSection( &critical_section );
+ }
+ //! Wait for state!=0.
+ void wait() {
+ if( state==0 ) {
+ WaitForSingleObject( event, INFINITE );
+ }
+ }
+#else /* IMPROVED_GATING */
+ //! Increment count
+ void open() {
+ EnterCriticalSection( &critical_section );
+ if( ++count==1 )
+ SetEvent( event );
+ LeaveCriticalSection( &critical_section );
+ }
+ //! Decrement count
+ void close() {
+ EnterCriticalSection( &critical_section );
+ if( --count==0 )
+ ResetEvent( event );
+ LeaveCriticalSection( &critical_section );
+ }
+ //! Wait for count>0.
+ void wait() {
+ if( count==0 )
+ WaitForSingleObject( event, INFINITE );
+ }
+#endif /* IMPROVED_GATING */
+};
+
+#elif USE_PTHREAD
+
+class Gate {
+#if IMPROVED_GATING
+public:
+ typedef intptr state_t;
+private:
+ //! If state==0, then thread executing wait() suspend until state becomes non-zero.
+ state_t state;
+#else
+ intptr count;
+#endif /* IMPROVED_GATING */
+ pthread_mutex_t mutex;
+ pthread_cond_t cond;
+public:
+ //! Initialize with count=0
+ Gate() :
+#if IMPROVED_GATING
+ state(0)
+#else
+ count(0)
+#endif /* IMPROVED_GATING */
+ {
+ pthread_mutex_init( &mutex, NULL );
+ pthread_cond_init( &cond, NULL);
+ }
+ ~Gate() {
+#if !IMPROVED_GATING
+ __TBB_ASSERT( count==0, NULL );
+#endif /* !IMPROVED_GATING */
+ pthread_cond_destroy( &cond );
+ pthread_mutex_destroy( &mutex );
+ }
+#if IMPROVED_GATING
+ //! Get current state of gate
+ state_t get_state() const {
+ return state;
+ }
+ //! Update state=value if state==comparand (flip==false) or state!=comparand (flip==true)
+ void try_update( intptr value, intptr comparand, bool flip=false ) {
+ __TBB_ASSERT( comparand!=0 || value!=0, "either value or comparand must be non-zero" );
+ pthread_mutex_lock( &mutex );
+ state_t old = state;
+ if( flip ? old!=comparand : old==comparand ) {
+ state = value;
+ if( !old )
+ pthread_cond_broadcast( &cond );
+ }
+ pthread_mutex_unlock( &mutex );
+ }
+ //! Wait for state!=0.
+ void wait() {
+ if( state==0 ) {
+ pthread_mutex_lock( &mutex );
+ while( state==0 ) {
+ pthread_cond_wait( &cond, &mutex );
+ }
+ pthread_mutex_unlock( &mutex );
+ }
+ }
+#else /* IMPROVED_GATING */
+ //! Increment count
+ void open() {
+ pthread_mutex_lock( &mutex );
+ if( ++count==1 )
+ pthread_cond_broadcast( &cond );
+ pthread_mutex_unlock( &mutex );
+ }
+ //! Decrement count
+ void close() {
+ pthread_mutex_lock( &mutex );
+ __TBB_ASSERT( count>0, NULL );
+ --count;
+ pthread_mutex_unlock( &mutex );
+ }
+ //! Wait for count>0.
+ void wait() {
+ if( count==0 ) {
+ pthread_mutex_lock( &mutex );
+ while( count==0 ) {
+ pthread_cond_wait( &cond, &mutex );
+ }
+ pthread_mutex_unlock( &mutex );
+ }
+ }
+#endif /* IMPROVED_GATING */
+};
+
+#else
+#error Must define USE_PTHREAD or USE_WINTHREAD
+#endif /* threading kind */
+
+} // namespace Internal
+
+} // namespace ThreadingBuildingBlocks
+
+#endif /* _TBB_Gate_H */
diff --git a/src/tbb/ia32-masm/atomic_support.asm b/src/tbb/ia32-masm/atomic_support.asm
new file mode 100644
index 0000000..a733745
--- /dev/null
+++ b/src/tbb/ia32-masm/atomic_support.asm
@@ -0,0 +1,176 @@
+; Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+;
+; This file is part of Threading Building Blocks.
+;
+; Threading Building Blocks is free software; you can redistribute it
+; and/or modify it under the terms of the GNU General Public License
+; version 2 as published by the Free Software Foundation.
+;
+; Threading Building Blocks 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 General Public License for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with Threading Building Blocks; if not, write to the Free Software
+; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+;
+; As a special exception, you may use this file as part of a free software
+; library without restriction. Specifically, if other files instantiate
+; templates or use macros or inline functions from this file, or you compile
+; this file and link it with other files to produce an executable, this
+; file does not by itself cause the resulting executable to be covered by
+; the GNU General Public License. This exception does not however
+; invalidate any other reasons why the executable file might be covered by
+; the GNU General Public License.
+
+; DO NOT EDIT - AUTOMATICALLY GENERATED FROM .s FILE
+.686
+.model flat,c
+.code
+ ALIGN 4
+ PUBLIC c __TBB_machine_fetchadd1
+__TBB_machine_fetchadd1:
+ mov edx,4[esp]
+ mov eax,8[esp]
+ lock xadd [edx],al
+ ret
+.code
+ ALIGN 4
+ PUBLIC c __TBB_machine_fetchstore1
+__TBB_machine_fetchstore1:
+ mov edx,4[esp]
+ mov eax,8[esp]
+ lock xchg [edx],al
+ ret
+.code
+ ALIGN 4
+ PUBLIC c __TBB_machine_cmpswp1
+__TBB_machine_cmpswp1:
+ mov edx,4[esp]
+ mov ecx,8[esp]
+ mov eax,12[esp]
+ lock cmpxchg [edx],cl
+ ret
+.code
+ ALIGN 4
+ PUBLIC c __TBB_machine_fetchadd2
+__TBB_machine_fetchadd2:
+ mov edx,4[esp]
+ mov eax,8[esp]
+ lock xadd [edx],ax
+ ret
+.code
+ ALIGN 4
+ PUBLIC c __TBB_machine_fetchstore2
+__TBB_machine_fetchstore2:
+ mov edx,4[esp]
+ mov eax,8[esp]
+ lock xchg [edx],ax
+ ret
+.code
+ ALIGN 4
+ PUBLIC c __TBB_machine_cmpswp2
+__TBB_machine_cmpswp2:
+ mov edx,4[esp]
+ mov ecx,8[esp]
+ mov eax,12[esp]
+ lock cmpxchg [edx],cx
+ ret
+.code
+ ALIGN 4
+ PUBLIC c __TBB_machine_fetchadd4
+__TBB_machine_fetchadd4:
+ mov edx,4[esp]
+ mov eax,8[esp]
+ lock xadd [edx],eax
+ ret
+.code
+ ALIGN 4
+ PUBLIC c __TBB_machine_fetchstore4
+__TBB_machine_fetchstore4:
+ mov edx,4[esp]
+ mov eax,8[esp]
+ lock xchg [edx],eax
+ ret
+.code
+ ALIGN 4
+ PUBLIC c __TBB_machine_cmpswp4
+__TBB_machine_cmpswp4:
+ mov edx,4[esp]
+ mov ecx,8[esp]
+ mov eax,12[esp]
+ lock cmpxchg [edx],ecx
+ ret
+.code
+ ALIGN 4
+ PUBLIC c __TBB_machine_fetchadd8
+__TBB_machine_fetchadd8:
+ push ebx
+ push edi
+ mov edi,12[esp]
+ mov eax,[edi]
+ mov edx,4[edi]
+__TBB_machine_fetchadd8_loop:
+ mov ebx,16[esp]
+ mov ecx,20[esp]
+ add ebx,eax
+ adc ecx,edx
+ lock cmpxchg8b qword ptr [edi]
+ jnz __TBB_machine_fetchadd8_loop
+ pop edi
+ pop ebx
+ ret
+.code
+ ALIGN 4
+ PUBLIC c __TBB_machine_fetchstore8
+__TBB_machine_fetchstore8:
+ push ebx
+ push edi
+ mov edi,12[esp]
+ mov ebx,16[esp]
+ mov ecx,20[esp]
+ mov eax,[edi]
+ mov edx,4[edi]
+__TBB_machine_fetchstore8_loop:
+ lock cmpxchg8b qword ptr [edi]
+ jnz __TBB_machine_fetchstore8_loop
+ pop edi
+ pop ebx
+ ret
+.code
+ ALIGN 4
+ PUBLIC c __TBB_machine_cmpswp8
+__TBB_machine_cmpswp8:
+ push ebx
+ push edi
+ mov edi,12[esp]
+ mov ebx,16[esp]
+ mov ecx,20[esp]
+ mov eax,24[esp]
+ mov edx,28[esp]
+ lock cmpxchg8b qword ptr [edi]
+ pop edi
+ pop ebx
+ ret
+.code
+ ALIGN 4
+ PUBLIC c __TBB_machine_load8
+__TBB_machine_Load8:
+ sub esp,12
+ mov ecx,16[esp]
+ fild qword ptr [ecx]
+ fistp qword ptr [esp]
+ mov eax,[esp]
+ mov edx,4[esp]
+ add esp,12
+ ret
+.code
+ ALIGN 4
+ PUBLIC c __TBB_machine_store8
+__TBB_machine_Store8:
+ mov ecx,4[esp]
+ fild qword ptr 8[esp]
+ fistp qword ptr [ecx]
+ ret
+end
diff --git a/src/tbb/ia32-masm/lock_byte.asm b/src/tbb/ia32-masm/lock_byte.asm
new file mode 100644
index 0000000..f8517f3
--- /dev/null
+++ b/src/tbb/ia32-masm/lock_byte.asm
@@ -0,0 +1,46 @@
+; Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+;
+; This file is part of Threading Building Blocks.
+;
+; Threading Building Blocks is free software; you can redistribute it
+; and/or modify it under the terms of the GNU General Public License
+; version 2 as published by the Free Software Foundation.
+;
+; Threading Building Blocks 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 General Public License for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with Threading Building Blocks; if not, write to the Free Software
+; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+;
+; As a special exception, you may use this file as part of a free software
+; library without restriction. Specifically, if other files instantiate
+; templates or use macros or inline functions from this file, or you compile
+; this file and link it with other files to produce an executable, this
+; file does not by itself cause the resulting executable to be covered by
+; the GNU General Public License. This exception does not however
+; invalidate any other reasons why the executable file might be covered by
+; the GNU General Public License.
+
+; DO NOT EDIT - AUTOMATICALLY GENERATED FROM .s FILE
+.686
+.model flat,c
+.code
+ ALIGN 4
+ PUBLIC c __TBB_machine_trylockbyte
+__TBB_machine_trylockbyte:
+ mov edx,4[esp]
+ mov al,[edx]
+ mov cl,1
+ test al,1
+ jnz __TBB_machine_trylockbyte_contended
+ lock cmpxchg [edx],cl
+ jne __TBB_machine_trylockbyte_contended
+ mov eax,1
+ ret
+__TBB_machine_trylockbyte_contended:
+ xor eax,eax
+ ret
+end
diff --git a/src/tbb/ia32-tbb-mac-export.txt b/src/tbb/ia32-tbb-mac-export.txt
new file mode 100644
index 0000000..a7cdc6a
--- /dev/null
+++ b/src/tbb/ia32-tbb-mac-export.txt
@@ -0,0 +1,127 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# cache_aligned_allocator.cpp
+__ZN3tbb8internal12NFS_AllocateEmmPv
+__ZN3tbb8internal15NFS_GetLineSizeEv
+__ZN3tbb8internal8NFS_FreeEPv
+
+# Task.cpp
+__ZN3tbb19task_scheduler_init10initializeEi
+__ZN3tbb19task_scheduler_init9terminateEv
+__ZN3tbb4task22internal_set_ref_countEi
+__ZN3tbb4task22spawn_and_wait_for_allERNS_9task_listE
+__ZN3tbb4task4selfEv
+__ZN3tbb4task7destroyERS0_
+__ZNK3tbb4task26is_owned_by_current_threadEv
+__ZN3tbb8internal19allocate_root_proxy4freeERNS_4taskE
+__ZN3tbb8internal19allocate_root_proxy8allocateEm
+__ZNK3tbb8internal20allocate_child_proxy4freeERNS_4taskE
+__ZNK3tbb8internal20allocate_child_proxy8allocateEm
+__ZNK3tbb8internal27allocate_continuation_proxy4freeERNS_4taskE
+__ZNK3tbb8internal27allocate_continuation_proxy8allocateEm
+__ZNK3tbb8internal34allocate_additional_child_of_proxy4freeERNS_4taskE
+__ZNK3tbb8internal34allocate_additional_child_of_proxy8allocateEm
+
+# tbb_misc.cpp
+__ZN3tbb17assertion_failureEPKciS1_S1_
+__ZN3tbb21set_assertion_handlerEPFvPKciS1_S1_E
+__ZN3tbb8internal36get_initial_auto_partitioner_divisorEv
+__ZN3tbb8internal13handle_perrorEiPKc
+
+# Pipeline.cpp
+__ZTIN3tbb6filterE
+__ZTVN3tbb6filterE
+__ZN3tbb6filterD2Ev
+__ZN3tbb8pipeline10add_filterERNS_6filterE
+__ZN3tbb8pipeline12inject_tokenERNS_4taskE
+__ZN3tbb8pipeline3runEm
+__ZN3tbb8pipeline5clearEv
+__ZN3tbb8pipelineC1Ev
+__ZN3tbb8pipelineD1Ev
+
+# ReaderWriterMutex.cpp
+__ZN3tbb16queuing_rw_mutex11scoped_lock17upgrade_to_writerEv
+__ZN3tbb16queuing_rw_mutex11scoped_lock19downgrade_to_readerEv
+__ZN3tbb16queuing_rw_mutex11scoped_lock7acquireERS0_b
+__ZN3tbb16queuing_rw_mutex11scoped_lock7releaseEv
+__ZN3tbb16queuing_rw_mutex11scoped_lock11try_acquireERS0_b
+
+# spin_rw_mutex.cpp
+__ZN3tbb13spin_rw_mutex16internal_upgradeEPS0_
+__ZN3tbb13spin_rw_mutex22internal_itt_releasingEPS0_
+__ZN3tbb13spin_rw_mutex23internal_acquire_readerEPS0_
+__ZN3tbb13spin_rw_mutex23internal_acquire_writerEPS0_
+__ZN3tbb13spin_rw_mutex18internal_downgradeEPS0_
+__ZN3tbb13spin_rw_mutex23internal_release_readerEPS0_
+__ZN3tbb13spin_rw_mutex23internal_release_writerEPS0_
+__ZN3tbb13spin_rw_mutex27internal_try_acquire_readerEPS0_
+__ZN3tbb13spin_rw_mutex27internal_try_acquire_writerEPS0_
+
+# SpinMutex.cpp
+__ZN3tbb10spin_mutex11scoped_lock16internal_acquireERS0_
+__ZN3tbb10spin_mutex11scoped_lock16internal_releaseEv
+__ZN3tbb10spin_mutex11scoped_lock20internal_try_acquireERS0_
+
+# mutex.cpp
+__ZN3tbb5mutex11scoped_lock16internal_acquireERS0_
+__ZN3tbb5mutex11scoped_lock16internal_releaseEv
+__ZN3tbb5mutex11scoped_lock20internal_try_acquireERS0_
+__ZN3tbb5mutex16internal_destroyEv
+__ZN3tbb5mutex18internal_constructEv
+
+# QueuingMutex.cpp
+__ZN3tbb13queuing_mutex11scoped_lock7acquireERS0_
+__ZN3tbb13queuing_mutex11scoped_lock7releaseEv
+__ZN3tbb13queuing_mutex11scoped_lock11try_acquireERS0_
+
+# concurrent_hash_map
+__ZNK3tbb8internal21hash_map_segment_base23internal_grow_predicateEv
+
+# ConcurrentQueue.cpp
+__ZN3tbb8internal21concurrent_queue_base12internal_popEPv
+__ZN3tbb8internal21concurrent_queue_base13internal_pushEPKv
+__ZN3tbb8internal21concurrent_queue_base21internal_set_capacityEim
+__ZN3tbb8internal21concurrent_queue_base23internal_pop_if_presentEPv
+__ZN3tbb8internal21concurrent_queue_base25internal_push_if_not_fullEPKv
+__ZN3tbb8internal21concurrent_queue_baseC2Em
+__ZN3tbb8internal21concurrent_queue_baseD2Ev
+__ZTIN3tbb8internal21concurrent_queue_baseE
+__ZN3tbb8internal30concurrent_queue_iterator_base6assignERKS1_
+__ZN3tbb8internal30concurrent_queue_iterator_base7advanceEv
+__ZN3tbb8internal30concurrent_queue_iterator_baseC2ERKNS0_21concurrent_queue_baseE
+__ZN3tbb8internal30concurrent_queue_iterator_baseD2Ev
+__ZNK3tbb8internal21concurrent_queue_base13internal_sizeEv
+
+# ConcurrentVector.cpp
+__ZN3tbb8internal22concurrent_vector_base13internal_copyERKS1_mPFvPvPKvmE
+__ZN3tbb8internal22concurrent_vector_base14internal_clearEPFvPvmEb
+__ZN3tbb8internal22concurrent_vector_base15internal_assignERKS1_mPFvPvmEPFvS4_PKvmESA_
+__ZN3tbb8internal22concurrent_vector_base16internal_grow_byEmmPFvPvmE
+__ZN3tbb8internal22concurrent_vector_base16internal_reserveEmmm
+__ZN3tbb8internal22concurrent_vector_base18internal_push_backEmRm
+__ZN3tbb8internal22concurrent_vector_base25internal_grow_to_at_leastEmmPFvPvmE
+__ZNK3tbb8internal22concurrent_vector_base17internal_capacityEv
diff --git a/src/tbb/ia32-tbb.def b/src/tbb/ia32-tbb.def
new file mode 100644
index 0000000..4ea0ee3
--- /dev/null
+++ b/src/tbb/ia32-tbb.def
@@ -0,0 +1,145 @@
+; Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+;
+; This file is part of Threading Building Blocks.
+;
+; Threading Building Blocks is free software; you can redistribute it
+; and/or modify it under the terms of the GNU General Public License
+; version 2 as published by the Free Software Foundation.
+;
+; Threading Building Blocks 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 General Public License for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with Threading Building Blocks; if not, write to the Free Software
+; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+;
+; As a special exception, you may use this file as part of a free software
+; library without restriction. Specifically, if other files instantiate
+; templates or use macros or inline functions from this file, or you compile
+; this file and link it with other files to produce an executable, this
+; file does not by itself cause the resulting executable to be covered by
+; the GNU General Public License. This exception does not however
+; invalidate any other reasons why the executable file might be covered by
+; the GNU General Public License.
+
+EXPORTS
+
+; Assembly-language support that is called directly by clients
+;__TBB_machine_cmpswp1
+;__TBB_machine_cmpswp2
+;__TBB_machine_cmpswp4
+__TBB_machine_cmpswp8
+;__TBB_machine_fetchadd1
+;__TBB_machine_fetchadd2
+;__TBB_machine_fetchadd4
+__TBB_machine_fetchadd8
+;__TBB_machine_fetchstore1
+;__TBB_machine_fetchstore2
+;__TBB_machine_fetchstore4
+__TBB_machine_fetchstore8
+__TBB_machine_store8
+__TBB_machine_load8
+__TBB_machine_trylockbyte
+
+; cache_aligned_allocator.cpp
+?NFS_Allocate at internal@tbb@@YAPAXIIPAX at Z
+?NFS_GetLineSize at internal@tbb@@YAIXZ
+?NFS_Free at internal@tbb@@YAXPAX at Z
+
+; task.cpp
+?allocate at allocate_additional_child_of_proxy@internal at tbb@@QBEAAVtask at 3@I at Z
+?allocate at allocate_child_proxy@internal at tbb@@QBEAAVtask at 3@I at Z
+?allocate at allocate_continuation_proxy@internal at tbb@@QBEAAVtask at 3@I at Z
+?allocate at allocate_root_proxy@internal at tbb@@SAAAVtask at 3@I at Z
+?destroy at task@tbb@@QAEXAAV12@@Z
+?free at allocate_additional_child_of_proxy@internal at tbb@@QBEXAAVtask at 3@@Z
+?free at allocate_child_proxy@internal at tbb@@QBEXAAVtask at 3@@Z
+?free at allocate_continuation_proxy@internal at tbb@@QBEXAAVtask at 3@@Z
+?free at allocate_root_proxy@internal at tbb@@SAXAAVtask at 3@@Z
+?initialize at task_scheduler_init@tbb@@QAEXH at Z
+?internal_set_ref_count at task@tbb@@AAEXH at Z
+?is_owned_by_current_thread at task@tbb@@QBE_NXZ
+?self at task@tbb@@SAAAV12 at XZ
+?spawn_and_wait_for_all at task@tbb@@QAEXAAVtask_list at 2@@Z
+?terminate at task_scheduler_init@tbb@@QAEXXZ
+
+; tbb_misc.cpp
+?assertion_failure at tbb@@YAXPBDH00 at Z
+?get_initial_auto_partitioner_divisor at internal@tbb@@YAIXZ
+?handle_perror at internal@tbb@@YAXHPBD at Z
+?set_assertion_handler at tbb@@YAP6AXPBDH00 at ZP6AX0H00@Z at Z
+
+; pipeline.cpp
+??0pipeline at tbb@@QAE at XZ
+??1filter at tbb@@UAE at XZ
+??1pipeline at tbb@@UAE at XZ
+??_7pipeline at tbb@@6B@
+?add_filter at pipeline@tbb@@QAEXAAVfilter at 2@@Z
+?clear at pipeline@tbb@@QAEXXZ
+?inject_token at pipeline@tbb@@AAEXAAVtask at 2@@Z
+?run at pipeline@tbb@@QAEXI at Z
+
+; queuing_rw_mutex.cpp
+?acquire at scoped_lock@queuing_rw_mutex at tbb@@QAEXAAV23 at _N@Z
+?downgrade_to_reader at scoped_lock@queuing_rw_mutex at tbb@@QAE_NXZ
+?release at scoped_lock@queuing_rw_mutex at tbb@@QAEXXZ
+?upgrade_to_writer at scoped_lock@queuing_rw_mutex at tbb@@QAE_NXZ
+?try_acquire at scoped_lock@queuing_rw_mutex at tbb@@QAE_NAAV23 at _N@Z
+
+; spin_rw_mutex.cpp
+?internal_acquire_reader at spin_rw_mutex@tbb@@CAXPAV12@@Z
+?internal_acquire_writer at spin_rw_mutex@tbb@@CA_NPAV12@@Z
+?internal_downgrade at spin_rw_mutex@tbb@@CAXPAV12@@Z
+?internal_itt_releasing at spin_rw_mutex@tbb@@CAXPAV12@@Z
+?internal_release_reader at spin_rw_mutex@tbb@@CAXPAV12@@Z
+?internal_release_writer at spin_rw_mutex@tbb@@CAXPAV12@@Z
+?internal_upgrade at spin_rw_mutex@tbb@@CA_NPAV12@@Z
+?internal_try_acquire_writer at spin_rw_mutex@tbb@@CA_NPAV12@@Z
+?internal_try_acquire_reader at spin_rw_mutex@tbb@@CA_NPAV12@@Z
+
+; spin_mutex.cpp
+?internal_acquire at scoped_lock@spin_mutex at tbb@@AAEXAAV23@@Z
+?internal_release at scoped_lock@spin_mutex at tbb@@AAEXXZ
+?internal_try_acquire at scoped_lock@spin_mutex at tbb@@AAE_NAAV23@@Z
+
+; mutex.cpp
+?internal_acquire at scoped_lock@mutex at tbb@@AAEXAAV23@@Z
+?internal_release at scoped_lock@mutex at tbb@@AAEXXZ
+?internal_try_acquire at scoped_lock@mutex at tbb@@AAE_NAAV23@@Z
+?internal_construct at mutex@tbb@@AAEXXZ
+?internal_destroy at mutex@tbb@@AAEXXZ
+
+; queuing_mutex.cpp
+?acquire at scoped_lock@queuing_mutex at tbb@@QAEXAAV23@@Z
+?release at scoped_lock@queuing_mutex at tbb@@QAEXXZ
+?try_acquire at scoped_lock@queuing_mutex at tbb@@QAE_NAAV23@@Z
+
+; concurrent_hash_map.cpp
+?internal_grow_predicate at hash_map_segment_base@internal at tbb@@QBE_NXZ
+
+; ConcurrentQueue.cpp
+?advance at concurrent_queue_iterator_base@internal at tbb@@IAEXXZ
+?assign at concurrent_queue_iterator_base@internal at tbb@@IAEXABV123@@Z
+?internal_size at concurrent_queue_base@internal at tbb@@IBEHXZ
+??0concurrent_queue_base at internal@tbb@@IAE at I@Z
+??0concurrent_queue_iterator_base at internal@tbb@@IAE at ABVconcurrent_queue_base@12@@Z
+??1concurrent_queue_base at internal@tbb@@MAE at XZ
+??1concurrent_queue_iterator_base at internal@tbb@@IAE at XZ
+?internal_pop at concurrent_queue_base@internal at tbb@@IAEXPAX at Z
+?internal_pop_if_present at concurrent_queue_base@internal at tbb@@IAE_NPAX at Z
+?internal_push at concurrent_queue_base@internal at tbb@@IAEXPBX at Z
+?internal_push_if_not_full at concurrent_queue_base@internal at tbb@@IAE_NPBX at Z
+?internal_set_capacity at concurrent_queue_base@internal at tbb@@IAEXHI at Z
+
+; ConcurrentVector.cpp
+?internal_assign at concurrent_vector_base@internal at tbb@@IAEXABV123 at IP6AXPAXI@ZP6AX1PBXI at Z4@Z
+?internal_capacity at concurrent_vector_base@internal at tbb@@IBEIXZ
+?internal_clear at concurrent_vector_base@internal at tbb@@IAEXP6AXPAXI at Z_N@Z
+?internal_copy at concurrent_vector_base@internal at tbb@@IAEXABV123 at IP6AXPAXPBXI@Z at Z
+?internal_grow_by at concurrent_vector_base@internal at tbb@@IAEIIIP6AXPAXI at Z@Z
+?internal_grow_to_at_least at concurrent_vector_base@internal at tbb@@IAEXIIP6AXPAXI at Z@Z
+?internal_push_back at concurrent_vector_base@internal at tbb@@IAEPAXIAAI at Z
+?internal_reserve at concurrent_vector_base@internal at tbb@@IAEXIII at Z
+
diff --git a/src/tbb/itanium-gas/atomic_support.s b/src/tbb/itanium-gas/atomic_support.s
new file mode 100644
index 0000000..1a46462
--- /dev/null
+++ b/src/tbb/itanium-gas/atomic_support.s
@@ -0,0 +1,678 @@
+// Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+//
+// This file is part of Threading Building Blocks.
+//
+// Threading Building Blocks is free software; you can redistribute it
+// and/or modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// Threading Building Blocks 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 General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Threading Building Blocks; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh
+# 1 "<stdin>"
+# 1 "<built-in>"
+# 1 "<command line>"
+# 1 "<stdin>"
+
+
+
+
+
+ .section .text
+ .align 16
+
+
+ .proc __TBB_machine_fetchadd1__TBB_full_fence#
+ .global __TBB_machine_fetchadd1__TBB_full_fence#
+__TBB_machine_fetchadd1__TBB_full_fence:
+{
+ mf
+ br __TBB_machine_fetchadd1acquire
+}
+ .endp __TBB_machine_fetchadd1__TBB_full_fence#
+
+ .proc __TBB_machine_fetchadd1acquire#
+ .global __TBB_machine_fetchadd1acquire#
+__TBB_machine_fetchadd1acquire:
+
+
+
+
+
+
+
+ ld1 r9=[r32]
+;;
+Retry_1acquire:
+ mov ar.ccv=r9
+ mov r8=r9;
+ add r10=r9,r33
+;;
+ cmpxchg1.acq r9=[r32],r10,ar.ccv
+;;
+ cmp.ne p7,p0=r8,r9
+ (p7) br.cond.dpnt Retry_1acquire
+ br.ret.sptk.many b0
+# 49 "<stdin>"
+ .endp __TBB_machine_fetchadd1acquire#
+# 62 "<stdin>"
+ .section .text
+ .align 16
+ .proc __TBB_machine_fetchstore1__TBB_full_fence#
+ .global __TBB_machine_fetchstore1__TBB_full_fence#
+__TBB_machine_fetchstore1__TBB_full_fence:
+ mf
+;;
+ xchg1 r8=[r32],r33
+ br.ret.sptk.many b0
+ .endp __TBB_machine_fetchstore1__TBB_full_fence#
+
+
+ .proc __TBB_machine_fetchstore1acquire#
+ .global __TBB_machine_fetchstore1acquire#
+__TBB_machine_fetchstore1acquire:
+ xchg1 r8=[r32],r33
+ br.ret.sptk.many b0
+ .endp __TBB_machine_fetchstore1acquire#
+# 88 "<stdin>"
+ .section .text
+ .align 16
+
+
+ .proc __TBB_machine_cmpswp1__TBB_full_fence#
+ .global __TBB_machine_cmpswp1__TBB_full_fence#
+__TBB_machine_cmpswp1__TBB_full_fence:
+{
+ mf
+ br __TBB_machine_cmpswp1acquire
+}
+ .endp __TBB_machine_cmpswp1__TBB_full_fence#
+
+ .proc __TBB_machine_cmpswp1acquire#
+ .global __TBB_machine_cmpswp1acquire#
+__TBB_machine_cmpswp1acquire:
+
+ zxt1 r34=r34
+;;
+
+ mov ar.ccv=r34
+;;
+ cmpxchg1.acq r8=[r32],r33,ar.ccv
+ br.ret.sptk.many b0
+ .endp __TBB_machine_cmpswp1acquire#
+// DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh
+# 1 "<stdin>"
+# 1 "<built-in>"
+# 1 "<command line>"
+# 1 "<stdin>"
+
+
+
+
+
+ .section .text
+ .align 16
+
+
+ .proc __TBB_machine_fetchadd2__TBB_full_fence#
+ .global __TBB_machine_fetchadd2__TBB_full_fence#
+__TBB_machine_fetchadd2__TBB_full_fence:
+{
+ mf
+ br __TBB_machine_fetchadd2acquire
+}
+ .endp __TBB_machine_fetchadd2__TBB_full_fence#
+
+ .proc __TBB_machine_fetchadd2acquire#
+ .global __TBB_machine_fetchadd2acquire#
+__TBB_machine_fetchadd2acquire:
+
+
+
+
+
+
+
+ ld2 r9=[r32]
+;;
+Retry_2acquire:
+ mov ar.ccv=r9
+ mov r8=r9;
+ add r10=r9,r33
+;;
+ cmpxchg2.acq r9=[r32],r10,ar.ccv
+;;
+ cmp.ne p7,p0=r8,r9
+ (p7) br.cond.dpnt Retry_2acquire
+ br.ret.sptk.many b0
+# 49 "<stdin>"
+ .endp __TBB_machine_fetchadd2acquire#
+# 62 "<stdin>"
+ .section .text
+ .align 16
+ .proc __TBB_machine_fetchstore2__TBB_full_fence#
+ .global __TBB_machine_fetchstore2__TBB_full_fence#
+__TBB_machine_fetchstore2__TBB_full_fence:
+ mf
+;;
+ xchg2 r8=[r32],r33
+ br.ret.sptk.many b0
+ .endp __TBB_machine_fetchstore2__TBB_full_fence#
+
+
+ .proc __TBB_machine_fetchstore2acquire#
+ .global __TBB_machine_fetchstore2acquire#
+__TBB_machine_fetchstore2acquire:
+ xchg2 r8=[r32],r33
+ br.ret.sptk.many b0
+ .endp __TBB_machine_fetchstore2acquire#
+# 88 "<stdin>"
+ .section .text
+ .align 16
+
+
+ .proc __TBB_machine_cmpswp2__TBB_full_fence#
+ .global __TBB_machine_cmpswp2__TBB_full_fence#
+__TBB_machine_cmpswp2__TBB_full_fence:
+{
+ mf
+ br __TBB_machine_cmpswp2acquire
+}
+ .endp __TBB_machine_cmpswp2__TBB_full_fence#
+
+ .proc __TBB_machine_cmpswp2acquire#
+ .global __TBB_machine_cmpswp2acquire#
+__TBB_machine_cmpswp2acquire:
+
+ zxt2 r34=r34
+;;
+
+ mov ar.ccv=r34
+;;
+ cmpxchg2.acq r8=[r32],r33,ar.ccv
+ br.ret.sptk.many b0
+ .endp __TBB_machine_cmpswp2acquire#
+// DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh
+# 1 "<stdin>"
+# 1 "<built-in>"
+# 1 "<command line>"
+# 1 "<stdin>"
+
+
+
+
+
+ .section .text
+ .align 16
+
+
+ .proc __TBB_machine_fetchadd4__TBB_full_fence#
+ .global __TBB_machine_fetchadd4__TBB_full_fence#
+__TBB_machine_fetchadd4__TBB_full_fence:
+{
+ mf
+ br __TBB_machine_fetchadd4acquire
+}
+ .endp __TBB_machine_fetchadd4__TBB_full_fence#
+
+ .proc __TBB_machine_fetchadd4acquire#
+ .global __TBB_machine_fetchadd4acquire#
+__TBB_machine_fetchadd4acquire:
+
+ cmp.eq p6,p0=1,r33
+ cmp.eq p8,p0=-1,r33
+ (p6) br.cond.dptk Inc_4acquire
+ (p8) br.cond.dpnt Dec_4acquire
+;;
+
+ ld4 r9=[r32]
+;;
+Retry_4acquire:
+ mov ar.ccv=r9
+ mov r8=r9;
+ add r10=r9,r33
+;;
+ cmpxchg4.acq r9=[r32],r10,ar.ccv
+;;
+ cmp.ne p7,p0=r8,r9
+ (p7) br.cond.dpnt Retry_4acquire
+ br.ret.sptk.many b0
+
+Inc_4acquire:
+ fetchadd4.acq r8=[r32],1
+ br.ret.sptk.many b0
+Dec_4acquire:
+ fetchadd4.acq r8=[r32],-1
+ br.ret.sptk.many b0
+
+ .endp __TBB_machine_fetchadd4acquire#
+# 62 "<stdin>"
+ .section .text
+ .align 16
+ .proc __TBB_machine_fetchstore4__TBB_full_fence#
+ .global __TBB_machine_fetchstore4__TBB_full_fence#
+__TBB_machine_fetchstore4__TBB_full_fence:
+ mf
+;;
+ xchg4 r8=[r32],r33
+ br.ret.sptk.many b0
+ .endp __TBB_machine_fetchstore4__TBB_full_fence#
+
+
+ .proc __TBB_machine_fetchstore4acquire#
+ .global __TBB_machine_fetchstore4acquire#
+__TBB_machine_fetchstore4acquire:
+ xchg4 r8=[r32],r33
+ br.ret.sptk.many b0
+ .endp __TBB_machine_fetchstore4acquire#
+# 88 "<stdin>"
+ .section .text
+ .align 16
+
+
+ .proc __TBB_machine_cmpswp4__TBB_full_fence#
+ .global __TBB_machine_cmpswp4__TBB_full_fence#
+__TBB_machine_cmpswp4__TBB_full_fence:
+{
+ mf
+ br __TBB_machine_cmpswp4acquire
+}
+ .endp __TBB_machine_cmpswp4__TBB_full_fence#
+
+ .proc __TBB_machine_cmpswp4acquire#
+ .global __TBB_machine_cmpswp4acquire#
+__TBB_machine_cmpswp4acquire:
+
+ zxt4 r34=r34
+;;
+
+ mov ar.ccv=r34
+;;
+ cmpxchg4.acq r8=[r32],r33,ar.ccv
+ br.ret.sptk.many b0
+ .endp __TBB_machine_cmpswp4acquire#
+// DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh
+# 1 "<stdin>"
+# 1 "<built-in>"
+# 1 "<command line>"
+# 1 "<stdin>"
+
+
+
+
+
+ .section .text
+ .align 16
+
+
+ .proc __TBB_machine_fetchadd8__TBB_full_fence#
+ .global __TBB_machine_fetchadd8__TBB_full_fence#
+__TBB_machine_fetchadd8__TBB_full_fence:
+{
+ mf
+ br __TBB_machine_fetchadd8acquire
+}
+ .endp __TBB_machine_fetchadd8__TBB_full_fence#
+
+ .proc __TBB_machine_fetchadd8acquire#
+ .global __TBB_machine_fetchadd8acquire#
+__TBB_machine_fetchadd8acquire:
+
+ cmp.eq p6,p0=1,r33
+ cmp.eq p8,p0=-1,r33
+ (p6) br.cond.dptk Inc_8acquire
+ (p8) br.cond.dpnt Dec_8acquire
+;;
+
+ ld8 r9=[r32]
+;;
+Retry_8acquire:
+ mov ar.ccv=r9
+ mov r8=r9;
+ add r10=r9,r33
+;;
+ cmpxchg8.acq r9=[r32],r10,ar.ccv
+;;
+ cmp.ne p7,p0=r8,r9
+ (p7) br.cond.dpnt Retry_8acquire
+ br.ret.sptk.many b0
+
+Inc_8acquire:
+ fetchadd8.acq r8=[r32],1
+ br.ret.sptk.many b0
+Dec_8acquire:
+ fetchadd8.acq r8=[r32],-1
+ br.ret.sptk.many b0
+
+ .endp __TBB_machine_fetchadd8acquire#
+# 62 "<stdin>"
+ .section .text
+ .align 16
+ .proc __TBB_machine_fetchstore8__TBB_full_fence#
+ .global __TBB_machine_fetchstore8__TBB_full_fence#
+__TBB_machine_fetchstore8__TBB_full_fence:
+ mf
+;;
+ xchg8 r8=[r32],r33
+ br.ret.sptk.many b0
+ .endp __TBB_machine_fetchstore8__TBB_full_fence#
+
+
+ .proc __TBB_machine_fetchstore8acquire#
+ .global __TBB_machine_fetchstore8acquire#
+__TBB_machine_fetchstore8acquire:
+ xchg8 r8=[r32],r33
+ br.ret.sptk.many b0
+ .endp __TBB_machine_fetchstore8acquire#
+# 88 "<stdin>"
+ .section .text
+ .align 16
+
+
+ .proc __TBB_machine_cmpswp8__TBB_full_fence#
+ .global __TBB_machine_cmpswp8__TBB_full_fence#
+__TBB_machine_cmpswp8__TBB_full_fence:
+{
+ mf
+ br __TBB_machine_cmpswp8acquire
+}
+ .endp __TBB_machine_cmpswp8__TBB_full_fence#
+
+ .proc __TBB_machine_cmpswp8acquire#
+ .global __TBB_machine_cmpswp8acquire#
+__TBB_machine_cmpswp8acquire:
+
+
+
+
+ mov ar.ccv=r34
+;;
+ cmpxchg8.acq r8=[r32],r33,ar.ccv
+ br.ret.sptk.many b0
+ .endp __TBB_machine_cmpswp8acquire#
+// DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh
+# 1 "<stdin>"
+# 1 "<built-in>"
+# 1 "<command line>"
+# 1 "<stdin>"
+
+
+
+
+
+ .section .text
+ .align 16
+# 19 "<stdin>"
+ .proc __TBB_machine_fetchadd1release#
+ .global __TBB_machine_fetchadd1release#
+__TBB_machine_fetchadd1release:
+
+
+
+
+
+
+
+ ld1 r9=[r32]
+;;
+Retry_1release:
+ mov ar.ccv=r9
+ mov r8=r9;
+ add r10=r9,r33
+;;
+ cmpxchg1.rel r9=[r32],r10,ar.ccv
+;;
+ cmp.ne p7,p0=r8,r9
+ (p7) br.cond.dpnt Retry_1release
+ br.ret.sptk.many b0
+# 49 "<stdin>"
+ .endp __TBB_machine_fetchadd1release#
+# 62 "<stdin>"
+ .section .text
+ .align 16
+ .proc __TBB_machine_fetchstore1release#
+ .global __TBB_machine_fetchstore1release#
+__TBB_machine_fetchstore1release:
+ mf
+;;
+ xchg1 r8=[r32],r33
+ br.ret.sptk.many b0
+ .endp __TBB_machine_fetchstore1release#
+# 88 "<stdin>"
+ .section .text
+ .align 16
+# 101 "<stdin>"
+ .proc __TBB_machine_cmpswp1release#
+ .global __TBB_machine_cmpswp1release#
+__TBB_machine_cmpswp1release:
+
+ zxt1 r34=r34
+;;
+
+ mov ar.ccv=r34
+;;
+ cmpxchg1.rel r8=[r32],r33,ar.ccv
+ br.ret.sptk.many b0
+ .endp __TBB_machine_cmpswp1release#
+// DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh
+# 1 "<stdin>"
+# 1 "<built-in>"
+# 1 "<command line>"
+# 1 "<stdin>"
+
+
+
+
+
+ .section .text
+ .align 16
+# 19 "<stdin>"
+ .proc __TBB_machine_fetchadd2release#
+ .global __TBB_machine_fetchadd2release#
+__TBB_machine_fetchadd2release:
+
+
+
+
+
+
+
+ ld2 r9=[r32]
+;;
+Retry_2release:
+ mov ar.ccv=r9
+ mov r8=r9;
+ add r10=r9,r33
+;;
+ cmpxchg2.rel r9=[r32],r10,ar.ccv
+;;
+ cmp.ne p7,p0=r8,r9
+ (p7) br.cond.dpnt Retry_2release
+ br.ret.sptk.many b0
+# 49 "<stdin>"
+ .endp __TBB_machine_fetchadd2release#
+# 62 "<stdin>"
+ .section .text
+ .align 16
+ .proc __TBB_machine_fetchstore2release#
+ .global __TBB_machine_fetchstore2release#
+__TBB_machine_fetchstore2release:
+ mf
+;;
+ xchg2 r8=[r32],r33
+ br.ret.sptk.many b0
+ .endp __TBB_machine_fetchstore2release#
+# 88 "<stdin>"
+ .section .text
+ .align 16
+# 101 "<stdin>"
+ .proc __TBB_machine_cmpswp2release#
+ .global __TBB_machine_cmpswp2release#
+__TBB_machine_cmpswp2release:
+
+ zxt2 r34=r34
+;;
+
+ mov ar.ccv=r34
+;;
+ cmpxchg2.rel r8=[r32],r33,ar.ccv
+ br.ret.sptk.many b0
+ .endp __TBB_machine_cmpswp2release#
+// DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh
+# 1 "<stdin>"
+# 1 "<built-in>"
+# 1 "<command line>"
+# 1 "<stdin>"
+
+
+
+
+
+ .section .text
+ .align 16
+# 19 "<stdin>"
+ .proc __TBB_machine_fetchadd4release#
+ .global __TBB_machine_fetchadd4release#
+__TBB_machine_fetchadd4release:
+
+ cmp.eq p6,p0=1,r33
+ cmp.eq p8,p0=-1,r33
+ (p6) br.cond.dptk Inc_4release
+ (p8) br.cond.dpnt Dec_4release
+;;
+
+ ld4 r9=[r32]
+;;
+Retry_4release:
+ mov ar.ccv=r9
+ mov r8=r9;
+ add r10=r9,r33
+;;
+ cmpxchg4.rel r9=[r32],r10,ar.ccv
+;;
+ cmp.ne p7,p0=r8,r9
+ (p7) br.cond.dpnt Retry_4release
+ br.ret.sptk.many b0
+
+Inc_4release:
+ fetchadd4.rel r8=[r32],1
+ br.ret.sptk.many b0
+Dec_4release:
+ fetchadd4.rel r8=[r32],-1
+ br.ret.sptk.many b0
+
+ .endp __TBB_machine_fetchadd4release#
+# 62 "<stdin>"
+ .section .text
+ .align 16
+ .proc __TBB_machine_fetchstore4release#
+ .global __TBB_machine_fetchstore4release#
+__TBB_machine_fetchstore4release:
+ mf
+;;
+ xchg4 r8=[r32],r33
+ br.ret.sptk.many b0
+ .endp __TBB_machine_fetchstore4release#
+# 88 "<stdin>"
+ .section .text
+ .align 16
+# 101 "<stdin>"
+ .proc __TBB_machine_cmpswp4release#
+ .global __TBB_machine_cmpswp4release#
+__TBB_machine_cmpswp4release:
+
+ zxt4 r34=r34
+;;
+
+ mov ar.ccv=r34
+;;
+ cmpxchg4.rel r8=[r32],r33,ar.ccv
+ br.ret.sptk.many b0
+ .endp __TBB_machine_cmpswp4release#
+// DO NOT EDIT - AUTOMATICALLY GENERATED FROM tools/generate_atomic/ipf_generate.sh
+# 1 "<stdin>"
+# 1 "<built-in>"
+# 1 "<command line>"
+# 1 "<stdin>"
+
+
+
+
+
+ .section .text
+ .align 16
+# 19 "<stdin>"
+ .proc __TBB_machine_fetchadd8release#
+ .global __TBB_machine_fetchadd8release#
+__TBB_machine_fetchadd8release:
+
+ cmp.eq p6,p0=1,r33
+ cmp.eq p8,p0=-1,r33
+ (p6) br.cond.dptk Inc_8release
+ (p8) br.cond.dpnt Dec_8release
+;;
+
+ ld8 r9=[r32]
+;;
+Retry_8release:
+ mov ar.ccv=r9
+ mov r8=r9;
+ add r10=r9,r33
+;;
+ cmpxchg8.rel r9=[r32],r10,ar.ccv
+;;
+ cmp.ne p7,p0=r8,r9
+ (p7) br.cond.dpnt Retry_8release
+ br.ret.sptk.many b0
+
+Inc_8release:
+ fetchadd8.rel r8=[r32],1
+ br.ret.sptk.many b0
+Dec_8release:
+ fetchadd8.rel r8=[r32],-1
+ br.ret.sptk.many b0
+
+ .endp __TBB_machine_fetchadd8release#
+# 62 "<stdin>"
+ .section .text
+ .align 16
+ .proc __TBB_machine_fetchstore8release#
+ .global __TBB_machine_fetchstore8release#
+__TBB_machine_fetchstore8release:
+ mf
+;;
+ xchg8 r8=[r32],r33
+ br.ret.sptk.many b0
+ .endp __TBB_machine_fetchstore8release#
+# 88 "<stdin>"
+ .section .text
+ .align 16
+# 101 "<stdin>"
+ .proc __TBB_machine_cmpswp8release#
+ .global __TBB_machine_cmpswp8release#
+__TBB_machine_cmpswp8release:
+
+
+
+
+ mov ar.ccv=r34
+;;
+ cmpxchg8.rel r8=[r32],r33,ar.ccv
+ br.ret.sptk.many b0
+ .endp __TBB_machine_cmpswp8release#
diff --git a/src/tbb/itanium-gas/lock_byte.s b/src/tbb/itanium-gas/lock_byte.s
new file mode 100644
index 0000000..ed88b75
--- /dev/null
+++ b/src/tbb/itanium-gas/lock_byte.s
@@ -0,0 +1,54 @@
+// Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+//
+// This file is part of Threading Building Blocks.
+//
+// Threading Building Blocks is free software; you can redistribute it
+// and/or modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// Threading Building Blocks 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 General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Threading Building Blocks; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+ // Support for class TinyLock
+ .section .text
+ .align 16
+ // unsigned int __TBB_machine_trylockbyte( byte& flag );
+ // r32 = address of flag
+ .proc __TBB_machine_trylockbyte#
+ .global __TBB_machine_trylockbyte#
+ADDRESS_OF_FLAG=r32
+RETCODE=r8
+FLAG=r9
+BUSY=r10
+SCRATCH=r11
+__TBB_machine_trylockbyte:
+ ld1.acq FLAG=[ADDRESS_OF_FLAG]
+ mov BUSY=1
+ mov RETCODE=0
+;;
+ cmp.ne p6,p0=0,FLAG
+ mov ar.ccv=r0
+(p6) br.ret.sptk.many b0
+;;
+ cmpxchg1.acq SCRATCH=[ADDRESS_OF_FLAG],BUSY,ar.ccv // Try to acquire lock
+;;
+ cmp.eq p6,p0=0,SCRATCH
+;;
+(p6) mov RETCODE=1
+ br.ret.sptk.many b0
+ .endp __TBB_TryLockByte#
diff --git a/src/tbb/itanium-gas/log2.s b/src/tbb/itanium-gas/log2.s
new file mode 100644
index 0000000..1d28d12
--- /dev/null
+++ b/src/tbb/itanium-gas/log2.s
@@ -0,0 +1,67 @@
+// Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+//
+// This file is part of Threading Building Blocks.
+//
+// Threading Building Blocks is free software; you can redistribute it
+// and/or modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// Threading Building Blocks 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 General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Threading Building Blocks; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+ // Support for class ConcurrentVector
+ .section .text
+ .align 16
+ // unsigned long __TBB_machine_lg( unsigned long x );
+ // r32 = x
+ .proc __TBB_machine_lg#
+ .global __TBB_machine_lg#
+__TBB_machine_lg:
+ shr r16=r32,1 // .x
+;;
+ shr r17=r32,2 // ..x
+ or r32=r32,r16 // xx
+;;
+ shr r16=r32,3 // ...xx
+ or r32=r32,r17 // xxx
+;;
+ shr r17=r32,5 // .....xxx
+ or r32=r32,r16 // xxxxx
+;;
+ shr r16=r32,8 // ........xxxxx
+ or r32=r32,r17 // xxxxxxxx
+;;
+ shr r17=r32,13
+ or r32=r32,r16 // 13x
+;;
+ shr r16=r32,21
+ or r32=r32,r17 // 21x
+;;
+ shr r17=r32,34
+ or r32=r32,r16 // 34x
+;;
+ shr r16=r32,55
+ or r32=r32,r17 // 55x
+;;
+ or r32=r32,r16 // 64x
+;;
+ popcnt r8=r32
+;;
+ add r8=-1,r8
+ br.ret.sptk.many b0
+ .endp __TBB_machine_lg#
diff --git a/src/tbb/itanium-gas/pause.s b/src/tbb/itanium-gas/pause.s
new file mode 100644
index 0000000..58e8d74
--- /dev/null
+++ b/src/tbb/itanium-gas/pause.s
@@ -0,0 +1,41 @@
+// Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+//
+// This file is part of Threading Building Blocks.
+//
+// Threading Building Blocks is free software; you can redistribute it
+// and/or modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// Threading Building Blocks 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 General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Threading Building Blocks; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+ .section .text
+ .align 16
+ // void __TBB_machine_pause( long count );
+ // r32 = count
+ .proc __TBB_machine_pause#
+ .global __TBB_machine_pause#
+count = r32
+__TBB_machine_pause:
+ hint.m 0
+ add count=-1,count
+;;
+ cmp.eq p6,p7=0,count
+(p7) br.cond.dpnt __TBB_machine_pause
+(p6) br.ret.sptk.many b0
+ .endp __TBB_machine_pause#
diff --git a/src/tbb/itanium-tbb.def b/src/tbb/itanium-tbb.def
new file mode 100644
index 0000000..61ad8c7
--- /dev/null
+++ b/src/tbb/itanium-tbb.def
@@ -0,0 +1,169 @@
+; Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+;
+; This file is part of Threading Building Blocks.
+;
+; Threading Building Blocks is free software; you can redistribute it
+; and/or modify it under the terms of the GNU General Public License
+; version 2 as published by the Free Software Foundation.
+;
+; Threading Building Blocks 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 General Public License for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with Threading Building Blocks; if not, write to the Free Software
+; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+;
+; As a special exception, you may use this file as part of a free software
+; library without restriction. Specifically, if other files instantiate
+; templates or use macros or inline functions from this file, or you compile
+; this file and link it with other files to produce an executable, this
+; file does not by itself cause the resulting executable to be covered by
+; the GNU General Public License. This exception does not however
+; invalidate any other reasons why the executable file might be covered by
+; the GNU General Public License.
+
+; This file is organized with a section for each .cpp file.
+; Each of these sections is in alphabetical order.
+
+EXPORTS
+
+; Assembly-language support that is called directly by clients
+__TBB_CompareAndSwap1acquire
+__TBB_CompareAndSwap1__TBB_full_fence
+__TBB_CompareAndSwap1release
+__TBB_CompareAndSwap2acquire
+__TBB_CompareAndSwap2__TBB_full_fence
+__TBB_CompareAndSwap2release
+__TBB_CompareAndSwap4acquire
+__TBB_CompareAndSwap4__TBB_full_fence
+__TBB_CompareAndSwap4release
+__TBB_CompareAndSwap8acquire
+__TBB_CompareAndSwap8__TBB_full_fence
+__TBB_CompareAndSwap8release
+__TBB_FetchAndAdd1acquire
+__TBB_FetchAndAdd1__TBB_full_fence
+__TBB_FetchAndAdd1release
+__TBB_FetchAndAdd2acquire
+__TBB_FetchAndAdd2__TBB_full_fence
+__TBB_FetchAndAdd2release
+__TBB_FetchAndAdd4acquire
+__TBB_FetchAndAdd4__TBB_full_fence
+__TBB_FetchAndAdd4release
+__TBB_FetchAndAdd8acquire
+__TBB_FetchAndAdd8__TBB_full_fence
+__TBB_FetchAndAdd8release
+__TBB_FetchAndStore1acquire
+__TBB_FetchAndStore1__TBB_full_fence
+__TBB_FetchAndStore1release
+__TBB_FetchAndStore2acquire
+__TBB_FetchAndStore2__TBB_full_fence
+__TBB_FetchAndStore2release
+__TBB_FetchAndStore4acquire
+__TBB_FetchAndStore4__TBB_full_fence
+__TBB_FetchAndStore4release
+__TBB_FetchAndStore8acquire
+__TBB_FetchAndStore8__TBB_full_fence
+__TBB_FetchAndStore8release
+__TBB_LockByte
+__TBB_TryLockByte
+__TBB_Log2
+__TBB_Pause
+;__TBB_TaggedCompareAndSwap
+;__TBB_CheckAcquire
+
+; NFS_Allocator.cpp
+?NFS_Allocate at internal@tbb@@YAPEAX_K0PEAX at Z
+?NFS_GetLineSize at internal@tbb@@YA_KXZ
+?NFS_Free at internal@tbb@@YAXPEAX at Z
+
+; task.cpp
+?allocate at allocate_additional_child_of_proxy@internal at tbb@@QEBAAEAVtask at 3@_K at Z
+?allocate at allocate_child_proxy@internal at tbb@@QEBAAEAVtask at 3@_K at Z
+?allocate at allocate_continuation_proxy@internal at tbb@@QEBAAEAVtask at 3@_K at Z
+?allocate at allocate_root_proxy@internal at tbb@@SAAEAVtask at 3@_K at Z
+?destroy at task@tbb@@QEAAXAEAV12@@Z
+?free at allocate_additional_child_of_proxy@internal at tbb@@QEBAXAEAVtask at 3@@Z
+?free at allocate_child_proxy@internal at tbb@@QEBAXAEAVtask at 3@@Z
+?free at allocate_continuation_proxy@internal at tbb@@QEBAXAEAVtask at 3@@Z
+?free at allocate_root_proxy@internal at tbb@@SAXAEAVtask at 3@@Z
+?initialize at task_scheduler_init@tbb@@QEAAXH at Z
+?internal_set_ref_count at task@tbb@@AEAAXH at Z
+?is_owned_by_current_thread at task@tbb@@QEBA_NXZ
+?self at task@tbb@@SAAEAV12 at XZ
+?spawn_and_wait_for_all at task@tbb@@QEAAXAEAVtask_list at 2@@Z
+?terminate at task_scheduler_init@tbb@@QEAAXXZ
+
+; tbb_misc.cpp
+?assertion_failure at tbb@@YAXPEBDH00 at Z
+
+; pipeline.cpp
+??_7pipeline at tbb@@6B@
+??0pipeline at tbb@@QEAA at XZ
+??1filter at tbb@@UEAA at XZ
+??1pipeline at tbb@@UEAA at XZ
+?add_filter at pipeline@tbb@@QEAAXAEAVfilter at 2@@Z
+?clear at pipeline@tbb@@QEAAXXZ
+?inject_token at pipeline@tbb@@AEAAXAEAVtask at 2@@Z
+?run at pipeline@tbb@@QEAAX_K at Z
+
+; queuing_rw_mutex.cpp
+?acquire at scoped_lock@queuing_rw_mutex at tbb@@QEAAXAEAV23 at _N@Z
+?downgrade_to_reader at scoped_lock@queuing_rw_mutex at tbb@@QEAA_NXZ
+?release at scoped_lock@queuing_rw_mutex at tbb@@QEAAXXZ
+?upgrade_to_writer at scoped_lock@queuing_rw_mutex at tbb@@QEAA_NXZ
+?try_acquire at scoped_lock@queuing_rw_mutex at tbb@@QEAA_NAEAV23 at _N@Z
+
+; spin_rw_mutex.cpp
+?internal_acquire_writer at spin_rw_mutex@tbb@@AEAA_NXZ
+?internal_acquire_reader at spin_rw_mutex@tbb@@AEAAXXZ
+?internal_upgrade at spin_rw_mutex@tbb@@AEAA_NXZ
+?internal_downgrade at spin_rw_mutex@tbb@@AEAAXXZ
+?internal_itt_releasing at spin_rw_mutex@tbb@@AEAAXXZ
+?internal_release_reader at spin_rw_mutex@tbb@@AEAAXXZ
+?internal_release_writer at spin_rw_mutex@tbb@@AEAAXXZ
+?internal_try_acquire_writer at spin_rw_mutex@tbb@@AEAA_NXZ
+?internal_try_acquire_reader at spin_rw_mutex@tbb@@AEAA_NXZ
+
+; spin_mutex.cpp
+?internal_acquire at scoped_lock@spin_mutex at tbb@@AEAAXAEAV23@@Z
+?internal_release at scoped_lock@spin_mutex at tbb@@AEAAXXZ
+?internal_try_acquire at scoped_lock@spin_mutex at tbb@@AEAA_NAEAV23@@Z
+
+; mutex.cpp
+?internal_acquire at scoped_lock@mutex at tbb@@AEAAXAEAV23@@Z
+?internal_release at scoped_lock@mutex at tbb@@AEAAXXZ
+?internal_try_acquire at scoped_lock@mutex at tbb@@AEAA_NAEAV23@@Z
+?internal_construct at mutex@tbb@@AEAAXXZ
+?internal_destroy at mutex@tbb@@AEAAXXZ
+
+; queuing_mutex.cpp
+?acquire at scoped_lock@queuing_mutex at tbb@@QEAAXAEAV23@@Z
+?release at scoped_lock@queuing_mutex at tbb@@QEAAXXZ
+?try_acquire at scoped_lock@queuing_mutex at tbb@@QEAA_NAEAV23@@Z
+
+; ConcurrentQueue.cpp
+??0concurrent_queue_base at internal@tbb@@IEAA at _K@Z
+??0concurrent_queue_iterator_base at internal@tbb@@IEAA at AEBVconcurrent_queue_base@12@@Z
+??1concurrent_queue_base at internal@tbb@@IEAA at XZ
+??1concurrent_queue_iterator_base at internal@tbb@@IEAA at XZ
+?advance at concurrent_queue_iterator_base@internal at tbb@@IEAAXXZ
+?assign at concurrent_queue_iterator_base@internal at tbb@@IEAAXAEBV123@@Z
+?internal_pop at concurrent_queue_base@internal at tbb@@IEAAXPEAX at Z
+?internal_pop_if_present at concurrent_queue_base@internal at tbb@@IEAA_NPEAX at Z
+?internal_push at concurrent_queue_base@internal at tbb@@IEAAXPEBX at Z
+?internal_push_if_not_full at concurrent_queue_base@internal at tbb@@IEAA_NPEBX at Z
+?internal_set_capacity at concurrent_queue_base@internal at tbb@@IEAAX_J_K at Z
+?internal_size at concurrent_queue_base@internal at tbb@@IEBA_JXZ
+
+; ConcurrentVector.cpp
+?internal_assign at concurrent_vector_base@internal at tbb@@IEAAXAEBV123 at _KP6AXPEAX1@ZP6AX2PEBX1 at Z5@Z
+?internal_capacity at concurrent_vector_base@internal at tbb@@IEBA_KXZ
+?internal_clear at concurrent_vector_base@internal at tbb@@IEAAXP6AXPEAX_K at Z_N@Z
+?internal_copy at concurrent_vector_base@internal at tbb@@IEAAXAEBV123 at _KP6AXPEAXPEBX1@Z at Z
+?internal_grow_by at concurrent_vector_base@internal at tbb@@IEAA_K_K0P6AXPEAX0 at Z@Z
+?internal_grow_to_at_least at concurrent_vector_base@internal at tbb@@IEAAX_K0P6AXPEAX0 at Z@Z
+?internal_push_back at concurrent_vector_base@internal at tbb@@IEAAPEAX_KAEA_K at Z
+?internal_reserve at concurrent_vector_base@internal at tbb@@IEAAX_K00 at Z
+
diff --git a/src/tbb/itt_notify.cpp b/src/tbb/itt_notify.cpp
new file mode 100644
index 0000000..76640d3
--- /dev/null
+++ b/src/tbb/itt_notify.cpp
@@ -0,0 +1,140 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#define INSTANTIATE_ITT_NOTIFY 1
+#include "itt_notify.h"
+#include "tbb_misc.h"
+#include <stdlib.h>
+#include <string.h>
+#include "tbb/tbb_machine.h"
+
+#if _WIN32||_WIN64
+#include <windows.h>
+#else
+#include <dlfcn.h>
+#endif /* _WIN32||_WIN64 */
+
+namespace tbb {
+namespace internal {
+
+#if DO_ITT_NOTIFY
+//! Table describing the __itt_notify handlers.
+static const DynamicLinkDescriptor ITT_HandlerTable[] = {
+ {"__itt_notify_sync_prepare",ADDRESS_OF_HANDLER(&ITT_Handler_sync_prepare)},
+ {"__itt_notify_sync_acquired",ADDRESS_OF_HANDLER(&ITT_Handler_sync_acquired)},
+ {"__itt_notify_sync_releasing",ADDRESS_OF_HANDLER(&ITT_Handler_sync_releasing)},
+ {"__itt_notify_sync_cancel",ADDRESS_OF_HANDLER(&ITT_Handler_sync_cancel)},
+# if _WIN32||_WIN64
+# ifdef UNICODE
+ {"__itt_thr_name_setW",ADDRESS_OF_HANDLER(&ITT_Handler_thr_name_set)},
+# else
+ {"__itt_thr_name_setA",ADDRESS_OF_HANDLER(&ITT_Handler_thr_name_set)},
+# endif
+# else
+ {"__itt_thr_name_set",ADDRESS_OF_HANDLER(&ITT_Handler_thr_name_set)},
+# endif
+};
+
+// LIBITTNOTIFY_NAME is the name of the ITT notification library
+# if _WIN32||_WIN64
+# define LIBITTNOTIFY_NAME "libittnotify.dll"
+# elif __linux__
+# define LIBITTNOTIFY_NAME "libittnotify.so"
+# elif __APPLE__
+# define LIBITTNOTIFY_NAME "libittnotify.dylib"
+# else
+# error Unknown OS
+# endif
+
+/** Caller is responsible for ensuring this routine is called exactly once. */
+bool InitializeITT() {
+ bool result = false;
+ // Check if we are running under control of VTune.
+ if( GetBoolEnvironmentVariable("KMP_FOR_TCHECK") || GetBoolEnvironmentVariable("KMP_FOR_TPROFILE") ) {
+ // Yes, we are under control of VTune. Check for libittnotify library.
+ result = FillDynamicLinks( LIBITTNOTIFY_NAME, ITT_HandlerTable, 5 );
+ }
+ if (!result){
+ for (int i = 0; i < 5; i++)
+ *ITT_HandlerTable[i].handler = NULL;
+ }
+ PrintExtraVersionInfo( "ITT", result?"yes":"no" );
+ return result;
+}
+
+//! Defined in task.cpp
+extern void DoOneTimeInitializations();
+
+//! Executed on very first call throught ITT_Handler_sync_prepare
+void dummy_sync_prepare( volatile void* ptr ) {
+ DoOneTimeInitializations();
+ __TBB_ASSERT( ITT_Handler_sync_prepare!=&dummy_sync_prepare, NULL );
+ if (ITT_Handler_sync_prepare)
+ (*ITT_Handler_sync_prepare) (ptr);
+}
+
+//! Executed on very first call throught ITT_Handler_sync_acquired
+void dummy_sync_acquired( volatile void* ptr ) {
+ DoOneTimeInitializations();
+ __TBB_ASSERT( ITT_Handler_sync_acquired!=&dummy_sync_acquired, NULL );
+ if (ITT_Handler_sync_acquired)
+ (*ITT_Handler_sync_acquired) (ptr);
+}
+
+//! Executed on very first call throught ITT_Handler_sync_releasing
+void dummy_sync_releasing( volatile void* ptr ) {
+ DoOneTimeInitializations();
+ __TBB_ASSERT( ITT_Handler_sync_releasing!=&dummy_sync_releasing, NULL );
+ if (ITT_Handler_sync_releasing)
+ (*ITT_Handler_sync_releasing) (ptr);
+}
+
+//! Executed on very first call throught ITT_Handler_sync_cancel
+void dummy_sync_cancel( volatile void* ptr ) {
+ DoOneTimeInitializations();
+ __TBB_ASSERT( ITT_Handler_sync_releasing!=&dummy_sync_cancel, NULL );
+ if (ITT_Handler_sync_cancel)
+ (*ITT_Handler_sync_cancel) (ptr);
+}
+
+//! Executed on very first call throught ITT_Handler_thr_name_set
+int dummy_thr_name_set( const char* str, int number ) {
+ DoOneTimeInitializations();
+ __TBB_ASSERT( ITT_Handler_thr_name_set!=&dummy_thr_name_set, NULL );
+ if (ITT_Handler_thr_name_set)
+ return (*ITT_Handler_thr_name_set) (str, number);
+ else{// ITT_Handler_thr_name_set is NULL. It means that ITT support is disabled.
+ return -1;
+ }
+}
+
+#endif /* DO_ITT_NOTIFY */
+
+} // namespace internal
+
+} // namespace tbb
diff --git a/src/tbb/itt_notify.h b/src/tbb/itt_notify.h
new file mode 100644
index 0000000..33b1dfa
--- /dev/null
+++ b/src/tbb/itt_notify.h
@@ -0,0 +1,116 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef _TBB_ITT_NOTIFY
+#define _TBB_ITT_NOTIFY
+
+// IMPORTANT: To use itt_notify.cpp/itt_notify.h in a library, exactly
+// one of the files that #includes itt_notify.h should have
+// #define INSTANTIATE_ITT_NOTIFY 1
+// just before the #include of "itt_notify.h".
+// That file is the one that will have the instances of the hooks.
+//
+// The intent is to allow precise placement of the hooks. Ideally, they
+// should reside on a hot mostly-read cache line.
+
+#if DO_ITT_NOTIFY
+
+namespace tbb {
+
+namespace internal {
+
+//! Initialize support for __itt_notify handlers
+/** It is the callers responsibility to ensure that this routine is called only once.
+ Returns true if ITT hooks were installed; false otherwise. */
+bool InitializeITT();
+
+//! A pointer to a __itt_notify call.
+typedef void (*PointerToITT_Handler)(volatile void*);
+
+//! A pointer to __itt_thr_set_name call.
+typedef int (*PointerToITT_Name_Set)(const char*, int);
+
+//! Dummy routine used for first indirect call via ITT_Handler_sync_prepare
+void dummy_sync_prepare(volatile void*);
+
+//! Dummy routine used for first indirect call via ITT_Handler_sync_acquired.
+void dummy_sync_acquired(volatile void*);
+
+//! Dummy routine used for first indirect call via ITT_Handler_sync_releasing.
+void dummy_sync_releasing(volatile void*);
+
+//! Dummy routine used for first indirect call via ITT_Handler_sync_cancel.
+void dummy_sync_cancel(volatile void*);
+
+//! Dummy routine used for first indirect call via ITT_Handler_thr_name_set.
+int dummy_thr_name_set(const char*, int);
+
+#if INSTANTIATE_ITT_NOTIFY
+PointerToITT_Handler ITT_Handler_sync_prepare = &dummy_sync_prepare;
+PointerToITT_Handler ITT_Handler_sync_acquired = &dummy_sync_acquired;
+PointerToITT_Handler ITT_Handler_sync_releasing = &dummy_sync_releasing;
+PointerToITT_Handler ITT_Handler_sync_cancel = &dummy_sync_cancel;
+PointerToITT_Name_Set ITT_Handler_thr_name_set = &dummy_thr_name_set;
+#else
+extern PointerToITT_Handler ITT_Handler_sync_prepare;
+extern PointerToITT_Handler ITT_Handler_sync_acquired;
+extern PointerToITT_Handler ITT_Handler_sync_releasing;
+extern PointerToITT_Handler ITT_Handler_sync_cancel;
+extern PointerToITT_Name_Set ITT_Handler_thr_name_set;
+#endif
+
+} // namespace internal
+
+} // namespace tbb
+
+//! Glues two tokens together.
+#define ITT_GLUE(x,y) tbb::internal::x##y
+
+//! Call routine itt_notify_(name) if corresponding handler is available.
+/** For example, use ITT_NOTIFY(sync_releasing,x) to invoke __itt_notify_sync_releasing(x).
+ Ordinarily, preprocessor token gluing games should be avoided.
+ But here, it seemed to be the best way to handle the issue. */
+#define ITT_NOTIFY(name,pointer) ( ITT_GLUE(ITT_Handler_,name) ? ITT_GLUE(ITT_Handler_,name)(pointer) : (void)0 )
+
+#define ITT_NAME_SET(name,pointer,length) ( ITT_GLUE(ITT_Handler_,name) ? ITT_GLUE(ITT_Handler_,name)(pointer,length) : 0 )
+
+#else
+
+#define ITT_NOTIFY(name,pointer) ((void)0)
+
+#define ITT_NAME_SET(name,pointer,length) ((void)0)
+
+#endif /* DO_ITT_NOTIFY */
+
+#if DO_ITT_QUIET
+#define ITT_QUIET(x) (__itt_thr_mode_set(__itt_thr_prop_quiet,(x)?__itt_thr_state_set:__itt_thr_state_clr))
+#else
+#define ITT_QUIET(x) ((void)0)
+#endif /* DO_ITT_QUIET */
+
+#endif /* _TBB_ITT_NOTIFY */
diff --git a/src/tbb/mutex.cpp b/src/tbb/mutex.cpp
new file mode 100644
index 0000000..81d0e02
--- /dev/null
+++ b/src/tbb/mutex.cpp
@@ -0,0 +1,128 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "tbb/mutex.h"
+
+namespace tbb {
+ void mutex::scoped_lock::internal_acquire( mutex& m ) {
+
+#if _WIN32||_WIN64
+ switch( m.state ) {
+ case INITIALIZED:
+ EnterCriticalSection(&m.impl);
+ break;
+ case DESTROYED:
+ __TBB_ASSERT(false,"mutex::scoped_lock: mutex already destroyed");
+ break;
+ default:
+ __TBB_ASSERT(false,"mutex::scoped_lock: illegal mutex state");
+ break;
+ }
+#else
+ int error_code = pthread_mutex_lock(&m.impl);
+ __TBB_ASSERT_EX(!error_code,"mutex::scoped_lock: pthread_mutex_lock failed");
+#endif /* _WIN32||_WIN64 */
+ my_mutex = &m;
+ }
+
+void mutex::scoped_lock::internal_release() {
+ __TBB_ASSERT( my_mutex, "mutex::scoped_lock: not holding a mutex" );
+#if _WIN32||_WIN64
+ switch( my_mutex->state ) {
+ case INITIALIZED:
+ LeaveCriticalSection(&my_mutex->impl);
+ break;
+ case DESTROYED:
+ __TBB_ASSERT(false,"mutex::scoped_lock: mutex already destroyed");
+ break;
+ default:
+ __TBB_ASSERT(false,"mutex::scoped_lock: illegal mutex state");
+ break;
+ }
+#else
+ int error_code = pthread_mutex_unlock(&my_mutex->impl);
+ __TBB_ASSERT_EX(!error_code, "mutex::scoped_lock: pthread_mutex_unlock failed");
+#endif /* _WIN32||_WIN64 */
+ my_mutex = NULL;
+}
+
+bool mutex::scoped_lock::internal_try_acquire( mutex& m ) {
+#if _WIN32||_WIN64
+ switch( m.state ) {
+ case INITIALIZED:
+ break;
+ case DESTROYED:
+ __TBB_ASSERT(false,"mutex::scoped_lock: mutex already destroyed");
+ break;
+ default:
+ __TBB_ASSERT(false,"mutex::scoped_lock: illegal mutex state");
+ break;
+ }
+#endif /* _WIN32||_WIN64 */
+
+ bool result;
+#if _WIN32||_WIN64
+ result = TryEnterCriticalSection(&m.impl)!=0;
+#else
+ result = pthread_mutex_trylock(&m.impl)==0;
+#endif /* _WIN32||_WIN64 */
+ if( result )
+ my_mutex = &m;
+ return result;
+}
+
+void mutex::internal_construct() {
+#if _WIN32||_WIN64
+ InitializeCriticalSection(&impl);
+ state = INITIALIZED;
+#else
+ int error_code = pthread_mutex_init(&impl,NULL);
+ if( error_code )
+ tbb::internal::handle_perror(error_code,"mutex: pthread_mutex_init failed");
+#endif /* _WIN32||_WIN64*/
+}
+
+void mutex::internal_destroy() {
+#if _WIN32||_WIN64
+ switch( state ) {
+ case INITIALIZED: {
+ DeleteCriticalSection(&impl);
+ } break;
+ case DESTROYED:
+ __TBB_ASSERT(false,"mutex: already destroyed"); break;
+ default:
+ __TBB_ASSERT(false,"mutex: illegal state for destruction");
+ }
+ state = DESTROYED;
+#else
+ int error_code = pthread_mutex_destroy(&impl);
+ __TBB_ASSERT_EX(!error_code,"mutex: pthread_mutex_destroy failed");
+#endif /* _WIN32||_WIN64 */
+}
+
+} // namespace tbb
diff --git a/src/tbb/pipeline.cpp b/src/tbb/pipeline.cpp
new file mode 100644
index 0000000..ad02743
--- /dev/null
+++ b/src/tbb/pipeline.cpp
@@ -0,0 +1,280 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "tbb/pipeline.h"
+#include "tbb/cache_aligned_allocator.h"
+#include "itt_notify.h"
+
+
+namespace tbb {
+
+namespace internal {
+
+//! A buffer of ordered items.
+/** Each item is a task, inserted into a position in the buffer corrsponding to a Token. */
+class ordered_buffer {
+ typedef Token size_type;
+
+ //! Array of deferred tasks that cannot yet start executing.
+ /** Element is NULL if unused. */
+ task** array;
+
+ //! Size of array
+ /** Always 0 or a power of 2 */
+ size_type array_size;
+
+ //! Lowest token that can start executing.
+ /** All prior Token have already been seen. */
+ Token low_token;
+
+ //! Serializes updates.
+ spin_mutex array_mutex;
+
+ //! Resize "array".
+ /** Caller is responsible to acquiring a lock on "array_mutex". */
+ void grow( size_type minimum_size );
+
+ //! Initial size for "array"
+ /** Must be a power of 2 */
+ static const size_type initial_buffer_size = 4;
+public:
+ //! Construct empty buffer.
+ ordered_buffer() : array(NULL), array_size(0), low_token(0) {
+ grow(initial_buffer_size);
+ __TBB_ASSERT( array, NULL );
+ }
+
+ //! Destroy the buffer.
+ ~ordered_buffer() {
+ __TBB_ASSERT( array, NULL );
+ cache_aligned_allocator<task*>().deallocate(array,array_size);
+ poison_pointer( array );
+ }
+
+ //! Put a token into the buffer.
+ /** The putter must be in state that works if enqueued for later wakeup
+ If putter was enqueued, returns NULL. Otherwise returns putter,
+ which the caller is expected to spawn. */
+ task* put_token( task& putter, Token token ) {
+ task* result = &putter;
+ {
+ spin_mutex::scoped_lock lock( array_mutex );
+ if( token!=low_token ) {
+ // Trying to put token that is beyond low_token.
+ // Need to wait until low_token catches up before dispatching.
+ result = NULL;
+ __TBB_ASSERT( token>low_token, NULL );
+ if( token-low_token>=array_size )
+ grow( token-low_token+1 );
+ ITT_NOTIFY( sync_releasing, this );
+ array[token&array_size-1] = &putter;
+ }
+ }
+ return result;
+ }
+
+ //! Note that processing of a token is finished.
+ /** Fires up processing of the next token, if processing was deferred. */
+ void note_done( Token token, task& spawner ) {
+ task* wakee=NULL;
+ {
+ spin_mutex::scoped_lock lock( array_mutex );
+ if( token==low_token ) {
+ // Wake the next task
+ task*& item = array[++low_token & array_size-1];
+ ITT_NOTIFY( sync_acquired, this );
+ wakee = item;
+ item = NULL;
+ }
+ }
+ if( wakee ) {
+ spawner.spawn(*wakee);
+ }
+ }
+};
+
+void ordered_buffer::grow( size_type minimum_size ) {
+ size_type old_size = array_size;
+ size_type new_size = old_size ? 2*old_size : initial_buffer_size;
+ while( new_size<minimum_size )
+ new_size*=2;
+ task** new_array = cache_aligned_allocator<task*>().allocate(new_size);
+ task** old_array = array;
+ for( size_type i=0; i<new_size; ++i )
+ new_array[i] = NULL;
+ long t=low_token;
+ for( size_type i=0; i<old_size; ++i, ++t )
+ new_array[t&new_size-1] = old_array[t&old_size-1];
+ array = new_array;
+ array_size = new_size;
+ if( old_array )
+ cache_aligned_allocator<task*>().deallocate(old_array,old_size);
+}
+
+class stage_task: public task {
+private:
+ friend class tbb::pipeline;
+ pipeline& my_pipeline;
+ void* my_object;
+ filter* my_filter;
+ const Token my_token;
+public:
+ stage_task( pipeline& pipeline, Token token, filter* filter_list ) :
+ my_pipeline(pipeline),
+ my_filter(filter_list),
+ my_token(token)
+ {}
+ task* execute();
+};
+
+task* stage_task::execute() {
+ my_object = (*my_filter)(my_object);
+ if( ordered_buffer* input_buffer = my_filter->input_buffer )
+ input_buffer->note_done(my_token,*this);
+ task* next = NULL;
+ my_filter = my_filter->next_filter_in_pipeline;
+ if( my_filter ) {
+ // There is another filter to execute.
+ // Crank up priority a notch.
+ add_to_depth(1);
+ if( ordered_buffer* input_buffer = my_filter->input_buffer ) {
+ // The next filter must execute tokens in order.
+ stage_task& clone = *new( allocate_continuation() ) stage_task( my_pipeline, my_token, my_filter );
+ clone.my_object = my_object;
+ next = input_buffer->put_token(clone,my_token);
+ } else {
+ recycle_as_continuation();
+ next = this;
+ }
+ } else {
+ // Reached end of the pipe. Inject a new token.
+ // The token must be injected before execute() returns, in order to prevent the
+ // end_counter task's reference count from prematurely reaching 0.
+ set_depth( my_pipeline.end_counter->depth()+1 );
+ my_pipeline.inject_token( *this );
+ }
+ return next;
+}
+
+} // namespace internal
+
+void pipeline::inject_token( task& self ) {
+ void* o = NULL;
+ filter* f = filter_list;
+ spin_mutex::scoped_lock lock( input_mutex );
+ if( !end_of_input ) {
+ ITT_NOTIFY(sync_acquired, this );
+ o = (*f)(NULL);
+ ITT_NOTIFY(sync_releasing, this );
+ if( o ) {
+ internal::Token token = token_counter++;
+ lock.release(); // release the lock as soon as finished updating shared fields
+
+ f = f->next_filter_in_pipeline;
+ // Successfully fetched another input object.
+ // Create a stage_task to process it.
+ internal::stage_task* s = new( self.allocate_additional_child_of(*end_counter) ) internal::stage_task( *this, token, f );
+ s->my_object = o;
+ if( internal::ordered_buffer* input_buffer = f->input_buffer ) {
+ // The next filter must execute tokens in order.
+ s = static_cast<internal::stage_task*>(input_buffer->put_token(*s,token));
+ }
+ if( s ) {
+ self.spawn(*s);
+ }
+ }
+ else
+ end_of_input = true;
+ }
+}
+
+pipeline::pipeline() :
+ filter_list(NULL),
+ filter_end(&filter_list),
+ end_counter(NULL),
+ token_counter(0),
+ end_of_input(false)
+{
+}
+
+pipeline::~pipeline() {
+ clear();
+}
+
+void pipeline::clear() {
+ filter* next;
+ for( filter* f = filter_list; f; f=next ) {
+ if( internal::ordered_buffer* b = f->input_buffer ) {
+ delete b;
+ f->input_buffer = NULL;
+ }
+ next=f->next_filter_in_pipeline;
+ f->next_filter_in_pipeline = filter::not_in_pipeline();
+ }
+ filter_list = NULL;
+}
+
+void pipeline::add_filter( filter& filter ) {
+ __TBB_ASSERT( filter.next_filter_in_pipeline==filter::not_in_pipeline(), "filter already part of pipeline?" );
+ __TBB_ASSERT( !end_counter, "invocation of add_filter on running pipeline" );
+ if( filter.is_serial() ) {
+ filter.input_buffer = new internal::ordered_buffer();
+ }
+ *filter_end = &filter;
+ filter_end = &filter.next_filter_in_pipeline;
+ *filter_end = NULL;
+}
+
+void pipeline::run( size_t max_number_of_live_tokens ) {
+ __TBB_ASSERT( max_number_of_live_tokens>0, "pipeline::run must have at least one token" );
+ __TBB_ASSERT( !end_counter, "pipeline already running?" );
+ if( filter_list ) {
+ if( filter_list->next_filter_in_pipeline ) {
+ end_of_input = false;
+ end_counter = new( task::allocate_root() ) empty_task;
+ end_counter->set_ref_count(1);
+ for( size_t i=0; i<max_number_of_live_tokens; ++i )
+ inject_token( *end_counter );
+ end_counter->wait_for_all();
+ end_counter->destroy(*end_counter);
+ end_counter = NULL;
+ } else {
+ // There are no filters, and thus no parallelism is possible.
+ // Just drain the input stream.
+ while( (*filter_list)(NULL) )
+ continue;
+ }
+ }
+}
+
+filter::~filter() {
+ __TBB_ASSERT( next_filter_in_pipeline==filter::not_in_pipeline(), "cannot destroy filter that is part of pipeline" );
+}
+
+} // tbb
+
diff --git a/src/tbb/queuing_mutex.cpp b/src/tbb/queuing_mutex.cpp
new file mode 100644
index 0000000..02807cb
--- /dev/null
+++ b/src/tbb/queuing_mutex.cpp
@@ -0,0 +1,116 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "tbb/tbb_machine.h"
+#include "tbb/tbb_stddef.h"
+#include "tbb_misc.h"
+#include "tbb/queuing_mutex.h"
+#include "itt_notify.h"
+
+
+namespace tbb {
+
+using namespace internal;
+
+//! A method to acquire queuing_mutex lock
+void queuing_mutex::scoped_lock::acquire( queuing_mutex& m )
+{
+ __TBB_ASSERT( !this->mutex, "scoped_lock is already holding a mutex");
+
+ // Must set all fields before the fetch_and_store, because once the
+ // fetch_and_store executes, *this becomes accessible to other threads.
+ mutex = &m;
+ next = NULL;
+ going = 0;
+
+ ITT_NOTIFY(sync_prepare, mutex);
+ // The fetch_and_store must have release semantics, because we are
+ // "sending" the fields initialized above to other processors.
+ scoped_lock* pred = m.q_tail.fetch_and_store<tbb::release>(this);
+ if( pred ) {
+ __TBB_ASSERT( !pred->next, "the predecessor has another successor!");
+ pred->next = this;
+ SpinwaitWhileEq( going, 0ul );
+ }
+ ITT_NOTIFY(sync_acquired, mutex);
+
+ // Force acquire so that user's critical section receives correct values
+ // from processor that was previously in the user's critical section.
+ __TBB_load_with_acquire(going);
+}
+
+//! A method to acquire queuing_mutex if it is free
+bool queuing_mutex::scoped_lock::try_acquire( queuing_mutex& m )
+{
+ __TBB_ASSERT( !this->mutex, "scoped_lock is already holding a mutex");
+
+ // Must set all fields before the fetch_and_store, because once the
+ // fetch_and_store executes, *this becomes accessible to other threads.
+ next = NULL;
+ going = 0;
+
+ if( m.q_tail ) return false;
+ // The CAS must have release semantics, because we are
+ // "sending" the fields initialized above to other processors.
+ scoped_lock* pred = m.q_tail.compare_and_swap<tbb::release>(this, NULL);
+
+ // Force acquire so that user's critical section receives correct values
+ // from processor that was previously in the user's critical section.
+ // try_acquire should always have acquire semantic, even if failed.
+ __TBB_load_with_acquire(going);
+ if( !pred ) {
+ mutex = &m;
+ ITT_NOTIFY(sync_acquired, mutex);
+ return true;
+ } else return false;
+}
+
+//! A method to release queuing_mutex lock
+void queuing_mutex::scoped_lock::release( )
+{
+ __TBB_ASSERT(this->mutex!=NULL, "no lock acquired");
+
+ ITT_NOTIFY(sync_releasing, mutex);
+ if( !next ) {
+ if( this == mutex->q_tail.compare_and_swap<tbb::release>(NULL, this) ) {
+ // this was the only item in the queue, and the queue is now empty.
+ goto done;
+ }
+ // Someone in the queue
+ SpinwaitWhileEq( next, (scoped_lock*)0 );
+ }
+ __TBB_ASSERT(next,NULL);
+ // The volatile here ensures release semantics on IPF, which are necessary
+ // so that the user's critical section sends the correct values to the next
+ // process that acquires the critical section.
+ __TBB_store_with_release(next->going, 1);
+done:
+ initialize();
+}
+
+} // namespace tbb
diff --git a/src/tbb/queuing_rw_mutex.cpp b/src/tbb/queuing_rw_mutex.cpp
new file mode 100644
index 0000000..8b64ce6
--- /dev/null
+++ b/src/tbb/queuing_rw_mutex.cpp
@@ -0,0 +1,475 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/** Before making any changes in the implementation, please emulate algorithmic changes
+ with SPIN tool using <TBB directory>/tools/spin_models/ReaderWriterMutex.pml.
+ There could be some code looking as "can be restructured" but its structure does matter! */
+
+#include "tbb/tbb_machine.h"
+#include "tbb/tbb_stddef.h"
+#include "tbb_misc.h"
+#include "tbb/queuing_rw_mutex.h"
+#include "itt_notify.h"
+
+
+namespace tbb {
+
+using namespace internal;
+
+const unsigned char RELEASED = 0;
+const unsigned char ACQUIRED = 1;
+
+template<typename T>
+inline atomic<T>& as_atomic( T& t ) {
+ return *(atomic<T>*)&t;
+}
+
+inline bool queuing_rw_mutex::scoped_lock::try_acquire_internal_lock()
+{
+ return as_atomic(internal_lock).compare_and_swap<tbb::acquire>(ACQUIRED,RELEASED) == RELEASED;
+}
+
+inline void queuing_rw_mutex::scoped_lock::acquire_internal_lock()
+{
+ // Usually, we would use the test-test-and-set idiom here, with exponential backoff.
+ // But so far, experiments indicate there is no value in doing so here.
+ while( !try_acquire_internal_lock() ) {
+ __TBB_Pause(1);
+ }
+}
+
+inline void queuing_rw_mutex::scoped_lock::release_internal_lock()
+{
+ __TBB_store_with_release(internal_lock,RELEASED);
+}
+
+inline void queuing_rw_mutex::scoped_lock::wait_for_release_of_internal_lock()
+{
+ SpinwaitUntilEq(internal_lock, RELEASED);
+}
+
+inline void queuing_rw_mutex::scoped_lock::unblock_or_wait_on_internal_lock( uintptr_t flag ) {
+ if( flag )
+ wait_for_release_of_internal_lock();
+ else
+ release_internal_lock();
+}
+
+template<typename T>
+class tricky_atomic_pointer {
+public:
+ typedef typename atomic_word<sizeof(T*)>::word word;
+ template<memory_semantics M>
+ static T* fetch_and_add( T* volatile * location, word addend ) {
+ return reinterpret_cast<T*>( atomic_traits<sizeof(T*),M>::fetch_and_add(location, addend) );
+ }
+ template<memory_semantics M>
+ static T* fetch_and_store( T* volatile * location, T* value ) {
+ return reinterpret_cast<T*>( atomic_traits<sizeof(T*),M>::fetch_and_store(location, reinterpret_cast<word>(value)) );
+ }
+ template<memory_semantics M>
+ static T* compare_and_swap( T* volatile * location, T* value, T* comparand ) {
+ return reinterpret_cast<T*>(
+ atomic_traits<sizeof(T*),M>::compare_and_swap(location, reinterpret_cast<word>(value),
+ reinterpret_cast<word>(comparand))
+ );
+ }
+
+ T* & ref;
+ tricky_atomic_pointer( T*& original ) : ref(original) {};
+ tricky_atomic_pointer( T* volatile & original ) : ref(original) {};
+ T* operator&( word operand2 ) const {
+ return reinterpret_cast<T*>( reinterpret_cast<word>(ref) & operand2 );
+ }
+ T* operator|( word operand2 ) const {
+ return reinterpret_cast<T*>( reinterpret_cast<word>(ref) | operand2 );
+ }
+};
+typedef tricky_atomic_pointer<queuing_rw_mutex::scoped_lock> tricky_pointer;
+
+//! Mask for low order bit of a pointer.
+static const tricky_pointer::word FLAG = 0x1;
+
+inline
+uintptr get_flag( queuing_rw_mutex::scoped_lock* ptr ) {
+ return uintptr(tricky_pointer(ptr)&FLAG);
+}
+
+
+//! Methods of queuing_rw_mutex::scoped_lock
+/** ----------------------------------------- **/
+
+//! A method to acquire queuing_rw_mutex lock
+void queuing_rw_mutex::scoped_lock::acquire( queuing_rw_mutex& m, bool write )
+{
+ __TBB_ASSERT( !this->mutex, "scoped_lock is already holding a mutex");
+
+ // Must set all fields before the fetch_and_store, because once the
+ // fetch_and_store executes, *this becomes accessible to other threads.
+ mutex = &m;
+ prev = NULL;
+ next = NULL;
+ going = 0;
+ state = write ? STATE_WRITER : STATE_READER;
+ internal_lock = RELEASED;
+
+ ITT_NOTIFY(sync_prepare, mutex);
+ queuing_rw_mutex::scoped_lock* pred = m.q_tail.fetch_and_store<tbb::release>(this);
+
+ if( write ) { // Acquiring for write
+
+ if( pred ) {
+ pred = tricky_pointer(pred) & ~FLAG;
+ __TBB_ASSERT( !( tricky_pointer(pred) & FLAG ), "use of corrupted pointer!" );
+ __TBB_ASSERT( !pred->next, "the predecessor has another successor!");
+ // ensure release semantics on IPF
+ __TBB_store_with_release(pred->next,this);
+ SpinwaitUntilEq(going, 1);
+ }
+
+ } else { // Acquiring for read
+
+ if( pred ) {
+ unsigned short pred_state;
+ __TBB_ASSERT( !this->prev, "the predecessor is already set" );
+ if( tricky_pointer(pred)&FLAG ) {
+ /* this is only possible if pred is an upgrading reader and it signals us to wait */
+ pred_state = STATE_UPGRADE_WAITING;
+ pred = tricky_pointer(pred) & ~FLAG;
+ } else {
+ // Load pred->state now, because once pred->next becomes
+ // non-NULL, we must assume that *pred might be destroyed.
+ pred_state = pred->state.compare_and_swap<tbb::acquire>(STATE_READER_UNBLOCKNEXT, STATE_READER);
+ }
+ this->prev = pred;
+ __TBB_ASSERT( !( tricky_pointer(pred) & FLAG ), "use of corrupted pointer!" );
+ __TBB_ASSERT( !pred->next, "the predecessor has another successor!");
+ // ensure release semantics on IPF
+ __TBB_store_with_release(pred->next,this);
+ if( pred_state != STATE_ACTIVEREADER ) {
+ SpinwaitUntilEq(going, 1);
+ }
+ }
+ unsigned short old_state = state.compare_and_swap<tbb::acquire>(STATE_ACTIVEREADER, STATE_READER);
+ if( old_state!=STATE_READER ) {
+ // Failed to become active reader -> need to unblock the next waiting reader first
+ __TBB_ASSERT( state==STATE_READER_UNBLOCKNEXT, "unexpected state" );
+ SpinwaitWhileEq(next, (scoped_lock*)NULL);
+ /* state should be changed before unblocking the next otherwise it might finish
+ and another thread can get our old state and left blocked */
+ state = STATE_ACTIVEREADER;
+ // ensure release semantics on IPF
+ __TBB_store_with_release(next->going,1);
+ }
+ }
+
+ ITT_NOTIFY(sync_acquired, mutex);
+
+ // Force acquire so that user's critical section receives correct values
+ // from processor that was previously in the user's critical section.
+ __TBB_load_with_acquire(going);
+}
+
+//! A method to try-acquire queuing_rw_mutex lock
+bool queuing_rw_mutex::scoped_lock::try_acquire( queuing_rw_mutex& m, bool write )
+{
+ __TBB_ASSERT( !this->mutex, "scoped_lock is already holding a mutex");
+
+ // Must set all fields before the fetch_and_store, because once the
+ // fetch_and_store executes, *this becomes accessible to other threads.
+ prev = NULL;
+ next = NULL;
+ going = 0;
+ state = write ? STATE_WRITER : STATE_ACTIVEREADER;
+ internal_lock = RELEASED;
+
+ if( m.q_tail ) return false;
+ // The CAS must have release semantics, because we are
+ // "sending" the fields initialized above to other processors.
+ queuing_rw_mutex::scoped_lock* pred = m.q_tail.compare_and_swap<tbb::release>(this, NULL);
+
+ // Force acquire so that user's critical section receives correct values
+ // from processor that was previously in the user's critical section.
+ // try_acquire should always have acquire semantic, even if failed.
+ __TBB_load_with_acquire(going);
+
+ if( !pred ) {
+ mutex = &m;
+ ITT_NOTIFY(sync_acquired, mutex);
+ return true;
+ } else return false;
+
+}
+
+//! A method to release queuing_rw_mutex lock
+void queuing_rw_mutex::scoped_lock::release( )
+{
+ __TBB_ASSERT(this->mutex!=NULL, "no lock acquired");
+
+ ITT_NOTIFY(sync_releasing, mutex);
+
+ if( state == STATE_WRITER ) { // Acquired for write
+
+ // The logic below is the same as "writerUnlock", but restructured to remove "return" in the middle of routine.
+ // In the statement below, acquire semantics of reading 'next' is required
+ // so that following operations with fields of 'next' are safe.
+ scoped_lock* n = __TBB_load_with_acquire(next);
+ if( !n ) {
+ if( this == mutex->q_tail.compare_and_swap<tbb::release>(NULL, this) ) {
+ // this was the only item in the queue, and the queue is now empty.
+ goto done;
+ }
+ SpinwaitWhileEq( next, (scoped_lock*)NULL );
+ n = next;
+ }
+ n->going = 2; // protect next queue node from being destroyed too early
+ if( n->state==STATE_UPGRADE_WAITING ) {
+ // the next waiting for upgrade means this writer was upgraded before.
+ acquire_internal_lock();
+ queuing_rw_mutex::scoped_lock* tmp = tricky_pointer::fetch_and_store<tbb::release>(&(n->prev), NULL);
+ n->state = STATE_UPGRADE_LOSER;
+ // The volatile here ensures release semantics on IPF, which is necessary
+ // so that the user's critical section sends the correct values to the next
+ // process that acquires the critical section.
+ __TBB_store_with_release(n->going,1);
+ unblock_or_wait_on_internal_lock(get_flag(tmp));
+ } else {
+ __TBB_ASSERT( state & (STATE_COMBINED_WAITINGREADER | STATE_WRITER), "unexpected state" );
+ __TBB_ASSERT( !( tricky_pointer(n->prev) & FLAG ), "use of corrupted pointer!" );
+ n->prev = NULL;
+ // ensure release semantics on IPF
+ __TBB_store_with_release(n->going,1);
+ }
+
+ } else { // Acquired for read
+
+ queuing_rw_mutex::scoped_lock *tmp = NULL;
+retry:
+ // Addition to the original paper: Mark this->prev as in use
+ queuing_rw_mutex::scoped_lock *pred = tricky_pointer::fetch_and_add<tbb::acquire>(&(this->prev), FLAG);
+
+ if( pred ) {
+ if( !(pred->try_acquire_internal_lock()) )
+ {
+ // Failed to acquire the lock on pred. The predecessor either unlinks or upgrades.
+ // In the second case, it could or could not know my "in use" flag - need to check
+ tmp = tricky_pointer::compare_and_swap<tbb::release>(&(this->prev), pred, tricky_pointer(pred)|FLAG );
+ if( !(tricky_pointer(tmp)&FLAG) ) {
+ // Wait for the predecessor to change this->prev (e.g. during unlink)
+ SpinwaitWhileEq( this->prev, tricky_pointer(pred)|FLAG );
+ // Now owner of pred is waiting for _us_ to release its lock
+ pred->release_internal_lock();
+ }
+ else ; // The "in use" flag is back -> the predecessor didn't get it and will release itself; nothing to do
+
+ tmp = NULL;
+ goto retry;
+ }
+ __TBB_ASSERT(pred && pred->internal_lock==ACQUIRED, "predecessor's lock is not acquired");
+ this->prev = pred;
+ acquire_internal_lock();
+
+ __TBB_store_with_release(pred->next,reinterpret_cast<scoped_lock *>(NULL));
+
+ if( !next && this != mutex->q_tail.compare_and_swap<tbb::release>(pred, this) ) {
+ SpinwaitWhileEq( next, (void*)NULL );
+ }
+ __TBB_ASSERT( !get_flag(next), "use of corrupted pointer" );
+
+ // ensure acquire semantics of reading 'next'
+ if( __TBB_load_with_acquire(next) ) { // I->next != nil
+ // Equivalent to I->next->prev = I->prev but protected against (prev[n]&FLAG)!=0
+ tmp = tricky_pointer::fetch_and_store<tbb::release>(&(next->prev), pred);
+ // I->prev->next = I->next;
+ __TBB_ASSERT(this->prev==pred, "");
+ __TBB_store_with_release(pred->next,next);
+ }
+ // Safe to release in the order opposite to acquiring which makes the code simplier
+ pred->release_internal_lock();
+
+ } else { // No predecessor when we looked
+ acquire_internal_lock(); // "exclusiveLock(&I->EL)"
+ // ensure acquire semantics of reading 'next'
+ scoped_lock* n = __TBB_load_with_acquire(next);
+ if( !n ) {
+ if( this != mutex->q_tail.compare_and_swap<tbb::release>(NULL, this) ) {
+ SpinwaitWhileEq( next, (scoped_lock*)NULL );
+ n = next;
+ } else {
+ goto unlock_self;
+ }
+ }
+ n->going = 2; // protect next queue node from being destroyed too early
+ tmp = tricky_pointer::fetch_and_store<tbb::release>(&(n->prev), NULL);
+ // ensure release semantics on IPF
+ __TBB_store_with_release(n->going,1);
+ }
+unlock_self:
+ unblock_or_wait_on_internal_lock(get_flag(tmp));
+ }
+done:
+ SpinwaitWhileEq( going, 2 );
+
+ initialize();
+}
+
+//! A method to downgrade a writer to a reader.
+/** See more detailed comments in the SPIN model:
+ <TBB directory>/tools/spin_models/ReaderWriterMutex.pml */
+bool queuing_rw_mutex::scoped_lock::downgrade_to_reader()
+{
+ __TBB_ASSERT( state==STATE_WRITER, "no sense to downgrade a reader" );
+
+ ITT_NOTIFY(sync_releasing, mutex);
+
+ // ensure acquire semantics of reading 'next'
+ if( ! __TBB_load_with_acquire(next) ) {
+ state = STATE_READER;
+ if( this==mutex->q_tail ) {
+ unsigned short old_state = state.compare_and_swap<tbb::release>(STATE_ACTIVEREADER, STATE_READER);
+ if( old_state==STATE_READER ) {
+ goto downgrade_done;
+ }
+ }
+ /* wait for the next to register */
+ SpinwaitWhileEq( next, (void*)NULL );
+ }
+ __TBB_ASSERT( next, "still no successor at this point!" );
+ if( next->state & STATE_COMBINED_WAITINGREADER )
+ __TBB_store_with_release(next->going,1);
+ else if( next->state==STATE_UPGRADE_WAITING )
+ // the next waiting for upgrade means this writer was upgraded before.
+ next->state = STATE_UPGRADE_LOSER;
+ state = STATE_ACTIVEREADER;
+
+downgrade_done:
+ return true;
+}
+
+//! A method to upgrade a reader to a writer.
+/** See more detailed comments in the SPIN model:
+ <TBB directory>/tools/spin_models/ReaderWriterMutex.pml */
+bool queuing_rw_mutex::scoped_lock::upgrade_to_writer()
+{
+ __TBB_ASSERT( state==STATE_ACTIVEREADER, "only active reader can be upgraded" );
+
+ queuing_rw_mutex::scoped_lock * tmp;
+ queuing_rw_mutex::scoped_lock * me = this;
+
+ ITT_NOTIFY(sync_releasing, mutex);
+ state = STATE_UPGRADE_REQUESTED;
+requested:
+ __TBB_ASSERT( !( tricky_pointer(next) & FLAG ), "use of corrupted pointer!" );
+ acquire_internal_lock();
+ if( this != mutex->q_tail.compare_and_swap<tbb::release>(tricky_pointer(me)|FLAG, this) ) {
+ SpinwaitWhileEq( next, (void*)NULL );
+ queuing_rw_mutex::scoped_lock * n;
+ n = tricky_pointer::fetch_and_add<tbb::acquire>(&(this->next), FLAG);
+ unsigned short n_state = n->state;
+ /* the next reader can be blocked by our state. the best thing to do is to unblock it */
+ if( n_state & STATE_COMBINED_WAITINGREADER )
+ __TBB_store_with_release(n->going,1);
+ tmp = tricky_pointer::fetch_and_store<tbb::release>(&(n->prev), this);
+ unblock_or_wait_on_internal_lock(get_flag(tmp));
+ if( n_state & (STATE_COMBINED_READER | STATE_UPGRADE_REQUESTED) ) {
+ // save n|FLAG for simplicity of following comparisons
+ tmp = tricky_pointer(n)|FLAG;
+ ExponentialBackoff backoff;
+ while(next==tmp) {
+ if( state & STATE_COMBINED_UPGRADING ) {
+ if( __TBB_load_with_acquire(next)==tmp )
+ next = n;
+ goto waiting;
+ }
+ backoff.pause();
+ }
+ __TBB_ASSERT(next!=(tricky_pointer(n)|FLAG), NULL);
+ goto requested;
+ } else {
+ __TBB_ASSERT( n_state & (STATE_WRITER | STATE_UPGRADE_WAITING), "unexpected state");
+ __TBB_ASSERT( (tricky_pointer(n)|FLAG)==next, NULL);
+ next = n;
+ }
+ } else {
+ /* We are in the tail; whoever comes next is blocked by q_tail&FLAG */
+ release_internal_lock();
+ } // if( this != mutex->q_tail... )
+ state.compare_and_swap<tbb::acquire>(STATE_UPGRADE_WAITING, STATE_UPGRADE_REQUESTED);
+
+waiting:
+ __TBB_ASSERT( !( tricky_pointer(next) & FLAG ), "use of corrupted pointer!" );
+ __TBB_ASSERT( state & STATE_COMBINED_UPGRADING, "wrong state at upgrade waiting_retry" );
+ __TBB_ASSERT( me==this, NULL );
+ ITT_NOTIFY(sync_prepare, mutex);
+ /* if noone was blocked by the "corrupted" q_tail, turn it back */
+ mutex->q_tail.compare_and_swap<tbb::release>( this, tricky_pointer(me)|FLAG );
+ queuing_rw_mutex::scoped_lock * pred;
+ pred = tricky_pointer::fetch_and_add<tbb::acquire>(&(this->prev), FLAG);
+ if( pred ) {
+ bool success = pred->try_acquire_internal_lock();
+ //unsigned short pred_state = // keep the variable in code just in case
+ pred->state.compare_and_swap<tbb::release>(STATE_UPGRADE_WAITING, STATE_UPGRADE_REQUESTED);
+ if( !success ) {
+ tmp = tricky_pointer::compare_and_swap<tbb::release>(&(this->prev), pred, tricky_pointer(pred)|FLAG );
+ if( tricky_pointer(tmp)&FLAG ) {
+ SpinwaitWhileEq(this->prev, pred);
+ pred = this->prev;
+ } else {
+ SpinwaitWhileEq( this->prev, tricky_pointer(pred)|FLAG );
+ pred->release_internal_lock();
+ }
+ } else {
+ this->prev = pred;
+ pred->release_internal_lock();
+ SpinwaitWhileEq(this->prev, pred);
+ pred = this->prev;
+ }
+ if( pred )
+ goto waiting;
+ } else {
+ // restore the corrupted prev field for possible further use (e.g. if downgrade back to reader)
+ this->prev = pred;
+ }
+ __TBB_ASSERT( !pred && !this->prev, "" );
+
+ // additional lifetime issue prevention checks
+ // wait for the successor to finish working with my fields
+ wait_for_release_of_internal_lock();
+ // now wait for the predecesor to finish working with my fields
+ SpinwaitWhileEq( going, 2 );
+ // there is an acquire semantics statement in the end of SpinwaitWhileEq.
+
+ bool result = ( state != STATE_UPGRADE_LOSER );
+ state = STATE_WRITER;
+ going = 1;
+
+ ITT_NOTIFY(sync_acquired, mutex);
+ return result;
+}
+
+} // namespace tbb
diff --git a/src/tbb/spin_mutex.cpp b/src/tbb/spin_mutex.cpp
new file mode 100644
index 0000000..402737a
--- /dev/null
+++ b/src/tbb/spin_mutex.cpp
@@ -0,0 +1,64 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "tbb/tbb_machine.h"
+#include "tbb/spin_mutex.h"
+#include "itt_notify.h"
+#include "tbb_misc.h"
+
+namespace tbb {
+
+void spin_mutex::scoped_lock::internal_acquire( spin_mutex& m ) {
+ __TBB_ASSERT( !my_mutex, "already holding a lock on a spin_mutex" );
+ ITT_NOTIFY(sync_prepare, &m);
+ my_unlock_value = __TBB_LockByte(m.flag);
+ my_mutex = &m;
+ ITT_NOTIFY(sync_acquired, &m);
+}
+
+void spin_mutex::scoped_lock::internal_release() {
+ __TBB_ASSERT( my_mutex, "release on spin_mutex::scoped_lock that is not holding a lock" );
+ __TBB_ASSERT( !(my_unlock_value&1), "corrupted scoped_lock?" );
+
+ ITT_NOTIFY(sync_releasing, my_mutex);
+ my_mutex->flag = static_cast<unsigned char>(my_unlock_value);
+ my_mutex = NULL;
+}
+
+bool spin_mutex::scoped_lock::internal_try_acquire( spin_mutex& m ) {
+ __TBB_ASSERT( !my_mutex, "already holding a lock on a spin_mutex" );
+ bool result = bool( __TBB_TryLockByte(m.flag) );
+ if( result ) {
+ my_unlock_value = 0;
+ my_mutex = &m;
+ ITT_NOTIFY(sync_acquired, &m);
+ }
+ return result;
+}
+
+} // namespace tbb
diff --git a/src/tbb/spin_rw_mutex.cpp b/src/tbb/spin_rw_mutex.cpp
new file mode 100644
index 0000000..aa7def3
--- /dev/null
+++ b/src/tbb/spin_rw_mutex.cpp
@@ -0,0 +1,164 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "tbb/spin_rw_mutex.h"
+#include "tbb/tbb_machine.h"
+#include "tbb_misc.h"
+#include "itt_notify.h"
+
+namespace tbb {
+
+using namespace internal;
+
+static inline bool CAS(volatile uintptr &addr, uintptr newv, uintptr oldv) {
+ return __TBB_CompareAndSwapW((volatile void *)&addr, (intptr)newv, (intptr)oldv) == (intptr)oldv;
+}
+
+//! Signal that write lock is released
+void spin_rw_mutex::internal_itt_releasing(spin_rw_mutex *mutex) {
+ ITT_NOTIFY(sync_releasing, mutex);
+}
+
+bool spin_rw_mutex::internal_acquire_writer(spin_rw_mutex *mutex)
+{
+ ITT_NOTIFY(sync_prepare, mutex);
+ ExponentialBackoff backoff;
+ while(true) {
+ state_t s = mutex->state;
+ if( !(s & BUSY) ) { // no readers, no writers
+ if( CAS(mutex->state, WRITER, s) )
+ break; // successfully stored writer flag
+ backoff.reset(); // we could be very close to complete op.
+ } else if( !(s & WRITER_PENDING) ) { // no pending writers
+ __TBB_AtomicOR(&mutex->state, WRITER_PENDING);
+ }
+ backoff.pause();
+ }
+ ITT_NOTIFY(sync_acquired, mutex);
+ __TBB_ASSERT( (mutex->state & BUSY)==WRITER, "invalid state of a write lock" );
+ return false;
+}
+
+//! Signal that write lock is released
+void spin_rw_mutex::internal_release_writer(spin_rw_mutex *mutex) {
+ __TBB_ASSERT( (mutex->state & BUSY)==WRITER, "invalid state of a write lock" );
+ ITT_NOTIFY(sync_releasing, mutex);
+ mutex->state = 0;
+}
+
+//! Acquire lock on given mutex.
+void spin_rw_mutex::internal_acquire_reader(spin_rw_mutex *mutex) {
+ ITT_NOTIFY(sync_prepare, mutex);
+ ExponentialBackoff backoff;
+ while(true) {
+ state_t s = mutex->state;
+ if( !(s & (WRITER|WRITER_PENDING)) ) { // no writer or write requests
+ if( CAS(mutex->state, s+ONE_READER, s) )
+ break; // successfully stored increased number of readers
+ backoff.reset(); // we could be very close to complete op.
+ }
+ backoff.pause();
+ }
+ ITT_NOTIFY(sync_acquired, mutex);
+ __TBB_ASSERT( mutex->state & READERS, "invalid state of a read lock: no readers" );
+ __TBB_ASSERT( !(mutex->state & WRITER), "invalid state of a read lock: active writer" );
+}
+
+//! Upgrade reader to become a writer.
+/** Returns true if the upgrade happened without re-acquiring the lock and false if opposite */
+bool spin_rw_mutex::internal_upgrade(spin_rw_mutex *mutex) {
+ state_t s = mutex->state;
+ __TBB_ASSERT( s & READERS, "invalid state before upgrade: no readers " );
+ __TBB_ASSERT( !(s & WRITER), "invalid state before upgrade: active writer " );
+ // check and set writer-pending flag
+ // required conditions: either no pending writers, or we are the only reader
+ // (with multiple readers and pending writer, another upgrade could have been requested)
+ while( (s & READERS)==ONE_READER || !(s & WRITER_PENDING) ) {
+ if( CAS(mutex->state, s | WRITER_PENDING, s) )
+ {
+ ExponentialBackoff backoff;
+ ITT_NOTIFY(sync_prepare, mutex);
+ while( (mutex->state & READERS) != ONE_READER ) // more than 1 reader
+ backoff.pause();
+ // the state should be 0...0110, i.e. 1 reader and waiting writer;
+ // both new readers and writers are blocked
+ __TBB_ASSERT(mutex->state == (ONE_READER | WRITER_PENDING),"invalid state when upgrading to writer");
+ mutex->state = WRITER;
+ ITT_NOTIFY(sync_acquired, mutex);
+ __TBB_ASSERT( (mutex->state & BUSY) == WRITER, "invalid state after upgrade" );
+ return true; // successfully upgraded
+ } else {
+ s = mutex->state; // re-read
+ }
+ }
+ // slow reacquire
+ internal_release_reader(mutex);
+ return internal_acquire_writer(mutex); // always returns false
+}
+
+void spin_rw_mutex::internal_downgrade(spin_rw_mutex *mutex) {
+ __TBB_ASSERT( (mutex->state & BUSY) == WRITER, "invalid state before downgrade" );
+ ITT_NOTIFY(sync_releasing, mutex);
+ mutex->state = ONE_READER;
+ __TBB_ASSERT( mutex->state & READERS, "invalid state after downgrade: no readers" );
+ __TBB_ASSERT( !(mutex->state & WRITER), "invalid state after downgrade: active writer" );
+}
+
+void spin_rw_mutex::internal_release_reader(spin_rw_mutex *mutex)
+{
+ __TBB_ASSERT( mutex->state & READERS, "invalid state of a read lock: no readers" );
+ __TBB_ASSERT( !(mutex->state & WRITER), "invalid state of a read lock: active writer" );
+ ITT_NOTIFY(sync_releasing, mutex); // release reader
+ __TBB_FetchAndAddWrelease((volatile void *)&(mutex->state),-(intptr)ONE_READER);
+}
+
+bool spin_rw_mutex::internal_try_acquire_writer( spin_rw_mutex * mutex )
+{
+// for a writer: only possible to acquire if no active readers or writers
+ state_t s = mutex->state; // on Itanium, this volatile load has acquire semantic
+ if( !(s & BUSY) ) // no readers, no writers; mask is 1..1101
+ if( CAS(mutex->state, WRITER, s) ) {
+ ITT_NOTIFY(sync_acquired, mutex);
+ return true; // successfully stored writer flag
+ }
+ return false;
+}
+
+bool spin_rw_mutex::internal_try_acquire_reader( spin_rw_mutex * mutex )
+{
+// for a reader: acquire if no active or waiting writers
+ state_t s = mutex->state; // on Itanium, a load of volatile variable has acquire semantic
+ while( !(s & (WRITER|WRITER_PENDING)) ) // no writers
+ if( CAS(mutex->state, s+ONE_READER, s) ) {
+ ITT_NOTIFY(sync_acquired, mutex);
+ return true; // successfully stored increased number of readers
+ }
+ return false;
+}
+
+} // namespace tbb
diff --git a/src/tbb/task.cpp b/src/tbb/task.cpp
new file mode 100644
index 0000000..62e9da6
--- /dev/null
+++ b/src/tbb/task.cpp
@@ -0,0 +1,2028 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+/* This file contains the TBB task scheduler. There are many classes
+ lumped together here because very few are exposed to the outside
+ world, and by putting them in a single translation unit, the
+ compiler's optimizer might be able to do a better job. */
+
+#if USE_PTHREAD
+
+ // Some pthreads documentation says that <pthreads.h> must be first header.
+ #include <pthread.h>
+
+#elif USE_WINTHREAD
+
+ #include <windows.h>
+ #include <process.h> /* Need _beginthreadex from there */
+ #include <malloc.h> /* Need _alloca from there */
+ const size_t ThreadStackSize = 1<<20;
+
+#else
+
+ #error Must define USE_PTHREAD or USE_WINTHREAD
+
+#endif
+
+#include <cassert>
+#include <cstddef>
+#include <cstdlib>
+#include <cstring>
+#include <cstdio>
+#include <new>
+#include "tbb/tbb_stddef.h"
+
+
+/* Temporarily change "private" to "public" while including "tbb/task.h"
+ This hack allows us to avoid publishing types Arena and CustomScheduler
+ in the public header files. */
+#define private public
+#include "tbb/task.h"
+#undef private
+
+#include "tbb/task_scheduler_init.h"
+#include "tbb/cache_aligned_allocator.h"
+#include "tbb/tbb_stddef.h"
+#include "tbb/tbb_machine.h"
+#include "tbb_misc.h"
+#include "tbb/mutex.h"
+#include "tbb/atomic.h"
+#include "tbb/gate.h"
+
+#if DO_TBB_TRACE
+#include <cstdio>
+#define TBB_TRACE(x) ((void)std::printf x)
+#else
+#define TBB_TRACE(x) ((void)(0))
+#endif /* DO_TBB_TRACE */
+
+#if TBB_DO_ASSERT
+#define COUNT_TASK_NODES 1
+#endif /* TBB_DO_ASSERT */
+
+/* If nonzero, then gather statistics */
+#ifndef STATISTICS
+#define STATISTICS 0
+#endif /* STATISTICS */
+
+#if STATISTICS
+#define GATHER_STATISTIC(x) (x)
+#else
+#define GATHER_STATISTIC(x) ((void)0)
+#endif /* STATISTICS */
+
+namespace tbb {
+
+using namespace std;
+
+namespace internal {
+
+template<typename SchedulerTraits> class CustomScheduler;
+
+typedef task::depth_type depth_type;
+
+
+//------------------------------------------------------------------------
+// TaskPool
+//------------------------------------------------------------------------
+
+//! Prefix to a TaskPool
+class TaskPoolPrefix {
+ static const unsigned null_arena_index = ~0u;
+
+ unsigned arena_index;
+
+ //! Index of first non-empty element of TaskPool::array
+ depth_type steal_begin;
+
+ friend class GenericScheduler;
+ friend class TaskPool;
+};
+
+//! Pool of tasks, organized as a deque.
+class TaskPool {
+ typedef size_t size_type;
+
+ static const size_type min_array_size = (NFS_MaxLineSize-sizeof(TaskPoolPrefix))/sizeof(task*);
+
+ /** Must be last field, because it is really array of indeterminate length. */
+ task* array[min_array_size];
+
+ //! Get reference to prefix portion
+ TaskPoolPrefix& prefix() const {return ((TaskPoolPrefix*)(void*)this)[-1];}
+
+ //! Return number of bytes required to allocate a pool with given number of array elements.
+ static size_t byte_size( size_type array_size ) {
+ return sizeof(TaskPoolPrefix)+array_size*sizeof(task*);
+ }
+
+ //! Allocate TaskPool object with given number of array elements.
+ static TaskPool* allocate_task_pool( size_type array_size ) {
+ __TBB_ASSERT( array_size>0, NULL );
+ size_t n = byte_size(array_size);
+ unsigned char* storage = (unsigned char*)NFS_Allocate( n, 1, NULL );
+ memset( storage, 0, n );
+ return (TaskPool*)(storage+sizeof(TaskPoolPrefix));
+ }
+
+ //! Deallocate a TaskPool that was allocated by method allocate.
+ void free_task_pool() {
+ __TBB_ASSERT( this, "attempt to free NULL TaskPool" );
+ NFS_Free( &prefix() );
+ }
+
+ friend class GenericScheduler;
+ template<typename SchedulerTraits> friend class internal::CustomScheduler;
+
+#if TBB_DO_ASSERT
+ bool assert_okay() const {
+ __TBB_ASSERT( this!=NULL, NULL );
+ __TBB_ASSERT( prefix().steal_begin>=-4, NULL );
+ return true;
+ }
+#endif /* TBB_DO_ASSERT */
+};
+
+//------------------------------------------------------------------------
+// Arena
+//------------------------------------------------------------------------
+
+class Arena;
+class GenericScheduler;
+
+struct WorkerDescriptor {
+ Arena* arena;
+ //! NULL until worker is published.
+ GenericScheduler* volatile scheduler;
+#if USE_WINTHREAD
+ //! Handle of the owning thread.
+ HANDLE thread_handle;
+#elif USE_PTHREAD
+ //! Handle of the owning thread.
+ pthread_t thread_handle;
+#else
+ unsigned long dummy_handle;
+#endif /* USE_WINTHREAD */
+
+ //! Start worker thread for this descriptor.
+ void start_one_worker_thread();
+};
+
+//! The useful contents of an ArenaPrefix
+class UnpaddedArenaPrefix {
+ friend class GenericScheduler;
+ template<typename SchedulerTraits> friend class internal::CustomScheduler;
+ friend class Arena;
+ friend class tbb::task_scheduler_init;
+
+ //! One more than index of highest arena slot currently in use.
+ atomic<size_t> limit;
+
+ //! Number of masters that own this arena.
+ /** This may be smaller than the number of masters who have entered the arena. */
+ unsigned number_of_masters;
+
+ //! Total number of slots in the arena
+ const unsigned number_of_slots;
+
+ //! One more than number of workers that belong to this arena
+ const unsigned number_of_workers;
+
+ //! Array of workers.
+ WorkerDescriptor* worker_list;
+
+#if COUNT_TASK_NODES
+ //! Net number of nodes that have been allocated from heap.
+ /** Updated each time a scheduler is destroyed. */
+ atomic<intptr> task_node_count;
+#endif /* COUNT_TASK_NODES */
+
+ //! Gate at which worker threads wait until a master spawns a task.
+ Gate gate;
+
+protected:
+ UnpaddedArenaPrefix( unsigned number_of_slots_, unsigned number_of_workers_ ) :
+ number_of_masters(1),
+ number_of_slots(number_of_slots_),
+ number_of_workers(number_of_workers_)
+ {
+#if COUNT_TASK_NODES
+ task_node_count = 0;
+#endif /* COUNT_TASK_NODES */
+ limit = number_of_workers;
+ }
+};
+
+//! The prefix to Arena with padding.
+class ArenaPrefix: public UnpaddedArenaPrefix {
+ //! Padding to fill out to multiple of cache line size.
+ char pad[(sizeof(UnpaddedArenaPrefix)/NFS_MaxLineSize+1)*NFS_MaxLineSize-sizeof(UnpaddedArenaPrefix)];
+
+public:
+ ArenaPrefix( unsigned number_of_slots_, unsigned number_of_workers_ ) :
+ UnpaddedArenaPrefix(number_of_slots_,number_of_workers_)
+ {
+ }
+};
+
+struct UnpaddedArenaSlot {
+ //! Holds copy of task_pool->deepest and a lock bit
+ /** Computed as 2*task_pool->deepest+(is_locked).
+ I.e., the low order bit indicates whether the slot is locked. */
+ volatile depth_type steal_end;
+ TaskPool* task_pool;
+ bool owner_waits;
+};
+
+struct ArenaSlot: UnpaddedArenaSlot {
+ char pad[NFS_MaxLineSize-sizeof(UnpaddedArenaSlot)];
+};
+
+class Arena {
+ friend class GenericScheduler;
+ template<typename SchedulerTraits> friend class internal::CustomScheduler;
+ friend class tbb::task_scheduler_init;
+
+ //! Get reference to prefix portion
+ ArenaPrefix& prefix() const {return ((ArenaPrefix*)(void*)this)[-1];}
+
+
+ //! Allocate the arena
+ /** Allocates an instance of Arena and sets TheArena to point to it.
+ Creates the worker threads, but does not wait for them to start. */
+ static Arena* allocate_arena( unsigned number_of_slots, unsigned number_of_workers );
+
+
+ //! Terminate worker threads
+ /** Wait for worker threads to complete. */
+ void terminate_workers();
+
+#if COUNT_TASK_NODES
+ //! Returns the number of task objects "living" in worker threads
+ inline intptr workers_task_node_count();
+#endif
+
+ /** Must be last field */
+ ArenaSlot slot[1];
+};
+
+//------------------------------------------------------------------------
+// Traits classes for scheduler
+//------------------------------------------------------------------------
+
+struct DefaultSchedulerTraits {
+ static const int id = 0;
+ static const bool itt_possible = true;
+ static const bool has_slow_atomic = false;
+};
+
+struct IntelSchedulerTraits {
+ static const int id = 1;
+ static const bool itt_possible = false;
+#if __TBB_x86_32||__TBB_x86_64
+ static const bool has_slow_atomic = true;
+#else
+ static const bool has_slow_atomic = false;
+#endif /* __TBB_x86_32||__TBB_x86_64 */
+};
+
+//------------------------------------------------------------------------
+// Begin shared data layout.
+//
+// The follow global data items are read-only after initialization.
+// The first item is aligned on a 128 byte boundary so that it starts a new cache line.
+//------------------------------------------------------------------------
+
+static internal::Arena *volatile TheArena;
+static mutex TheArenaMutex;
+
+//! T::id for the scheduler traits type T to use for the scheduler
+/** For example, the default value is DefaultSchedulerTraits::id. */
+static int SchedulerTraitsId;
+
+} // namespace internal
+
+} // namespace tbb
+
+#include "itt_notify.h"
+
+namespace tbb {
+namespace internal {
+
+//! Flag that is set to true after one-time initializations are done.
+static volatile bool OneTimeInitializationsDone;
+
+#if USE_WINTHREAD
+static CRITICAL_SECTION OneTimeInitializationCriticalSection;
+//! Index for thread-local storage.
+/** The original version of TBB used __declspec(thread) for thread-local storage.
+ Unfortunately, __declspec(thread) does not work on pre-Vista OSes for DLLs
+ called from plug-ins. */
+static DWORD TLS_Index;
+#else
+static pthread_mutex_t OneTimeInitializationMutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_key_t TLS_Key;
+#endif /* USE_WINTHREAD */
+
+//! Table of primes used by fast random-number generator.
+/** Also serves to keep anything else from being placed in the same
+ cache line as the global data items preceding it. */
+static const unsigned Primes[] = {
+ 0x9e3779b1, 0xffe6cc59, 0x2109f6dd, 0x43977ab5,
+ 0xba5703f5, 0xb495a877, 0xe1626741, 0x79695e6b,
+ 0xbc98c09f, 0xd5bee2b3, 0x287488f9, 0x3af18231,
+ 0x9677cd4d, 0xbe3a6929, 0xadc6a877, 0xdcf0674b,
+ 0xbe4d6fe9, 0x5f15e201, 0x99afc3fd, 0xf3f16801,
+ 0xe222cfff, 0x24ba5fdb, 0x0620452d, 0x79f149e3,
+ 0xc8b93f49, 0x972702cd, 0xb07dd827, 0x6c97d5ed,
+ 0x085a3d61, 0x46eb5ea7, 0x3d9910ed, 0x2e687b5b,
+ 0x29609227, 0x6eb081f1, 0x0954c4e1, 0x9d114db9,
+ 0x542acfa9, 0xb3e6bd7b, 0x0742d917, 0xe9f3ffa7,
+ 0x54581edb, 0xf2480f45, 0x0bb9288f, 0xef1affc7,
+ 0x85fa0ca7, 0x3ccc14db, 0xe6baf34b, 0x343377f7,
+ 0x5ca19031, 0xe6d9293b, 0xf0a9f391, 0x5d2e980b,
+ 0xfc411073, 0xc3749363, 0xb892d829, 0x3549366b,
+ 0x629750ad, 0xb98294e5, 0x892d9483, 0xc235baf3,
+ 0x3d2402a3, 0x6bdef3c9, 0xbec333cd, 0x40c9520f
+};
+
+//! Amount of time to pause between steals.
+/** The default values below were found to be best empircally for K-Means
+ on the 32-way Altix and 4-way (*2 for HT) fxqlin04. */
+#if __TBB_ipf
+static long PauseTime = 1500;
+#else
+static long PauseTime = 80;
+#endif
+
+//------------------------------------------------------------------------
+// End of shared data layout
+//------------------------------------------------------------------------
+
+//------------------------------------------------------------------------
+// One-time Initializations
+//------------------------------------------------------------------------
+
+//! True if running on genuine Intel hardware
+static inline bool IsGenuineIntel() {
+ bool result = true;
+#if defined(__TBB_cpuid)
+ char info[16];
+ char *genuine_string = "GenuntelineI";
+ __TBB_x86_cpuid( reinterpret_cast<int *>(info), 0 );
+ // The multibyte chars below spell "GenuineIntel".
+ //if( info[1]=='uneG' && info[3]=='Ieni' && info[2]=='letn' ) {
+ // result = true;
+ //}
+ for (int i = 4; i < 16; ++i) {
+ if ( info[i] != genuine_string[i-4] ) {
+ result = false;
+ break;
+ }
+ }
+#elif __TBB_ipf
+ result = true;
+#else
+ result = false;
+#endif
+ return result;
+}
+
+//! Defined in cache_aligned_allocator.cpp
+extern void initialize_cache_aligned_allocator();
+
+//! Perform lazy one-time initializations. */
+void DoOneTimeInitializations() {
+#if USE_PTHREAD
+ int status = 0;
+ pthread_mutex_lock( &OneTimeInitializationMutex );
+#else
+ EnterCriticalSection( &OneTimeInitializationCriticalSection );
+#endif /* USE_PTHREAD */
+ if( !OneTimeInitializationsDone ) {
+ if( GetBoolEnvironmentVariable("TBB_VERSION") )
+ PrintVersion();
+#if USE_PTHREAD
+ // Create key for thread-local storage
+ status = pthread_key_create( &TLS_Key, NULL );
+#endif /* USE_PTHREAD */
+ bool have_itt = false;
+#if DO_ITT_NOTIFY
+ have_itt = InitializeITT();
+#endif /* DO_ITT_NOTIFY */
+ initialize_cache_aligned_allocator();
+ if( !have_itt )
+ SchedulerTraitsId = IntelSchedulerTraits::id;
+ PrintExtraVersionInfo( "SCHEDULER",
+ SchedulerTraitsId==IntelSchedulerTraits::id ? "Intel" : "default" );
+ OneTimeInitializationsDone = true;
+ }
+#if USE_PTHREAD
+ pthread_mutex_unlock( &OneTimeInitializationMutex );
+ if( status )
+ handle_perror(status,"pthread_key_create");
+#else
+ LeaveCriticalSection( &OneTimeInitializationCriticalSection );
+#endif /* USE_PTHREAD */
+}
+
+#if _WIN32||_WIN64
+extern "C" bool WINAPI DllMain( HANDLE hinstDLL, DWORD reason, LPVOID lpvReserved );
+
+//! Windows "DllMain" that handles startup and shutdown of dynamic library.
+/** Currently, its job is to deal with initializing/deleting
+ OneTimeInitializationCriticalSection and allocating/freeing TLS_Index. */
+bool WINAPI DllMain( HANDLE hinstDLL, DWORD reason, LPVOID lpvReserved ) {
+ switch( reason ) {
+ case DLL_PROCESS_ATTACH:
+ TLS_Index = TlsAlloc();
+ if( TLS_Index==TLS_OUT_OF_INDEXES ) {
+#if TBB_DO_ASSERT
+ // Issue diagnostic here, not failing assertion, because client
+ // might want to test graceful recovery from this problem.
+ fprintf( stderr, "DllMain for TBB: TlsAlloc() returned TLS_OUT_OF_INDEXES\n" );
+#endif /* TBB_DO_ASSERT */
+ return false;
+ }
+ InitializeCriticalSection(&OneTimeInitializationCriticalSection);
+ break;
+ case DLL_PROCESS_DETACH:
+ DeleteCriticalSection(&OneTimeInitializationCriticalSection);
+#if TBB_DO_ASSERT
+ if( TlsGetValue(TLS_Index) ) {
+ fprintf( stderr, "DllMain for TBB: thread quit without destroying its tbb::task_scheduler_init object?" );
+ }
+#endif /* TBB_DO_ASSERT */
+ TlsFree(TLS_Index);
+ TLS_Index = 0;
+ break;
+ }
+ return true;
+}
+#endif /* _WIN32||_WIN64 */
+
+//------------------------------------------------------------------------
+// Routines for thread-specific global data
+//------------------------------------------------------------------------
+
+static inline void SetThreadSpecific( GenericScheduler* s ) {
+#if USE_WINTHREAD
+ TlsSetValue( TLS_Index, s );
+#else
+ pthread_setspecific( TLS_Key, s );
+#endif /* USE_WINTHREAD */
+}
+
+//! Get scheduler belonging to the current thread.
+/** Returns NULL if this is the first time the thread has requested a scheduler.
+ It's the client's responsibility to check for the NULL, because in many
+ contexts, we can proved that it cannot be NULL. */
+static inline GenericScheduler* GetThreadSpecific() {
+ GenericScheduler *result;
+ // The assertion on OneTimeInitializationsDone checks that we can safely
+ // use TLS_Key/TLS_Index; i.e., that TLS_Key/TLS_Index has been initialized.
+ // The assertion message is intended to help end users. Even though
+ // OneTimeInitializationsDone might be set for other reasons, if it is
+ // *not* set when a thread reaches here, the reason is almost
+ // certainly that the thread failed to create a task_scheduler_init object.
+ __TBB_ASSERT( OneTimeInitializationsDone, "thread did not activate a task_scheduler_init object?" );
+#if USE_WINTHREAD
+ result = (GenericScheduler*)TlsGetValue( TLS_Index );
+#else
+ result = (GenericScheduler*)pthread_getspecific( TLS_Key );
+#endif /* USE_WINTHREAD */
+ return result;
+}
+
+//------------------------------------------------------------------------
+// FastRandom
+//------------------------------------------------------------------------
+
+//! A fast random number generator.
+/** Uses linear congruential method. */
+class FastRandom {
+ unsigned x, a;
+public:
+ //! Get a random number.
+ unsigned short get() {
+ unsigned short r = x>>16;
+ x = x*a+1;
+ return r;
+ }
+ //! Construct a random number generator.
+ FastRandom( unsigned seed ) {
+ x = seed;
+ a = Primes[seed%(sizeof(Primes)/sizeof(Primes[0]))];
+ }
+};
+
+//------------------------------------------------------------------------
+// GenericScheduler
+//------------------------------------------------------------------------
+
+// A pure virtual destructor should still have a body
+// so the one for tbb::internal::scheduler::~scheduler() is provided here
+scheduler::~scheduler( ) {}
+
+//! Cilk-style task scheduler.
+/** None of the fields here are every read or written by threads other than
+ the thread that creates the instance.
+
+ Class GenericScheduler is an abstract base class that contains most of the scheduler,
+ except for tweaks specific to processors and tools (e.g. VTune).
+ The derived template class CustomScheduler<SchedulerTraits> fills in the tweaks. */
+class GenericScheduler: public scheduler {
+ typedef task::depth_type depth_type;
+ friend class tbb::task;
+ friend class tbb::task_scheduler_init;
+ friend struct WorkerDescriptor;
+ friend class Arena;
+ friend class allocate_root_proxy;
+ friend class scheduler;
+ template<typename SchedulerTraits> friend class internal::CustomScheduler;
+
+ //! If sizeof(task) is <=quick_task_size, it is handled on a free list instead of malloc'd.
+ static const size_t quick_task_size = 256-sizeof(internal::task_prefix);
+
+ //! Bit masks
+ enum debug_state_t {
+#if TBB_DO_ASSERT
+ ds_debug = 1<<0,
+ ds_ref_count_active = 1<<1
+#else
+ ds_release = 0
+#endif /* TBB_DO_ASSERT */
+ };
+
+ //! Deepest non-empty level.
+ /** Not read by thieves. -1 if array is empty. */
+ depth_type deepest;
+
+ //! The physical number of slots in "array".
+ /** Read by thieves. */
+ TaskPool::size_type array_size;
+
+ //! Dummy slot used when scheduler is not in arena
+ UnpaddedArenaSlot dummy_slot;
+
+ //! Pointer to my slot in the arena
+ mutable UnpaddedArenaSlot* arena_slot;
+
+ //! The arena that I own (if master) or belong to (if worker)
+ Arena* const arena;
+
+ //! Random number generator used for picking a random victim from which to steal.
+ FastRandom random;
+
+ //! Free list of small tasks that can be reused.
+ task* free_list;
+
+ //! Innermost task whose task::execute() is running.
+ task* innermost_running_task;
+
+ //! Fake root task created by slave threads.
+ /** The task is used as the "parent" argument to method wait_for_all. */
+ task* dummy_task;
+
+ //! Reference count for scheduler
+ long ref_count;
+
+#if !IMPROVED_GATING
+ //! Set to non-null temporarily when entering arena
+ /** Always NULL if insert_task is not running. */
+ Gate* open_gate;
+#endif /* IMPROVED_GATING */
+
+
+#if COUNT_TASK_NODES
+ //! Net number of big task objects that have been allocated but not yet freed.
+ intptr task_node_count;
+#endif /* COUNT_TASK_NODES */
+
+#if STATISTICS
+ long execute_count;
+ long steal_count;
+ long current_active;
+ long current_length;
+ //! Number of big tasks that have been malloc'd.
+ /** To find total number of tasks malloc'd, compute (current_big_malloc+small_task_count) */
+ long current_big_malloc;
+#endif /* STATISTICS */
+
+ //! Try to enter the arena
+ /** On return, guaranteess that task pool has been acquired. */
+ void try_enter_arena();
+
+ //! Leave the arena
+ void leave_arena( bool compress );
+
+ void acquire_task_pool() const;
+
+ void release_task_pool() const;
+
+ //! Get task from ready pool.
+ /** Called only by the thread that owns *this.
+ Gets task only if there is one at depth d or deeper in the pool.
+ If successful, unlinks the task and returns a pointer to it.
+ Otherwise returns NULL. */
+ task* get_task( depth_type d );
+
+ //! Steal task from another scheduler's ready pool.
+ task* steal_task( UnpaddedArenaSlot& arena_slot, depth_type d );
+
+ //! Grow "array" to at least "minimum_size" elements.
+ /** Does nothing if array is already that big.
+ Returns &array[minimum_size-1] */
+ void grow( TaskPool::size_type minimum_size );
+
+ //! Call destructor for a task and put it on the free list (or free it if it is big).
+ void destroy_task( task& t ) {
+ TBB_TRACE(("%p.destroy_task(%p)\n",this,&t));
+ __TBB_ASSERT( t.is_owned_by_current_thread(), "task owned by different thread" );
+ t.~task();
+ free_task<no_hint>( t );
+ }
+ static GenericScheduler* create_master( Arena* a );
+
+ /** The workers are started up as a binary tree, where each vertex in the tree
+ starts any children it has. The tree is implicitly arranged in TheWorkerList
+ like a binary heap. */
+ static GenericScheduler* create_worker( WorkerDescriptor& w );
+
+ //! Top-level routine for worker threads
+ /** Argument arg is a WorkerDescriptor*, cast to a (void*). */
+#if USE_WINTHREAD
+ static unsigned WINAPI worker_routine( void* arg );
+#else
+ static void* worker_routine( void* arg );
+#endif /* USE_WINTHREAD */
+
+ //! Called by slave threads to free memory and wait for other threads.
+ static void cleanup_worker_thread( void* arg );
+
+protected:
+ GenericScheduler( Arena* arena );
+
+#if TBB_DO_ASSERT || TEST_ASSEMBLY_ROUTINES
+ //! Check that internal data structures are in consistent state.
+ /** Raises __TBB_ASSERT failure if inconsistency is found. */
+ bool assert_okay() const;
+#endif /* TBB_DO_ASSERT || TEST_ASSEMBLY_ROUTINES */
+
+public:
+ /*override*/ void spawn( task& first, task*& next );
+
+ /*override*/ void spawn_root_and_wait( task& first, task*& next );
+
+ static GenericScheduler* allocate_scheduler( Arena* arena );
+
+ //! Destroy and deallocate scheduler that was created with method allocate.
+ void free_scheduler();
+
+ //! Allocate task object, either from the heap or a free list.
+ /** Returns uninitialized task object with initialized prefix. */
+ task& allocate_task( size_t number_of_bytes, depth_type depth, task* parent );
+
+ //! Optimization hint to free_task that enables it omit unnecessary tests and code.
+ enum hint {
+ //! No hint
+ no_hint=0,
+ //! Task is known to have been allocated by this scheduler
+ is_local=1,
+ //! Task is known to be a small task.
+ /** Task should be returned to the free list of *some* scheduler, possibly not this scheduler. */
+ is_small=2,
+ //! Bitwise-OR of is_local and is_small.
+ /** Task should be returned to free list of this scheduler. */
+ is_small_local=3
+ };
+
+ //! Put task on free list.
+ /** Does not call destructor. */
+ template<hint h>
+ void free_task( task& t );
+
+
+ void deallocate_task( task& t ) {
+ task_prefix& p = t.prefix();
+#if TBB_DO_ASSERT
+ p.state = 0xFF;
+ poison_pointer(p.next);
+#endif /* TBB_DO_ASSERT */
+ NFS_Free(&p);
+#if COUNT_TASK_NODES
+ task_node_count -= 1;
+#endif /* COUNT_TASK_NODES */
+ }
+
+ //! True if running on a worker thread, false otherwise.
+ inline bool is_worker() {
+ return (dummy_slot.task_pool->prefix().arena_index < arena->prefix().number_of_workers);
+ }
+
+#if IMPROVED_GATING
+ //! No tasks to steal since last snapshot was taken
+ static const Gate::state_t SNAPSHOT_EMPTY = 0;
+
+ //! At least one task has been offered for stealing since the last snapshot started
+ static const Gate::state_t SNAPSHOT_FULL = -1;
+
+ //! Gate is permanently open
+ static const Gate::state_t SNAPSHOT_PERMANENTLY_OPEN = -2;
+
+ //! If necessary, inform gate that task was added to pool recently.
+ void mark_pool_full();
+
+ //! Wait while pool is empty
+ void wait_while_pool_is_empty();
+#endif /* IMPROVED_GATING */
+
+#if TEST_ASSEMBLY_ROUTINES
+ /** Defined in test_assembly.cpp */
+ void test_assembly_routines();
+#endif /* TEST_ASSEMBLY_ROUTINES */
+
+#if COUNT_TASK_NODES
+ intptr get_task_node_count( bool count_arena_workers = false ) {
+ return task_node_count + (count_arena_workers? arena->workers_task_node_count(): 0);
+ }
+#endif
+
+ //! Special value used to mark return_list as not taking any more entries.
+ static task* plugged_return_list() {return (task*)(intptr)(-1);}
+
+ //! Number of small tasks that have been allocated by this scheduler.
+ intptr small_task_count;
+
+ //! List of small tasks that have been returned to this scheduler by other schedulers.
+ // FIXME - see if puting return_list on separate cache line improves performance,
+ // e.g. on a prefix of the scheduler
+ task* volatile return_list;
+
+ //! Free a small task t that that was allocated by a different scheduler
+ void free_nonlocal_small_task( task& t );
+};
+
+inline task& GenericScheduler::allocate_task( size_t number_of_bytes, depth_type depth, task* parent ) {
+ GATHER_STATISTIC(current_active+=1);
+ task* t = free_list;
+ if( number_of_bytes<=quick_task_size ) {
+ if( t ) {
+ GATHER_STATISTIC(current_length-=1);
+ __TBB_ASSERT( t->state()==task::freed, "free list of tasks is corrupted" );
+ free_list = t->prefix().next;
+ } else if( return_list ) {
+ t = (task*)__TBB_FetchAndStoreW( &return_list, 0 );
+ __TBB_ASSERT( t, "another thread emptied the return_list" );
+ __TBB_ASSERT( t->prefix().origin==this, "task returned to wrong return_list" );
+ free_list = t->prefix().next;
+ } else {
+ t = &((task_prefix*)NFS_Allocate( sizeof(task_prefix)+quick_task_size, 1, NULL ))->task();
+#if COUNT_TASK_NODES
+ ++task_node_count;
+#endif /* COUNT_TASK_NODES */
+ t->prefix().origin = this;
+ ++small_task_count;
+ }
+ } else {
+ GATHER_STATISTIC(current_big_malloc+=1);
+ t = &((task_prefix*)NFS_Allocate( sizeof(task_prefix)+number_of_bytes, 1, NULL ))->task();
+#if COUNT_TASK_NODES
+ ++task_node_count;
+#endif /* COUNT_TASK_NODES */
+ t->prefix().origin = NULL;
+ }
+ task_prefix& p = t->prefix();
+ p.owner = this;
+ p.ref_count = 0;
+ p.depth = int(depth);
+ p.parent = parent;
+#if TBB_DO_ASSERT
+ p.debug_state = GenericScheduler::ds_debug;
+#else
+ // Clear reserved0 so that if client compiles their code with TBB_DO_ASSERT set,
+ // the assertions in task.h that inspect debug_state still work.
+ p.reserved0 = GenericScheduler::ds_release;
+#endif /* TBB_DO_ASSERT */
+ p.state = task::allocated;
+ return *t;
+}
+
+template<GenericScheduler::hint h>
+inline void GenericScheduler::free_task( task& t ) {
+ GATHER_STATISTIC(current_active-=1);
+ task_prefix& p = t.prefix();
+ // Verify that optimization hints are correct.
+ __TBB_ASSERT( h!=is_small_local || p.origin==this, NULL );
+ __TBB_ASSERT( !(h&is_small) || p.origin, NULL );
+#if TBB_DO_ASSERT
+ p.depth = 0xDEADBEEF;
+ p.ref_count = 0xDEADBEEF;
+ poison_pointer(p.owner);
+#endif /* TBB_DO_ASSERT */
+ __TBB_ASSERT( 1L<<t.state() & (1L<<task::executing|1L<<task::allocated), NULL );
+ p.state = task::freed;
+ if( h==is_small_local || p.origin==this ) {
+ GATHER_STATISTIC(current_length+=1);
+ p.next = free_list;
+ free_list = &t;
+ } else if( h&is_local || p.origin ) {
+ free_nonlocal_small_task(t);
+ } else {
+ deallocate_task(t);
+ }
+}
+
+void GenericScheduler::free_nonlocal_small_task( task& t ) {
+ __TBB_ASSERT( t.state()==task::freed, NULL );
+ GenericScheduler& s = *static_cast<GenericScheduler*>(t.prefix().origin);
+ __TBB_ASSERT( &s!=this, NULL );
+ for(;;) {
+ task* old = s.return_list;
+ if( old==plugged_return_list() )
+ break;
+ // Atomically insert t at head of s.return_list
+ t.prefix().next = old;
+ if( __TBB_CompareAndSwapW( &s.return_list, (intptr)&t, (intptr)old )==(intptr)old )
+ return;
+ }
+ deallocate_task(t);
+ if( __TBB_FetchAndDecrementWrelease( &s.small_task_count )==1 ) {
+ // We freed the last task allocated by scheduler s, so it's our responsibility
+ // to free the scheduler.
+ NFS_Free( &s );
+ }
+}
+
+#if IMPROVED_GATING
+inline void GenericScheduler::mark_pool_full() {
+ // Double-check idiom
+ Gate::state_t snapshot = arena->prefix().gate.get_state();
+ if( snapshot!=SNAPSHOT_FULL && snapshot!=SNAPSHOT_PERMANENTLY_OPEN )
+ arena->prefix().gate.try_update( SNAPSHOT_FULL, SNAPSHOT_PERMANENTLY_OPEN, true );
+}
+
+void GenericScheduler::wait_while_pool_is_empty() {
+ for(;;) {
+ Gate::state_t snapshot = arena->prefix().gate.get_state();
+ switch( snapshot ) {
+ case SNAPSHOT_EMPTY:
+ arena->prefix().gate.wait();
+ return;
+ case SNAPSHOT_FULL: {
+ // Use unique id for "busy" in order to avoid ABA problems.
+ const Gate::state_t busy = Gate::state_t(this);
+ // Request permission to take snapshot
+ arena->prefix().gate.try_update( busy, SNAPSHOT_FULL );
+ if( arena->prefix().gate.get_state()==busy ) {
+ // Got permission. Take the snapshot.
+ size_t n = arena->prefix().limit;
+ size_t k;
+ for( k=0; k<n; ++k )
+ if( arena->slot[k].steal_end>=0 )
+ break;
+ // Test and test-and-set.
+ if( arena->prefix().gate.get_state()==busy ) {
+ if( k>=n ) {
+ arena->prefix().gate.try_update( SNAPSHOT_EMPTY, busy );
+ continue;
+ } else {
+ arena->prefix().gate.try_update( SNAPSHOT_FULL, busy );
+ }
+ }
+ return;
+ }
+ break;
+ }
+ default:
+ // Another thread is taking a snapshot or gate is permanently open.
+ return;
+ }
+ }
+}
+#endif /* IMPROVED_GATING */
+
+//------------------------------------------------------------------------
+// CustomScheduler
+//------------------------------------------------------------------------
+
+//! A scheduler with a customized evaluation loop.
+/** The customization can use SchedulerTraits to make decisions without needing a run-time check. */
+template<typename SchedulerTraits>
+class CustomScheduler: private GenericScheduler {
+ //! Scheduler loop that dispatches tasks.
+ /** If child is non-NULL, it is dispatched first.
+ Then, until "parent" has a reference count of 1, other task are dispatched or stolen. */
+ /*override*/void wait_for_all( task& parent, task* child );
+
+ typedef CustomScheduler<SchedulerTraits> scheduler_type;
+
+ //! Construct a CustomScheduler
+ CustomScheduler( Arena* arena ) : GenericScheduler(arena) {}
+
+public:
+ static GenericScheduler* allocate_scheduler( Arena* arena ) {
+ __TBB_ASSERT( arena, "missing arena" );
+ scheduler_type* s = (scheduler_type*)NFS_Allocate(sizeof(scheduler_type),1,NULL);
+ new( s ) scheduler_type( arena );
+ __TBB_ASSERT( s->dummy_slot.task_pool->assert_okay(), NULL );
+ return s;
+ }
+};
+
+
+//------------------------------------------------------------------------
+// AssertOkay
+//------------------------------------------------------------------------
+#if TBB_DO_ASSERT
+/** Logically, this method should be a member of class task.
+ But we do not want to publish it, so it is here instead. */
+static bool AssertOkay( const task& task ) {
+ __TBB_ASSERT( &task!=NULL, NULL );
+ __TBB_ASSERT((uintptr)&task % internal::NFS_GetLineSize() == sizeof(task_prefix), "misaligned task" );
+ __TBB_ASSERT( (unsigned)task.state()<=(unsigned)task::recycle, "corrupt task (invalid state)" );
+ __TBB_ASSERT( task.prefix().depth<1L<<30, "corrupt task (absurd depth)" );
+ return true;
+}
+#endif /* TBB_DO_ASSERT */
+
+//------------------------------------------------------------------------
+// Methods of Arena
+//------------------------------------------------------------------------
+Arena* Arena::allocate_arena( unsigned number_of_slots, unsigned number_of_workers ) {
+ __TBB_ASSERT( sizeof(ArenaPrefix) % NFS_GetLineSize()==0, "ArenaPrefix not multiple of cache line size" );
+ size_t n = sizeof(ArenaPrefix) + number_of_slots*sizeof(ArenaSlot);
+
+ unsigned char* storage = (unsigned char*)NFS_Allocate( n, 1, NULL );
+ memset( storage, 0, n );
+ Arena* a = (Arena*)(storage+sizeof(ArenaPrefix));
+ __TBB_ASSERT( sizeof(a->slot[0]) % NFS_GetLineSize()==0, "Arena::slot size not multiple of cache line size" );
+ __TBB_ASSERT( (uintptr)a % NFS_GetLineSize()==0, NULL );
+ new( &a->prefix() ) ArenaPrefix( number_of_slots, number_of_workers );
+
+ // Allocate the worker_list
+ WorkerDescriptor * w = new WorkerDescriptor[number_of_workers];
+ memset( w, 0, sizeof(WorkerDescriptor)*(number_of_workers));
+ a->prefix().worker_list = w;
+
+
+ size_t k;
+ // Mark each worker slot as locked and unused
+ for( k=0; k<number_of_workers; ++k ) {
+ a->slot[k].steal_end = -3;
+ w[k].arena = a;
+ }
+ // Mark rest of slots as unused
+ for( ; k<number_of_slots; ++k )
+ a->slot[k].steal_end = -4;
+
+ // Publish the Arena
+ __TBB_ASSERT( !TheArena, NULL );
+ TheArena = a;
+
+ // Attach threads to workers
+ if( number_of_workers>0 ) {
+ a->prefix().worker_list[0].start_one_worker_thread();
+ }
+ return a;
+}
+
+void Arena::terminate_workers() {
+ int n = prefix().number_of_workers;
+ __TBB_ASSERT( n>=0, "negative number of workers; casting error?" );
+#if IMPROVED_GATING
+ prefix().gate.try_update( GenericScheduler::SNAPSHOT_PERMANENTLY_OPEN, GenericScheduler::SNAPSHOT_PERMANENTLY_OPEN, true );
+#else
+ prefix().gate.open();
+#endif /* IMPROVED_GATING */
+ for( int i=n; --i>=0; ) {
+ WorkerDescriptor& w = prefix().worker_list[i];
+ // The following while wait_for_all protects against situation where worker has not started yet.
+ // It would be more elegant to do this with condition variables, but the situation
+ // is probably rare enough in practice that it might not be worth the added complexity
+ // of condition variables.
+ ITT_NOTIFY(sync_prepare, &w.scheduler);
+ SpinwaitWhileEq( w.scheduler, (scheduler*)NULL );
+ ITT_NOTIFY(sync_acquired, &w.scheduler);
+ task* t = w.scheduler->dummy_task;
+ ITT_NOTIFY(sync_releasing, &t->prefix().ref_count);
+ t->prefix().ref_count = 1;
+ }
+ // Wait for all workers to quit
+ for( int i=n; --i>=0; ) {
+ WorkerDescriptor& w = prefix().worker_list[i];
+#if USE_WINTHREAD
+ DWORD status = WaitForSingleObject( w.thread_handle, INFINITE );
+ if( status==WAIT_FAILED ) {
+ fprintf(stderr,"Arena::terminate_workers: WaitForSingleObject failed\n");
+ exit(1);
+ }
+ CloseHandle( w.thread_handle );
+ w.thread_handle = (HANDLE)0;
+#else
+ int status = pthread_join( w.thread_handle, NULL );
+ if( status )
+ handle_perror(status,"pthread_join");
+#endif /* USE_WINTHREAD */
+ }
+ // All workers have quit
+#if !IMPROVED_GATING
+ prefix().gate.close();
+#endif /* !IMPROVED_GATING */
+ delete[] prefix().worker_list;
+ prefix().worker_list = NULL;
+#if COUNT_TASK_NODES && !TEST_ASSEMBLY_ROUTINES
+ if( prefix().task_node_count ) {
+ fprintf(stderr,"warning: leaked %ld task objects\n", long(prefix().task_node_count));
+ }
+#endif /* COUNT_TASK_NODES && !TEST_ASSEMBLY_ROUTINES */
+ __TBB_ASSERT( this, "attempt to free NULL Arena" );
+ prefix().~ArenaPrefix();
+ NFS_Free( &prefix() );
+}
+
+#if COUNT_TASK_NODES
+intptr Arena::workers_task_node_count() {
+ intptr result = 0;
+ for( unsigned i=0; i<prefix().number_of_workers; ++i ) {
+ GenericScheduler* s = prefix().worker_list[i].scheduler;
+ if( s )
+ result += s->task_node_count;
+ }
+ return result;
+}
+#endif
+
+//------------------------------------------------------------------------
+// Methods of GenericScheduler
+//------------------------------------------------------------------------
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+#pragma warning(disable:4355)
+#endif
+GenericScheduler::GenericScheduler( Arena* arena_ ) :
+#if STATISTICS
+ current_active(0),
+ current_length(0),
+ current_big_malloc(0),
+ steal_count(0),
+ execute_count(0),
+#endif /* STATISTICS */
+ deepest(-1),
+ array_size(0),
+ arena_slot(&dummy_slot),
+ arena(arena_),
+ random( unsigned(this-(GenericScheduler*)NULL) ),
+ free_list(NULL),
+ innermost_running_task(NULL),
+ dummy_task(NULL),
+ ref_count(1)
+#if !IMPROVED_GATING
+ ,open_gate(NULL)
+#endif /* !IMPROVE_GATING */
+#if TBB_DO_ASSERT
+ ,task_node_count(0)
+#endif /* TBB_DO_ASSERT */
+ ,small_task_count(1) // Extra 1 is a guard reference
+ ,return_list(NULL)
+{
+ TaskPool* t = TaskPool::allocate_task_pool(TaskPool::min_array_size);
+ dummy_slot.task_pool = t;
+ t->prefix().steal_begin = depth_type(array_size);
+ t->prefix().arena_index = TaskPoolPrefix::null_arena_index;
+ dummy_slot.steal_end = -2;
+ dummy_slot.owner_waits = false;
+ array_size = TaskPool::min_array_size;
+ dummy_task = &allocate_task( sizeof(task), -1, NULL );
+ dummy_task->prefix().ref_count = 2;
+ __TBB_ASSERT( assert_okay(), "contructor error" );
+ // Register scheduler in thread local storage
+ SetThreadSpecific(this);
+}
+
+#if TBB_DO_ASSERT||TEST_ASSEMBLY_ROUTINES
+bool GenericScheduler::assert_okay() const {
+ __TBB_ASSERT( array_size>=TaskPool::min_array_size, NULL );
+#if TBB_DO_ASSERT>=2||TEST_ASSEMBLY_ROUTINES
+ acquire_task_pool();
+ TaskPool* tp = dummy_slot.task_pool;
+ __TBB_ASSERT( tp, NULL );
+ for( depth_type k=0; k<depth_type(array_size); ++k ) {
+ for( task* t = tp->array[k]; t; t=t->prefix().next ) {
+ __TBB_ASSERT( deepest>=k, "deepest not set properly" );
+ __TBB_ASSERT( t->prefix().depth==k, NULL );
+ __TBB_ASSERT( t->prefix().owner==this, NULL );
+ }
+ }
+ release_task_pool();
+#endif /* TBB_DO_ASSERT>=2||TEST_ASSEMBLY_ROUTINES */
+ return true;
+}
+#endif /* TBB_DO_ASSERT||TEST_ASSEMBLY_ROUTINES */
+
+void GenericScheduler::grow( TaskPool::size_type minimum_size ) {
+ TBB_TRACE(("%p.grow(minimum_size=%lx)\n", this, minimum_size ));
+ __TBB_ASSERT( assert_okay(), NULL );
+
+ // Might need to resize the underlying array.
+ // Get a fresh zeroed array before acquiring the old array.
+ TaskPool::size_type b_size = 2*minimum_size;
+ __TBB_ASSERT( b_size>=TaskPool::min_array_size, NULL );
+ TaskPool* new_pool = TaskPool::allocate_task_pool( b_size );
+ __TBB_ASSERT( assert_okay(), NULL );
+ acquire_task_pool();
+ TaskPool* old_pool = dummy_slot.task_pool;
+ memcpy( &new_pool->prefix(), &old_pool->prefix(), TaskPool::byte_size(array_size) );
+ arena_slot->task_pool = dummy_slot.task_pool = new_pool;
+ array_size = b_size;
+ release_task_pool();
+ old_pool->free_task_pool();
+ __TBB_ASSERT( assert_okay(), NULL );
+}
+
+GenericScheduler* GenericScheduler::allocate_scheduler( Arena* arena ) {
+ switch( SchedulerTraitsId ) {
+ /* DefaultSchedulerTraits::id is listed explicitly as a case so that the host compiler
+ will issue an error message if it is the same as another id in the list. */
+ default:
+ case DefaultSchedulerTraits::id:
+ return CustomScheduler<DefaultSchedulerTraits>::allocate_scheduler(arena);
+ case IntelSchedulerTraits::id:
+ return CustomScheduler<IntelSchedulerTraits>::allocate_scheduler(arena);
+ }
+}
+
+void GenericScheduler::free_scheduler() {
+ if( arena_slot!=&dummy_slot ) {
+ leave_arena(/*compress=*/false);
+ }
+ free_task<is_small_local>( *dummy_task );
+
+ // k accounts for a guard reference and each task that we deallocate.
+ intptr k = 1;
+ for(;;) {
+ while( task* t = free_list ) {
+ free_list = t->prefix().next;
+ deallocate_task(*t);
+ ++k;
+ }
+ if( return_list==plugged_return_list() )
+ break;
+ free_list = (task*)__TBB_FetchAndStoreW( &return_list, (intptr)plugged_return_list() );
+ }
+
+#if COUNT_TASK_NODES
+ arena->prefix().task_node_count += task_node_count;
+#endif /* COUNT_TASK_NODES */
+ dummy_slot.task_pool->free_task_pool();
+ dummy_slot.task_pool = NULL;
+ SetThreadSpecific( NULL );
+ // Update small_task_count last. Doing so sooner might cause another thread to free *this.
+ __TBB_ASSERT( small_task_count>=k, "small_task_count corrupted" );
+ if( __TBB_FetchAndAddW( &small_task_count, -k )==k )
+ NFS_Free( this );
+}
+
+inline void GenericScheduler::acquire_task_pool() const {
+ __TBB_ASSERT( arena_slot, "arena_slot not set" );
+ __TBB_ASSERT( deepest>=-1, NULL );
+ __TBB_ASSERT( arena_slot->owner_waits==false, "slot ownership corrupt?" );
+ ExponentialBackoff backoff;
+ bool sync_prepare_done = false;
+ for(;;) {
+#if TEST_ASSEMBLY_ROUTINES
+ __TBB_ASSERT( (arena_slot->steal_end&1)==0, "already acquired" );
+#endif /* TEST_ASSEMBLY_ROUTINES */
+ __TBB_ASSERT( arena_slot==&dummy_slot || arena_slot==&arena->slot[dummy_slot.task_pool->prefix().arena_index], "slot ownership corrupt?" );
+ __TBB_ASSERT( arena_slot->task_pool==dummy_slot.task_pool, "slot ownership corrupt?" );
+ depth_type steal_end = arena_slot->steal_end;
+ if( steal_end==2*deepest && (steal_end=__TBB_CompareAndSwapW( (volatile void *)&(arena_slot->steal_end), 2*deepest+1, 2*deepest ))==2*deepest ) {
+ // We acquired our own slot
+ ITT_NOTIFY(sync_acquired, arena_slot);
+ arena_slot->owner_waits = false;
+ break;
+ } else {
+ __TBB_ASSERT( steal_end&1, "steal_end and/or deepest corrupt?" );
+ // Someone else acquired a lock, so pause and do exponential backoff.
+ if( !sync_prepare_done ) {
+ // Start waiting
+ ITT_NOTIFY(sync_prepare, arena_slot);
+ sync_prepare_done = true;
+ } else {
+ // after 2nd attempt, still can't acquire own pool;
+ // need notify others that the owner is waiting
+ arena_slot->owner_waits = true;
+ }
+ backoff.pause();
+#if TEST_ASSEMBLY_ROUTINES
+ __TBB_ASSERT( arena_slot->task_pool==dummy_slot.task_pool, NULL );
+#endif /* TEST_ASSEMBLY_ROUTINES */
+ }
+ }
+ __TBB_ASSERT( arena_slot->steal_end>>1 <= depth_type(array_size), NULL );
+ __TBB_ASSERT( dummy_slot.task_pool->prefix().steal_begin<=depth_type(array_size), NULL );
+ __TBB_ASSERT( deepest<=depth_type(array_size), NULL );
+}
+
+inline void GenericScheduler::release_task_pool() const {
+ __TBB_ASSERT( arena_slot->steal_end>>1 <= depth_type(array_size), NULL );
+ __TBB_ASSERT( dummy_slot.task_pool->prefix().steal_begin<=depth_type(array_size), NULL );
+ __TBB_ASSERT( deepest<=depth_type(array_size), NULL );
+ ITT_NOTIFY(sync_releasing, arena_slot);
+ arena_slot->steal_end = 2*deepest;
+}
+
+/** Conceptually, this method should be a member of class scheduler.
+ But doing so would force us to publish class scheduler in the headers. */
+void GenericScheduler::spawn( task& first, task*& next ) {
+ __TBB_ASSERT( assert_okay(), NULL );
+ TBB_TRACE(("%p.internal_spawn enter\n", this ));
+ for( task* t = &first; ; t = t->prefix().next )
+ {
+ __TBB_ASSERT( t->state()==task::allocated, "attempt to spawn task that is not in 'allocated' state" );
+ __TBB_ASSERT( t->prefix().depth==first.prefix().depth, "tasks must have same depth" );
+ t->prefix().owner = this;
+ t->prefix().state = task::ready;
+#if TBB_DO_ASSERT
+ if( task* parent = t->parent() ) {
+ internal::reference_count ref_count = parent->prefix().ref_count;
+ __TBB_ASSERT( ref_count>=0, "attempt to spawn task whose parent has a ref_count<0" );
+ __TBB_ASSERT( ref_count!=0, "attempt to spawn task whose parent has a ref_count==0 (forgot to set_ref_count?)" );
+ parent->prefix().debug_state |= ds_ref_count_active;
+ }
+#endif /* TBB_DO_ASSERT */
+ if( &t->prefix().next==&next )
+ break;
+ }
+ depth_type d = first.prefix().depth;
+#if !IMPROVED_GATING
+ __TBB_ASSERT( !open_gate, NULL );
+#endif /* !IMPROVED_GATING */
+ __TBB_ASSERT(depth_type(array_size)>0, "casting overflow?");
+ if( d>=depth_type(array_size) ) {
+ grow( d+1 );
+ }
+ __TBB_ASSERT( assert_okay(), NULL );
+ if( arena_slot==&dummy_slot ) {
+ try_enter_arena();
+ __TBB_ASSERT( arena_slot->steal_end&1, NULL );
+ } else {
+ acquire_task_pool();
+ }
+ TaskPool* tp = dummy_slot.task_pool;
+
+ next = tp->array[d];
+ tp->array[d] = &first;
+
+ if( d>deepest )
+ deepest = d;
+ if( d<tp->prefix().steal_begin )
+ tp->prefix().steal_begin = d;
+
+ release_task_pool();
+#if IMPROVED_GATING
+ mark_pool_full();
+#else
+ if( open_gate ) {
+ open_gate->open();
+ open_gate = NULL;
+ }
+#endif /* IMPROVED_GATING */
+ __TBB_ASSERT( assert_okay(), NULL );
+
+ TBB_TRACE(("%p.internal_spawn exit\n", this ));
+}
+
+void GenericScheduler::spawn_root_and_wait( task& first, task*& next ) {
+ __TBB_ASSERT( &first, NULL );
+ empty_task& dummy = *new(&allocate_task( sizeof(empty_task), first.prefix().depth-1, NULL )) empty_task;
+ internal::reference_count n = 0;
+ for( task* t=&first; ; t=t->prefix().next ) {
+ ++n;
+ __TBB_ASSERT( t->is_owned_by_current_thread(), "root task not owned by current thread" );
+ __TBB_ASSERT( !t->prefix().parent, "not a root task, or already running" );
+ t->prefix().parent = &dummy;
+ if( &t->prefix().next==&next ) break;
+ }
+ dummy.prefix().ref_count = n+1;
+ if( n>1 )
+ spawn( *first.prefix().next, next );
+ TBB_TRACE(("spawn_root_and_wait((task_list*)%p): calling %p.loop\n",&first,this));
+ wait_for_all( dummy, &first );
+ // empty_task has trivial destructor, so call free_task directly instead of going through destroy_task.
+ free_task<is_small_local>( dummy );
+ TBB_TRACE(("spawn_root_and_wait((task_list*)%p): return\n",&first));
+}
+
+
+inline task* GenericScheduler::get_task( depth_type d ) {
+ task* result = NULL;
+ if( deepest>=d ) {
+ acquire_task_pool();
+ task** a = dummy_slot.task_pool->array;
+ depth_type i = deepest;
+ do {
+ if( (result = a[i]) ) {
+ if( !(a[i] = result->prefix().next) )
+ --i;
+ break;
+ }
+ } while( --i>=d );
+ deepest = i;
+ release_task_pool();
+ }
+ return result;
+}
+
+task* GenericScheduler::steal_task( UnpaddedArenaSlot& arena_slot, depth_type d ) {
+ task* result = NULL;
+ ExponentialBackoff backoff;
+ bool sync_prepare_done = false;
+ depth_type steal_end = arena_slot.steal_end;
+ for(;;) {
+ if( steal_end>>1<d ) {
+ // Nothing of interest to steal
+ if( sync_prepare_done )
+ ITT_NOTIFY(sync_cancel, &arena_slot);
+ goto done;
+ }
+ if( steal_end&1 ) {
+ // Someone else has lock on it.
+ if( arena_slot.owner_waits ) {
+ // The pool owner is waiting for it, so need to abandon locking attempts
+ if( sync_prepare_done )
+ ITT_NOTIFY(sync_cancel, &arena_slot);
+ goto done;
+ }
+ if( !sync_prepare_done ) {
+ ITT_NOTIFY(sync_prepare, &arena_slot);
+ sync_prepare_done = true;
+ }
+ // While waiting, do exponential backoff
+ backoff.pause();
+ steal_end = arena_slot.steal_end;
+ } else {
+ depth_type tmp = steal_end;
+ steal_end = __TBB_CompareAndSwapW( (volatile void *)&(arena_slot.steal_end), steal_end+1, steal_end );
+ if( tmp==steal_end ) {
+ ITT_NOTIFY(sync_acquired, &arena_slot);
+ break;
+ }
+ }
+ }
+{
+ TaskPool* tp = arena_slot.task_pool;
+ depth_type i = tp->prefix().steal_begin;
+ if( i<d )
+ i = d;
+ for(; i<=steal_end>>1; ++i ) {
+ if( (result = tp->array[i]) ) {
+ // Unlike get_task, we do not adjust i if the next pointer is NULL.
+ // The reason is that it is a waste of time, because steal_task
+ // is relatively infrequent compared to insert_task, and the
+ // latter updates steal_begin too.
+ tp->array[i] = result->prefix().next;
+ break;
+ }
+ }
+ if( tp->prefix().steal_begin>=d )
+ tp->prefix().steal_begin = i;
+ // Release the task pool
+ ITT_NOTIFY(sync_releasing, &arena_slot);
+ arena_slot.steal_end = steal_end;
+}
+done:
+ return result;
+}
+
+template<typename SchedulerTraits>
+void CustomScheduler<SchedulerTraits>::wait_for_all( task& parent, task* child ) {
+ TBB_TRACE(("%p.wait_for_all(parent=%p,child=%p) enter\n", this, &parent, child));
+#if TBB_DO_ASSERT
+ __TBB_ASSERT( assert_okay(), NULL );
+ if( child ) {
+ __TBB_ASSERT( child->prefix().owner==this, NULL );
+ __TBB_ASSERT( parent.ref_count()>=2, "ref_count must be at least 2" );
+ } else {
+ __TBB_ASSERT( parent.ref_count()>=1, "ref_count must be at least 1" );
+ }
+ __TBB_ASSERT( assert_okay(), NULL );
+#endif /* TBB_DO_ASSERT */
+ task* t = child;
+ depth_type d;
+ if( innermost_running_task==dummy_task ) {
+ // We are in the innermost task dispatch loop of a master thread.
+ __TBB_ASSERT( !is_worker(), NULL );
+ // Forcefully make this loop operating on zero depth.
+ d = 0;
+ } else {
+ d = parent.prefix().depth+1;
+ }
+ task* old_innermost_running_task = innermost_running_task;
+ // Outer loop steals tasks when necesssary.
+ for(;;) {
+ // Middle loop evaluates tasks that are pulled off "array".
+ do {
+ // Inner loop evaluates tasks that are handed directly to us by other tasks.
+ while(t) {
+ task_prefix& pref = t->prefix();
+ __TBB_ASSERT( pref.owner==this, NULL );
+ __TBB_ASSERT( pref.depth>=d, NULL );
+ __TBB_ASSERT( 1L<<t->state() & (1L<<task::allocated|1L<<task::ready|1L<<task::reexecute), NULL );
+ pref.state = task::executing;
+ innermost_running_task = t;
+ __TBB_ASSERT(assert_okay(),NULL);
+ TBB_TRACE(("%p.wait_for_all: %p.execute\n",this,t));
+ GATHER_STATISTIC( ++execute_count );
+ task* t_next = t->execute();
+ if( t_next ) {
+ __TBB_ASSERT( t_next->state()==task::allocated,
+ "if task::execute() returns task, it must be marked as allocated" );
+ // The store here has a subtle secondary effect - it fetches *t_next into cache.
+ t_next->prefix().owner = this;
+ }
+ __TBB_ASSERT(assert_okay(),NULL);
+ switch( task::state_type(t->prefix().state) ) {
+ case task::executing:
+ // this block was copied below to case task::recycle
+ // when making changes, check it too
+ if( task* s = t->parent() ) {
+ if( SchedulerTraits::itt_possible )
+ ITT_NOTIFY(sync_releasing, &s->prefix().ref_count);
+ if( SchedulerTraits::has_slow_atomic && s->prefix().ref_count==1 ? (s->prefix().ref_count=0, true) : __TBB_FetchAndDecrementWrelease((volatile void *)&(s->prefix().ref_count))==1 ) {
+ if( SchedulerTraits::itt_possible )
+ ITT_NOTIFY(sync_acquired, &s->prefix().ref_count);
+#if TBB_DO_ASSERT
+ s->prefix().debug_state &= ~ds_ref_count_active;
+#endif /* TBB_DO_ASSERT */
+ s->prefix().owner = this;
+ depth_type s_depth = s->prefix().depth;
+ if( !t_next && s_depth>=deepest && s_depth>=d ) {
+ // Eliminate spawn/get_task pair.
+ // The elimination is valid because the spawn would set deepest==s_depth,
+ // and the subsequent call to get_task(d) would grab task s and
+ // restore deepest to its former value.
+ t_next = s;
+ } else {
+ CustomScheduler<SchedulerTraits>::spawn(*s, s->prefix().next );
+ __TBB_ASSERT(assert_okay(),NULL);
+ }
+ }
+ }
+ destroy_task( *t );
+ break;
+
+ case task::recycle: { // state set by recycle_as_safe_continuation()
+ t->prefix().state = task::allocated;
+ // for safe continuation, need atomically decrement ref_count;
+ // the block was copied from above case task::executing, and changed.
+ task*& s = t; // s is an alias to t, in order to make less changes
+ if( SchedulerTraits::itt_possible )
+ ITT_NOTIFY(sync_releasing, &s->prefix().ref_count);
+ if( SchedulerTraits::has_slow_atomic && s->prefix().ref_count==1 ? (s->prefix().ref_count=0, true) : __TBB_FetchAndDecrementWrelease((volatile void *)&(s->prefix().ref_count))==1 ) {
+ if( SchedulerTraits::itt_possible )
+ ITT_NOTIFY(sync_acquired, &s->prefix().ref_count);
+#if TBB_DO_ASSERT
+ s->prefix().debug_state &= ~ds_ref_count_active;
+ __TBB_ASSERT( s->prefix().owner==this, "ownership corrupt?" );
+ __TBB_ASSERT( s->prefix().depth>=d, NULL );
+#endif /* TBB_DO_ASSERT */
+ if( !t_next ) {
+ t_next = s;
+ } else {
+ CustomScheduler<SchedulerTraits>::spawn(*s, s->prefix().next );
+ __TBB_ASSERT(assert_okay(),NULL);
+ }
+ }
+ } break;
+
+ case task::reexecute: // set by recycle_to_reexecute()
+ __TBB_ASSERT( t_next, "reexecution requires that method 'execute' return a task" );
+ TBB_TRACE(("%p.wait_for_all: put task %p back into array",this,t));
+ t->prefix().state = task::allocated;
+ CustomScheduler<SchedulerTraits>::spawn( *t, t->prefix().next );
+ __TBB_ASSERT(assert_okay(),NULL);
+ break;
+#if TBB_DO_ASSERT
+ case task::allocated:
+ break;
+ case task::ready:
+ __TBB_ASSERT( false, "task is in READY state upon return from method execute()" );
+ break;
+ default:
+ __TBB_ASSERT( false, "illegal state" );
+#else
+ default: // just to shut up some compilation warnings
+ break;
+#endif /* TBB_DO_ASSERT */
+ }
+ __TBB_ASSERT( !t_next||t_next->prefix().depth>=d, NULL );
+ t = t_next;
+ }
+ __TBB_ASSERT(assert_okay(),NULL);
+
+
+ t = get_task( d );
+#if TBB_DO_ASSERT
+ __TBB_ASSERT(assert_okay(),NULL);
+ if(t) {
+ AssertOkay(*t);
+ __TBB_ASSERT( t->prefix().owner==this, "thread got task that it does not own" );
+ }
+#endif /* TBB_DO_ASSERT */
+ } while( t );
+ __TBB_ASSERT( arena->prefix().number_of_workers>0||parent.prefix().ref_count==1,
+ "deadlock detected" );
+ // The state "failure_count==-1" is used only when itt_possible is true,
+ // and denotes that a sync_prepare has not yet been issued.
+ for( int failure_count = -static_cast<int>(SchedulerTraits::itt_possible);; ++failure_count) {
+ if( parent.prefix().ref_count==1 ) {
+ if( SchedulerTraits::itt_possible ) {
+ if( failure_count!=-1 ) {
+ ITT_NOTIFY(sync_prepare, &parent.prefix().ref_count);
+ // Notify Intel(R) Thread Profiler that thread has stopped spinning.
+ ITT_NOTIFY(sync_acquired, this);
+ }
+ ITT_NOTIFY(sync_acquired, &parent.prefix().ref_count);
+ }
+ goto done;
+ }
+ // Try to steal a task from a random victim.
+ size_t n = arena->prefix().limit;
+ if( n>1 ) {
+ size_t k = random.get() % (n-1);
+ ArenaSlot* victim = &arena->slot[k];
+ if( victim>=arena_slot )
+ ++victim; // Adjusts random distribution to exclude self
+ t = steal_task( *victim, d );
+ if( t ) {
+ __TBB_ASSERT( t->prefix().depth>=d, NULL );
+ if( SchedulerTraits::itt_possible ) {
+ if( failure_count!=-1 ) {
+ ITT_NOTIFY(sync_prepare, victim);
+ // Notify Intel(R) Thread Profiler that thread has stopped spinning.
+ ITT_NOTIFY(sync_acquired, this);
+ ITT_NOTIFY(sync_acquired, victim);
+ }
+ }
+ __TBB_ASSERT(t,NULL);
+ break;
+ }
+ }
+ if( SchedulerTraits::itt_possible && failure_count==-1 ) {
+ // The first attempt to steal work failed, so notify Intel(R) Thread Profiler that
+ // the thread has started spinning. Ideally, we would do this notification
+ // *before* the first failed attempt to steal, but at that point we do not
+ // know that the steal will fail.
+ ITT_NOTIFY(sync_prepare, this);
+ failure_count = 0;
+ }
+ // Pause, even if we are going to yield, because the yield might return immediately.
+ __TBB_Pause(PauseTime);
+ int yield_threshold = int(n);
+ if( failure_count>=yield_threshold ) {
+ if( failure_count>=2*yield_threshold ) {
+ __TBB_Yield();
+#if IMPROVED_GATING
+ // Note: if d!=0 or !is_worker(), it is not safe to wait for a non-empty pool,
+ // because of the polling of parent.prefix().ref_count.
+ if( d==0 && is_worker() )
+ wait_while_pool_is_empty();
+#else
+ arena->prefix().gate.wait();
+#endif /* IMPROVED_GATING */
+ failure_count = 0;
+ } else if( failure_count==yield_threshold ) {
+ // We have paused n times since last yield.
+ // Odds are that there is no other work to do.
+ __TBB_Yield();
+ }
+ }
+ }
+ __TBB_ASSERT(t,NULL);
+ GATHER_STATISTIC( ++steal_count );
+ t->prefix().owner = this;
+ }
+done:
+ parent.prefix().ref_count = 0;
+#if TBB_DO_ASSERT
+ parent.prefix().debug_state &= ~ds_ref_count_active;
+#endif /* TBB_DO_ASSERT */
+ innermost_running_task = old_innermost_running_task;
+ if( deepest<0 && innermost_running_task==dummy_task && arena_slot!=&dummy_slot ) {
+ leave_arena(/*compress=*/true);
+ }
+ __TBB_ASSERT( assert_okay(), NULL );
+ TBB_TRACE(("%p.wait_for_all(parent=%p): return\n",this,&parent));
+}
+
+void GenericScheduler::try_enter_arena() {
+ __TBB_ASSERT( arena, NULL );
+ __TBB_ASSERT( arena_slot, "arena_slot not set" );
+ __TBB_ASSERT( arena_slot==&dummy_slot, "already in arena?" );
+ unsigned n = arena->prefix().number_of_slots;
+ unsigned j = unsigned(arena->prefix().limit);
+ for( unsigned k=j; k<n; ++k ) {
+ if( arena->slot[k].steal_end==-4 && __TBB_CompareAndSwapW( (volatile void *)&(arena->slot[k].steal_end), -4|1, -4 )==-4 ) {
+ __TBB_ASSERT( arena->slot[k].steal_end==-3, "slot not really acquired?" );
+ ITT_NOTIFY(sync_acquired,&arena->slot[k]);
+ dummy_slot.task_pool->prefix().arena_index = k;
+ arena->slot[k].task_pool = dummy_slot.task_pool;
+ arena->slot[k].owner_waits = false;
+ arena_slot = &arena->slot[k];
+#if !IMPROVED_GATING
+ open_gate = &arena->prefix().gate;
+#endif /* !IMPROVED_GATING */
+ // Successfully claimed a spot in the arena. Update arena->prefix().limit.
+ do {
+ j = unsigned(arena->prefix().limit.compare_and_swap( k+1, j ));
+ } while( j<=k );
+ break;
+ }
+ }
+ arena_slot->steal_end = 2*deepest+1;
+}
+
+void GenericScheduler::leave_arena( bool compress ) {
+ __TBB_ASSERT( arena_slot!=&dummy_slot, "not in arena" );
+ // Remove myself from the arena.
+ acquire_task_pool();
+#if TBB_DO_ASSERT
+ for( depth_type i=0; i<deepest; ++i )
+ __TBB_ASSERT( !dummy_slot.task_pool->array[i], "leaving arena, but have tasks to do" );
+#endif /* TBB_DO_ASSERT */
+ size_t k = dummy_slot.task_pool->prefix().arena_index;
+ __TBB_ASSERT( &arena->slot[k]==arena_slot, NULL );
+ arena_slot->task_pool = NULL;
+ dummy_slot.task_pool->prefix().arena_index = TaskPoolPrefix::null_arena_index;
+ arena_slot = &dummy_slot;
+ arena_slot->owner_waits = false;
+ size_t n = arena->prefix().number_of_workers;
+#if !IMPROVED_GATING
+ if( k>=n )
+ arena->prefix().gate.close();
+#endif /* !IMPROVED_GATING */
+ __TBB_ASSERT( !compress || k>=n, "must be master to compress" );
+ size_t new_limit = arena->prefix().limit;
+ if( compress && new_limit==k+1 ) {
+ // Garbage collect some slots
+ for(;;) {
+ new_limit = arena->prefix().limit.compare_and_swap( k, k+1 );
+ ITT_NOTIFY(sync_releasing, &arena->slot[k]);
+ arena->slot[k].steal_end = -4;
+ if( new_limit!=k+1 ) break;
+ if( --k<n ) break;
+ if( arena->slot[k].steal_end==-4 && __TBB_CompareAndSwapW( (volatile void *)&(arena->slot[k].steal_end), -4|1, -4 )==-4 ) {
+ ITT_NOTIFY(sync_acquired,&arena->slot[k]);
+ } else {
+ break;
+ }
+ }
+ } else {
+ ITT_NOTIFY(sync_releasing, &arena->slot[k]);
+ arena->slot[k].steal_end = -4;
+ }
+}
+
+GenericScheduler* GenericScheduler::create_worker( WorkerDescriptor& w ) {
+ __TBB_ASSERT( !w.scheduler, NULL );
+ unsigned n = w.arena->prefix().number_of_workers;
+ WorkerDescriptor* worker_list = w.arena->prefix().worker_list;
+ __TBB_ASSERT( &w >= worker_list, NULL );
+ unsigned i = unsigned(&w - worker_list);
+ __TBB_ASSERT( i<n, NULL );
+
+ // Start my children
+ if( 2*i+1<n ) {
+ // Have a left child, so start it.
+ worker_list[2*i+1].start_one_worker_thread();
+ if( 2*i+2<n ) {
+ // Have a right child, so start it.
+ worker_list[2*i+2].start_one_worker_thread();
+ }
+ }
+
+ // Put myself into the arena
+ GenericScheduler* s = GenericScheduler::allocate_scheduler(w.arena);
+ ArenaSlot& slot = w.arena->slot[i];
+ __TBB_ASSERT( slot.steal_end==-3, "slot not allocated as locked worker?" );
+ s->arena_slot = &slot;
+ TaskPool* t = s->dummy_slot.task_pool;
+ t->prefix().arena_index = i;
+ ITT_NOTIFY(sync_releasing, &slot);
+ slot.task_pool = t;
+ slot.steal_end = -2;
+ slot.owner_waits = false;
+
+ // Publish worker
+ ITT_NOTIFY(sync_releasing, &w.scheduler);
+ w.scheduler = s;
+ return s;
+}
+
+GenericScheduler* GenericScheduler::create_master( Arena* arena ) {
+ GenericScheduler* s = GenericScheduler::allocate_scheduler( arena );
+ task& t = *s->dummy_task;
+ s->innermost_running_task = &t;
+ t.prefix().ref_count = 1;
+ __TBB_ASSERT( &task::self()==&t, NULL );
+ return s;
+}
+
+#if USE_WINTHREAD
+unsigned WINAPI GenericScheduler::worker_routine( void* arg )
+#else
+void* GenericScheduler::worker_routine( void* arg )
+#endif /* USE_WINTHREAD */
+{
+ GenericScheduler& scheduler = *create_worker(*(WorkerDescriptor*)arg);
+
+ ITT_NAME_SET(thr_name_set, "TBB Worker Thread", 17);
+
+#if (_WIN32||_WIN64)&&!__TBB_ipf
+ // Deal with 64K aliasing. The formula for "offset" is a Fibonacci hash function,
+ // which has the desirable feature of spreading out the offsets fairly evenly
+ // without knowing the total number of offsets, and furthermore unlikely to
+ // accidentally cancel out other 64K aliasing schemes that Microsoft might implement later.
+ // See Knuth Vol 3. "Theorem S" for details on Fibonacci hashing.
+ size_t offset = (scheduler.dummy_slot.task_pool->prefix().arena_index+1) * 40503U % (1U<<16);
+ void* volatile sink_for_alloca = _alloca(offset);
+#else
+ // Linux thread allocators avoid 64K aliasing.
+#endif /* _WIN32||_WIN64 */
+
+#if USE_PTHREAD
+ pthread_cleanup_push( cleanup_worker_thread, &scheduler );
+#endif /* USE_PTHREAD */
+
+#if USE_WINTHREAD
+ __try {
+#endif /* USE_WINTHREAD */
+
+ scheduler.wait_for_all(*scheduler.dummy_task,NULL);
+
+#if USE_WINTHREAD
+ } __finally {
+ cleanup_worker_thread(&scheduler);
+ }
+ return 0;
+#elif USE_PTHREAD
+ pthread_cleanup_pop( true );
+ return NULL;
+#else
+ #error Must define USE_PTHREAD or USE_WINTHREAD
+#endif /* USE_PTHREAD */
+}
+
+void GenericScheduler::cleanup_worker_thread( void* arg ) {
+ TBB_TRACE(("%p.cleanup_worker_thread enter\n",arg));
+ GenericScheduler& s = *(GenericScheduler*)arg;
+ __TBB_ASSERT( s.dummy_slot.task_pool, "cleaning up worker with missing TaskPool" );
+ //Arena* a = s.arena;
+ __TBB_ASSERT( s.arena_slot!=&s.dummy_slot, "worker not in arena?" );
+ s.free_scheduler();
+}
+
+//------------------------------------------------------------------------
+// WorkerDescsriptor
+//------------------------------------------------------------------------
+void WorkerDescriptor::start_one_worker_thread() {
+#if USE_WINTHREAD
+ unsigned thread_id;
+ // The return type of _beginthreadex is "uintptr_t" on new MS compilers,
+ // and 'unsigned long' on old MS compilers. Our uintptr works for both.
+ uintptr status = _beginthreadex( NULL, ThreadStackSize, GenericScheduler::worker_routine, this, 0, &thread_id );
+ if( status==0 )
+ handle_perror(errno,"__beginthreadex");
+ else
+ thread_handle = (HANDLE)status;
+#else
+ // This if is due to an Intel Compiler Bug, tracker # C70996
+ // This #if should be removed as soon as the bug is fixed
+#if __APPLE__ && __TBB_x86_64
+ static void *(*r)(void*) = GenericScheduler::worker_routine;
+ int status = pthread_create( &thread_handle, NULL, r, this );
+#else
+ int status = pthread_create( &thread_handle, NULL, GenericScheduler::worker_routine, this );
+#endif
+ if( status )
+ handle_perror(status,"pthread_create");
+#endif /* USE_WINTHREAD */
+}
+
+//------------------------------------------------------------------------
+// Methods of allocate_root_proxy
+//------------------------------------------------------------------------
+task& allocate_root_proxy::allocate( size_t size ) {
+ internal::GenericScheduler* v = GetThreadSpecific();
+ __TBB_ASSERT( v, "thread did not activate a task_scheduler_init object?" );
+ return v->allocate_task( size, v->innermost_running_task->prefix().depth+1, NULL );
+}
+
+void allocate_root_proxy::free( task& task ) {
+ internal::GenericScheduler* v = GetThreadSpecific();
+ __TBB_ASSERT( v, "thread does not have initialized task_scheduler_init object?" );
+ v->free_task<GenericScheduler::is_local>( task );
+}
+
+//------------------------------------------------------------------------
+// Methods of allocate_continuation_proxy
+//------------------------------------------------------------------------
+task& allocate_continuation_proxy::allocate( size_t size ) const {
+ task& t = *((task*)this);
+ __TBB_ASSERT( AssertOkay(t), NULL );
+ GenericScheduler* v = static_cast<GenericScheduler*>(t.prefix().owner);
+ __TBB_ASSERT( GetThreadSpecific()==v, "thread does not own this" );
+ task* parent = t.parent();
+ t.prefix().parent = NULL;
+ return v->allocate_task( size, t.prefix().depth, parent );
+}
+
+void allocate_continuation_proxy::free( task& mytask ) const {
+ task& t = *((task*)this);
+ // Restore the parent as it was before the corresponding allocate was called.
+ t.prefix().parent = mytask.parent();
+ static_cast<GenericScheduler*>(t.prefix().owner)->free_task<GenericScheduler::is_local>(mytask);
+}
+
+//------------------------------------------------------------------------
+// Methods of allocate_child_proxy
+//------------------------------------------------------------------------
+task& allocate_child_proxy::allocate( size_t size ) const {
+ task& t = *((task*)this);
+ __TBB_ASSERT( AssertOkay(t), NULL );
+ GenericScheduler* v = static_cast<GenericScheduler*>(t.prefix().owner);
+ __TBB_ASSERT( GetThreadSpecific()==v, "thread does not own parent" );
+ return v->allocate_task( size, t.prefix().depth+1, &t );
+}
+
+void allocate_child_proxy::free( task& mytask ) const {
+ task& t = *((task*)this);
+ GenericScheduler* v = static_cast<GenericScheduler*>(t.prefix().owner);
+ v->free_task<GenericScheduler::is_local>(mytask);
+}
+
+//------------------------------------------------------------------------
+// Methods of allocate_additional_child_of_proxy
+//------------------------------------------------------------------------
+task& allocate_additional_child_of_proxy::allocate( size_t size ) const {
+ __TBB_ASSERT( AssertOkay(self), NULL );
+ __TBB_FetchAndIncrementWacquire( (volatile void *)&(parent.prefix().ref_count) );
+ GenericScheduler* v = static_cast<GenericScheduler*>(self.prefix().owner);
+ return v->allocate_task( size, parent.prefix().depth+1, &parent );
+}
+
+void allocate_additional_child_of_proxy::free( task& task ) const {
+ // Undo the increment. We do not check the result of the fetch-and-decrement.
+ // We could consider be spawning the task if the fetch-and-decrement returns 1.
+ // But we do not know that was the programmer's intention.
+ // Furthermore, if it was the programmer's intention, the program has a fundamental
+ // race condition (that we warn about in Reference manual), because the
+ // reference count might have become zero before the corresponding call to
+ // allocate_additional_child_of_proxy::allocate.
+ __TBB_FetchAndDecrementWrelease( (volatile void *)&(parent.prefix().ref_count) );
+ GenericScheduler* v = static_cast<GenericScheduler*>(self.prefix().owner);
+
+ v->free_task<GenericScheduler::is_local>(task);
+}
+
+} // namespace internal
+
+using namespace tbb;
+using namespace tbb::internal;
+
+//------------------------------------------------------------------------
+// task
+//------------------------------------------------------------------------
+
+void task::internal_set_ref_count( int count ) {
+ __TBB_ASSERT( count>0, "count must be positive" );
+ __TBB_ASSERT( !(prefix().debug_state&GenericScheduler::ds_ref_count_active), "ref_count race detected" );
+ ITT_NOTIFY(sync_releasing, &prefix().ref_count);
+ prefix().ref_count = count;
+}
+
+task& task::self() {
+ GenericScheduler* v = GetThreadSpecific();
+ __TBB_ASSERT( v->assert_okay(), NULL );
+ return *v->innermost_running_task;
+}
+
+bool task::is_owned_by_current_thread() const {
+ return GetThreadSpecific()==prefix().owner;
+}
+
+void task::destroy( task& victim ) {
+ __TBB_ASSERT( victim.prefix().ref_count==0, "victim must have reference count of zero" );
+ __TBB_ASSERT( victim.state()==task::allocated, "illegal state for victim task" );
+ if( task* parent = victim.parent() ) {
+ __TBB_ASSERT( parent->state()==task::allocated, "attempt to destroy child of running or corrupted parent?" );
+ ITT_NOTIFY(sync_releasing, &parent->prefix().ref_count);
+ __TBB_FetchAndDecrementWrelease((volatile void *)&(parent->prefix().ref_count));
+ ITT_NOTIFY(sync_acquired, &parent->prefix().ref_count);
+ }
+ internal::GenericScheduler* v = static_cast<internal::GenericScheduler*>(prefix().owner);
+ // Victim is allowed to be owned by another thread.
+ victim.prefix().owner = v;
+ v->destroy_task(victim);
+}
+
+void task::spawn_and_wait_for_all( task_list& list ) {
+ __TBB_ASSERT( is_owned_by_current_thread(), "'this' not owned by current thread" );
+ task* t = list.first;
+ if( t ) {
+ if( &t->prefix().next!=list.next_ptr )
+ prefix().owner->spawn( *t->prefix().next, *list.next_ptr );
+ list.clear();
+ }
+ prefix().owner->wait_for_all( *this, t );
+}
+
+//------------------------------------------------------------------------
+// task_scheduler_init
+//------------------------------------------------------------------------
+void task_scheduler_init::initialize( int number_of_threads ) {
+ if( number_of_threads!=deferred ) {
+ __TBB_ASSERT( !my_scheduler, "task_scheduler_init already initialized" );
+ __TBB_ASSERT( number_of_threads==-1 || number_of_threads>=1,
+ "number_of_threads for task_scheduler_init must be -1 or positive" );
+ // Double-check
+ if( !OneTimeInitializationsDone ) {
+ DoOneTimeInitializations();
+ }
+ GenericScheduler* s = GetThreadSpecific();
+ if( s ) {
+ s->ref_count += 1;
+ } else {
+ Arena* a;
+ {
+ mutex::scoped_lock lock( TheArenaMutex );
+ a = TheArena;
+ if( a ) {
+ a->prefix().number_of_masters += 1;
+ } else {
+ if( number_of_threads==-1 )
+ number_of_threads = DetectNumberOfWorkers();
+ // Put cold path in separate routine.
+ a = Arena::allocate_arena( 2*number_of_threads, number_of_threads-1 );
+ __TBB_ASSERT( a->prefix().number_of_masters==1, NULL );
+ __TBB_ASSERT( TheArena==a, NULL );
+ }
+ }
+ s = GenericScheduler::create_master( a );
+ }
+ my_scheduler = s;
+ }
+}
+
+void task_scheduler_init::terminate() {
+ GenericScheduler* s = static_cast<GenericScheduler*>(my_scheduler);
+ my_scheduler = NULL;
+ __TBB_ASSERT( s, "task_scheduler_init::terminate without corresponding task_scheduler_init::initialize()");
+ if( !--(s->ref_count) ) {
+ __TBB_ASSERT( s->dummy_slot.task_pool, "cleaning up master with missing TaskPool" );
+ s->free_scheduler();
+ Arena* a;
+ {
+ mutex::scoped_lock lock( TheArenaMutex );
+ a = TheArena;
+ __TBB_ASSERT( a, "TheArena is missing" );
+ if( --(a->prefix().number_of_masters) ) {
+ a = NULL;
+ } else {
+ TheArena = NULL;
+ }
+ }
+ if( a ) {
+ a->terminate_workers();
+ }
+ }
+}
+
+
+
+} // namespace tbb
diff --git a/src/tbb/tbb_misc.cpp b/src/tbb/tbb_misc.cpp
new file mode 100644
index 0000000..a4a73f2
--- /dev/null
+++ b/src/tbb/tbb_misc.cpp
@@ -0,0 +1,169 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+// Source file for miscellanous entities that are infrequently referenced by
+// an executing program.
+
+#include "tbb/tbb_stddef.h"
+#include "tbb_misc.h"
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#if defined(__EXCEPTIONS) || defined(_CPPUNWIND)
+#include <stdexcept>
+#endif
+#if _WIN32||_WIN64
+#include <crtdbg.h>
+#else
+#include <dlfcn.h>
+#endif
+
+#include "tbb/tbb_machine.h"
+
+static tbb::assertion_handler_type assertion_handler;
+
+namespace tbb {
+
+assertion_handler_type set_assertion_handler( assertion_handler_type new_handler ) {
+ assertion_handler_type old_handler = assertion_handler;
+ assertion_handler = new_handler;
+ return old_handler;
+}
+
+void assertion_failure( const char * filename, int line, const char * expression, const char * comment ) {
+ if( assertion_handler_type a = assertion_handler ) {
+ (*a)(filename,line,expression,comment);
+ } else {
+ static bool already_failed;
+ if( !already_failed ) {
+ already_failed = true;
+ fprintf( stderr, "Assertion %s failed on line %d of file %s\n",
+ expression, line, filename );
+ if( comment )
+ fprintf( stderr, "Detailed description: %s\n", comment );
+#if (_WIN32||_WIN64) && defined(_DEBUG)
+ if(1 == _CrtDbgReport(_CRT_ASSERT, filename, line, "tbb_debug.dll", "%s\r\n%s", expression, comment?comment:""))
+ _CrtDbgBreak();
+#else
+ abort();
+#endif
+ }
+ }
+}
+
+namespace internal {
+
+size_t get_initial_auto_partitioner_divisor() {
+ const size_t X_FACTOR = 4;
+ return X_FACTOR * DetectNumberOfWorkers();
+}
+
+#if defined(__EXCEPTIONS) || defined(_CPPUNWIND)
+// The above preprocessor symbols are defined by compilers when exception handling is enabled.
+// However, in some cases it could be disabled for this file.
+
+void handle_perror( int error_code, const char* what ) {
+ char buf[128];
+ sprintf(buf,"%s: ",what);
+ char* end = strchr(buf,0);
+ size_t n = buf+sizeof(buf)-end;
+ strncpy( end, strerror( error_code ), n );
+ // Ensure that buffer ends in terminator.
+ buf[sizeof(buf)-1] = 0;
+ throw std::runtime_error(buf);
+}
+#endif //__EXCEPTIONS || _CPPUNWIND
+
+bool GetBoolEnvironmentVariable( const char * name ) {
+ if( const char* s = getenv(name) )
+ return strcmp(s,"0") != 0;
+ return false;
+}
+
+bool FillDynamicLinks( const char* library, const DynamicLinkDescriptor list[], size_t n ) {
+ const size_t max_n = 5;
+ __TBB_ASSERT( 0<n && n<=max_n, NULL );
+#if _WIN32||_WIN64
+ HMODULE module = LoadLibrary( library );
+#else
+ void* module = dlopen( library, RTLD_LAZY );
+#endif /* _WIN32||_WIN64 */
+ size_t count = 0;
+ if( module ) {
+ // The library is there, so get the entry points.
+ PointerToHandler h[max_n];
+ for( size_t k=0; k<n; ++k ) {
+#if _WIN32||_WIN64
+ h[k] = (PointerToHandler) GetProcAddress( module, list[k].name );
+#else
+ h[k] = (PointerToHandler) dlsym( module, list[k].name );
+#endif /* _WIN32||_WIN64 */
+ count += h[k]!=NULL;
+ }
+ // Commit the entry points if they are all present.
+ if( count==n ) {
+ // Cannot use memset here, because the writes must be atomic.
+ for( size_t k=0; k<n; ++k )
+ *list[k].handler = h[k];
+ }
+ }
+ return count==n;
+}
+
+#include "tbb_version.h"
+
+/** The leading "\0" is here so that applying "strings" to the binary delivers a clean result. */
+static const char VersionString[] = "\0" TBB_VERSION_STRINGS;
+
+static bool PrintVersionFlag = false;
+
+void PrintVersion() {
+ PrintVersionFlag = true;
+ fputs(VersionString+1,stderr);
+}
+
+void PrintExtraVersionInfo( const char* category, const char* description ) {
+ if( PrintVersionFlag )
+ fprintf(stderr, "%s: %s\t%s\n", "TBB", category, description );
+}
+
+} // namespace internal
+
+} // namespace tbb
+
+#if __TBB_ipf
+extern "C" intptr_t __TBB_machine_lockbyte( volatile unsigned char& flag ) {
+ if ( !__TBB_TryLockByte(flag) ) {
+ tbb::internal::AtomicBackoff b;
+ do {
+ b.pause();
+ } while ( !__TBB_TryLockByte(flag) );
+ }
+ return 0;
+}
+#endif
diff --git a/src/tbb/tbb_misc.h b/src/tbb/tbb_misc.h
new file mode 100644
index 0000000..364dbd7
--- /dev/null
+++ b/src/tbb/tbb_misc.h
@@ -0,0 +1,203 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef _TBB_tbb_misc_H
+#define _TBB_tbb_misc_H
+
+#include "tbb/tbb_stddef.h"
+#include "tbb/tbb_machine.h"
+
+#if __linux__
+#include <sys/sysinfo.h>
+#elif __APPLE__
+#include <sys/types.h>
+#include <sys/sysctl.h>
+#endif
+
+namespace tbb {
+
+static volatile int number_of_workers = 0;
+
+#if defined(__TBB_DetectNumberOfWorkers)
+static inline int DetectNumberOfWorkers() {
+ return __TBB_DetectNumberOfWorkers();
+}
+#else
+#if _WIN32||_WIN64
+
+static inline int DetectNumberOfWorkers() {
+ if (!number_of_workers) {
+ SYSTEM_INFO si;
+ GetSystemInfo(&si);
+ number_of_workers = static_cast<int>(si.dwNumberOfProcessors);
+ }
+ return number_of_workers;
+}
+
+#elif __linux__
+
+static inline int DetectNumberOfWorkers( void ) {
+ if (!number_of_workers) {
+ number_of_workers = get_nprocs();
+ }
+ return number_of_workers;
+}
+
+#elif __APPLE__
+
+static inline int DetectNumberOfWorkers( void ) {
+ if (!number_of_workers) {
+ int name[2] = {CTL_HW, HW_AVAILCPU};
+ int ncpu;
+ size_t size = sizeof(ncpu);
+ sysctl( name, 2, &ncpu, &size, NULL, 0 );
+ number_of_workers = ncpu;
+ }
+ return number_of_workers;
+}
+
+#else
+
+#error Unknown OS
+
+#endif /* os kind */
+
+#endif
+
+namespace internal {
+
+// assertion_failure is declared in tbb/tbb_stddef.h because it user code
+// needs to see its declaration.
+
+//! Throw std::runtime_error of form "(what): (strerror of error_code)"
+/* The "what" should be fairly short, not more than about 64 characters.
+ Because we control all the call sites to handle_perror, it is pointless
+ to bullet-proof it for very long strings.
+
+ Design note: ADR put this routine off to the side in tbb_misc.cpp instead of
+ Task.cpp because the throw generates a pathetic lot of code, and ADR wanted
+ this large chunk of code to be placed on a cold page. */
+void handle_perror( int error_code, const char* what );
+
+//! True if environment variable with given name is set and not 0; otherwise false.
+bool GetBoolEnvironmentVariable( const char * name );
+
+//! Print TBB version information on stderr
+void PrintVersion();
+
+//! Print extra TBB version information on stderr
+void PrintExtraVersionInfo( const char* category, const char* description );
+
+//! Type definition for a pointer to a void somefunc(void)
+typedef void (*PointerToHandler)();
+
+//! The macro casts "address of a pointer to a function" to PointerToHandler*.
+/** Need it because (PointerToHandler*)&ptr_to_func causes warnings from g++ 4.1 */
+#define ADDRESS_OF_HANDLER(x) (PointerToHandler*)(void*)(x)
+
+//! Association between a handler name and location of pointer to it.
+struct DynamicLinkDescriptor {
+ //! Name of the handler
+ const char* name;
+ //! Pointer to the handler
+ PointerToHandler* handler;
+};
+
+//! Fill in dynamically linked handlers.
+/** n is the length of array list[], must not exceed 4, which is all we currently need.
+ If the library and all of the handlers are found, then all corresponding handler pointers are set.
+ Otherwise all corresponding handler pointers are untouched. */
+bool FillDynamicLinks( const char* libraryname, const DynamicLinkDescriptor list[], size_t n );
+
+//! Template functions to temporary add volatile attribute to a variable.
+/** Allow to perform operations with volatile semantics on non-volatile variables
+ which is useful to improve performance on IPF where Intel compiler
+ translates volatile reads to "load with acquire semantics" (ld*.acq)
+ and volatile writes to "store with release semantics" (st*.rel). */
+template<typename T>
+static inline T volatile& volatile_cast(T& location) {
+ return const_cast<T volatile&>(location);
+}
+
+template<typename T>
+static inline T const volatile& volatile_cast(T const& location) {
+ return const_cast<T const volatile&>(location);
+}
+
+//! Class that implements exponential backoff.
+/** See implementation of SpinwaitWhileEq for an example. */
+class ExponentialBackoff {
+ //! Time delay, in units of "pause" instructions.
+ /** Should be equal to approximately the number of "pause" instructions
+ that take the same time as an context switch. */
+ static const int LOOPS_BEFORE_YIELD = 0x10;
+ int count;
+public:
+ ExponentialBackoff() : count(1) {}
+
+ //! Pause for a while.
+ void pause() {
+ if( count<=LOOPS_BEFORE_YIELD ) {
+ __TBB_Pause(count);
+ // Pause twice as long the next time.
+ count*=2;
+ } else {
+ // Pause is so long that we might as well yield CPU to scheduler.
+ __TBB_Yield();
+ }
+ }
+ void reset() {
+ count = 1;
+ }
+};
+
+//! Spin WHILE the value of the variable is equal to a given value
+/** T and U should be comparable types. */
+template<typename T, typename U>
+static inline void SpinwaitWhileEq( const volatile T& location, U value ) {
+ ExponentialBackoff backoff;
+ while( location==value ) {
+ backoff.pause();
+ }
+}
+
+//! Spin UNTIL the value of the variable is equal to a given value
+/** T and U should be comparable types. */
+template<typename T, typename U>
+static inline void SpinwaitUntilEq( const volatile T& location, const U value ) {
+ ExponentialBackoff backoff;
+ while( location!=value ) {
+ backoff.pause();
+ }
+}
+
+} // namespace internal
+
+} // namespace tbb
+
+#endif /* _TBB_tbb_misc_H */
diff --git a/src/tbb/tbb_resource.rc b/src/tbb/tbb_resource.rc
new file mode 100644
index 0000000..386b0a1
--- /dev/null
+++ b/src/tbb/tbb_resource.rc
@@ -0,0 +1,119 @@
+// Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+//
+// This file is part of Threading Building Blocks.
+//
+// Threading Building Blocks is free software; you can redistribute it
+// and/or modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// Threading Building Blocks 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 General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Threading Building Blocks; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// Microsoft Visual C++ generated resource script.
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NO_MFC 1
+#define _APS_NEXT_RESOURCE_VALUE 102
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1001
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include <winresrc.h>
+#define ENDL "\r\n"
+#include "tbb_version.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Neutral resources
+
+//#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
+#ifdef _WIN32
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION TBB_VERNUMBERS
+ PRODUCTVERSION TBB_VERNUMBERS
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x40004L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "000004b0"
+ BEGIN
+ VALUE "CompanyName", "Intel Corporation\0"
+ VALUE "FileDescription", "Threading Building Blocks library\0"
+ VALUE "FileVersion", TBB_VERSION "\0"
+//what is it? VALUE "InternalName", "tbb\0"
+ VALUE "LegalCopyright", "Copyright (C) 2006\0"
+ VALUE "LegalTrademarks", "\0"
+#ifndef TBB_DO_ASSERT
+ VALUE "OriginalFilename", "tbb.dll\0"
+#else
+ VALUE "OriginalFilename", "tbb_debug.dll\0"
+#endif
+ VALUE "ProductName", "Threading Building Blocks\0"
+ VALUE "ProductVersion", TBB_VERSION "\0"
+ VALUE "Comments", TBB_VERSION_STRINGS "\0"
+ VALUE "PrivateBuild", "\0"
+ VALUE "SpecialBuild", "\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x0, 1200
+ END
+END
+
+//#endif // Neutral resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/src/tbb/tbb_version.h b/src/tbb/tbb_version.h
new file mode 100644
index 0000000..b1c5a5f
--- /dev/null
+++ b/src/tbb/tbb_version.h
@@ -0,0 +1,98 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+// Please define version number here:
+#define TBB_VERSION_MAJOR 2
+#define TBB_VERSION_MINOR 0
+
+
+
+
+
+
+
+// And don't touch anything below
+#ifndef ENDL
+#define ENDL "\n"
+#endif
+#include "version_string.tmp"
+
+#ifndef __TBB_VERSION_STRINGS
+#pragma message("Warning: version_string.tmp isn't generated properly by version_info.sh script!")
+// here is an example of macros value:
+#define __TBB_VERSION_STRINGS \
+"TBB: BUILD_HOST\tUnknown\n" \
+"TBB: BUILD_ARCH\tUnknown\n" \
+"TBB: BUILD_OS\t\tUnknown\n" \
+"TBB: BUILD_CL\t\tUnknown\n" \
+"TBB: BUILD_COMPILER\tUnknown\n" \
+"TBB: BUILD_COMMAND\tUnknown\n"
+#endif
+#ifndef __TBB_DATETIME
+#ifdef RC_INVOKED
+#define __TBB_DATETIME "Unknown"
+#else
+#define __TBB_DATETIME __DATE__ __TIME__
+#endif
+#endif
+#define __TBB_STRING_AUX(x) #x
+#define __TBB_STRING(x) __TBB_STRING_AUX(x)
+
+#define __TBB_VERSION_NUMBER "TBB: VERSION\t\t" __TBB_STRING(TBB_VERSION_MAJOR.TBB_VERSION_MINOR) ENDL
+#define __TBB_VERSION_DATETIME "TBB: BUILD_DATE\t\t" __TBB_DATETIME ENDL
+#ifndef TBB_DO_ASSERT
+ #define __TBB_VERSION_DO_ASSERT "TBB: TBB_DO_ASSERT\tundefined" ENDL
+#elif TBB_DO_ASSERT==0
+ #define __TBB_VERSION_DO_ASSERT "TBB: TBB_DO_ASSERT\t0" ENDL
+#elif TBB_DO_ASSERT==1
+ #define __TBB_VERSION_DO_ASSERT "TBB: TBB_DO_ASSERT\t1" ENDL
+#elif TBB_DO_ASSERT==2
+ #define __TBB_VERSION_DO_ASSERT "TBB: TBB_DO_ASSERT\t2" ENDL
+#else
+ #error Unexpected value for TBB_DO_ASSERT
+#endif
+#ifndef DO_ITT_NOTIFY
+ #define __TBB_VERSION_DO_NOTIFY "TBB: DO_ITT_NOTIFY\tundefined" ENDL
+#elif DO_ITT_NOTIFY==1
+ #define __TBB_VERSION_DO_NOTIFY "TBB: DO_ITT_NOTIFY\t1" ENDL
+#elif DO_ITT_NOTIFY==0
+ #define __TBB_VERSION_DO_NOTIFY
+#else
+ #error Unexpected value for DO_ITT_NOTIFY
+#endif
+
+#define TBB_VERSION_STRINGS __TBB_VERSION_NUMBER __TBB_VERSION_DATETIME __TBB_VERSION_STRINGS __TBB_VERSION_DO_ASSERT __TBB_VERSION_DO_NOTIFY
+
+// numbers
+#ifndef __TBB_VERSION_YMD
+#define __TBB_VERSION_YMD 0, 0
+#endif
+
+#define TBB_VERNUMBERS TBB_VERSION_MAJOR, TBB_VERSION_MINOR, __TBB_VERSION_YMD
+
+#define TBB_VERSION __TBB_STRING(TBB_VERNUMBERS)
diff --git a/src/tbbmalloc/Customize.h b/src/tbbmalloc/Customize.h
new file mode 100644
index 0000000..4c8f8ef
--- /dev/null
+++ b/src/tbbmalloc/Customize.h
@@ -0,0 +1,82 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef _TBB_malloc_Customize_H_
+#define _TBB_malloc_Customize_H_
+
+/* Thread shutdown notification callback */
+/* redefine the name of the callback to meet TBB requirements
+ for externally visible names of service functions */
+#define mallocThreadShutdownNotification __TBB_mallocThreadShutdownNotification
+#define mallocProcessShutdownNotification __TBB_mallocProcessShutdownNotification
+
+extern "C" void mallocThreadShutdownNotification(void *);
+extern "C" void mallocProcessShutdownNotification(void);
+
+// customizing MALLOC_ASSERT macro
+#include "tbb/tbb_stddef.h"
+#define MALLOC_ASSERT(assertion, message) __TBB_ASSERT(assertion, message)
+
+#include "tbb/tbb_machine.h"
+
+//! Stripped down version of spin_mutex.
+/** Instances of MallocMutex must be declared in memory that is zero-initialized.
+ There are no constructors. This is a feature that lets it be
+ used in situations where the mutex might be used while file-scope constructors
+ are running.
+
+ There are no methods "acquire" or "release". The scoped_lock must be used
+ in a strict block-scoped locking pattern. Omitting these methods permitted
+ further simplication. */
+class MallocMutex {
+ volatile unsigned char value;
+
+ //! Deny assignment
+ void operator=( MallocMutex& MallocMutex );
+public:
+ class scoped_lock {
+ const unsigned char value;
+ MallocMutex& mutex;
+ public:
+ scoped_lock( MallocMutex& m ) : value( __TBB_LockByte(m.value)), mutex(m) {}
+ ~scoped_lock() { mutex.value = value; }
+ };
+ friend class scoped_lock;
+};
+
+inline intptr_t AtomicIncrement( volatile intptr_t& counter ) {
+ return __TBB_FetchAndAddW( &counter, 1 )+1;
+}
+
+inline intptr_t AtomicCompareExchange( volatile intptr_t& location, intptr_t new_value, intptr_t comparand) {
+ return __TBB_CompareAndSwapW( &location, new_value, comparand );
+}
+
+#define USE_DEFAULT_MEMORY_MAPPING 1
+
+#endif /* _TBB_malloc_Customize_H_ */
diff --git a/src/tbbmalloc/LifoQueue.h b/src/tbbmalloc/LifoQueue.h
new file mode 100644
index 0000000..cd92dff
--- /dev/null
+++ b/src/tbbmalloc/LifoQueue.h
@@ -0,0 +1,97 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef _itt_common_malloc_LifoQueue_H_
+#define _itt_common_malloc_LifoQueue_H_
+
+#include "TypeDefinitions.h"
+#include <string.h> // for memset()
+
+//! Checking the syncronization method
+/** FINE_GRAIN_LOCKS is the only variant for now; should be defined for LifoQueue */
+#ifndef FINE_GRAIN_LOCKS
+#define FINE_GRAIN_LOCKS
+#endif
+
+namespace ThreadingSubstrate {
+
+namespace Internal {
+
+class LifoQueue {
+public:
+ inline LifoQueue();
+ inline void push(void** ptr);
+ inline void* pop(void);
+
+private:
+ void * top;
+#ifdef FINE_GRAIN_LOCKS
+ MallocMutex lock;
+#endif /* FINE_GRAIN_LOCKS */
+};
+
+#ifdef FINE_GRAIN_LOCKS
+/* LifoQueue assumes zero initialization so a vector of it can be created
+ * by just allocating some space with no call to constructor.
+ * On Linux, it seems to be necessary to avoid linking with C++ libraries.
+ *
+ * By usage convention there is no race on the initialization. */
+LifoQueue::LifoQueue( ) : top(NULL)
+{
+ // MallocMutex assumes zero initialization
+ memset(&lock, 0, sizeof(MallocMutex));
+}
+
+void LifoQueue::push( void **ptr )
+{
+ MallocMutex::scoped_lock scoped_cs(lock);
+ *ptr = top;
+ top = ptr;
+}
+
+void * LifoQueue::pop( )
+{
+ void **result=NULL;
+ {
+ MallocMutex::scoped_lock scoped_cs(lock);
+ if (!top) goto done;
+ result = (void **) top;
+ top = *result;
+ }
+ *result = NULL;
+done:
+ return result;
+}
+
+#endif /* FINE_GRAIN_LOCKS */
+
+} // namespace Internal
+} // namespace ThreadingSubstrate
+
+#endif /* _itt_common_malloc_LifoQueue_H_ */
+
diff --git a/src/tbbmalloc/MapMemory.h b/src/tbbmalloc/MapMemory.h
new file mode 100644
index 0000000..967e2d5
--- /dev/null
+++ b/src/tbbmalloc/MapMemory.h
@@ -0,0 +1,82 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef _itt_shared_malloc_MapMemory_H
+#define _itt_shared_malloc_MapMemory_H
+
+#if __linux__ || __APPLE__
+#include <sys/mman.h>
+
+void* MapMemory (size_t bytes)
+{
+ void* result = 0;
+#ifndef MAP_ANONYMOUS
+// Mac OS* X defines MAP_ANON, which is deprecated in Linux.
+#define MAP_ANONYMOUS MAP_ANON
+#endif /* MAP_ANONYMOUS */
+ result = mmap(result, bytes, (PROT_READ | PROT_WRITE), MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
+ return result==MAP_FAILED? 0: result;
+}
+
+int UnmapMemory(void *area, size_t bytes)
+{
+ return munmap(area, bytes);
+}
+
+#elif _WIN32 || _WIN64
+#include <windows.h>
+
+void* MapMemory (size_t bytes)
+{
+ /* Is VirtualAlloc thread safe? */
+ return VirtualAlloc(NULL, bytes, (MEM_RESERVE | MEM_COMMIT | MEM_TOP_DOWN), PAGE_READWRITE);
+}
+
+int UnmapMemory(void *area, size_t bytes)
+{
+ BOOL result = VirtualFree(area, 0, MEM_RELEASE);
+ return !result;
+}
+
+#else
+#include <stdlib.h>
+
+void* MapMemory (size_t bytes)
+{
+ return malloc( bytes );
+}
+
+int UnmapMemory(void *area, size_t bytes)
+{
+ free( area );
+ return 0;
+}
+
+#endif /* OS dependent */
+
+#endif /* _itt_shared_malloc_MapMemory_H */
diff --git a/src/tbbmalloc/MemoryAllocator.cpp b/src/tbbmalloc/MemoryAllocator.cpp
new file mode 100644
index 0000000..ef1a9f5
--- /dev/null
+++ b/src/tbbmalloc/MemoryAllocator.cpp
@@ -0,0 +1,1580 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+
+//#define MALLOC_TRACE
+
+#ifdef MALLOC_TRACE
+#define TRACEF printf
+#else
+static inline int TRACEF(char *arg, ...)
+{
+ return 0;
+}
+#endif /* MALLOC_TRACE */
+
+#define ASSERT_TEXT NULL
+
+#include "TypeDefinitions.h"
+
+#if USE_PTHREAD
+ // Some pthreads documentation says that <pthreads.h> must be first header.
+ #include <pthread.h>
+ #define TlsSetValue_func pthread_setspecific
+ #define TlsGetValue_func pthread_getspecific
+ typedef pthread_key_t tls_key_t;
+ #include <sched.h>
+ inline void do_yield() {sched_yield();}
+
+#elif USE_WINTHREAD
+ #include <windows.h>
+ #define TlsSetValue_func TlsSetValue
+ #define TlsGetValue_func TlsGetValue
+ typedef DWORD tls_key_t;
+ inline void do_yield() {Sleep(0);}
+
+#else
+ #error Must define USE_PTHREAD or USE_WINTHREAD
+
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#if __linux__||__APPLE__
+#include <fcntl.h>
+#endif
+
+/**
+*** Define various compile-time options
+**/
+
+//! Define the main syncronization method
+/** It should be specified before including LifoQueue.h */
+#define FINE_GRAIN_LOCKS
+#include "LifoQueue.h"
+
+#define COLLECT_STATISTICS 0
+#include "Statistics.h"
+
+#define FREELIST_NONBLOCKING 1
+
+// If USE_MALLOC_FOR_LARGE_OBJECT is nonzero, then large allocations are done via malloc.
+// Otherwise large allocations are done using the scalable allocator's block allocator.
+// As of 06.Jun.17, using malloc is about 10x faster on Linux.
+#define USE_MALLOC_FOR_LARGE_OBJECT 1
+
+#if USE_MALLOC_FOR_LARGE_OBJECT
+#include <stdlib.h>
+#else
+extern "C" void exit( int ); /* to not include stdlib.h */
+#endif /* USE_MALLOC_FOR_LARGE_OBJECT */
+
+
+namespace ThreadingSubstrate {
+
+namespace Internal {
+
+/*********** Code to provide thread ID and a thread-local void pointer **********/
+
+typedef intptr_t ThreadId;
+
+static volatile ThreadId ThreadIdCount;
+
+static tls_key_t TLS_pointer_key;
+static tls_key_t Tid_key;
+
+static inline ThreadId getThreadId(void)
+{
+ ThreadId result;
+ result = reinterpret_cast<ThreadId>(TlsGetValue_func(Tid_key));
+ if( !result ) {
+ // Thread-local value is zero -> first call from this thread,
+ // need to initialize with next ID value (IDs start from 1)
+ result = AtomicIncrement(ThreadIdCount); // returned new value!
+ TlsSetValue_func( Tid_key, reinterpret_cast<void*>(result) );
+ }
+ return result;
+}
+
+static inline void* getThreadMallocTLS() {
+ void *result;
+ result = TlsGetValue_func( TLS_pointer_key );
+// The assert below is incorrect: with lazy initialization, it fails on the first call of the function.
+// MALLOC_ASSERT( result, "Memory allocator not initialized" );
+ return result;
+}
+
+static inline void setThreadMallocTLS( void * newvalue ) {
+ TlsSetValue_func( TLS_pointer_key, newvalue );
+}
+
+/*********** End code to provide thread ID and a TLS pointer **********/
+
+
+/*********** Code to acquire memory from the OS or other executive ****************/
+
+#if USE_DEFAULT_MEMORY_MAPPING
+#include "MapMemory.h"
+#else
+/* assume MapMemory and UnmapMemory are customized */
+#endif
+
+/*
+ * Get memory in pieces of this size. 0x0100000;is 1 megabyte decimal
+ *
+ */
+
+static size_t mmapRequestSize = 0x0100000;
+
+/*
+ * Objects of this size and larger are considered large objects.
+ */
+static const uint32_t minLargeObjectSize = 8129; // 8128 is the biggest size to be held in a bin
+
+/*
+ * Returns 0 if failure for any reason
+ * otherwise returns a pointer to the newly available memory.
+ */
+static void* getMemory (size_t bytes)
+{
+ void *result = 0;
+ MALLOC_ASSERT( bytes>=minLargeObjectSize, "request too small" );
+ result = MapMemory(bytes);
+#ifdef MALLOC_TRACE
+ if (!result) {
+ TRACEF("ScalableMalloc trace - getMemory unsuccess, can't get %d bytes from OS\n", bytes);
+ } else {
+ TRACEF("ScalableMalloc trace - getMemory success returning %p\n", result);
+ }
+#endif
+ return result;
+}
+
+static void returnMemory(void *area, size_t bytes)
+{
+ int retcode = UnmapMemory(area, bytes);
+#ifdef MALLOC_TRACE
+ if (retcode) {
+ TRACEF("ScalableMalloc trace - returnMemory unsuccess for %p; perhaps it has already been freed or was never allocated.\n", area);
+ }
+#endif
+ return;
+}
+
+/********* End memory acquisition code ********************************/
+
+/********* The data structures **************/
+
+typedef struct FreeObjectS *FreeObjectPtr;
+
+typedef struct FreeObjectS {
+ FreeObjectPtr next;
+} FreeObject;
+
+/*
+ * The intent is to make sure that the size of a Block is the same as a cache line size, this allows us to
+ * get good alignement at the cost of some overhead equal to the amount of padding included in the Block.
+ *
+ */
+
+#define CACHE_LINE_SIZE 64
+
+typedef struct BlockS *BlockPtr;
+
+/* The next field in this structure has to maintain some invariants.
+ * it needs to be on a 16K boundary and the first field in the block.
+ * Any value stored there needs to have the lower 14 bits set to 0
+ * so that various assert work. This means that if you want to smash this memory
+ * for debugging purposes you will need to obey this invariant.
+ * The total size of this structure needs to be a power of 2 to simplify
+ * the alignement requirements. For now it is a 64 byte structure.
+ * Moreover, changing the size would require to change some bin allocation sizes,
+ * in particular "fitting" sizes (see below).
+ */
+
+typedef struct BlockS {
+ BlockPtr next; /* This field needs to be on a 16K boundary and the first field in the block
+ so non-blocking LifoQueues will work. */
+ BlockPtr previous; /* Use double linked list to speed up removal */
+ unsigned int objectSize;
+ unsigned int owner;
+ FreeObject *bumpPtr; /* bump pointer moves from the end to the beginning of a block */
+ FreeObject *freeList;
+ FreeObject *publicFreeList;
+ BlockPtr nextPrivatizable;
+ unsigned int allocatedCount; /* Number of objects allocated (obviously by the owning thread) */
+ unsigned int isFull;
+#if !( __ARCH_x86_64 || __ARCH_ipf )
+#define BLOCK_IS_PADDED 1
+ void *pad1; /* Pad so bytesForObjects is at 64 bytes to help with alignment */
+ void *pad2;
+ void *pad3;
+ void *pad4;
+ void *pad5;
+ void *pad6;
+#endif
+} Block;
+
+//typedef Block SizeBins[]; /* an array of blocks */
+
+typedef struct BinS {
+ BlockPtr activeBlk;
+ BlockPtr mailbox;
+ MallocMutex mailLock;
+} Bin;
+
+/********* End of the data structures **************/
+
+
+/********* Now some rough utility code to deal with indexing the size bins. **************/
+
+/*
+ * There are bins for all 8 byte aligned objects less than this segregated size; 8 bins in total
+ */
+static const uint32_t maxSmallObjectSize = 64;
+
+/*
+ * There are 4 bins between each couple of powers of 2 [64-128-256-...]
+ * from maxSmallObjectSize till this size; 16 bins in total
+ */
+static const uint32_t maxSegregatedObjectSize = 1024;
+
+/*
+ * And there are 5 bins with the following allocation sizes: 1600, 2688, 4032, 5440, 8128.
+ * They selected to fit 10, 6, 4, 3, and 2 sizes per a block, and also are multiples of 64.
+ * If sizeof(Block) changes from 64, these sizes require close attention!
+ */
+static const uint32_t fittingSize1 = 1600;
+static const uint32_t fittingSize2 = 2688;
+static const uint32_t fittingSize3 = 4032;
+static const uint32_t fittingSize4 = 5440;
+static const uint32_t fittingSize5 = 8128;
+
+/*
+ * This number of bins in the TLS that leads to blocks that we can allocate in.
+ */
+static const uint32_t numBlockBinLimit = 32;
+static const uint32_t numBlockBins = 29;
+
+/*
+ * The size of the TLS should be enough to hold twice as many as numBlockBinLimit pointers
+ * the first sequence of pointers is for lists of blocks to allocate from
+ * the second sequence is for lists of blocks that have non-empty publicFreeList
+ */
+static const uint32_t tlsSize = numBlockBinLimit * sizeof(Bin);
+
+/*
+ * blockSize - the size of a block, it must be larger than maxSegregatedObjectSize.
+ * we may well want to play around with this, a 4K page size is another interesting size.
+ *
+ */
+static const uintptr_t blockSize = 16384;
+
+/*
+ * This is a lifo queue that one can init, push or pop from */
+static LifoQueue freeBlockQueue;
+
+/*
+ * When a block that is not completely free is returned for reuse by other threads
+ * this is where the block goes.
+ *
+ */
+
+static char globalBinSpace[sizeof(LifoQueue)*numBlockBinLimit];
+static LifoQueue* globalSizeBins = (LifoQueue*)globalBinSpace;
+
+/*
+ * Given a number return the highest non-zero bit in it. It is intended to work with 32-bit values only.
+ * Moreover, on IPF, for sake of simplicity and performance, it is narrowed to only serve for 64 to 1023.
+ * This is enough for current algorithm of distribution of sizes among bins.
+ */
+#if _WIN64 && _MSC_VER>=1400 && !__INTEL_COMPILER
+extern "C" unsigned char _BitScanReverse( unsigned long* i, unsigned long w );
+#pragma intrinsic(_BitScanReverse)
+#endif
+static inline unsigned int highestBitPos(unsigned int number)
+{
+ unsigned int pos;
+#if __ARCH_x86_32||__ARCH_x86_64
+
+# if __linux__||__APPLE__
+ __asm__ ("bsr %1,%0" : "=r"(pos) : "r"(number));
+# elif (_WIN32 && (!_WIN64 || __INTEL_COMPILER))
+ __asm
+ {
+ bsr eax, number
+ mov pos, eax
+ }
+# elif _WIN64 && _MSC_VER>=1400
+ _BitScanReverse((unsigned long*)&pos, (unsigned long)number);
+# else
+# error highestBitPos() not implemented for this platform
+# endif
+
+#elif __ARCH_ipf || __ARCH_unknown
+ static unsigned int bsr[16] = {0,6,7,7,8,8,8,8,9,9,9,9,9,9,9,9};
+ MALLOC_ASSERT( number>=64 && number<1024, ASSERT_TEXT );
+ pos = bsr[ number>>6 ];
+#else
+# error highestBitPos() not implemented for this platform
+#endif
+ return pos;
+}
+
+/*
+ * Given a size return the index into the bins for object of this size.
+ *
+ */
+static unsigned int getIndex (unsigned int size)
+{
+ // If this fails then getIndex has problems since it doesn't return the correct index all the time.
+ if (size <= maxSmallObjectSize) {
+ return ((size - 1) >> 3); /* Index 0 holds up to 8 bytes, Index 1 16 and so forth */
+ }
+ else if (size <= maxSegregatedObjectSize ) {
+ unsigned order = highestBitPos(size-1);
+ MALLOC_ASSERT( order>=6 && order<=9, ASSERT_TEXT );
+ return ( (size-1)>>(order-2) ) + 4*(order-5);
+ }
+ else {
+ if( size <= fittingSize3 ) {
+ if( size <= fittingSize2 ) {
+ if( size <= fittingSize1 )
+ return 24;
+ else
+ return 25;
+ } else
+ return 26;
+ } else {
+ if( size <= fittingSize5 ) {
+ if( size <= fittingSize4 )
+ return 27;
+ else
+ return 28;
+ } else {
+ MALLOC_ASSERT( 0,ASSERT_TEXT ); // this should not happen
+ return (unsigned)-1;
+ }
+ }
+ }
+}
+
+/*
+ * Given a size return the size of the object in the block used to
+ * allocate such an object.
+ *
+ */
+static unsigned int getAllocatedSize (unsigned int size)
+{
+ // If this fails then get_index has problems since it doesn't return the correct index all the time.
+ if (size <= maxSmallObjectSize) {
+ return ((size + 7) & ~7); /* Index 0 holds up to 8 bytes, Index 1 16 and so forth */
+ }
+ else if (size <= maxSegregatedObjectSize) {
+ unsigned aligner = 127 >> (9-highestBitPos(size-1));
+ MALLOC_ASSERT( aligner==127 || aligner==63 || aligner==31 || aligner==15, ASSERT_TEXT );
+ return (size+aligner)&~aligner;
+ }
+ else {
+ if( size <= fittingSize3 ) {
+ if( size <= fittingSize2 ) {
+ if( size <= fittingSize1 )
+ return fittingSize1;
+ else
+ return fittingSize2;
+ } else
+ return fittingSize3;
+ } else {
+ if( size <= fittingSize5 ) {
+ if( size <= fittingSize4 )
+ return fittingSize4;
+ else
+ return fittingSize5;
+ } else {
+ MALLOC_ASSERT( 0,ASSERT_TEXT ); // this should not happen
+ return (unsigned)-1;
+ }
+ }
+ }
+}
+
+/*
+ * Initialization code.
+ *
+ */
+
+/*
+ * Big Blocks are the blocks we get from the OS or some similar place using getMemory above.
+ * They are placed on the freeBlockQueue once they are acquired.
+ */
+
+static inline void *alignBigBlock(void *unalignedBigBlock)
+{
+ void *alignedBigBlock;
+ /* align the entireHeap so all blocks are aligned. */
+ alignedBigBlock = (void *) ( ((uintptr_t)unalignedBigBlock + blockSize - 1) & ~(blockSize - 1) );
+ return alignedBigBlock;
+}
+
+/* Divide the big block into smaller bigBlocks that hold this many blocks.
+ * This is done since we really need a lot of blocks on the freeBlockQueue or there will be
+ * contention problems.
+ */
+static const unsigned int blocksPerBigBlock = 16;
+
+/* Returns 0 if unsuccessful, otherwise 1. */
+static int mallocBigBlock()
+{
+ void *unalignedBigBlock;
+ void *alignedBigBlock;
+ void *bigBlockCeiling;
+ Block *splitBlock;
+ void *splitEdge;
+ size_t bigBlockSplitSize;
+
+ unalignedBigBlock = getMemory(mmapRequestSize);
+
+ if (!unalignedBigBlock) {
+ TRACEF(" in mallocBigBlock, getMemory returns 0\n");
+ /* We can't get any more memory from the OS or executive so return 0 */
+ return 0;
+ }
+
+ alignedBigBlock = alignBigBlock(unalignedBigBlock);
+ bigBlockCeiling = (void*)((uintptr_t)unalignedBigBlock + mmapRequestSize);
+
+ bigBlockSplitSize = blocksPerBigBlock * blockSize;
+
+ splitBlock = (Block*)alignedBigBlock;
+
+ while ( ((uintptr_t)splitBlock + blockSize) <= (uintptr_t)bigBlockCeiling ) {
+ splitEdge = (void*)((uintptr_t)splitBlock + bigBlockSplitSize);
+ if( splitEdge > bigBlockCeiling) {
+ // align down to blockSize
+ splitEdge = (void*)((uintptr_t)bigBlockCeiling & ~(blockSize - 1));
+ }
+ splitBlock->bumpPtr = (FreeObject*)splitEdge;
+ freeBlockQueue.push((void**) splitBlock);
+ splitBlock = (Block*)splitEdge;
+ }
+
+ TRACEF("in mallocBigBlock returning 1\n");
+ return 1;
+}
+
+/**************** Some forward references ******************/
+static void *bootStrapMalloc(size_t size);
+extern "C" void mallocThreadShutdownNotification(void*);
+/**************** End Forward references ******************/
+
+/*
+ * Obviously this needs to be called before malloc is available.
+ */
+/* THIS IS DONE ON-DEMAND ON FIRST MALLOC, SO ASSUME MANUAL CALL TO IT IS NOT REQUIRED */
+static void initMemoryManager()
+{
+ int result;
+ /* Hard code this size to 64 so that we get natural alignement for several useful sizes.. */
+ TRACEF("sizeof(Block) is %d (expected 64); sizeof(uintptr_t) is %d\n", sizeof(Block), sizeof(uintptr_t));
+ MALLOC_ASSERT( CACHE_LINE_SIZE == sizeof(Block), ASSERT_TEXT );
+
+// Create keys for thread-local storage and for thread id
+// TODO: add error handling
+#if USE_WINTHREAD
+ TLS_pointer_key = TlsAlloc();
+ Tid_key = TlsAlloc();
+#else
+ int status = pthread_key_create( &TLS_pointer_key, mallocThreadShutdownNotification );
+ status = pthread_key_create( &Tid_key, NULL );
+// if( status )
+// HandlePerror(status,"pthread_key_create");
+#endif /* USE_WINTHREAD */
+ // no more necessary: lifoQueueInit(&freeBlockQueue);
+ TRACEF("Asking for a mallocBigBlock\n");
+ result = mallocBigBlock();
+ if (!result) {
+ printf ("initMemoryManager cannot access sufficient memory to initialize; aborting \n");
+ exit(0);
+ }
+}
+
+
+/*
+ * The malloc routines themselves need to be able to occasionally malloc some space,
+ * in order to set up the structures used by the thread local structures. This
+ * routine preforms that fuctions.
+ */
+
+/*
+ * Forward Refs
+ */
+static void initEmptyBlock(Block *block, size_t size);
+static Block *getEmptyBlock(size_t size);
+
+static MallocMutex bootStrapBlockLock;
+
+static Block *bootStrapBlock = NULL;
+static Block *bootStrapBlockUsed = NULL;
+
+static void *bootStrapMalloc(size_t size)
+{
+ void *result;
+
+ MALLOC_ASSERT( size == tlsSize, ASSERT_TEXT );
+
+ { // Lock with acquire
+ MallocMutex::scoped_lock scoped_cs(bootStrapBlockLock);
+
+ if (!bootStrapBlock) {
+ bootStrapBlock = getEmptyBlock(size);
+ }
+
+ result = bootStrapBlock->bumpPtr;
+ bootStrapBlock->bumpPtr = (FreeObject *)((uintptr_t)bootStrapBlock->bumpPtr - bootStrapBlock->objectSize);
+ if ((uintptr_t)bootStrapBlock->bumpPtr < (uintptr_t)bootStrapBlock+sizeof(Block)) {
+ bootStrapBlock->bumpPtr = NULL;
+ bootStrapBlock->next = bootStrapBlockUsed;
+ bootStrapBlockUsed = bootStrapBlock;
+ bootStrapBlock = NULL;
+ }
+
+ } // Unlock with release
+
+ memset (result, 0, size);
+ return result;
+}
+
+/********* End rough utilitiy code **************/
+
+/********* Thread and block related code *************/
+
+#ifdef MALLOC_DEBUG
+/* The debug version verifies the TLSBin as needed */
+static void verifyTLSBin (Bin* bin, size_t size)
+{
+ Block* temp;
+ Bin* tls;
+ uint32_t index = getIndex(size);
+ uint32_t objSize = getAllocatedSize(size);
+
+ tls = (Bin*)getThreadMallocTLS();
+ MALLOC_ASSERT( bin == tls+index, ASSERT_TEXT );
+
+ if (tls[index] && tls[index].activeBlk) {
+ MALLOC_ASSERT( tls[index].activeBlk->owner == getThreadId(), ASSERT_TEXT );
+ MALLOC_ASSERT( tls[index].activeBlk->objectSize == objSize, ASSERT_TEXT );
+
+ for (temp = tls[index].activeBlk->next; temp; temp=temp->next) {
+ MALLOC_ASSERT( temp!=tls[index].activeBlk, ASSERT_TEXT );
+ MALLOC_ASSERT( temp->owner == getThreadId(), ASSERT_TEXT );
+ MALLOC_ASSERT( temp->objectSize == objSize, ASSERT_TEXT );
+ MALLOC_ASSERT( temp->previous->next == temp, ASSERT_TEXT );
+ if (temp->next) {
+ MALLOC_ASSERT( temp->next->previous == temp, ASSERT_TEXT );
+ }
+ }
+ for (temp = tls[index].activeBlk->previous; temp; temp=temp->previous) {
+ MALLOC_ASSERT( temp!=tls[index], ASSERT_TEXT );
+ MALLOC_ASSERT( temp->owner == getThreadId(), ASSERT_TEXT );
+ MALLOC_ASSERT( temp->objectSize == objSize, ASSERT_TEXT );
+ MALLOC_ASSERT( temp->next->previous == temp, ASSERT_TEXT );
+ if (temp->previous) {
+ MALLOC_ASSERT( temp->previous->next == temp, ASSERT_TEXT );
+ }
+ }
+ }
+}
+#else
+inline static void verifyTLSBin (Bin*, size_t) {}
+#endif
+
+/*
+ * Add a block to the start of this tls bin list.
+ */
+static void pushTLSBin (Bin* bin, Block* block)
+{
+ /* The objectSize should be defined and not a parameter
+ because the function is applied to partially filled blocks as well */
+ unsigned int size = block->objectSize;
+ Block* activeBlk;
+
+ MALLOC_ASSERT( block->owner == getThreadId(), ASSERT_TEXT );
+ MALLOC_ASSERT( block->objectSize != 0, ASSERT_TEXT );
+ MALLOC_ASSERT( block->next == NULL, ASSERT_TEXT );
+ MALLOC_ASSERT( block->previous == NULL, ASSERT_TEXT );
+
+ MALLOC_ASSERT( bin, ASSERT_TEXT );
+ verifyTLSBin(bin, size);
+ activeBlk = bin->activeBlk;
+
+ block->next = activeBlk;
+ if( activeBlk ) {
+ block->previous = activeBlk->previous;
+ activeBlk->previous = block;
+ if( block->previous )
+ block->previous->next = block;
+ } else {
+ bin->activeBlk = block;
+ }
+
+ verifyTLSBin(bin, size);
+}
+
+/*
+ * Take a block out of its tls bin (e.g. before removal).
+ */
+static void outofTLSBin (Bin* bin, Block* block)
+{
+ unsigned int size = block->objectSize;
+
+ MALLOC_ASSERT( block->owner == getThreadId(), ASSERT_TEXT );
+ MALLOC_ASSERT( block->objectSize != 0, ASSERT_TEXT );
+
+ MALLOC_ASSERT( bin, ASSERT_TEXT );
+ verifyTLSBin(bin, size);
+
+ if (block == bin->activeBlk) {
+ bin->activeBlk = block->previous? block->previous : block->next;
+ }
+ /* Delink the block */
+ if (block->previous) {
+ MALLOC_ASSERT( block->previous->next == block, ASSERT_TEXT );
+ block->previous->next = block->next;
+ }
+ if (block->next) {
+ MALLOC_ASSERT( block->next->previous == block, ASSERT_TEXT );
+ block->next->previous = block->previous;
+ }
+ block->next = NULL;
+ block->previous = NULL;
+
+ verifyTLSBin(bin, size);
+}
+
+/*
+ * init the TLS bins and return the bin,
+ * an array of *blocks initialized to NULL.
+ */
+static Bin* initMallocTLS (void)
+{
+ Bin* tls;
+ int i;
+ MALLOC_ASSERT( tlsSize >= sizeof(Bin) * numBlockBins, ASSERT_TEXT );
+ tls = (Bin*) bootStrapMalloc(tlsSize);
+ /* the block contains zeroes after bootStrapMalloc, so bins are initialized */
+#ifdef MALLOC_DEBUG
+ for (i = 0; i < numBlockBinLimit; i++) {
+ MALLOC_ASSERT( tls[i].activeBlk == 0, ASSERT_TEXT );
+ MALLOC_ASSERT( tls[i].mailbox == 0, ASSERT_TEXT );
+ }
+#endif
+ setThreadMallocTLS(tls);
+ return tls;
+}
+
+static Bin* getAllocationBin(size_t size)
+{
+ uint32_t index;
+ Bin* tls;
+
+ index = getIndex(size);
+ tls = (Bin*)getThreadMallocTLS();
+ if( !tls ) {
+ tls = initMallocTLS();
+ }
+ MALLOC_ASSERT(tls, ASSERT_TEXT);
+ return tls+index;
+}
+
+static const float emptyEnoughRatio = 1.0 / 4.0; /* "Reactivate" a block if this share of its objects is free. */
+
+static unsigned int emptyEnoughToUse (Block *mallocBlock)
+{
+ const float threshold = (blockSize - sizeof(Block)) * (1-emptyEnoughRatio);
+
+ if (mallocBlock->bumpPtr) {
+ /* If we are still using a bump ptr for this block it is empty enough to use. */
+ STAT_increment(mallocBlock->owner, getIndex(mallocBlock->objectSize), examineEmptyEnough);
+ mallocBlock->isFull = 0;
+ return 1;
+ }
+
+ /* allocatedCount shows how many objects in the block are in use; however it still counts
+ blocks freed by other threads; so prior call to privatizePublicFreeList() is recommended */
+ mallocBlock->isFull = (mallocBlock->allocatedCount*mallocBlock->objectSize > threshold)? 1: 0;
+#if COLLECT_STATISTICS
+ if (mallocBlock->isFull)
+ STAT_increment(mallocBlock->owner, getIndex(mallocBlock->objectSize), examineNotEmpty);
+ else
+ STAT_increment(mallocBlock->owner, getIndex(mallocBlock->objectSize), examineEmptyEnough);
+#endif
+ return 1-mallocBlock->isFull;
+}
+
+/* Restore the bump pointer for an empty block that is planned to use */
+static void restoreBumpPtr (Block *block)
+{
+ MALLOC_ASSERT (block->allocatedCount == 0, ASSERT_TEXT);
+ MALLOC_ASSERT (block->publicFreeList == NULL, ASSERT_TEXT);
+ STAT_increment(block->owner, getIndex(block->objectSize), freeRestoreBumpPtr);
+ block->bumpPtr = (FreeObject *)((uintptr_t)block + blockSize - block->objectSize);
+ block->freeList = NULL;
+ block->isFull = 0;
+}
+
+// #ifdef FINE_GRAIN_LOCKS
+
+#if !(FREELIST_NONBLOCKING)
+static MallocMutex publicFreeListLock; // lock for changes of publicFreeList
+#endif
+
+const uintptr_t UNUSABLE = 0x1;
+inline bool isSolidPtr( void* ptr )
+{
+ return (UNUSABLE|(uintptr_t)ptr)!=UNUSABLE;
+}
+inline bool isNotForUse( void* ptr )
+{
+ return (uintptr_t)ptr==UNUSABLE;
+}
+
+static void freePublicObject (Block *block, FreeObject *objectToFree)
+{
+ Bin* theBin;
+ FreeObject *publicFreeList;
+
+#if FREELIST_NONBLOCKING
+ FreeObject *temp;
+ do {
+ publicFreeList = objectToFree->next = const_cast<FreeObject* volatile &>(block->publicFreeList);
+ temp = (FreeObject*)AtomicCompareExchange(
+ (intptr_t&)block->publicFreeList,
+ (intptr_t)objectToFree, (intptr_t)publicFreeList );
+ //no backoff necessary because trying to make change, not waiting for a change
+ } while( temp != publicFreeList );
+#else
+ STAT_increment(getThreadId(), ThreadCommonCounters, lockPublicFreeList);
+ {
+ MallocMutex::scoped_lock scoped_cs(publicFreeListLock);
+ publicFreeList = objectToFree->next = block->publicFreeList;
+ block->publicFreeList = objectToFree;
+ }
+#endif
+
+ if( publicFreeList==NULL ) {
+ // if the block is abandoned, its nextPrivatizable pointer should be UNUSABLE
+ // otherwise, it should point to the bin the block belongs to.
+ // reading nextPrivatizable is thread-safe below, because:
+ // 1) the executing thread atomically got publicFreeList==NULL and changed it to non-NULL;
+ // 2) only owning thread can change it back to NULL,
+ // 3) but it can not be done until the block is put to the mailbox
+ // So the executing thread is now the only one that can change nextPrivatizable
+ if( !isNotForUse(block->nextPrivatizable) ) {
+ MALLOC_ASSERT(block->nextPrivatizable!=NULL, ASSERT_TEXT);
+ MALLOC_ASSERT(block->owner!=0, ASSERT_TEXT);
+ theBin = (Bin*) block->nextPrivatizable;
+#ifdef MALLOC_DEBUG
+ { // check that nextPrivatizable points to the bin the block belongs to
+ uint32_t index = getIndex( block->objectSize );
+ Bin* tls = (Bin*)getThreadMallocTLS();
+ MALLOC_ASSERT(theBin==tls+index, ASSERT_TEXT);
+ }
+#endif
+// the counter should be changed STAT_increment(getThreadId(), ThreadCommonCounters, lockPublicFreeList);
+ MallocMutex::scoped_lock scoped_cs(theBin->mailLock);
+ block->nextPrivatizable = theBin->mailbox;
+ theBin->mailbox = block;
+ } else {
+ MALLOC_ASSERT(block->owner==0, ASSERT_TEXT);
+ }
+ }
+ STAT_increment(getThreadId(), ThreadCommonCounters, freeToOtherThread);
+ STAT_increment(block->owner, getIndex(block->objectSize), freeByOtherThread);
+}
+
+static void privatizePublicFreeList (Block *mallocBlock)
+{
+ FreeObject *temp, *publicFreeList;
+
+ MALLOC_ASSERT( mallocBlock->owner == getThreadId(), ASSERT_TEXT );
+#if FREELIST_NONBLOCKING
+ do {
+ publicFreeList = const_cast<FreeObject* volatile &>(mallocBlock->publicFreeList);
+ temp = (FreeObject*)AtomicCompareExchange(
+ (intptr_t&)mallocBlock->publicFreeList,
+ 0, (intptr_t)publicFreeList);
+ //no backoff necessary because trying to make change, not waiting for a change
+ } while( temp != publicFreeList );
+#else
+ STAT_increment(mallocBlock->owner, ThreadCommonCounters, lockPublicFreeList);
+ {
+ MallocMutex::scoped_lock scoped_cs(publicFreeListLock);
+ publicFreeList = mallocBlock->publicFreeList;
+ mallocBlock->publicFreeList = NULL;
+ }
+ temp = publicFreeList;
+#endif
+
+ MALLOC_ASSERT(publicFreeList && publicFreeList==temp, ASSERT_TEXT); // there should be something in publicFreeList!
+ if( !isNotForUse(temp) ) { // return/getPartialBlock could set it to UNUSABLE
+ MALLOC_ASSERT(mallocBlock->allocatedCount <= (blockSize-sizeof(Block))/mallocBlock->objectSize, ASSERT_TEXT);
+ /* other threads did not change the counter freeing our blocks */
+ mallocBlock->allocatedCount--;
+ while( isSolidPtr(temp->next) ){ // the list will end with either NULL or UNUSABLE
+ temp = temp->next;
+ mallocBlock->allocatedCount--;
+ }
+ MALLOC_ASSERT(mallocBlock->allocatedCount < (blockSize-sizeof(Block))/mallocBlock->objectSize, ASSERT_TEXT);
+ /* merge with local freeList */
+ temp->next = mallocBlock->freeList;
+ mallocBlock->freeList = publicFreeList;
+ STAT_increment(mallocBlock->owner, getIndex(mallocBlock->objectSize), allocPrivatized);
+ }
+}
+
+static Block* getPublicFreeListBlock (Bin* bin)
+{
+ Block* block;
+ MALLOC_ASSERT( bin, ASSERT_TEXT );
+// the counter should be changed STAT_increment(getThreadId(), ThreadCommonCounters, lockPublicFreeList);
+ {
+ MallocMutex::scoped_lock scoped_cs(bin->mailLock);
+ block = bin->mailbox;
+ if( block ) {
+ MALLOC_ASSERT( block->owner == getThreadId(), ASSERT_TEXT );
+ MALLOC_ASSERT( !isNotForUse(block->nextPrivatizable), ASSERT_TEXT );
+ bin->mailbox = block->nextPrivatizable;
+ block->nextPrivatizable = (Block*) bin;
+ }
+ }
+ if( block ) {
+ MALLOC_ASSERT( isSolidPtr(block->publicFreeList), ASSERT_TEXT );
+ privatizePublicFreeList(block);
+ }
+ return block;
+}
+
+static Block *getPartialBlock(Bin* bin, unsigned int size)
+{
+ Block *result;
+ MALLOC_ASSERT(bin, ASSERT_TEXT);
+ unsigned int index = getIndex(size);
+ result = (Block *) globalSizeBins[index].pop();
+ if (result) {
+ result->next = NULL;
+ result->previous = NULL;
+ MALLOC_ASSERT( result->publicFreeList!=NULL, ASSERT_TEXT );
+ /* There is not a race here since no other thread owns this block */
+ MALLOC_ASSERT(result->owner == 0, ASSERT_TEXT);
+ result->owner = getThreadId();
+ // It is safe to change nextPrivatizable, as publicFreeList is not null
+ MALLOC_ASSERT(isNotForUse(result->nextPrivatizable), ASSERT_TEXT);
+ result->nextPrivatizable = (Block*)bin;
+ // the next call is required to change publicFreeList to 0
+ privatizePublicFreeList(result);
+ if( result->allocatedCount ) {
+ // check its fullness and set result->isFull
+ emptyEnoughToUse(result);
+ } else {
+ restoreBumpPtr(result);
+ }
+ MALLOC_ASSERT( !isNotForUse(result->publicFreeList), ASSERT_TEXT );
+ STAT_increment(result->owner, index, allocBlockPublic);
+ }
+ return result;
+}
+
+static void returnPartialBlock(Bin* bin, Block *block)
+{
+ unsigned int index = getIndex(block->objectSize);
+ MALLOC_ASSERT(bin, ASSERT_TEXT);
+ MALLOC_ASSERT (block->owner==getThreadId(), ASSERT_TEXT);
+ STAT_increment(block->owner, index, freeBlockPublic);
+ // need to set publicFreeList to non-zero, so other threads
+ // will not change nextPrivatizable and it can be zeroed.
+ if ((intptr_t)block->nextPrivatizable==(intptr_t)bin) {
+ void* oldval;
+#if FREELIST_NONBLOCKING
+ oldval = (void*)AtomicCompareExchange((intptr_t&)block->publicFreeList, (intptr_t)UNUSABLE, 0);
+#else
+ STAT_increment(block->owner, ThreadCommonCounters, lockPublicFreeList);
+ {
+ MallocMutex::scoped_lock scoped_cs(publicFreeListLock);
+ if ( (oldval=block->publicFreeList)==NULL )
+ (uintptr_t&)(block->publicFreeList) = UNUSABLE;
+ }
+#endif
+ if ( oldval!=NULL ) {
+ // another thread freed an object; we need to wait until it finishes.
+ // I believe there is no need for exponential backoff, as the wait here is not for a lock;
+ // but need to yield, so the thread we wait has a chance to run.
+ while( (intptr_t)const_cast<Block* volatile &>(block->nextPrivatizable)==(intptr_t)bin ) {
+ int count = 256;
+ if (--count==0) {
+ do_yield();
+ count = 256;
+ }
+ }
+ }
+ } else {
+ MALLOC_ASSERT(isSolidPtr(block->publicFreeList), ASSERT_TEXT);
+ }
+ MALLOC_ASSERT( block->publicFreeList!=NULL, ASSERT_TEXT );
+ // now it is safe to change our data
+ block->previous = NULL;
+ block->owner = 0;
+ /* it is caller responsibility to ensure that the list of blocks
+ * formed by nextPrivatizable pointers is kept consistent if required.
+ * if only called from thread shutdown code, it does not matter */
+ (uintptr_t&)(block->nextPrivatizable) = UNUSABLE;
+ globalSizeBins[index].push((void **)block);
+}
+
+// #endif /* FINE_GRAIN_LOCKS */
+
+static void initEmptyBlock(Block *block, size_t size)
+{
+ unsigned int allocatedSize = getAllocatedSize(size);
+ Bin* tls = (Bin*)getThreadMallocTLS();
+// unsigned int allocationSpace = blockSize - sizeof(Block);
+// unsigned int objectsInBlock = allocationSpace / allocatedSize;
+#ifdef MALLOC_DEBUG
+ memset (block, 0x0e5, blockSize);
+#endif
+ block->next = NULL;
+ block->previous = NULL;
+ // bump pointer should be prepared for first allocation - thus mode it down to allocatedSize
+ block->bumpPtr = (FreeObject *)((uintptr_t)block + blockSize - allocatedSize);
+ // each block should have the address where the head of the list of "privatizable" blocks is kept
+ // the only exception is a block for boot strap which is initialized when TLS is yet NULL
+ block->nextPrivatizable = tls? (Block*)(tls + getIndex(size)) : NULL;
+ block->allocatedCount = 0;
+ block->freeList = NULL;
+ block->publicFreeList = NULL;
+ block->isFull = 0;
+ block->objectSize = allocatedSize;
+ block->owner = getThreadId();
+#if BLOCK_IS_PADDED
+ block->pad1 = 0;
+ block->pad2 = 0;
+ block->pad3 = 0;
+ block->pad4 = 0;
+ block->pad5 = 0;
+ block->pad6 = 0;
+#endif /* BLOCK_IS_PADDED */
+/* printf ("Empty block %p is initialized, owner is %d, objectSize is %d, bumpPtr is %p\n",
+ block, block->owner, block->objectSize, block->bumpPtr);
+ */
+ }
+
+/* Return an empty uninitialized block in a non-blocking fashion. */
+static Block *getEmptyBlock(size_t size)
+{
+ Block *result;
+ Block *bigBlock;
+ int success;
+
+ result = NULL;
+
+ bigBlock = (Block *) freeBlockQueue.pop();
+
+ while (!bigBlock) {
+ /* We are out of blocks so got to the OS and get another one */
+ success = mallocBigBlock();
+ if (!success) {
+ return NULL;
+ }
+ bigBlock = (Block *) freeBlockQueue.pop();
+ }
+
+ // check alignment
+ MALLOC_ASSERT( !( (uintptr_t)bigBlock & (uintptr_t)(blockSize-1) ), ASSERT_TEXT);
+ MALLOC_ASSERT( !( (uintptr_t)bigBlock->bumpPtr & (uintptr_t)(blockSize-1) ), ASSERT_TEXT);
+ // block should be at least as big as blockSize; otherwise the previous block can be damaged.
+ MALLOC_ASSERT( (uintptr_t)bigBlock->bumpPtr >= (uintptr_t)bigBlock + blockSize, ASSERT_TEXT);
+ bigBlock->bumpPtr = (FreeObject *)((uintptr_t)bigBlock->bumpPtr - blockSize);
+ result = (Block *)bigBlock->bumpPtr;
+ if ( result!=bigBlock ) {
+ TRACEF("Pushing partial rest of block back on.\n");
+ freeBlockQueue.push((void **)bigBlock);
+ }
+ initEmptyBlock(result, size);
+ STAT_increment(result->owner, getIndex(result->objectSize), allocBlockNew);
+
+ return result;
+}
+
+/* We have a block give it back to the malloc block manager */
+static void returnEmptyBlock (Block *block, bool keepTheBin = true)
+{
+ // it is caller's responsibility to ensure no data is lost before calling this
+ MALLOC_ASSERT(block->allocatedCount==0, ASSERT_TEXT);
+ MALLOC_ASSERT(block->publicFreeList==NULL, ASSERT_TEXT);
+ if (keepTheBin) {
+ /* We should keep the TLS bin structure */
+ MALLOC_ASSERT( block->next == NULL, ASSERT_TEXT );
+ MALLOC_ASSERT( block->previous == NULL, ASSERT_TEXT );
+ }
+ STAT_increment(block->owner, getIndex(block->objectSize), freeBlockBack);
+
+ block->allocatedCount = 0;
+ // for an empty block, bump pointer should point right after the end of the block
+ block->bumpPtr = (FreeObject *)((uintptr_t)block + blockSize);
+ block->nextPrivatizable = NULL;
+ block->freeList = NULL;
+ block->publicFreeList = NULL;
+ block->next = NULL;
+ block->previous = NULL;
+ block->owner = (unsigned)-1;
+ block->isFull = 0;
+ block->objectSize = 0;
+ freeBlockQueue.push((void **)block);
+}
+
+inline static Block* getActiveBlock( Bin* bin )
+{
+ MALLOC_ASSERT( bin, ASSERT_TEXT );
+ return bin->activeBlk;
+}
+
+inline static void setActiveBlock (Bin* bin, Block *block)
+{
+ MALLOC_ASSERT( bin, ASSERT_TEXT );
+ MALLOC_ASSERT(block->owner == getThreadId(), ASSERT_TEXT);
+ // it is the caller responsibility to keep bin consistence (i.e. ensure this block is in the bin list)
+ bin->activeBlk = block;
+}
+
+inline static Block* setPreviousBlockActive( Bin* bin )
+{
+ MALLOC_ASSERT( bin && bin->activeBlk, ASSERT_TEXT );
+ Block* temp = bin->activeBlk->previous;
+ if( temp ) {
+ MALLOC_ASSERT( temp->isFull == 0, ASSERT_TEXT );
+ bin->activeBlk = temp;
+ }
+ return temp;
+}
+
+/********* End thread related code *************/
+
+/********* The malloc show *************/
+
+/*
+ * The program wants a large object that we are not prepared to deal with.
+ * so we pass the problem on to the OS. Large Objects are the only objects in
+ * the system that begin on a 16K byte boundary since the blocks used for smaller
+ * objects have the Block structure at each 16K boundary.
+ *
+ */
+
+static unsigned int isLargeObject(void *object); /* Forward Ref */
+
+typedef struct LargeObjectHeaderS {
+ void *unalignedResult; /* The base of the memory returned from getMemory, this is what is used to return this to the OS */
+ size_t unalignedSize; /* The size that was requested from getMemory */
+ size_t objectSize; /* The size originally requested by a client */
+} LargeObjectHeader;
+
+static inline void *mallocLargeObject (size_t size)
+{
+ void *result;
+ void *alignedArea;
+ void *unalignedArea;
+ LargeObjectHeader *header;
+
+ // TODO: can the requestedSize be optimized somehow?
+ size_t requestedSize = size + sizeof(LargeObjectHeader) + blockSize;
+#if USE_MALLOC_FOR_LARGE_OBJECT
+ unalignedArea = malloc(requestedSize);
+#else
+ unalignedArea = getMemory(requestedSize);
+#endif /* USE_MALLOC_FOR_LARGE_OBJECT */
+ if (!unalignedArea) {
+ /* We can't get any more memory from the OS or executive so return 0 */
+ return 0;
+ }
+ alignedArea = (void *)( ((uintptr_t)unalignedArea + blockSize - 1) & ~(blockSize - 1) );
+ header = (LargeObjectHeader *)alignedArea;
+ header->unalignedResult = unalignedArea;
+ header->unalignedSize = requestedSize;
+ header->objectSize = size;
+ result = (void *)((uintptr_t)alignedArea + sizeof(LargeObjectHeader));
+ MALLOC_ASSERT(isLargeObject(result), ASSERT_TEXT);
+ STAT_increment(getThreadId(), ThreadCommonCounters, allocLargeSize);
+ return result;
+}
+
+static inline void freeLargeObject(void *object)
+{
+ LargeObjectHeader *header;
+ STAT_increment(getThreadId(), ThreadCommonCounters, freeLargeSize);
+ header = (LargeObjectHeader *)((uintptr_t)object - sizeof(LargeObjectHeader));
+#if USE_MALLOC_FOR_LARGE_OBJECT
+ free(header->unalignedResult);
+#else
+ returnMemory(header->unalignedResult, header->unalignedSize);
+#endif /* USE_MALLOC_FOR_LARGE_OBJECT */
+}
+
+/* Does this object start on a 16K boundary + the size of a large object header? */
+static inline unsigned int isLargeObject(void *object)
+{
+ return ((uintptr_t)object & (blockSize - 1)) == sizeof(LargeObjectHeader);
+}
+
+static inline unsigned int getLargeObjectSize(void *object)
+{
+ LargeObjectHeader *header;
+ header = (LargeObjectHeader *)((uintptr_t)object & ~(blockSize - 1));
+ return header->objectSize;
+}
+
+//! Value indicating state of package initialization.
+/* 0 = initialization not started.
+ 1 = initialization started but not finished.
+ 2 = initialization finished.
+ In theory, we only need values 0 and 2. But value 1 is nonetheless useful for
+ detecting errors in the double-check pattern. */
+static volatile int mallocInitialized; // implicitly initialized to 0
+static MallocMutex initAndShutMutex;
+
+//! Ensures that initMemoryManager() is called once and only once.
+/** Does not return until initMemoryManager() has been completed by a thread.
+ There is no need to call this routine if mallocInitialized==2 . */
+static void checkInitialization()
+{
+ MallocMutex::scoped_lock lock( initAndShutMutex );
+ if(mallocInitialized!=2) {
+ MALLOC_ASSERT(mallocInitialized==0, ASSERT_TEXT);
+ mallocInitialized = 1;
+ initMemoryManager();
+ MALLOC_ASSERT(mallocInitialized==1, ASSERT_TEXT);
+ mallocInitialized = 2;
+ }
+ MALLOC_ASSERT(mallocInitialized==2, ASSERT_TEXT); /* It can't be 0 or I would have initialized it */
+}
+
+static FreeObject *allocateFromFreeList(Block *mallocBlock)
+{
+ FreeObject *result;
+
+ if (!mallocBlock->freeList) {
+ return NULL;
+ }
+
+ result = mallocBlock->freeList;
+ MALLOC_ASSERT (result, ASSERT_TEXT);
+
+ mallocBlock->freeList = result->next;
+ MALLOC_ASSERT(mallocBlock->allocatedCount < (blockSize-sizeof(Block))/mallocBlock->objectSize, ASSERT_TEXT);
+ mallocBlock->allocatedCount++;
+ STAT_increment(mallocBlock->owner, getIndex(mallocBlock->objectSize), allocFreeListUsed);
+
+ return result;
+}
+
+static FreeObject *allocateFromBumpPtr(Block *mallocBlock)
+{
+ FreeObject *result = mallocBlock->bumpPtr;
+ if (result) {
+ mallocBlock->bumpPtr =
+ (FreeObject *) ((uintptr_t) mallocBlock->bumpPtr - mallocBlock->objectSize);
+ if ( (uintptr_t)mallocBlock->bumpPtr < (uintptr_t)mallocBlock+sizeof(Block) ) {
+ mallocBlock->bumpPtr = NULL;
+ }
+ MALLOC_ASSERT(mallocBlock->allocatedCount < (blockSize-sizeof(Block))/mallocBlock->objectSize, ASSERT_TEXT);
+ mallocBlock->allocatedCount++;
+ STAT_increment(mallocBlock->owner, getIndex(mallocBlock->objectSize), allocBumpPtrUsed);
+ }
+ return result;
+}
+
+inline static FreeObject* allocateFromBlock( Block *mallocBlock )
+{
+ FreeObject *result;
+
+ MALLOC_ASSERT( mallocBlock->owner == getThreadId(), ASSERT_TEXT );
+ /*
+ * use thread local bump pointer allocation.
+ */
+ if ( (result = allocateFromBumpPtr(mallocBlock)) ) { /* avoid initing free list */
+ return result;
+ }
+ MALLOC_ASSERT( !mallocBlock->bumpPtr, ASSERT_TEXT );
+ /*
+ * else use allocation from free lists
+ */
+ if ( (result = allocateFromFreeList(mallocBlock)) ) {
+ return result;
+ }
+ MALLOC_ASSERT( !mallocBlock->freeList, ASSERT_TEXT );
+ /*
+ * else the block is considered full
+ */
+ mallocBlock->isFull = 1;
+ return NULL;
+}
+
+inline void* set_errno_if_NULL(void* arg)
+{
+ if ( arg==NULL )
+ errno = ENOMEM;
+ return arg;
+}
+
+} // namespace Internal
+} // namespace ThreadingSubstrate
+
+using namespace ThreadingSubstrate;
+using namespace ThreadingSubstrate::Internal;
+
+/*
+ * When a thread is shuting down this routine should be called to remove all the thread ids
+ * from the malloc blocks and replace them with a NULL thread id.
+ *
+ */
+static unsigned int threadGoingDownCount = 0;
+/*
+ * for pthreads, the function is set as a callback in pthread_key_create for TLS bin.
+ * it will be automatically called at thread exit with the key value as the argument.
+ *
+ * for Windows, it should be called directly e.g. from DllMain; the argument can be NULL
+ * one should include "TypeDefinitions.h" for the declaration of this function.
+*/
+extern "C" void mallocThreadShutdownNotification(void* arg)
+{
+ Bin *tls;
+ Block *threadBlock;
+ Block *threadlessBlock;
+ unsigned int index;
+
+ {
+ MallocMutex::scoped_lock lock( ThreadingSubstrate::Internal::initAndShutMutex );
+ if ( ThreadingSubstrate::Internal::mallocInitialized == 0 ) return;
+ }
+
+ TRACEF("Thread id %d blocks return start %d\n", getThreadId(), threadGoingDownCount++);
+#ifdef USE_WINTHREAD
+ tls = (Bin*)getThreadMallocTLS();
+#else
+ tls = (Bin*)arg;
+#endif
+ if (tls) {
+ for (index = 0; index < numBlockBins; index++) {
+ if (tls[index].activeBlk==NULL)
+ continue;
+ threadlessBlock = tls[index].activeBlk->previous;
+ while (threadlessBlock) {
+ threadBlock = threadlessBlock->previous;
+ if (threadlessBlock->allocatedCount==0 && threadlessBlock->publicFreeList==NULL) {
+ /* we destroy the thread, no need to keep its TLS bin -> the second param is false */
+ returnEmptyBlock(threadlessBlock, false);
+ } else {
+ returnPartialBlock(tls+index, threadlessBlock);
+ }
+ threadlessBlock = threadBlock;
+ }
+ threadlessBlock = tls[index].activeBlk;
+ while (threadlessBlock) {
+ threadBlock = threadlessBlock->next;
+ if (threadlessBlock->allocatedCount==0 && threadlessBlock->publicFreeList==NULL) {
+ /* we destroy the thread, no need to keep its TLS bin -> the second param is false */
+ returnEmptyBlock(threadlessBlock, false);
+ } else {
+ returnPartialBlock(tls+index, threadlessBlock);
+ }
+ threadlessBlock = threadBlock;
+ }
+ tls[index].activeBlk = 0;
+ }
+ // TODO - Free up this tls stuff..... somehow free the tls structure... then call setThreadMallocTLS(0);
+ }
+
+#ifndef USE_WINTHREAD
+// on Windows, all statistics will be flushed in mallocProcessShutdownNotification
+#if COLLECT_STATISTICS
+ STAT_print(getThreadId());
+#endif
+#endif
+
+ TRACEF("Thread id %d blocks return end\n", getThreadId());
+}
+
+extern "C" void mallocProcessShutdownNotification(void)
+{
+ // for now, this function is only necessary for dumping statistics
+ // and it should only be called on Windows via DLL_PROCESS_DETACH
+#if COLLECT_STATISTICS
+ ThreadId nThreads = ThreadIdCount;
+ for( int i=1; i<=nThreads && i<MAX_THREADS; ++i )
+ STAT_print(i);
+#endif
+}
+
+/********* The malloc code *************/
+
+extern "C" void * scalable_malloc(size_t size)
+{
+ Bin* bin;
+ Block * mallocBlock;
+ FreeObject *result;
+
+ if( !size ) size = sizeof(size_t);
+
+ if (mallocInitialized!=2) {
+ /* This returns only after malloc is initialized */
+ checkInitialization();
+ }
+ /*
+ * Use Large Object Allocation
+ */
+ if (size >= minLargeObjectSize) {
+ return set_errno_if_NULL( mallocLargeObject(size) );
+ }
+
+ /*
+ * Get an element in thread-local array corresponding to the given size;
+ * It keeps ptr to the active block for allocations of this size
+ */
+ bin = getAllocationBin(size);
+
+ /* Get the block of you want to try to allocate in. */
+ mallocBlock = getActiveBlock(bin);
+
+ if (mallocBlock) {
+ do {
+ if( (result = allocateFromBlock(mallocBlock)) ) {
+ return result;
+ }
+ // the previous block, if any, should be empty enough
+ } while( (mallocBlock = setPreviousBlockActive(bin)) );
+ }
+ MALLOC_ASSERT( !(bin->activeBlk) || bin->activeBlk->isFull==1, ASSERT_TEXT );
+
+ /*
+ * else privatize publicly freed objects in some block and allocate from it
+ */
+ mallocBlock = getPublicFreeListBlock( bin );
+ if( mallocBlock ) {
+ if( emptyEnoughToUse(mallocBlock) ) {
+ /* move the block to the front of the bin */
+ outofTLSBin(bin, mallocBlock);
+ pushTLSBin(bin, mallocBlock);
+ }
+ MALLOC_ASSERT( mallocBlock->freeList, ASSERT_TEXT );
+ if ( (result = allocateFromFreeList(mallocBlock)) ) {
+ return result;
+ }
+ /* Else something strange happened, need to retry from the beginning; */
+ TRACEF("This isn't correct reasonable local block disappears --- ScalableMalloc\n");
+ return scalable_malloc(size);
+ }
+
+ /*
+ * no suitable own blocks, try to get a partial block that some other thread has discarded.
+ */
+ mallocBlock = getPartialBlock(bin, size);
+ while (mallocBlock) {
+ pushTLSBin(bin, mallocBlock);
+// guaranteed by pushTLSBin: MALLOC_ASSERT( *bin==mallocBlock || (*bin)->previous==mallocBlock, ASSERT_TEXT );
+ setActiveBlock(bin, mallocBlock);
+ if( (result = allocateFromBlock(mallocBlock)) ) {
+ return result;
+ }
+ mallocBlock = getPartialBlock(bin, size);
+ }
+
+ /*
+ * else try to get a new empty block
+ */
+ mallocBlock = getEmptyBlock(size);
+ if (mallocBlock) {
+ pushTLSBin(bin, mallocBlock);
+// guaranteed by pushTLSBin: MALLOC_ASSERT( *bin==mallocBlock || (*bin)->previous==mallocBlock, ASSERT_TEXT );
+ setActiveBlock(bin, mallocBlock);
+ if( (result = allocateFromBlock(mallocBlock)) ) {
+ return result;
+ }
+ /* Else something strange happened, need to retry from the beginning; */
+ TRACEF("This isn't correct reasonable local block disappears --- ScalableMalloc\n");
+ return scalable_malloc(size);
+ }
+ /*
+ * else nothing works so return NULL
+ */
+ TRACEF("NULL Back; \n");
+ errno = ENOMEM;
+ return NULL;
+}
+
+/********* End the malloc code *************/
+
+/********* The free code *************/
+
+extern "C" void scalable_free (void *object) {
+ Block *block;
+ ThreadId myTid;
+ FreeObject *objectToFree;
+
+ if (!object) {
+ return;
+ }
+
+ if (isLargeObject(object)) {
+ freeLargeObject(object);
+ return;
+ }
+
+ objectToFree = (FreeObject *)object;
+
+ myTid = getThreadId();
+
+ block = (Block *) ((uintptr_t)object & ~(blockSize - 1));/* mask low bits to get the block */
+ MALLOC_ASSERT (block->allocatedCount, ASSERT_TEXT);
+
+ if (myTid == block->owner) {
+ ((FreeObject *)object)->next = block->freeList;
+ block->freeList = (FreeObject *) object;
+ block->allocatedCount--;
+ MALLOC_ASSERT(block->allocatedCount < (blockSize-sizeof(Block))/block->objectSize, ASSERT_TEXT);
+ Bin* bin = getAllocationBin(block->objectSize);
+#if COLLECT_STATISTICS
+ if (getActiveBlock(bin) != block)
+ STAT_increment(myTid, getIndex(block->objectSize), freeToInactiveBlock);
+ else
+ STAT_increment(myTid, getIndex(block->objectSize), freeToActiveBlock);
+#endif
+ if (block->isFull && emptyEnoughToUse(block)) {
+ /* move the block to the front of the bin */
+ outofTLSBin(bin, block);
+ pushTLSBin(bin, block);
+ } else {
+ if (block->allocatedCount==0 && block->publicFreeList==NULL) {
+ if (block != getActiveBlock(bin) && block != getActiveBlock(bin)->previous ) {
+ /* We are not actively using this block; return it to the general block pool */
+ outofTLSBin(bin, block);
+ returnEmptyBlock(block);
+ } else {
+ /* all objects are free - let's restore the bump pointer */
+ restoreBumpPtr(block);
+ }
+ }
+ }
+ } else { /* Slower path to add to multi writer queue, the allocatedCount is updated by the owner thread in malloc. */
+ freePublicObject (block, objectToFree);
+ }
+}
+
+/********* End the free code *************/
+
+/********* Code for scalable_realloc ***********/
+
+/*
+ * From K&R
+ * "realloc changes the size of the object pointer to by p to size. The contents will
+ * be unchanged up to the minimum of the old and the new sizes. If the new size is larger,
+ * the new space is uninitialized. realloc returns a pointer to the new space, or
+ * NULL if the request cannot be satisfied, in which case *p is unchanged."
+ *
+ */
+extern "C" void* scalable_realloc(void* ptr, size_t sz)
+{
+ void *result;
+ Block* block;
+ size_t copySize;
+
+ if (ptr==NULL) {
+ return scalable_malloc(sz);
+ }
+
+ if (sz == 0) {
+ scalable_free(ptr);
+ return NULL;
+ }
+ block = (Block *) ((uintptr_t)ptr & ~(blockSize - 1)); /* mask low bits to get the block */
+ if (isLargeObject(ptr)) {
+ LargeObjectHeader* loh = (LargeObjectHeader*)block;
+ copySize = loh->unalignedSize-((uintptr_t)ptr-(uintptr_t)loh->unalignedResult);
+ if (sz < copySize) {
+ loh->objectSize = sz;
+ return ptr;
+ }
+ else {
+ copySize = loh->objectSize;
+ result = scalable_malloc(sz);
+ }
+ } else {
+ copySize = block->objectSize;
+ if (sz < copySize) {
+ return ptr;
+ } else {
+ result = scalable_malloc(sz);
+ }
+ }
+ if (copySize > sz) {
+ copySize = sz;
+ }
+
+ if (result) {
+ memcpy(result, ptr, copySize);
+ scalable_free(ptr);
+ } else {
+ errno = ENOMEM;
+ }
+ return result;
+}
+
+
+/********* End code for scalable_realloc ***********/
+
+/********* Code for scalable_calloc ***********/
+
+/*
+ * From K&R
+ * calloc returns a pointer to space for an array of nobj objects, each of size size,
+ * or NULL if the request cannot be satisfied. The sapce is initialized to zero bytes.
+ *
+ */
+
+extern "C" void * scalable_calloc(size_t nobj, size_t size)
+{
+ void *result;
+ size_t arraySize;
+ arraySize = nobj * size;
+ result = scalable_malloc(arraySize);
+ if (result) {
+ memset(result, 0, arraySize);
+ }
+ return result;
+}
+
+/********* End code for scalable_calloc ***********/
+
diff --git a/src/tbbmalloc/Statistics.h b/src/tbbmalloc/Statistics.h
new file mode 100644
index 0000000..3b29b89
--- /dev/null
+++ b/src/tbbmalloc/Statistics.h
@@ -0,0 +1,113 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#define MAX_THREADS 1024
+#define NUM_OF_BINS 30
+#define ThreadCommonCounters NUM_OF_BINS
+
+enum counter_type {
+ allocBlockNew = 0,
+ allocBlockPublic,
+ allocBumpPtrUsed,
+ allocFreeListUsed,
+ allocPrivatized,
+ examineEmptyEnough,
+ examineNotEmpty,
+ freeRestoreBumpPtr,
+ freeByOtherThread,
+ freeToActiveBlock,
+ freeToInactiveBlock,
+ freeBlockPublic,
+ freeBlockBack,
+ MaxCounters
+};
+enum common_counter_type {
+ allocLargeSize = 0,
+ freeLargeSize,
+ lockPublicFreeList,
+ freeToOtherThread
+};
+
+#if COLLECT_STATISTICS
+
+struct bin_counters {
+ int counter[MaxCounters];
+};
+
+static bin_counters statistic[MAX_THREADS][NUM_OF_BINS+1]; //zero-initialized;
+
+static inline int STAT_increment(int thread, int bin, int ctr)
+{
+ return ++(statistic[thread][bin].counter[ctr]);
+}
+#else
+#define STAT_increment(a,b,c) ((int)0)
+#endif
+
+static inline void STAT_print(int thread)
+{
+#if COLLECT_STATISTICS
+ char filename[100];
+ sprintf(filename, "stat_ScalableMalloc_thr%04d.log", thread);
+ FILE* outfile = fopen(filename, "w");
+ for(int i=0; i<NUM_OF_BINS; ++i)
+ {
+ bin_counters& ctrs = statistic[thread][i];
+ fprintf(outfile, "Thr%04d Bin%02d", thread, i);
+ fprintf(outfile, ": allocNewBlocks %5d", ctrs.counter[allocBlockNew]);
+ fprintf(outfile, ", allocPublicBlocks %5d", ctrs.counter[allocBlockPublic]);
+ fprintf(outfile, ", restoreBumpPtr %5d", ctrs.counter[freeRestoreBumpPtr]);
+ fprintf(outfile, ", privatizeCalled %10d", ctrs.counter[allocPrivatized]);
+ fprintf(outfile, ", emptyEnough %10d", ctrs.counter[examineEmptyEnough]);
+ fprintf(outfile, ", notEmptyEnough %10d", ctrs.counter[examineNotEmpty]);
+ fprintf(outfile, ", freeBlocksPublic %5d", ctrs.counter[freeBlockPublic]);
+ fprintf(outfile, ", freeBlocksBack %5d", ctrs.counter[freeBlockBack]);
+ fprintf(outfile, "\n");
+ }
+ for(int i=0; i<NUM_OF_BINS; ++i)
+ {
+ bin_counters& ctrs = statistic[thread][i];
+ fprintf(outfile, "Thr%04d Bin%02d", thread, i);
+ fprintf(outfile, ": allocBumpPtr %10d", ctrs.counter[allocBumpPtrUsed]);
+ fprintf(outfile, ", allocFreeList %10d", ctrs.counter[allocFreeListUsed]);
+ fprintf(outfile, ", freeToActiveBlk %10d", ctrs.counter[freeToActiveBlock]);
+ fprintf(outfile, ", freeToInactive %10d", ctrs.counter[freeToInactiveBlock]);
+ fprintf(outfile, ", freedByOther %10d", ctrs.counter[freeByOtherThread]);
+ fprintf(outfile, "\n");
+ }
+ bin_counters& ctrs = statistic[thread][ThreadCommonCounters];
+ fprintf(outfile, "Thr%04d common counters", thread);
+ fprintf(outfile, ": allocLargeObjects %5d", ctrs.counter[allocLargeSize]);
+ fprintf(outfile, ", freeLargeObjects %5d", ctrs.counter[freeLargeSize]);
+ fprintf(outfile, ", lockPublicFreeList %5d", ctrs.counter[lockPublicFreeList]);
+ fprintf(outfile, ", freeToOtherThread %10d", ctrs.counter[freeToOtherThread]);
+ fprintf(outfile, "\n");
+
+ fclose(outfile);
+#endif
+}
diff --git a/src/tbbmalloc/TypeDefinitions.h b/src/tbbmalloc/TypeDefinitions.h
new file mode 100644
index 0000000..9ac3d8d
--- /dev/null
+++ b/src/tbbmalloc/TypeDefinitions.h
@@ -0,0 +1,68 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifndef _itt_shared_malloc_TypeDefinitions_H_
+#define _itt_shared_malloc_TypeDefinitions_H_
+
+// Define preprocessor symbols used to determine architecture
+#if _WIN32||_WIN64
+# if defined(_M_AMD64)
+# define __ARCH_x86_64 1
+# elif defined(_M_IA64)
+# define __ARCH_ipf 1
+# elif defined(_M_IX86)
+# define __ARCH_x86_32 1
+# else
+# error Unknown processor architecture for Windows
+# endif
+# define USE_WINTHREAD 1
+#else /* Assume generic Unix */
+# if __x86_64__
+# define __ARCH_x86_64 1
+# elif __ia64__
+# define __ARCH_ipf 1
+# elif __i386__
+# define __ARCH_x86_32 1
+# else
+# define __ARCH_unknown 1
+# endif
+# define USE_PTHREAD 1
+#endif
+
+// Include files containing declarations of intptr_t and uintptr_t
+#if _WIN32
+#include <stddef.h>
+typedef unsigned __int32 uint32_t;
+#else
+#include <stdint.h>
+#endif
+
+//! PROVIDE YOUR OWN Customize.h IF YOU FEEL NECESSARY
+#include "Customize.h"
+
+#endif /* _itt_shared_malloc_TypeDefinitions_H_ */
diff --git a/src/tbbmalloc/em64t-malloc-mac-export.txt b/src/tbbmalloc/em64t-malloc-mac-export.txt
new file mode 100644
index 0000000..a223b10
--- /dev/null
+++ b/src/tbbmalloc/em64t-malloc-mac-export.txt
@@ -0,0 +1,31 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# MemoryAllocator.cpp
+_scalable_calloc
+_scalable_free
+_scalable_malloc
+_scalable_realloc
diff --git a/src/tbbmalloc/em64t-malloc.def b/src/tbbmalloc/em64t-malloc.def
new file mode 100644
index 0000000..1a42990
--- /dev/null
+++ b/src/tbbmalloc/em64t-malloc.def
@@ -0,0 +1,33 @@
+; Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+;
+; This file is part of Threading Building Blocks.
+;
+; Threading Building Blocks is free software; you can redistribute it
+; and/or modify it under the terms of the GNU General Public License
+; version 2 as published by the Free Software Foundation.
+;
+; Threading Building Blocks 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 General Public License for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with Threading Building Blocks; if not, write to the Free Software
+; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+;
+; As a special exception, you may use this file as part of a free software
+; library without restriction. Specifically, if other files instantiate
+; templates or use macros or inline functions from this file, or you compile
+; this file and link it with other files to produce an executable, this
+; file does not by itself cause the resulting executable to be covered by
+; the GNU General Public License. This exception does not however
+; invalidate any other reasons why the executable file might be covered by
+; the GNU General Public License.
+
+EXPORTS
+
+; MemoryAllocator.cpp
+scalable_calloc
+scalable_free
+scalable_malloc
+scalable_realloc
diff --git a/src/tbbmalloc/ia32-malloc-mac-export.txt b/src/tbbmalloc/ia32-malloc-mac-export.txt
new file mode 100644
index 0000000..a223b10
--- /dev/null
+++ b/src/tbbmalloc/ia32-malloc-mac-export.txt
@@ -0,0 +1,31 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+# MemoryAllocator.cpp
+_scalable_calloc
+_scalable_free
+_scalable_malloc
+_scalable_realloc
diff --git a/src/tbbmalloc/ia32-malloc.def b/src/tbbmalloc/ia32-malloc.def
new file mode 100644
index 0000000..1a42990
--- /dev/null
+++ b/src/tbbmalloc/ia32-malloc.def
@@ -0,0 +1,33 @@
+; Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+;
+; This file is part of Threading Building Blocks.
+;
+; Threading Building Blocks is free software; you can redistribute it
+; and/or modify it under the terms of the GNU General Public License
+; version 2 as published by the Free Software Foundation.
+;
+; Threading Building Blocks 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 General Public License for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with Threading Building Blocks; if not, write to the Free Software
+; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+;
+; As a special exception, you may use this file as part of a free software
+; library without restriction. Specifically, if other files instantiate
+; templates or use macros or inline functions from this file, or you compile
+; this file and link it with other files to produce an executable, this
+; file does not by itself cause the resulting executable to be covered by
+; the GNU General Public License. This exception does not however
+; invalidate any other reasons why the executable file might be covered by
+; the GNU General Public License.
+
+EXPORTS
+
+; MemoryAllocator.cpp
+scalable_calloc
+scalable_free
+scalable_malloc
+scalable_realloc
diff --git a/src/tbbmalloc/tbbmalloc.cpp b/src/tbbmalloc/tbbmalloc.cpp
new file mode 100644
index 0000000..5287e9d
--- /dev/null
+++ b/src/tbbmalloc/tbbmalloc.cpp
@@ -0,0 +1,48 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+//#define INSTANTIATE_ITT_NOTIFY 1
+//#include "tbb/itt_notify.h"
+#include "Customize.h"
+
+#ifdef _WIN32
+#include <windows.h>
+
+BOOL WINAPI DllMain( HINSTANCE hInst, DWORD callReason, LPVOID )
+{
+ if (callReason==DLL_THREAD_DETACH)
+ {
+ mallocThreadShutdownNotification(NULL);
+ }
+ else if (callReason==DLL_PROCESS_DETACH)
+ {
+ mallocProcessShutdownNotification();
+ }
+ return TRUE;
+}
+#endif //_WIN32
diff --git a/src/tbbmalloc/tbbmalloc.rc b/src/tbbmalloc/tbbmalloc.rc
new file mode 100644
index 0000000..eb4f832
--- /dev/null
+++ b/src/tbbmalloc/tbbmalloc.rc
@@ -0,0 +1,122 @@
+// Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+//
+// This file is part of Threading Building Blocks.
+//
+// Threading Building Blocks is free software; you can redistribute it
+// and/or modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// Threading Building Blocks 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 General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Threading Building Blocks; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// Microsoft Visual C++ generated resource script.
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NO_MFC 1
+#define _APS_NEXT_RESOURCE_VALUE 102
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1001
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include <winresrc.h>
+#define ENDL "\r\n"
+#include "tbb/tbb_version.h"
+
+#define TBBMALLOC_VERNUMBERS 1, 0, __TBB_VERSION_YMD
+#define TBBMALLOC_VERSION __TBB_STRING(TBBMALLOC_VERNUMBERS)
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Neutral resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
+#ifdef _WIN32
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION TBBMALLOC_VERNUMBERS
+ PRODUCTVERSION TBB_VERNUMBERS
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x40004L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "000004b0"
+ BEGIN
+ VALUE "CompanyName", "Intel Corporation\0"
+ VALUE "FileDescription", "Scalable Allocator library\0"
+ VALUE "FileVersion", TBBMALLOC_VERSION "\0"
+//what is it? VALUE "InternalName", "tbbmalloc\0"
+ VALUE "LegalCopyright", "Copyright (C) 2006\0"
+ VALUE "LegalTrademarks", "\0"
+#ifndef TBB_DO_ASSERT
+ VALUE "OriginalFilename", "tbbmalloc.dll\0"
+#else
+ VALUE "OriginalFilename", "tbbmalloc_debug.dll\0"
+#endif
+ VALUE "ProductName", "Threading Building Blocks\0"
+ VALUE "ProductVersion", TBB_VERSION "\0"
+ VALUE "Comments", TBB_VERSION_STRINGS "\0"
+ VALUE "PrivateBuild", "\0"
+ VALUE "SpecialBuild", "\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x0, 1200
+ END
+END
+
+#endif // Neutral resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/src/test/Makefile b/src/test/Makefile
new file mode 100644
index 0000000..6d67392
--- /dev/null
+++ b/src/test/Makefile
@@ -0,0 +1,44 @@
+# Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+#
+# This file is part of Threading Building Blocks.
+#
+# Threading Building Blocks is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# Threading Building Blocks 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Threading Building Blocks; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+tbb_root?=../..
+include $(tbb_root)/build/common.inc
+
+all: release debug
+
+release debug:
+ @-$(MD) "$(work_dir)_$@"
+ $(MAKE) -C "$(work_dir)_$@" -r -f $(tbb_root)/build/Makefile.test cfg=$@
+
+clean: clean_release clean_debug
+
+clean_release:
+ @-$(RM) $(work_dir)_release$(SLASH)*.*
+ @-rmdir "$(work_dir)_release"
+
+clean_debug:
+ @-$(RM) $(work_dir)_debug$(SLASH)*.*
+ @-rmdir "$(work_dir)_debug"
diff --git a/src/test/harness.h b/src/test/harness.h
new file mode 100644
index 0000000..5a89942
--- /dev/null
+++ b/src/test/harness.h
@@ -0,0 +1,226 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+// Declarations for rock-bottom simple test harness.
+// Just include this file to use it.
+// Every test is presumed to have a command line of the form "foo [-v] [nthread]"
+// The default for nthread is 2.
+
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <new>
+#include "tbb/tbb_stddef.h"
+#include "harness_assert.h"
+
+#if __linux__||__APPLE__
+ #include <pthread.h>
+#elif _WIN32||WIN64
+ #include <windows.h>
+ #include <process.h>
+#else
+ #error unknown OS
+#endif
+
+static void ReportError( int line, const char* expression, const char * message ) {
+ fprintf(stderr,"Line %d, assertion %s: %s\n", line, expression, message ? message : "failed" );
+ abort();
+}
+
+#if !HARNESS_NO_PARSE_COMMAND_LINE
+//! Controls level of commentary.
+/** If true, makes the test print commentary. If false, test should print "done" and nothing more. */
+static bool Verbose;
+
+//! Minimum number of threads
+/** The default is 0, which is typically interpreted by tests as "run without TBB". */
+static int MinThread = 0;
+
+//! Maximum number of threads
+static int MaxThread = 2;
+
+//! NThread exists for backwards compatibility. Eventually it will be removed.
+#define NThread (MaxThread==MinThread?MaxThread : (ReportError(__LINE__,"NThread","thread range not supported"),-1))
+
+//! Parse command line of the form "name [-v] [nthread]"
+/** Sets Verbose, MinThread, and MaxThread accordingly.
+ The nthread argument can be a single number or a range of the form m:n.
+ A single number m is interpreted as if written m:m.
+ The numbers must be non-negative.
+ Clients often treat the value 0 as "run sequentially." */
+static void ParseCommandLine( int argc, char* argv[] ) {
+ int i = 1;
+ if( i<argc ) {
+ if( strcmp( argv[i], "-v" )==0 ) {
+ Verbose = true;
+ ++i;
+ }
+ }
+ if( i<argc ) {
+ char* endptr;
+ MinThread = strtol( argv[i], &endptr, 0 );
+ if( *endptr==':' )
+ MaxThread = strtol( endptr+1, &endptr, 0 );
+ else if( *endptr=='\0' )
+ MaxThread = MinThread;
+ if( *endptr!='\0' ) {
+ fprintf(stderr,"garbled nthread range\n");
+ exit(1);
+ }
+ if( MinThread<0 ) {
+ fprintf(stderr,"nthread must be nonnegative\n");
+ exit(1);
+ }
+ if( MaxThread<MinThread ) {
+ fprintf(stderr,"nthread range is backwards\n");
+ exit(1);
+ }
+ ++i;
+ }
+ if( i!=argc ) {
+ fprintf(stderr,"Usage: %s [-v] [nthread|minthread:maxthread]\n", argv[0] );
+ exit(1);
+ }
+}
+#endif /* HARNESS_NO_PARSE_COMMAND_LINE */\
+
+//! For internal use by template function NativeParallelFor
+template<typename Range, typename Body>
+class NativeParalleForTask {
+public:
+ NativeParalleForTask( const Range& range_, const Body& body_ ) :
+ range(range_),
+ body(body_)
+ {}
+
+ //! Start task
+ void start() {
+#if __linux__||__APPLE__
+ int status = pthread_create(&thread_id, NULL, thread_function, this);
+ ASSERT(0==status, "NativeParallelFor: pthread_create failed");
+#else
+ unsigned thread_id;
+ thread_handle = (HANDLE)_beginthreadex( NULL, 0, thread_function, this, 0, &thread_id );
+ ASSERT( thread_handle!=0, "NativeParallelFor: _beginthreadex failed" );
+#endif
+ }
+
+ //! Wait for task to finish
+ void wait_to_finish() {
+#if __linux__||__APPLE__
+ int status = pthread_join( thread_id, NULL );
+ ASSERT( !status, "pthread_join failed" );
+#else
+ DWORD status = WaitForSingleObject( thread_handle, INFINITE );
+ ASSERT( status!=WAIT_FAILED, "WaitForSingleObject failed" );
+ CloseHandle( thread_handle );
+#endif
+ }
+
+ //! Build (or precompute size of) array of tasks.
+ /** Computes number of of tasks required, plus index.
+ If array!=NULL, also constructs the necessary tasks, starting at array[index].
+ Top-level caller should let index default to 0. */
+ static size_t build_task_array( const Range& range, const Body& body, NativeParalleForTask* array, size_t index );
+private:
+#if __linux__||__APPLE__
+ pthread_t thread_id;
+#else
+ HANDLE thread_handle;
+#endif
+
+ //! Range over which task will invoke the body.
+ const Range range;
+
+ //! Body to invoke over the range.
+ const Body body;
+
+#if __linux__||__APPLE__
+ static void* thread_function(void* object)
+#else
+ static unsigned __stdcall thread_function( void* object )
+#endif
+ {
+ NativeParalleForTask& self = *static_cast<NativeParalleForTask*>(object);
+ (self.body)(self.range);
+ return 0;
+ }
+};
+
+template<typename Range,typename Body>
+size_t NativeParalleForTask<Range,Body>::build_task_array( const Range& range, const Body& body, NativeParalleForTask* array, size_t index ) {
+ if( !range.is_divisible() ) {
+ if( array ) {
+ new( &array[index] ) NativeParalleForTask(range,body);
+ }
+ return index+1;
+ } else {
+ Range r1 = range;
+ Range r2(r1,tbb::split());
+ return build_task_array( r2, body, array, build_task_array(r1,body,array,index) );
+ }
+}
+
+//! NativeParallelFor is like a TBB parallel_for.h, but with each invocation of Body in a separate thread.
+/** By using a blocked_range with a grainsize of 1, you can guarantee
+ that each iteration is performed by a separate thread */
+template <typename Range, typename Body>
+void NativeParallelFor(const Range& range, const Body& body) {
+ typedef NativeParalleForTask<Range,Body> task;
+
+ if( !range.empty() ) {
+ // Compute how many tasks are needed
+ size_t n = task::build_task_array(range,body,NULL,0);
+
+ // Allocate array to hold the tasks
+ task* array = static_cast<task*>(operator new( n*sizeof(task) ));
+
+ // Construct the tasks
+ size_t m = task::build_task_array(range,body,array,0);
+ ASSERT( m==n, "range splitting not deterministic" );
+
+ // Start the tasks
+ for( size_t j=0; j<n; ++j )
+ array[j].start();
+
+ // Wait for the tasks
+ for( size_t j=n; j>0; --j ) {
+ array[j-1].wait_to_finish();
+ array[j-1].~task();
+ }
+
+ // Deallocate the task array
+ operator delete(array);
+ }
+}
+
+//! The function to zero-initialize arrays; useful to avoid warnings
+template <typename T>
+void zero_fill(void* array, size_t N) {
+ memset(array, 0, sizeof(T)*N);
+}
diff --git a/src/test/harness_allocator.h b/src/test/harness_allocator.h
new file mode 100644
index 0000000..4838401
--- /dev/null
+++ b/src/test/harness_allocator.h
@@ -0,0 +1,196 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+// Declarations for simple estimate of the memory being used by a program.
+// Not yet implemented for Mac.
+// This header is an optional part of the test harness.
+// It assumes that "harness_assert.h" has already been included.
+
+#if __linux__
+#include <unistd.h>
+#elif __APPLE__
+#include <unistd.h>
+#elif _WIN32
+#include <windows.h>
+#endif
+#include <new>
+#include <tbb/atomic.h>
+
+template <typename base_alloc_t, typename count_t = tbb::atomic<size_t> >
+class static_counting_allocator : public base_alloc_t
+{
+public:
+ typedef typename base_alloc_t::pointer pointer;
+ typedef typename base_alloc_t::const_pointer const_pointer;
+ typedef typename base_alloc_t::reference reference;
+ typedef typename base_alloc_t::const_reference const_reference;
+ typedef typename base_alloc_t::value_type value_type;
+ typedef typename base_alloc_t::size_type size_type;
+ typedef typename base_alloc_t::difference_type difference_type;
+#if defined(_WIN64) && !defined(_CPPLIB_VER)
+ template<typename U, typename C = count_t> struct rebind {
+ typedef static_counting_allocator<base_alloc_t,C> other;
+ };
+#else
+ template<typename U, typename C = count_t> struct rebind {
+ typedef static_counting_allocator<typename base_alloc_t::template rebind<U>::other,C> other;
+ };
+#endif
+
+ static count_t items_allocated;
+ static count_t items_freed;
+ static count_t allocations;
+ static count_t frees;
+ static bool verbose;
+
+ static_counting_allocator() throw() { }
+
+ static_counting_allocator(const static_counting_allocator&) throw() { }
+
+ template<typename U, typename C>
+ static_counting_allocator(const static_counting_allocator<U, C>&) throw() { }
+
+ bool operator==(const static_counting_allocator &a) const
+ { return true; }
+
+ pointer allocate(const size_type n)
+ {
+ if(verbose) printf("\t+%d|", int(n));
+ allocations++;
+ items_allocated += n;
+ return base_alloc_t::allocate(n, pointer(0));
+ }
+
+ pointer allocate(const size_type n, const void * const)
+ { return allocate(n); }
+
+ void deallocate(const pointer ptr, const size_type n)
+ {
+ if(verbose) printf("\t-%d|", int(n));
+ frees++;
+ items_freed += n;
+ base_alloc_t::deallocate(ptr, n);
+ }
+
+ static void init_counters(bool v = false) {
+ verbose = v;
+ if(verbose) printf("\n------------------------------------------- Allocations:\n");
+ items_allocated = 0;
+ items_freed = 0;
+ allocations = 0;
+ frees = 0;
+ }
+};
+
+template <typename base_alloc_t, typename count_t>
+count_t static_counting_allocator<base_alloc_t, count_t>::items_allocated;
+template <typename base_alloc_t, typename count_t>
+count_t static_counting_allocator<base_alloc_t, count_t>::items_freed;
+template <typename base_alloc_t, typename count_t>
+count_t static_counting_allocator<base_alloc_t, count_t>::allocations;
+template <typename base_alloc_t, typename count_t>
+count_t static_counting_allocator<base_alloc_t, count_t>::frees;
+template <typename base_alloc_t, typename count_t>
+bool static_counting_allocator<base_alloc_t, count_t>::verbose;
+
+template <typename base_alloc_t, typename count_t = tbb::atomic<size_t> >
+class local_counting_allocator : public base_alloc_t
+{
+public:
+ typedef typename base_alloc_t::pointer pointer;
+ typedef typename base_alloc_t::const_pointer const_pointer;
+ typedef typename base_alloc_t::reference reference;
+ typedef typename base_alloc_t::const_reference const_reference;
+ typedef typename base_alloc_t::value_type value_type;
+ typedef typename base_alloc_t::size_type size_type;
+ typedef typename base_alloc_t::difference_type difference_type;
+#if defined(_WIN64) && !defined(_CPPLIB_VER)
+ template<typename U, typename C = count_t> struct rebind {
+ typedef local_counting_allocator<base_alloc_t,C> other;
+ };
+#else
+ template<typename U, typename C = count_t> struct rebind {
+ typedef local_counting_allocator<typename base_alloc_t::template rebind<U>::other,C> other;
+ };
+#endif
+
+ count_t items_allocated;
+ count_t items_freed;
+ count_t allocations;
+ count_t frees;
+
+ local_counting_allocator() throw()
+ : items_allocated(0)
+ , items_freed(0)
+ , allocations(0)
+ , frees(0)
+ { }
+
+ local_counting_allocator(const local_counting_allocator &a) throw()
+ : items_allocated(a.items_allocated)
+ , items_freed(a.items_freed)
+ , allocations(a.allocations)
+ , frees(a.frees)
+ { }
+
+ template<typename U, typename C>
+ local_counting_allocator(const static_counting_allocator<U,C> &) throw() {
+ items_allocated = static_counting_allocator<U,C>::items_allocated;
+ items_freed = static_counting_allocator<U,C>::items_freed;
+ allocations = static_counting_allocator<U,C>::allocations;
+ frees = static_counting_allocator<U,C>::frees;
+ }
+
+ template<typename U, typename C>
+ local_counting_allocator(const local_counting_allocator<U,C>&) throw()
+ : items_allocated(0)
+ , items_freed(0)
+ , allocations(0)
+ , frees(0)
+ { }
+
+ bool operator==(const local_counting_allocator &a) const
+ { return &a == this; }
+
+ pointer allocate(const size_type n)
+ {
+ ++allocations;
+ items_allocated += n;
+ return base_alloc_t::allocate(n, pointer(0));
+ }
+
+ pointer allocate(const size_type n, const void * const)
+ { return allocate(n); }
+
+ void deallocate(const pointer ptr, const size_type n)
+ {
+ ++frees;
+ items_freed += n;
+ base_alloc_t::deallocate(ptr, n);
+ }
+};
diff --git a/src/test/harness_assert.h b/src/test/harness_assert.h
new file mode 100644
index 0000000..54e5c33
--- /dev/null
+++ b/src/test/harness_assert.h
@@ -0,0 +1,45 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+// Just the assertion portion of the harness.
+// This is useful for writing portions of tests that include
+// the minimal number of necessary header files.
+//
+// The full "harness.h" must be included later.
+
+#ifndef harness_assert_H
+#define harness_assert_H
+
+static void ReportError( int line, const char* expression, const char * message );
+#define ASSERT(p,message) ((p)?(void)0:ReportError(__LINE__,#p,message))
+
+//! Compile-time error if x and y have different types
+template<typename T>
+void AssertSameType( const T& /*x*/, const T& /*y*/ ) {}
+
+#endif /* harness_assert_H */
diff --git a/src/test/harness_bad_expr.h b/src/test/harness_bad_expr.h
new file mode 100644
index 0000000..c7567d5
--- /dev/null
+++ b/src/test/harness_bad_expr.h
@@ -0,0 +1,79 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+// Declarations for checking __TBB_ASSERT checks inside TBB.
+// This header is an optional part of the test harness.
+// It assumes that "harness.h" has already been included.
+
+//! Check that expression x raises assertion failure with message containing given substring.
+/** Assumes that tbb::set_assertion_handler( AssertionFailureHandler ) was called earlier. */
+#define TRY_BAD_EXPR(x,substr) \
+ { \
+ const char* message = NULL; \
+ bool okay = false; \
+ try { \
+ x; \
+ } catch( AssertionFailure a ) { \
+ okay = true; \
+ message = a.message; \
+ } \
+ CheckAssertionFailure(__LINE__,#x,okay,message,substr); \
+ }
+
+struct AssertionFailure {
+ const char* const message;
+ AssertionFailure( const char* filename, int line, const char* expression, const char* comment );
+};
+
+AssertionFailure::AssertionFailure( const char* filename, int line, const char* expression, const char* comment ) :
+ message(comment)
+{
+ ASSERT(filename,"missing filename");
+ ASSERT(0<line,"line number must be positive");
+ // All of our current files have fewer than 3000 lines.
+ ASSERT(line<3000,"dubiously high line number");
+ ASSERT(expression,"missing expression");
+}
+
+void AssertionFailureHandler( const char* filename, int line, const char* expression, const char* comment ) {
+ throw AssertionFailure(filename,line,expression,comment);
+}
+
+void CheckAssertionFailure( int line, const char* expression, bool okay, const char* message, const char* substr ) {
+ if( !okay ) {
+ fprintf(stderr,"Line %d, %s failed to fail\n", line, expression );
+ abort();
+ } else if( !message ) {
+ fprintf(stderr,"Line %d, %s failed without a message\n", line, expression );
+ abort();
+ } else if( strstr(message,substr)==0 ) {
+ fprintf(stderr,"Line %d, %s failed with message '%s' missing substring '%s'\n", __LINE__, expression, message, substr );
+ abort();
+ }
+}
+
diff --git a/src/test/harness_cpu.h b/src/test/harness_cpu.h
new file mode 100644
index 0000000..fdb8d03
--- /dev/null
+++ b/src/test/harness_cpu.h
@@ -0,0 +1,86 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+// Declarations for simple estimate of CPU time being used by a program.
+// This header is an optional part of the test harness.
+// It assumes that "harness_assert.h" has already been included.
+
+#if _WIN32
+#include <windows.h>
+#else
+#include <sys/time.h>
+#include <sys/resource.h>
+#endif
+
+//! Return time (in seconds) spent by the current process in user mode.
+/* Returns 0 if not implemented on platform. */
+static double GetCPUUserTime() {
+#if _WIN32
+ FILETIME times[4];
+ bool status = GetProcessTimes(GetCurrentProcess(), times, times+1, times+2, times+3)!=0;
+ ASSERT( status, NULL );
+ LARGE_INTEGER usrtime;
+ usrtime.LowPart = times[3].dwLowDateTime;
+ usrtime.HighPart = times[3].dwHighDateTime;
+ return double(usrtime.QuadPart)*1E-7;
+#else
+ // Generic UNIX, including __linux__ or __APPLE__
+ struct rusage resources;
+ bool status = getrusage(RUSAGE_SELF, &resources)==0;
+ ASSERT( status, NULL );
+ return (double(resources.ru_utime.tv_sec)*1E6 + double(resources.ru_utime.tv_usec))*1E-6;
+#endif
+}
+
+#include "tbb/tick_count.h"
+#include <cstdio>
+
+// The resolution of GetCPUUserTime is 10-15 ms or so; waittime should be a few times bigger.
+const double WAITTIME = 0.1; // in seconds, i.e. 100 ms
+
+static void TestCPUUserTime( int nworkers ) {
+ static double minimal_waittime = WAITTIME;
+ if( !nworkers ) return;
+
+ // Test that all workers sleep when no work
+ // So far this will not detect the issue on systems with only one processing core
+ double waittime;
+ double usrtime = GetCPUUserTime();
+ tbb::tick_count stamp = tbb::tick_count::now();
+ while( (waittime = (tbb::tick_count::now()-stamp).seconds()) < minimal_waittime )
+ ; // Wait for workers to sleep
+ usrtime = GetCPUUserTime() - usrtime;
+
+ double avg_worker_usrtime = (usrtime-waittime)/nworkers;
+ if( avg_worker_usrtime > waittime/2 )
+ fprintf(stderr, "ERROR: %d worker threads are spinning; waittime: %g; usrtime: %g; avg worker usrtime: %g\n",
+ nworkers, waittime, usrtime, avg_worker_usrtime);
+ else if( Verbose )
+ printf("%d worker threads; waittime: %g; usrtime: %g; avg worker usrtime: %g\n",
+ nworkers, waittime, usrtime, avg_worker_usrtime);
+}
diff --git a/src/test/harness_memory.h b/src/test/harness_memory.h
new file mode 100644
index 0000000..b132cc6
--- /dev/null
+++ b/src/test/harness_memory.h
@@ -0,0 +1,86 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+// Declarations for simple estimate of the memory being used by a program.
+// Not yet implemented for Mac.
+// This header is an optional part of the test harness.
+// It assumes that "harness_assert.h" has already been included.
+
+#if __linux__
+#include <sys/resource.h>
+#include <unistd.h>
+
+#elif __APPLE__
+#include <unistd.h>
+#include <mach/mach.h>
+#include <mach/shared_memory_server.h>
+#if SHARED_TEXT_REGION_SIZE || SHARED_DATA_REGION_SIZE
+const size_t shared_size = SHARED_TEXT_REGION_SIZE+SHARED_DATA_REGION_SIZE;
+#else
+const size_t shared_size = 0;
+#endif
+
+#elif _WIN32
+#include <windows.h>
+#include <psapi.h>
+#pragma comment(lib, "psapi")
+#endif
+
+//! Return estimate of number of bytes of memory that this program is currently using.
+/* Returns 0 if not implemented on platform. */
+static size_t GetMemoryUsage() {
+#if __linux__
+ FILE* statsfile = fopen("/proc/self/statm","r");
+ size_t pagesize = getpagesize();
+ ASSERT( statsfile, NULL );
+ long total_mem;
+ fscanf(statsfile,"%lu",&total_mem);
+ fclose(statsfile);
+ return total_mem*pagesize;
+#elif __APPLE__
+ task_t cur_task;
+ kern_return_t status;
+ // port kernel current task object to user space
+ status = task_for_pid(current_task(), getpid(), &cur_task);
+ ASSERT( status==KERN_SUCCESS, NULL);
+ // get task info
+ task_basic_info info;
+ mach_msg_type_number_t msg_type = TASK_BASIC_INFO_COUNT;
+ status = task_info(cur_task, TASK_BASIC_INFO, reinterpret_cast<task_info_t>(&info), &msg_type);
+ ASSERT( status==KERN_SUCCESS, NULL);
+ return info.virtual_size - shared_size;
+#elif _WIN32
+ PROCESS_MEMORY_COUNTERS mem;
+ bool status = GetProcessMemoryInfo(GetCurrentProcess(), &mem, sizeof(mem))!=0;
+ ASSERT( status, NULL );
+ return mem.PagefileUsage;
+#else
+ return 0;
+#endif
+}
+
diff --git a/src/test/test_ScalableAllocator.cpp b/src/test/test_ScalableAllocator.cpp
new file mode 100644
index 0000000..1d0e805
--- /dev/null
+++ b/src/test/test_ScalableAllocator.cpp
@@ -0,0 +1,44 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+// Test whether scalable_allocator complies with the requirements in 20.1.5 of ISO C++ Standard (1998).
+
+#include "tbb/scalable_allocator.h"
+
+//namespace TBB = ThreadingBuildingBlocks;
+
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+// the real body of the test is there:
+#include "test/test_allocator.h"
+
+int main(void)
+{
+ int result = TestMain<tbb::scalable_allocator<void> >();
+ printf("done\n");
+ return result;
+}
diff --git a/src/test/test_ScalableAllocator_STL.cpp b/src/test/test_ScalableAllocator_STL.cpp
new file mode 100644
index 0000000..d213b5c
--- /dev/null
+++ b/src/test/test_ScalableAllocator_STL.cpp
@@ -0,0 +1,52 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+// Test whether scalable_allocator works with some of the host's STL containers.
+
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "tbb/scalable_allocator.h"
+#include "test/test_allocator.h"
+
+#include <vector>
+#include <list>
+#include <deque>
+
+int main() {
+ TestContainer<std::vector<int,tbb::scalable_allocator<int> > >();
+#if defined(_WIN64) && !defined(_CPPLIB_VER)
+ // Microsoft incorrectly typed the first argument to std::allocator<T>::deallocate
+ // as (void*), and depends upon this error in their early versions of list and deque.
+ printf("Warning: compatibility of NFS_Allocator with list and deque not tested\n"
+ "because they depend on error that Microsoft corrected later.\n");
+#else
+ TestContainer<std::list<int,tbb::scalable_allocator<int> > >();
+ TestContainer<std::deque<int,tbb::scalable_allocator<int> > >();
+#endif
+ printf("done\n");
+ return 0;
+}
diff --git a/src/test/test_aligned_space.cpp b/src/test/test_aligned_space.cpp
new file mode 100644
index 0000000..89177a4
--- /dev/null
+++ b/src/test/test_aligned_space.cpp
@@ -0,0 +1,85 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+//! Wrapper around T where all members are private.
+/** Used to prove that aligned_space<T,N> never calls member of T. */
+template<typename T>
+class Minimal {
+ Minimal();
+ Minimal( Minimal& min );
+ ~Minimal();
+ void operator=( const Minimal& );
+#if __GNUC__
+ /** If compiling with -Werror, GNU C++ issues an error if all constructors of
+ a class are private. Therefore, we add a fake friend. */
+ friend class FakeFriend;
+#endif /* __GNUC__ */
+};
+
+#include "tbb/aligned_space.h"
+#include "harness_assert.h"
+
+template<typename U, size_t N>
+void TestAlignedSpaceN() {
+ typedef Minimal<U> T;
+ tbb::aligned_space< T ,N> space;
+ AssertSameType( static_cast< T *>(0), space.begin() );
+ AssertSameType( static_cast< T *>(0), space.end() );
+ ASSERT( reinterpret_cast<void *>(space.begin())==reinterpret_cast< void *>(&space), NULL );
+ ASSERT( space.end()-space.begin()==N, NULL );
+ ASSERT( reinterpret_cast<void *>(space.begin())>=reinterpret_cast< void *>(&space), NULL );
+ ASSERT( space.end()<=reinterpret_cast< T *>(&space+1), NULL );
+}
+
+template<typename T>
+void TestAlignedSpace() {
+ TestAlignedSpaceN<T,1>();
+ TestAlignedSpaceN<T,2>();
+ TestAlignedSpaceN<T,3>();
+ TestAlignedSpaceN<T,4>();
+ TestAlignedSpaceN<T,5>();
+ TestAlignedSpaceN<T,6>();
+ TestAlignedSpaceN<T,7>();
+ TestAlignedSpaceN<T,8>();
+}
+
+#include <stdio.h>
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "harness.h"
+
+int main() {
+ TestAlignedSpace<char>();
+ TestAlignedSpace<short>();
+ TestAlignedSpace<int>();
+ TestAlignedSpace<float>();
+ TestAlignedSpace<double>();
+ TestAlignedSpace<long double>();
+ TestAlignedSpace<size_t>();
+ printf("done\n");
+ return 0;
+}
diff --git a/src/test/test_allocator.h b/src/test/test_allocator.h
new file mode 100644
index 0000000..4b3062c
--- /dev/null
+++ b/src/test/test_allocator.h
@@ -0,0 +1,221 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+// Basic testing of an allocator
+// Tests against requirements in 20.1.5 of ISO C++ Standard (1998).
+// Does not check for thread safety or false sharing issues.
+//
+// Tests for compatibility with the host's STL are in
+// test_Allocator_STL.h. Those tests are in a separate file
+// because they bring in lots of STL headers, and the tests here
+// are supposed to work in the abscense of STL.
+
+#include "harness.h"
+
+int NumberOfFoo;
+
+template<typename T, size_t N>
+struct Foo {
+ T foo_array[N];
+ Foo() {
+ zero_fill<T>(foo_array, N);
+ ++NumberOfFoo;
+ }
+ Foo( const Foo& x ) {
+ *this = x;
+ ++NumberOfFoo;
+ }
+ ~Foo() {
+ --NumberOfFoo;
+ }
+};
+
+inline char PseudoRandomValue( size_t j, size_t k ) {
+ return char(j*3 ^ j>>4 ^ k);
+}
+
+//! T is type and A is allocator for that type
+template<typename T, typename A>
+void TestBasic( A& a ) {
+ T x;
+ const T cx = T();
+
+ // See Table 32 in ISO ++ Standard
+ typename A::pointer px = &x;
+ typename A::const_pointer pcx = &cx;
+
+ typename A::reference rx = x;
+ ASSERT( &rx==&x, NULL );
+
+ typename A::const_reference rcx = cx;
+ ASSERT( &rcx==&cx, NULL );
+
+ typename A::value_type v = x;
+
+ typename A::size_type size;
+ size = 0;
+ --size;
+ ASSERT( size>0, "not an unsigned integral type?" );
+
+ typename A::difference_type difference;
+ difference = 0;
+ --difference;
+ ASSERT( difference<0, "not an signed integral type?" );
+
+ // "rebind" tested by our caller
+
+ ASSERT( a.address(rx)==px, NULL );
+
+ ASSERT( a.address(rcx)==pcx, NULL );
+
+ typename A::pointer array[100];
+ size_t sizeof_T = sizeof(T);
+ for( size_t k=0; k<100; ++k ) {
+ array[k] = k&1 ? a.allocate(k,array[0]) : a.allocate(k);
+ char* s = reinterpret_cast<char*>(reinterpret_cast<void*>(array[k]));
+ for( size_t j=0; j<k*sizeof_T; ++j )
+ s[j] = PseudoRandomValue(j,k);
+ }
+
+ // Test "a.deallocate(p,n)
+ for( size_t k=0; k<100; ++k ) {
+ char* s = reinterpret_cast<char*>(reinterpret_cast<void*>(array[k]));
+ for( size_t j=0; j<k*sizeof_T; ++j )
+ ASSERT( s[j] == PseudoRandomValue(j,k), NULL );
+ a.deallocate(array[k],k);
+ }
+
+ // Test "a.max_size()"
+ AssertSameType( a.max_size(), typename A::size_type(0) );
+ // Following assertion catches case where max_size() is so large that computation of
+ // number of bytes for such an allocation would overflow size_type.
+ ASSERT( a.max_size()*typename A::size_type(sizeof(T))>=a.max_size(), "max_size larger than reasonable" );
+
+ // Test "a1==a2"
+ A a1, a2;
+ ASSERT( a1==a2, NULL );
+
+ // Test "a1!=a2"
+ ASSERT( !(a1!=a2), NULL );
+
+ // Test "a.construct(p,t)"
+ int n = NumberOfFoo;
+ typename A::pointer p = a.allocate(1);
+ a.construct( p, cx );
+ ASSERT( NumberOfFoo==n+1, "constructor for Foo not called?" );
+
+ // Test "a.destroy(p)"
+ a.destroy( p );
+ ASSERT( NumberOfFoo==n, "destructor for Foo not called?" );
+ a.deallocate(p,1);
+}
+
+#include "tbb/blocked_range.h"
+
+// A is an allocator for some type
+template<typename A>
+struct Body {
+ static const size_t max_k = 100000;
+ A &a;
+ Body(A &a_) : a(a_) {}
+ void check_allocate( typename A::pointer array[], size_t i, size_t t ) const
+ {
+ ASSERT(array[i] == 0, NULL);
+ size_t size = i * (i&3);
+ array[i] = i&1 ? a.allocate(size, array[i>>3]) : a.allocate(size);
+ char* s = reinterpret_cast<char*>(reinterpret_cast<void*>(array[i]));
+ for( size_t j=0; j<size*sizeof(A); ++j )
+ s[j] = PseudoRandomValue(i, t);
+ }
+
+ void check_deallocate( typename A::pointer array[], size_t i, size_t t ) const
+ {
+ ASSERT(array[i] != 0, NULL);
+ size_t size = i * (i&3);
+ char* s = reinterpret_cast<char*>(reinterpret_cast<void*>(array[i]));
+ for( size_t j=0; j<size*sizeof(A); ++j )
+ ASSERT( s[j] == PseudoRandomValue(i, t), "Thread safety test failed" );
+ a.deallocate(array[i], size);
+ array[i] = 0;
+ }
+
+ void operator()( const tbb::blocked_range<size_t>& r ) const {
+ ASSERT( r.begin()+1==r.end(), NULL );
+
+ typename A::pointer array[256];
+ size_t thread_id = r.begin();
+
+ for( size_t k=0; k<256; ++k )
+ array[k] = 0;
+ for( size_t k=0; k<max_k; ++k ) {
+ size_t i = static_cast<unsigned char>(PseudoRandomValue(k,thread_id));
+ if(!array[i]) check_allocate(array, i, thread_id);
+ else check_deallocate(array, i, thread_id);
+ }
+ for( size_t k=0; k<256; ++k )
+ if(array[k])
+ check_deallocate(array, k, thread_id);
+ }
+};
+
+// A is an allocator for some type, and U is another type
+template<typename A, typename U>
+void Test() {
+ typename A::template rebind<U>::other b;
+ TestBasic<U>(b);
+
+ A a(b);
+ TestBasic<typename A::value_type>(a);
+
+ // thread safety
+ int n = NumberOfFoo;
+ NativeParallelFor( tbb::blocked_range<size_t>(0,4,1), Body<A>(a) );
+ ASSERT( NumberOfFoo==n, "Allocate/deallocate count mismatched" );
+
+ ASSERT( a==b, NULL );
+ ASSERT( !(a!=b), NULL );
+}
+
+template<typename Allocator>
+int TestMain() {
+ Test<typename Allocator::template rebind<Foo<char,1> >::other, Foo<int,17> >();
+ Test<typename Allocator::template rebind<Foo<double,1> >::other, Foo<float,23> >();
+ return 0;
+}
+
+template<typename Container>
+void TestContainer() {
+ Container c;
+ for( int i=0; i<1000; ++i )
+ c.push_back(i*i);
+ typename Container::const_iterator p = c.begin();
+ for( int i=0; i<1000; ++i ) {
+ ASSERT( *p==i*i, NULL );
+ ++p;
+ }
+}
diff --git a/src/test/test_assembly.cpp b/src/test/test_assembly.cpp
new file mode 100644
index 0000000..8863551
--- /dev/null
+++ b/src/test/test_assembly.cpp
@@ -0,0 +1,300 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+// Program for basic correctness testing of assembly-language routines.
+// This program deliberately #includes ../internal/task.cpp so that
+// it can get intimate access to the scheduler.
+
+#define TEST_ASSEMBLY_ROUTINES 1
+
+#include "../tbb/task.cpp"
+#include <new>
+#include "harness.h"
+
+namespace tbb {
+
+namespace internal {
+
+class TestTask: public task {
+public:
+ /*override*/ task* execute() {
+ return NULL;
+ }
+ const char* name;
+ TestTask( const char* name_ ) : name(name_) {}
+};
+
+void GenericScheduler::test_assembly_routines() {
+ try_enter_arena();
+#if IMPROVED_GATING
+ mark_pool_full();
+#else
+ ASSERT( open_gate==&arena->prefix().gate, NULL );
+ open_gate->open();
+ open_gate = NULL;
+#endif /*IMPROVED_GATING*/
+ release_task_pool();
+ ASSERT( assert_okay(), NULL );
+ long steal_count = 0;
+ long get_count = 0;
+ const depth_type n = 5;
+ const depth_type array_size_proxy = array_size; // using proxy to reduce compilation warnings
+ ASSERT( array_size-array_size_proxy==0, NULL ); // check validity of the replacement
+ ASSERT( array_size_proxy>=n, NULL );
+ // Loop over insertion levels
+ for( depth_type i=0; i<n; ++i )
+ // Loop over values for "deepest"
+ for( depth_type d=-1; d<n; ++d )
+ // Loop over values for "shallowest"
+ for( depth_type s=0; s<n; ++s )
+ // Loop over depth limits
+ for( depth_type limit=0; limit<n; ++limit )
+ // Loop over whether to insert or not
+ for( int insert=0; insert<2; ++insert )
+ // Loop over whether to steal or get
+ for( int steal=0; steal<2; ++steal ) {
+ ASSERT( assert_okay(), NULL );
+ task** array = dummy_slot.task_pool->array;
+ for( depth_type k=0; k<array_size_proxy; ++k )
+ array[k] = NULL;
+ dummy_slot.task_pool->prefix().steal_begin = s;
+ ASSERT( assert_okay(), NULL );
+
+ TestTask& w = *new( task::allocate_root() ) TestTask("w");
+ ASSERT( assert_okay(), NULL );
+ if( d>=0 ) {
+ w.prefix().depth = int(d);
+ w.prefix().next = NULL;
+ w.prefix().state = task::ready;
+ dummy_slot.task_pool->array[d] = &w;
+ }
+ deepest = d;
+ arena_slot->steal_end = 2*d;
+
+ ASSERT( assert_okay(), NULL );
+ TestTask& x = *new( task::allocate_root() ) TestTask("x");
+ TestTask& y = *new( task::allocate_root() ) TestTask("y");
+ TestTask& z = *new( task::allocate_root() ) TestTask("z");
+ ASSERT( assert_okay(), NULL );
+ x.prefix().next = &y;
+ y.prefix().next = &z;
+ z.prefix().next = NULL;
+ ASSERT( x.prefix().next==&y, NULL );
+ for( task* p=&x; p; p=p->prefix().next )
+ p->prefix().depth = int(i);
+ ASSERT( assert_okay(), NULL );
+ z.prefix().next = (task*)(void*)-1;
+ if( insert ) {
+ spawn( x, z.prefix().next );
+ ASSERT( assert_okay(), NULL );
+ depth_type expected_deepest = d>=i ? d : i;
+ ASSERT( deepest==expected_deepest, NULL );
+ depth_type expected_shallowest = i<=s ? i : s;
+ ASSERT( dummy_slot.task_pool->prefix().steal_begin==expected_shallowest, NULL );
+ ASSERT( array[i]==&x, NULL );
+ ASSERT( x.prefix().next==&y, NULL );
+ }
+ if( steal ) {
+ task* expected_task = NULL;
+ depth_type shallowest = dummy_slot.task_pool->prefix().steal_begin;
+ depth_type expected_shallowest = shallowest;
+ for( depth_type k=shallowest; k<array_size_proxy; ++k ) {
+ if( k>=limit && array[k] ) {
+ expected_task = array[k];
+ if( shallowest>=limit )
+ expected_shallowest = k;
+ break;
+ }
+ }
+ ASSERT( assert_okay(), NULL );
+ task* t = steal_task( *arena_slot, limit );
+ ASSERT( (arena_slot->steal_end&1)==0, "forgot to release lock?" );
+ ASSERT( assert_okay(), NULL );
+ ASSERT( t==expected_task, NULL );
+ shallowest = dummy_slot.task_pool->prefix().steal_begin;
+ ASSERT( shallowest==expected_shallowest, NULL );
+ ++steal_count;
+ } else {
+ task* expected_task = NULL;
+ for( depth_type k=array_size_proxy-1; k>=limit; --k ) {
+ if( array[k] ) {
+ expected_task = array[k];
+ ASSERT( deepest==k, NULL );
+ break;
+ }
+ }
+ ASSERT( assert_okay(), NULL );
+ task* t = get_task( limit );
+ ASSERT( (arena_slot->steal_end&1)==0, "forgot to release lock?" );
+ ASSERT( assert_okay(), NULL );
+ ASSERT( t==expected_task, NULL );
+ ++get_count;
+ }
+ }
+ ASSERT( array_size-array_size_proxy==0, NULL ); // check for any side effects affecting array_size
+ if( Verbose )
+ printf("%ld successful gets and %ld successful steals\n", get_count, steal_count );
+}
+
+//! Test __TBB_CompareExchange
+static void TestCompareExchange() {
+ ASSERT( intptr(-10)<10, "intptr not a signed integral type?" );
+ if( Verbose )
+ printf("testing __TBB_CompareExchange\n");
+ for( intptr a=-10; a<10; ++a )
+ for( intptr b=-10; b<10; ++b )
+ for( intptr c=-10; c<10; ++c ) {
+ intptr x = a;
+ intptr y = __TBB_CompareAndSwapW(&x,b,c);
+ ASSERT( y==a, NULL );
+ if( a==c )
+ ASSERT( x==b, NULL );
+ else
+ ASSERT( x==a, NULL );
+ }
+}
+
+//! Test __TBB___TBB_FetchAndIncrement and __TBB___TBB_FetchAndDecrement
+static void TestAtomicCounter() {
+ // "canary" is a value used to detect illegal overwrites.
+ const internal::reference_count canary = ~(internal::uintptr)0/3;
+ if( Verbose )
+ printf("testing __TBB_FetchAndIncrement\n");
+ struct {
+ internal::reference_count prefix, i, suffix;
+ } x;
+ x.prefix = canary;
+ x.i = 0;
+ x.suffix = canary;
+ for( int k=0; k<10; ++k ) {
+ internal::reference_count j = __TBB_FetchAndIncrementWacquire((volatile void *)&x.i);
+ ASSERT( x.prefix==canary, NULL );
+ ASSERT( x.suffix==canary, NULL );
+ ASSERT( x.i==k+1, NULL );
+ ASSERT( j==k, NULL );
+ }
+ if( Verbose )
+ printf("testing __TBB_FetchAndDecrement\n");
+ x.i = 10;
+ for( int k=10; k>0; --k ) {
+ internal::reference_count j = __TBB_FetchAndDecrementWrelease((volatile void *)&x.i);
+ ASSERT( j==k, NULL );
+ ASSERT( x.i==k-1, NULL );
+ ASSERT( x.prefix==canary, NULL );
+ ASSERT( x.suffix==canary, NULL );
+ }
+}
+
+//! Test __TBB_AtomicOR instruction.
+void TestAtomicOr() {
+ uintptr x[3] = {0,0,0};
+ uintptr y = 0;
+ uintptr z = 0;
+ for( int i=0; i<20; ++i ) {
+ y |= z;
+ __TBB_AtomicOR( &x[1], z );
+ ASSERT( x[0]==0, "__TBB_AtomicOR corrupted nearby bytes" );
+ ASSERT( x[1]==y, "__TBB_AtomicOR did not do OR?" );
+ ASSERT( x[2]==0, "__TBB_AtomicOR corrupted nearby bytes" );
+ z = i==0 ? 1 : z*(i+1);
+ }
+}
+
+static void TestTinyLock() {
+ if( Verbose )
+ printf("testing __TBB_LockByte\n");
+ unsigned char flags[16];
+ for( int i=0; i<16; ++i )
+ flags[i] = i;
+ flags[8] = 0;
+ __TBB_LockByte(flags[8]);
+ for( int i=0; i<16; ++i )
+ ASSERT( flags[i]==(i==8?1:i), NULL );
+}
+
+static void TestLog2() {
+ if( Verbose )
+ printf("testing __TBB_Log2\n");
+ for( uintptr_t i=1; i; i<<=1 ) {
+ for( uintptr_t j=1; j<1<<16; ++j ) {
+ if( uintptr_t k = i*j ) {
+ uintptr_t actual = __TBB_Log2(k);
+ const uintptr_t ONE = 1; // warning suppression again
+ ASSERT( k >= ONE<<actual, NULL );
+ ASSERT( k>>1 < ONE<<actual, NULL );
+ }
+ }
+ }
+}
+
+static void TestPause() {
+ if( Verbose )
+ printf("testing __TBB_Pause\n");
+ __TBB_Pause(1);
+}
+
+static void TestIsGenuineIntel() {
+ if( !IsGenuineIntel() )
+ printf("Warning: not running on genuine Intel hardware\n");
+}
+
+} // namespace internal
+} // namespace tbb
+
+using namespace tbb;
+
+int main( int argc, char* argv[] ) {
+#if _WIN32||_WIN64
+ // This initialization is normally done by DllMain in task.cpp,
+ // but because this test directly includes task.cpp,
+ // the initialization must be done explicitly.
+ InitializeCriticalSection(&OneTimeInitializationCriticalSection);
+#endif /* _WIN32||_WIN64 */
+ try {
+ ParseCommandLine( argc, argv );
+ TestIsGenuineIntel();
+ TestLog2();
+ TestTinyLock();
+ TestCompareExchange();
+ TestAtomicCounter();
+ TestAtomicOr();
+ TestPause();
+
+ task_scheduler_init init(1);
+
+ if( Verbose )
+ printf("testing __TBB_(scheduler assists)\n");
+ GenericScheduler* scheduler = GetThreadSpecific();
+ scheduler->test_assembly_routines();
+
+ } catch(...) {
+ ASSERT(0,"unexpected exception");
+ }
+ printf("done\n");
+ return 0;
+}
diff --git a/src/test/test_atomic.cpp b/src/test/test_atomic.cpp
new file mode 100644
index 0000000..9c8163e
--- /dev/null
+++ b/src/test/test_atomic.cpp
@@ -0,0 +1,443 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+// Put tbb/atomic.h first, so if it is missing a prerequisite header, we find out about it.
+// The tests here do *not* test for atomicity, just serial correctness. */
+
+#include "tbb/atomic.h"
+#include "harness_assert.h"
+
+//! Structure that holds an atomic<T> and some guard bytes around it.
+template<typename T>
+struct TestStruct {
+ T prefix;
+ tbb::atomic<T> counter;
+ T suffix;
+ TestStruct( T i ) : prefix(T(0x1234)), suffix(T(0x5678)) {
+ counter = i;
+ ASSERT( sizeof(*this)==3*sizeof(T), NULL );
+ }
+ ~TestStruct() {
+ // Check for writes outside the counter.
+ ASSERT( prefix==T(0x1234), NULL );
+ ASSERT( suffix==T(0x5678), NULL );
+ }
+};
+
+//! Test compare_and_swap template members of class atomic<T> for memory_semantics=M
+template<typename T,tbb::memory_semantics M>
+void TestCompareAndSwapAcquireRelease( T i, T j, T k ) {
+ ASSERT( i!=j && j!=k, "values must be distinct" );
+ TestStruct<T> x(i);
+ T old = x.counter.template compare_and_swap<M>( j, k );
+ ASSERT( old==i, NULL );
+ ASSERT( x.counter==i, "old value not retained" );
+ old = x.counter.template compare_and_swap<M>( j, i );
+ ASSERT( old==i, NULL );
+ ASSERT( x.counter==j, "value not updated?" );
+}
+
+//! i, j, k must be different values
+template<typename T>
+void TestCompareAndSwap( T i, T j, T k ) {
+ ASSERT( i!=j && j!=k, "values must be distinct" );
+ TestStruct<T> x(i);
+ T old = x.counter.compare_and_swap( j, k );
+ ASSERT( old==i, NULL );
+ ASSERT( x.counter==i, "old value not retained" );
+ old = x.counter.compare_and_swap( j, i );
+ ASSERT( old==i, NULL );
+ if( x.counter==i ) {
+ ASSERT( x.counter==j, "value not updated?" );
+ } else {
+ ASSERT( x.counter==j, "value trashed" );
+ }
+ TestCompareAndSwapAcquireRelease<T,tbb::acquire>(i,j,k);
+ TestCompareAndSwapAcquireRelease<T,tbb::release>(i,j,k);
+}
+
+//! memory_semantics variation on TestFetchAndStore
+template<typename T, tbb::memory_semantics M>
+void TestFetchAndStoreAcquireRelease( T i, T j ) {
+ ASSERT( i!=j, "values must be distinct" );
+ TestStruct<T> x(i);
+ T old = x.counter.template fetch_and_store<M>( j );
+ ASSERT( old==i, NULL );
+ ASSERT( x.counter==j, NULL );
+}
+
+//! i and j must be different values
+template<typename T>
+void TestFetchAndStore( T i, T j ) {
+ ASSERT( i!=j, "values must be distinct" );
+ TestStruct<T> x(i);
+ T old = x.counter.fetch_and_store( j );
+ ASSERT( old==i, NULL );
+ ASSERT( x.counter==j, NULL );
+ TestFetchAndStoreAcquireRelease<T,tbb::acquire>(i,j);
+ TestFetchAndStoreAcquireRelease<T,tbb::release>(i,j);
+}
+
+//! Test fetch_and_add members of class atomic<T> for memory_semantics=M
+template<typename T,tbb::memory_semantics M>
+void TestFetchAndAddAcquireRelease( T i ) {
+ TestStruct<T> x(i);
+ T actual;
+ T expected = i;
+
+ // Test fetch_and_add member template
+ for( int j=0; j<10; ++j ) {
+ actual = x.counter.fetch_and_add(j);
+ ASSERT( actual==expected, NULL );
+ expected += j;
+ }
+ for( int j=0; j<10; ++j ) {
+ actual = x.counter.fetch_and_add(-j);
+ ASSERT( actual==expected, NULL );
+ expected -= j;
+ }
+
+ // Test fetch_and_increment member template
+ ASSERT( x.counter==i, NULL );
+ actual = x.counter.template fetch_and_increment<M>();
+ ASSERT( actual==i, NULL );
+ ASSERT( x.counter==T(i+1), NULL );
+
+ // Test fetch_and_decrement member template
+ actual = x.counter.template fetch_and_decrement<M>();
+ ASSERT( actual==T(i+1), NULL );
+ ASSERT( x.counter==i, NULL );
+}
+
+//! Test fetch_and_add and related operators
+template<typename T>
+void TestFetchAndAdd( T i ) {
+ TestStruct<T> x(i);
+ T value;
+ value = ++x.counter;
+ ASSERT( value==T(i+1), NULL );
+ value = x.counter++;
+ ASSERT( value==T(i+1), NULL );
+ value = x.counter--;
+ ASSERT( value==T(i+2), NULL );
+ value = --x.counter;
+ ASSERT( value==i, NULL );
+ T actual;
+ T expected = i;
+ for( int j=-100; j<=100; ++j ) {
+ expected += j;
+ actual = x.counter += j;
+ ASSERT( actual==expected, NULL );
+ }
+ for( int j=-100; j<=100; ++j ) {
+ expected -= j;
+ actual = x.counter -= j;
+ ASSERT( actual==expected, NULL );
+ }
+ // Test fetch_and_increment
+ ASSERT( x.counter==i, NULL );
+ actual = x.counter.fetch_and_increment();
+ ASSERT( actual==i, NULL );
+ ASSERT( x.counter==T(i+1), NULL );
+
+ // Test fetch_and_decrement
+ actual = x.counter.fetch_and_decrement();
+ ASSERT( actual==T(i+1), NULL );
+ ASSERT( x.counter==i, NULL );
+ x.counter = i;
+ ASSERT( x.counter==i, NULL );
+
+ TestFetchAndAddAcquireRelease<T,tbb::acquire>(i);
+ TestFetchAndAddAcquireRelease<T,tbb::release>(i);
+}
+
+void TestFetchAndAdd( void* ) {
+ // There are no fetch-and-add operations on a void*.
+}
+
+template<typename T>
+void TestConst( T i ) {
+ // Try const
+ const TestStruct<T> x(i);
+ ASSERT( reinterpret_cast<const T&>(x.counter)==i, "write to atomic<T> broken?" );
+ ASSERT( x.counter==i, "read of atomic<T> broken?" );
+}
+
+template<typename T>
+void TestOperations( T i, T j, T k ) {
+ TestConst(i);
+ TestCompareAndSwap(i,j,k);
+ TestFetchAndStore(i,j);
+ TestFetchAndAdd(i);
+}
+
+template<typename T>
+void TestLoadAndStoreFences( const char* name );
+
+bool MemoryFenceError;
+
+template<typename T>
+struct AlignmentChecker {
+ char c;
+ tbb::atomic<T> i;
+};
+
+#include "harness.h"
+
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+#pragma warning( push )
+// unary minus operator applied to unsigned type, result still unsigned
+#pragma warning( disable: 4146 )
+#endif /* _MSC_VER && !defined(__INTEL_COMPILER) */
+
+/** T is an integral type. */
+template<typename T>
+void TestAtomicInteger( const char* name ) {
+ if( Verbose )
+ printf("testing atomic<%s>\n",name);
+#if __linux__ && __TBB_x86_32 && __GNUC__==3 && __GNUC_MINOR__==3
+ // gcc 3.3 has known problem for 32-bit Linux, so only warn if there is a problem.
+ if( sizeof(T)==8 ) {
+ if( sizeof(AlignmentChecker<T>)!=2*sizeof(tbb::atomic<T>) ) {
+ printf("Warning: alignment for atomic<%s> is wrong (known issue with gcc 3.3 for IA32)\n",name);
+ }
+ } else
+#endif /* __linux__ && __GNUC__ */
+ ASSERT( sizeof(AlignmentChecker<T>)==2*sizeof(tbb::atomic<T>), NULL );
+ TestOperations<T>(0L,T(-T(1)),T(1));
+ for( int k=0; k<int(sizeof(long))*8-1; ++k ) {
+ TestOperations<T>(T(1L<<k),T(~(1L<<k)),T(1-(1L<<k)));
+ TestOperations<T>(T(-1L<<k),T(~(-1L<<k)),T(1-(-1L<<k)));
+ }
+ TestLoadAndStoreFences<T>( name );
+}
+#if _MSC_VER && !defined(__INTEL_COMPILER)
+#pragma warning( pop )
+#endif /* _MSC_VER && !defined(__INTEL_COMPILER) */
+
+
+template<typename T>
+struct Foo {
+ T x, y, z;
+};
+
+
+template<typename T>
+void TestIndirection() {
+ Foo<T> item;
+ tbb::atomic<Foo<T>*> pointer;
+ pointer = &item;
+ for( int k=-10; k<=10; ++k ) {
+ // Test various syntaxes for indirection to fields with non-zero offset.
+ T value1, value2;
+ for( size_t j=0; j<sizeof(T); ++j ) {
+ *(char*)&value1 = char(k^j);
+ *(char*)&value2 = char(k^j*j);
+ }
+ pointer->y = value1;
+ (*pointer).z = value2;
+ T result1 = (*pointer).y;
+ T result2 = pointer->z;
+ ASSERT( memcmp(&value1,&result1,sizeof(T))==0, NULL );
+ ASSERT( memcmp(&value2,&result2,sizeof(T))==0, NULL );
+ }
+}
+
+template<typename T>
+void TestAtomicPointer() {
+ T array[1000];
+ TestOperations<T*>(&array[500],&array[250],&array[750]);
+ TestOperations<void*>(&array[500],&array[250],&array[750]);
+ TestIndirection<T>();
+ TestLoadAndStoreFences<T*>( "pointer" );
+}
+
+// Specialization for void*
+template<>
+void TestAtomicPointer<void*>() {
+ void* array[1000];
+ TestOperations<void*>(&array[500],&array[250],&array[750]);
+ TestLoadAndStoreFences<void*>( "pointer" );
+}
+
+template<unsigned N>
+class ArrayElement {
+ char item[N];
+};
+
+int main( int argc, char* argv[] ) {
+ ParseCommandLine( argc, argv );
+#if defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400
+ TestAtomicInteger<unsigned long long>("unsigned long long");
+ TestAtomicInteger<long long>("long long");
+#else
+ printf("Warning: atomic<64-bits> not tested because of known problem in Microsoft compiler\n");
+#endif /*defined(__INTEL_COMPILER)||!defined(_MSC_VER)||_MSC_VER>=1400 */
+ TestAtomicInteger<unsigned long>("unsigned long");
+ TestAtomicInteger<long>("long");
+ TestAtomicInteger<unsigned int>("unsigned int");
+ TestAtomicInteger<int>("int");
+ TestAtomicInteger<unsigned short>("unsigned short");
+ TestAtomicInteger<short>("short");
+ TestAtomicInteger<signed char>("signed char");
+ TestAtomicInteger<unsigned char>("unsigned char");
+ TestAtomicInteger<char>("char");
+ TestAtomicInteger<wchar_t>("wchar_t");
+ TestAtomicInteger<size_t>("size_t");
+ TestAtomicInteger<ptrdiff_t>("ptrdiff_t");
+ TestAtomicPointer<ArrayElement<1> >();
+ TestAtomicPointer<ArrayElement<2> >();
+ TestAtomicPointer<ArrayElement<3> >();
+ TestAtomicPointer<ArrayElement<4> >();
+ TestAtomicPointer<ArrayElement<5> >();
+ TestAtomicPointer<ArrayElement<6> >();
+ TestAtomicPointer<ArrayElement<7> >();
+ TestAtomicPointer<ArrayElement<8> >();
+ TestAtomicPointer<void*>();
+ ASSERT( !MemoryFenceError, NULL );
+ printf("done\n");
+ return 0;
+}
+
+// Portions dependent on blocked_range.h are down here, so that preceding tests do not
+// accidentally depend upon it.
+
+#include "tbb/blocked_range.h"
+
+template<typename T>
+struct FlagAndMessage {
+ //! 0 if message not set yet, 1 if message is set.
+ tbb::atomic<T> flag;
+ /** Force flag and message to be on distinct cache lines for machines with cache line size <= 4096 bytes */
+ char pad[4096/sizeof(T)];
+ //! Non-zero if message is ready
+ T message;
+};
+
+// A special template function used for summation.
+// Actually it is only necessary because of its specialization for void*
+template<typename T>
+T special_sum(intptr_t arg1, intptr_t arg2) {
+ return (T)((T)arg1 + arg2);
+}
+
+// The specialization for void* is required
+// because pointer arithmetic (+) is impossible with void*
+template<>
+void* special_sum<void*>(intptr_t arg1, intptr_t arg2) {
+ return (void*)(arg1 + arg2);
+}
+
+volatile int One = 1;
+
+template<typename T>
+class HammerLoadAndStoreFence {
+ FlagAndMessage<T>* fam;
+ const int n;
+ const int p;
+ const int trial;
+ const char* name;
+ mutable T accum;
+public:
+ HammerLoadAndStoreFence( FlagAndMessage<T>* fam_, int n_, int p_, const char* name_, int trial_ ) : fam(fam_), n(n_), p(p_), trial(trial_), name(name_) {}
+ void operator()( const tbb::blocked_range<int>& range ) const {
+ int one = One;
+ int k = range.begin();
+ FlagAndMessage<T>* s = fam+k;
+ FlagAndMessage<T>* s_next = fam + (k+1)%p;
+ for( int i=0; i<n; ++i ) {
+ // The inner for loop is a spin-wait loop, which is normally considered very bad style.
+ // But we must use it here because we are interested in examining subtle hardware effects.
+ for(unsigned short cnt=1; ; ++cnt) {
+ if( !cnt ) // to help 1-core systems complete the test, yield every 2^16 iterations
+ __TBB_Yield();
+ // Compilers typically generate non-trivial sequence for division by a constant.
+ // The expression here is dependent on the loop index i, so it cannot be hoisted.
+#define COMPLICATED_ZERO (i*(one-1)/100)
+ // Read flag and then the message
+ T flag, message;
+ if( trial&1 ) {
+ // COMPLICATED_ZERO here tempts compiler to hoist load of message above reading of flag.
+ flag = (s+COMPLICATED_ZERO)->flag;
+ message = s->message;
+ } else {
+ flag = s->flag;
+ message = s->message;
+ }
+ if( flag ) {
+ if( flag!=(T)-1 ) {
+ printf("ERROR: flag!=(T)-1 k=%d i=%d trial=%x type=%s (atomicity problem?)\n", k, i, trial, name );
+ MemoryFenceError = true;
+ }
+ if( message!=(T)-1 ) {
+ printf("ERROR: message!=(T)-1 k=%d i=%d trial=%x type=%s (memory fence problem?)\n", k, i, trial, name );
+ MemoryFenceError = true;
+ }
+ s->message = 0;
+ s->flag = 0;
+ // Set message and then the flag
+ if( trial&2 ) {
+ // COMPLICATED_ZERO here tempts compiler to sink store below setting of flag
+ s_next->message = special_sum<T>(-1, COMPLICATED_ZERO);
+ s_next->flag = (T)-1;
+ } else {
+ s_next->message = (T)-1;
+ s_next->flag = (T)-1;
+ }
+ break;
+ } else {
+ // Force compiler to use message anyway, so it cannot sink read of s->message below the if.
+ accum = message;
+ }
+ }
+ }
+ }
+};
+
+//! Test that atomic<T> has acquire semantics for loads and release semantics for stores.
+/** Test performs round-robin passing of message among p processors,
+ where p goes from MinThread to MaxThread. */
+template<typename T>
+void TestLoadAndStoreFences( const char* name ) {
+ for( int p=MinThread<2 ? 2 : MinThread; p<=MaxThread; ++p ) {
+ FlagAndMessage<T>* fam = new FlagAndMessage<T>[p];
+ // Each of four trials excercise slightly different expresion pattern within the test.
+ // See occurrences of COMPLICATED_ZERO for details.
+ for( int trial=0; trial<4; ++trial ) {
+ memset( fam, 0, p*sizeof(FlagAndMessage<T>) );
+ fam->message = (T)-1;
+ fam->flag = (T)-1;
+ NativeParallelFor( tbb::blocked_range<int>(0,p,1), HammerLoadAndStoreFence<T>( fam, 100, p, name, trial ) );
+ for( int k=0; k<p; ++k ) {
+ ASSERT( fam[k].message==(k==0 ? (T)-1 : 0), "incomplete round-robin?" );
+ ASSERT( fam[k].flag==(k==0 ? (T)-1 : 0), "incomplete round-robin?" );
+ }
+ }
+ delete[] fam;
+ }
+}
diff --git a/src/test/test_blocked_range.cpp b/src/test/test_blocked_range.cpp
new file mode 100644
index 0000000..29b668e
--- /dev/null
+++ b/src/test/test_blocked_range.cpp
@@ -0,0 +1,130 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "tbb/blocked_range.h"
+#include "harness_assert.h"
+
+// First test as much as we can without including other headers.
+// Doing so should catch problems arising from failing to include headers.
+
+class AbstractValueType {
+ AbstractValueType() {}
+ int value;
+public:
+ friend AbstractValueType MakeAbstractValueType( int i );
+ friend int GetValueOf( const AbstractValueType& v ) {return v.value;}
+};
+
+AbstractValueType MakeAbstractValueType( int i ) {
+ AbstractValueType x;
+ x.value = i;
+ return x;
+}
+
+size_t operator-( const AbstractValueType& u, const AbstractValueType& v ) {
+ return GetValueOf(u)-GetValueOf(v);
+}
+
+bool operator<( const AbstractValueType& u, const AbstractValueType& v ) {
+ return GetValueOf(u)<GetValueOf(v);
+}
+
+AbstractValueType operator+( const AbstractValueType& u, size_t offset ) {
+ return MakeAbstractValueType(GetValueOf(u)+int(offset));
+}
+
+static void SerialTest() {
+ for( int x=-10; x<10; ++x )
+ for( int y=-10; y<10; ++y ) {
+ AbstractValueType i = MakeAbstractValueType(x);
+ AbstractValueType j = MakeAbstractValueType(y);
+ for( size_t k=1; k<10; ++k ) {
+ typedef tbb::blocked_range<AbstractValueType> range_type;
+ range_type r( i, j, k );
+ AssertSameType( r.empty(), true );
+ AssertSameType( range_type::size_type(), size_t() );
+ AssertSameType( static_cast<range_type::const_iterator*>(0), static_cast<AbstractValueType*>(0) );
+ AssertSameType( r.begin(), MakeAbstractValueType(0) );
+ AssertSameType( r.end(), MakeAbstractValueType(0) );
+ ASSERT( r.empty()==(y<=x), NULL );
+ ASSERT( r.grainsize()==k, NULL );
+ if( x<=y ) {
+ AssertSameType( r.is_divisible(), true );
+ ASSERT( r.is_divisible()==(size_t(y-x)>k), NULL );
+ ASSERT( r.size()==size_t(y-x), NULL );
+ if( r.is_divisible() ) {
+ tbb::blocked_range<AbstractValueType> r2(r,tbb::split());
+ ASSERT( GetValueOf(r.begin())==x, NULL );
+ ASSERT( GetValueOf(r.end())==GetValueOf(r2.begin()), NULL );
+ ASSERT( GetValueOf(r2.end())==y, NULL );
+ ASSERT( r.grainsize()==k, NULL );
+ ASSERT( r2.grainsize()==k, NULL );
+ }
+ }
+ }
+ }
+}
+
+#include "harness.h"
+#include "tbb/parallel_for.h"
+
+const int N = 1<<22;
+
+unsigned char Array[N];
+
+struct Striker {
+ // Note: we use <int> here instead of <long> in order to test for Quad 407676
+ void operator()( const tbb::blocked_range<int>& r ) const {
+ for( tbb::blocked_range<int>::const_iterator i=r.begin(); i!=r.end(); ++i )
+ ++Array[i];
+ }
+};
+
+void ParallelTest() {
+ for( int i=0; i<N; i=i<3 ? i+1 : i*3 ) {
+ const tbb::blocked_range<int> r( 0, i, 10 );
+ tbb::parallel_for( r, Striker() );
+ for( int k=0; k<N; ++k ) {
+ ASSERT( Array[k]==(k<i), NULL );
+ Array[k] = 0;
+ }
+ }
+}
+
+#include "tbb/task_scheduler_init.h"
+
+int main( int argc, char* argv[] ) {
+ ParseCommandLine(argc,argv);
+ SerialTest();
+ for( int p=MinThread; p<=MaxThread; ++p ) {
+ tbb::task_scheduler_init init(p);
+ ParallelTest();
+ }
+ printf("done\n");
+ return 0;
+}
diff --git a/src/test/test_blocked_range2d.cpp b/src/test/test_blocked_range2d.cpp
new file mode 100644
index 0000000..22eca97
--- /dev/null
+++ b/src/test/test_blocked_range2d.cpp
@@ -0,0 +1,154 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "tbb/blocked_range2d.h"
+#include "harness_assert.h"
+
+// First test as much as we can without including other headers.
+// Doing so should catch problems arising from failing to include headers.
+
+template<typename Tag>
+class AbstractValueType {
+ AbstractValueType() {}
+ int value;
+public:
+ template<typename OtherTag>
+ friend AbstractValueType<OtherTag> MakeAbstractValueType( int i );
+
+ friend int GetValueOf( const AbstractValueType& v ) {return v.value;}
+};
+
+template<typename Tag>
+AbstractValueType<Tag> MakeAbstractValueType( int i ) {
+ AbstractValueType<Tag> x;
+ x.value = i;
+ return x;
+}
+
+template<typename Tag>
+bool operator<( const AbstractValueType<Tag>& u, const AbstractValueType<Tag>& v ) {
+ return GetValueOf(u)<GetValueOf(v);
+}
+
+template<typename Tag>
+size_t operator-( const AbstractValueType<Tag>& u, const AbstractValueType<Tag>& v ) {
+ return GetValueOf(u)-GetValueOf(v);
+}
+
+template<typename Tag>
+AbstractValueType<Tag> operator+( const AbstractValueType<Tag>& u, size_t offset ) {
+ return MakeAbstractValueType<Tag>(GetValueOf(u)+int(offset));
+}
+
+struct RowTag {};
+struct ColTag {};
+
+static void SerialTest() {
+ typedef AbstractValueType<RowTag> row_type;
+ typedef AbstractValueType<ColTag> col_type;
+ typedef tbb::blocked_range2d<row_type,col_type> range_type;
+ for( int rowx=-10; rowx<10; ++rowx ) {
+ for( int rowy=rowx; rowy<10; ++rowy ) {
+ row_type rowi = MakeAbstractValueType<RowTag>(rowx);
+ row_type rowj = MakeAbstractValueType<RowTag>(rowy);
+ for( int rowg=1; rowg<10; ++rowg ) {
+ for( int colx=-10; colx<10; ++colx ) {
+ for( int coly=colx; coly<10; ++coly ) {
+ col_type coli = MakeAbstractValueType<ColTag>(colx);
+ col_type colj = MakeAbstractValueType<ColTag>(coly);
+ for( int colg=1; colg<10; ++colg ) {
+ range_type r( rowi, rowj, rowg, coli, colj, colg );
+ AssertSameType( r.is_divisible(), true );
+ AssertSameType( r.empty(), true );
+ AssertSameType( static_cast<range_type::row_range_type::const_iterator*>(0), static_cast<row_type*>(0) );
+ AssertSameType( static_cast<range_type::col_range_type::const_iterator*>(0), static_cast<col_type*>(0) );
+ AssertSameType( r.rows(), tbb::blocked_range<row_type>( rowi, rowj, 1 ));
+ AssertSameType( r.cols(), tbb::blocked_range<col_type>( coli, colj, 1 ));
+ ASSERT( r.empty()==(rowx==rowy||colx==coly), NULL );
+ ASSERT( r.is_divisible()==(rowy-rowx>rowg||coly-colx>colg), NULL );
+ if( r.is_divisible() ) {
+ range_type r2(r,tbb::split());
+ if( GetValueOf(r2.rows().begin())==GetValueOf(r.rows().begin()) ) {
+ ASSERT( GetValueOf(r2.rows().end())==GetValueOf(r.rows().end()), NULL );
+ ASSERT( GetValueOf(r2.cols().begin())==GetValueOf(r.cols().end()), NULL );
+ } else {
+ ASSERT( GetValueOf(r2.cols().end())==GetValueOf(r.cols().end()), NULL );
+ ASSERT( GetValueOf(r2.rows().begin())==GetValueOf(r.rows().end()), NULL );
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+#include "harness.h"
+#include "tbb/parallel_for.h"
+
+const int N = 1<<10;
+
+unsigned char Array[N][N];
+
+struct Striker {
+ // Note: we use <int> here instead of <long> in order to test for problems similar to Quad 407676
+ void operator()( const tbb::blocked_range2d<int>& r ) const {
+ for( tbb::blocked_range<int>::const_iterator i=r.rows().begin(); i!=r.rows().end(); ++i )
+ for( tbb::blocked_range<int>::const_iterator j=r.cols().begin(); j!=r.cols().end(); ++j )
+ ++Array[i][j];
+ }
+};
+
+void ParallelTest() {
+ for( int i=0; i<N; i=i<3 ? i+1 : i*3 ) {
+ for( int j=0; j<N; j=j<3 ? j+1 : j*3 ) {
+ const tbb::blocked_range2d<int> r( 0, i, 7, 0, j, 5 );
+ tbb::parallel_for( r, Striker() );
+ for( int k=0; k<N; ++k ) {
+ for( int l=0; l<N; ++l ) {
+ ASSERT( Array[k][l]==(k<i && l<j), NULL );
+ Array[k][l] = 0;
+ }
+ }
+ }
+ }
+}
+
+#include "tbb/task_scheduler_init.h"
+
+int main( int argc, char* argv[] ) {
+ ParseCommandLine(argc,argv);
+ SerialTest();
+ for( int p=MinThread; p<=MaxThread; ++p ) {
+ tbb::task_scheduler_init init(p);
+ ParallelTest();
+ }
+ printf("done\n");
+ return 0;
+}
diff --git a/src/test/test_blocked_range3d.cpp b/src/test/test_blocked_range3d.cpp
new file mode 100644
index 0000000..0546993
--- /dev/null
+++ b/src/test/test_blocked_range3d.cpp
@@ -0,0 +1,185 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "tbb/blocked_range3d.h"
+#include "harness_assert.h"
+
+// First test as much as we can without including other headers.
+// Doing so should catch problems arising from failing to include headers.
+
+template<typename Tag>
+class AbstractValueType {
+ AbstractValueType() {}
+ int value;
+public:
+ template<typename OtherTag>
+ friend AbstractValueType<OtherTag> MakeAbstractValueType( int i );
+
+ friend int GetValueOf( const AbstractValueType& v ) {return v.value;}
+};
+
+template<typename Tag>
+AbstractValueType<Tag> MakeAbstractValueType( int i ) {
+ AbstractValueType<Tag> x;
+ x.value = i;
+ return x;
+}
+
+template<typename Tag>
+bool operator<( const AbstractValueType<Tag>& u, const AbstractValueType<Tag>& v ) {
+ return GetValueOf(u)<GetValueOf(v);
+}
+
+template<typename Tag>
+size_t operator-( const AbstractValueType<Tag>& u, const AbstractValueType<Tag>& v ) {
+ return GetValueOf(u)-GetValueOf(v);
+}
+
+template<typename Tag>
+AbstractValueType<Tag> operator+( const AbstractValueType<Tag>& u, size_t offset ) {
+ return MakeAbstractValueType<Tag>(GetValueOf(u)+int(offset));
+}
+
+struct PageTag {};
+struct RowTag {};
+struct ColTag {};
+
+static void SerialTest() {
+ typedef AbstractValueType<PageTag> page_type;
+ typedef AbstractValueType<RowTag> row_type;
+ typedef AbstractValueType<ColTag> col_type;
+ typedef tbb::blocked_range3d<page_type,row_type,col_type> range_type;
+ for( int pagex=-4; pagex<4; ++pagex ) {
+ for( int pagey=pagex; pagey<4; ++pagey ) {
+ page_type pagei = MakeAbstractValueType<PageTag>(pagex);
+ page_type pagej = MakeAbstractValueType<PageTag>(pagey);
+ for( int pageg=1; pageg<4; ++pageg ) {
+ for( int rowx=-4; rowx<4; ++rowx ) {
+ for( int rowy=rowx; rowy<4; ++rowy ) {
+ row_type rowi = MakeAbstractValueType<RowTag>(rowx);
+ row_type rowj = MakeAbstractValueType<RowTag>(rowy);
+ for( int rowg=1; rowg<4; ++rowg ) {
+ for( int colx=-4; colx<4; ++colx ) {
+ for( int coly=colx; coly<4; ++coly ) {
+ col_type coli = MakeAbstractValueType<ColTag>(colx);
+ col_type colj = MakeAbstractValueType<ColTag>(coly);
+ for( int colg=1; colg<4; ++colg ) {
+ range_type r( pagei, pagej, pageg, rowi, rowj, rowg, coli, colj, colg );
+ AssertSameType( r.is_divisible(), true );
+
+ AssertSameType( r.empty(), true );
+
+ AssertSameType( static_cast<range_type::page_range_type::const_iterator*>(0), static_cast<page_type*>(0) );
+ AssertSameType( static_cast<range_type::row_range_type::const_iterator*>(0), static_cast<row_type*>(0) );
+ AssertSameType( static_cast<range_type::col_range_type::const_iterator*>(0), static_cast<col_type*>(0) );
+
+ AssertSameType( r.pages(), tbb::blocked_range<page_type>( pagei, pagej, 1 ));
+ AssertSameType( r.rows(), tbb::blocked_range<row_type>( rowi, rowj, 1 ));
+ AssertSameType( r.cols(), tbb::blocked_range<col_type>( coli, colj, 1 ));
+
+ ASSERT( r.empty()==(pagex==pagey||rowx==rowy||colx==coly), NULL );
+
+ ASSERT( r.is_divisible()==(pagey-pagex>pageg||rowy-rowx>rowg||coly-colx>colg), NULL );
+
+ if( r.is_divisible() ) {
+ range_type r2(r,tbb::split());
+ if( (GetValueOf(r2.pages().begin())==GetValueOf(r.pages().begin())) && (GetValueOf(r2.rows().begin())==GetValueOf(r.rows().begin())) ) {
+ ASSERT( GetValueOf(r2.pages().end())==GetValueOf(r.pages().end()), NULL );
+ ASSERT( GetValueOf(r2.rows().end())==GetValueOf(r.rows().end()), NULL );
+ ASSERT( GetValueOf(r2.cols().begin())==GetValueOf(r.cols().end()), NULL );
+ } else {
+ if ( (GetValueOf(r2.pages().begin())==GetValueOf(r.pages().begin())) && (GetValueOf(r2.cols().begin())==GetValueOf(r.cols().begin())) ) {
+ ASSERT( GetValueOf(r2.pages().end())==GetValueOf(r.pages().end()), NULL );
+ ASSERT( GetValueOf(r2.cols().end())==GetValueOf(r.cols().end()), NULL );
+ ASSERT( GetValueOf(r2.rows().begin())==GetValueOf(r.rows().end()), NULL );
+ } else {
+ ASSERT( GetValueOf(r2.rows().end())==GetValueOf(r.rows().end()), NULL );
+ ASSERT( GetValueOf(r2.cols().end())==GetValueOf(r.cols().end()), NULL );
+ ASSERT( GetValueOf(r2.pages().begin())==GetValueOf(r.pages().end()), NULL );
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+#include "harness.h"
+#include "tbb/parallel_for.h"
+
+const int N = 1<<5;
+
+unsigned char Array[N][N][N];
+
+struct Striker {
+ // Note: we use <int> here instead of <long> in order to test for problems similar to Quad 407676
+ void operator()( const tbb::blocked_range3d<int>& r ) const {
+ for( tbb::blocked_range<int>::const_iterator i=r.pages().begin(); i!=r.pages().end(); ++i )
+ for( tbb::blocked_range<int>::const_iterator j=r.rows().begin(); j!=r.rows().end(); ++j )
+ for( tbb::blocked_range<int>::const_iterator k=r.cols().begin(); k!=r.cols().end(); ++k )
+ ++Array[i][j][k];
+ }
+};
+
+void ParallelTest() {
+ for( int i=0; i<N; i=i<3 ? i+1 : i*3 ) {
+ for( int j=0; j<N; j=j<3 ? j+1 : j*3 ) {
+ for( int k=0; k<N; k=k<3 ? k+1 : k*3 ) {
+ const tbb::blocked_range3d<int> r( 0, i, 5, 0, j, 3, 0, k, 1 );
+ tbb::parallel_for( r, Striker() );
+ for( int l=0; l<N; ++l ) {
+ for( int m=0; m<N; ++m ) {
+ for( int n=0; n<N; ++n ) {
+ ASSERT( Array[l][m][n]==(l<i && m<j && n<k), NULL );
+ Array[l][m][n] = 0;
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+#include "tbb/task_scheduler_init.h"
+
+int main( int argc, char* argv[] ) {
+ ParseCommandLine(argc,argv);
+ SerialTest();
+ for( int p=MinThread; p<=MaxThread; ++p ) {
+ tbb::task_scheduler_init init(p);
+ ParallelTest();
+ }
+ printf("done\n");
+ return 0;
+}
diff --git a/src/test/test_cache_aligned_allocator.cpp b/src/test/test_cache_aligned_allocator.cpp
new file mode 100644
index 0000000..4be9e7c
--- /dev/null
+++ b/src/test/test_cache_aligned_allocator.cpp
@@ -0,0 +1,42 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+// Test whether cache_aligned_allocator works with some of the host's STL containers.
+
+#include "tbb/cache_aligned_allocator.h"
+
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+// the real body of the test is there:
+#include "test_allocator.h"
+
+int main(void)
+{
+ int result = TestMain<tbb::cache_aligned_allocator<void> >();
+ printf("done\n");
+ return result;
+}
diff --git a/src/test/test_cache_aligned_allocator_STL.cpp b/src/test/test_cache_aligned_allocator_STL.cpp
new file mode 100644
index 0000000..e1915f0
--- /dev/null
+++ b/src/test/test_cache_aligned_allocator_STL.cpp
@@ -0,0 +1,56 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+// Test whether cache_aligned_allocator works with some of the host's STL containers.
+
+#include "tbb/cache_aligned_allocator.h"
+
+#define HARNESS_NO_PARSE_COMMAND_LINE 1
+#include "test_allocator.h"
+
+// Test whether an allocator works with some of the host's STL containers.
+
+#include <vector>
+#include <list>
+#include <deque>
+
+int main() {
+ TestContainer<std::vector<int,tbb::cache_aligned_allocator<int> > >();
+#if defined(_WIN64) && !defined(_CPPLIB_VER)
+ // Microsoft incorrectly typed the first argument to std::allocator<T>::deallocate
+ // as (void*), and depends upon this error in their early versions of list and deque.
+ printf("Warning: compatibility of cache_aligned_allocator with list and deque not tested\n"
+ "because they depend on error that Microsoft corrected later.\n");
+#else
+ TestContainer<std::list<int,tbb::cache_aligned_allocator<int> > >();
+ TestContainer<std::deque<int,tbb::cache_aligned_allocator<int> > >();
+#endif /* _WIN64 */
+ printf("done\n");
+ return 0;
+}
+
diff --git a/src/test/test_concurrent_hash_map.cpp b/src/test/test_concurrent_hash_map.cpp
new file mode 100644
index 0000000..1ad8bc0
--- /dev/null
+++ b/src/test/test_concurrent_hash_map.cpp
@@ -0,0 +1,511 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "tbb/concurrent_hash_map.h"
+#include "tbb/parallel_for.h"
+#include "tbb/blocked_range.h"
+#include "tbb/atomic.h"
+#include "tbb/tick_count.h"
+#include "harness.h"
+
+/** Has tighly controlled interface so that we can verify
+ that concurrent_hash_map uses only the required interface. */
+class MyKey {
+private:
+ void operator=( const MyKey& ); // Deny access
+ int key;
+ friend class MyHashCompare;
+public:
+ static MyKey make( int i ) {
+ MyKey result;
+ result.key = i;
+ return result;
+ }
+ int value_of() const {return key;}
+};
+
+tbb::atomic<long> MyDataCount;
+
+class MyData {
+private:
+ int data;
+ enum state_t {
+ LIVE=0x1234,
+ DEAD=0x5678
+ } my_state;
+ void operator=( const MyData& ); // Deny acces
+public:
+ MyData() {
+ my_state = LIVE;
+ ++MyDataCount;
+ }
+ MyData( const MyData& other ) {
+ ASSERT( other.my_state==LIVE, NULL );
+ my_state = LIVE;
+ data = other.data;
+ ++MyDataCount;
+ }
+ ~MyData() {
+ --MyDataCount;
+ my_state = DEAD;
+ }
+ static MyData make( int i ) {
+ MyData result;
+ result.data = i;
+ return result;
+ }
+ int value_of() const {
+ ASSERT( my_state==LIVE, NULL );
+ return data;
+ }
+ void set_value( int i ) {
+ ASSERT( my_state==LIVE, NULL );
+ data = i;
+ }
+};
+
+class MyHashCompare {
+public:
+ bool equal( const MyKey& j, const MyKey& k ) const {
+ return j.key==k.key;
+ }
+ unsigned long hash( const MyKey& k ) const {
+ return k.key;
+ }
+};
+
+typedef tbb::concurrent_hash_map<MyKey,MyData,MyHashCompare> MyTable;
+
+inline bool UseKey( size_t i ) {
+ return (i&3)!=3;
+}
+
+struct Insert {
+ static void apply( MyTable& table, int i ) {
+ MyTable::accessor a;
+ if( UseKey(i) ) {
+ table.insert( a, MyKey::make(i) );
+ if( i&1 )
+ (*a).second.set_value( i*i );
+ else
+ a->second.set_value(i*i);
+ }
+ }
+};
+
+struct Find {
+ static void apply( MyTable& table, int i ) {
+ MyTable::accessor a;
+ const MyTable::accessor& ca = a;
+ bool b = table.find( a, MyKey::make(i) );
+ ASSERT( b==!a.empty(), NULL );
+ if( b ) {
+ if( !UseKey(i) )
+ printf("Line %d: unexpected key %d present\n",__LINE__,i);
+ AssertSameType( &*a, static_cast<MyTable::value_type*>(0) );
+ ASSERT( ca->second.value_of()==i*i, NULL );
+ ASSERT( (*ca).second.value_of()==i*i, NULL );
+ if( i&1 )
+ ca->second.set_value( ~ca->second.value_of() );
+ else
+ (*ca).second.set_value( ~ca->second.value_of() );
+ } else {
+ if( UseKey(i) )
+ printf("Line %d: key %d missing\n",__LINE__,i);
+ }
+ }
+};
+
+struct FindConst {
+ static void apply( const MyTable& table, int i ) {
+ MyTable::const_accessor a;
+ const MyTable::const_accessor& ca = a;
+ bool b = table.find( a, MyKey::make(i) );
+ ASSERT( b==!a.empty(), NULL );
+ ASSERT( b==UseKey(i), NULL );
+ if( b ) {
+ AssertSameType( &*ca, static_cast<const MyTable::value_type*>(0) );
+ ASSERT( ca->second.value_of()==~(i*i), NULL );
+ ASSERT( (*ca).second.value_of()==~(i*i), NULL );
+ }
+ }
+};
+
+tbb::atomic<int> EraseCount;
+
+struct Erase {
+ static void apply( MyTable& table, int i ) {
+ bool b = table.erase( MyKey::make(i) );
+ if( b ) ++EraseCount;
+ }
+};
+
+template<typename Op>
+class TableOperation {
+ MyTable& my_table;
+public:
+ void operator()( const tbb::blocked_range<int>& range ) const {
+ for( int i=range.begin(); i!=range.end(); ++i )
+ Op::apply(my_table,i);
+ }
+ TableOperation( MyTable& table ) : my_table(table) {}
+};
+
+template<typename Op>
+void DoConcurrentOperations( MyTable& table, int n, char* what, int nthread ) {
+ if( Verbose )
+ printf("testing %s with %d threads\n",what,nthread);
+ tbb::tick_count t0 = tbb::tick_count::now();
+ tbb::parallel_for( tbb::blocked_range<int>(0,n,100), TableOperation<Op>(table) );
+ tbb::tick_count t1 = tbb::tick_count::now();
+ if( Verbose )
+ printf("time for %s = %g with %d threads\n",what,(t1-t0).seconds(),nthread);
+}
+
+//! Test traversing the table with an iterator.
+void TraverseTable( MyTable& table, size_t n, size_t expected_size ) {
+ if( Verbose )
+ printf("testing traversal\n");
+ size_t actual_size = table.size();
+ ASSERT( actual_size==expected_size, NULL );
+ size_t count = 0;
+ bool* array = new bool[n];
+ memset( array, 0, n*sizeof(bool) );
+ const MyTable& const_table = table;
+ MyTable::const_iterator ci = const_table.begin();
+ for( MyTable::iterator i = table.begin(); i!=table.end(); ++i ) {
+ // Check iterator
+ int k = i->first.value_of();
+ ASSERT( UseKey(k), NULL );
+ ASSERT( (*i).first.value_of()==k, NULL );
+ ASSERT( 0<=k && size_t(k)<n, "out of bounds key" );
+ ASSERT( !array[k], "duplicate key" );
+ array[k] = true;
+ ++count;
+
+ // Check const_iterator
+ ASSERT( ci->first.value_of()==k, NULL );
+ ASSERT( (*ci).first.value_of()==k, NULL );
+ ++ci;
+ }
+ ASSERT( ci==const_table.end(), NULL );
+ delete[] array;
+ if( count!=expected_size ) {
+ printf("Line %d: count=%ld but should be %ld\n",__LINE__,long(count),long(expected_size));
+ }
+}
+
+typedef tbb::atomic<unsigned char> AtomicByte;
+
+template<typename RangeType>
+struct ParallelTraverseBody {
+ const size_t n;
+ AtomicByte* const array;
+ ParallelTraverseBody( AtomicByte array_[], size_t n_ ) :
+ n(n_),
+ array(array_)
+ {}
+ void operator()( const RangeType& range ) const {
+ for( MyTable::iterator i = range.begin(); i!=range.end(); ++i ) {
+ int k = i->first.value_of();
+ ASSERT( 0<=k && size_t(k)<n, NULL );
+ ++array[k];
+ }
+ }
+};
+
+void Check( AtomicByte array[], size_t n, size_t expected_size ) {
+ if( expected_size )
+ for( size_t k=0; k<n; ++k ) {
+ if( array[k] != int(UseKey(k)) ) {
+ printf("array[%d]=%d != %d=UseKey(%d)\n",
+ int(k), int(array[k]), int(UseKey(k)), int(k));
+ ASSERT(false,NULL);
+ }
+ }
+}
+
+//! Test travering the tabel with a parallel range
+void ParallelTraverseTable( MyTable& table, size_t n, size_t expected_size ) {
+ if( Verbose )
+ printf("testing parallel traversal\n");
+ ASSERT( table.size()==expected_size, NULL );
+ AtomicByte* array = new AtomicByte[n];
+
+ memset( array, 0, n*sizeof(AtomicByte) );
+ MyTable::range_type r = table.range(10);
+ tbb::parallel_for( r, ParallelTraverseBody<MyTable::range_type>( array, n ));
+ Check( array, n, expected_size );
+
+ const MyTable& const_table = table;
+ memset( array, 0, n*sizeof(AtomicByte) );
+ MyTable::const_range_type cr = const_table.range(10);
+ tbb::parallel_for( cr, ParallelTraverseBody<MyTable::const_range_type>( array, n ));
+ Check( array, n, expected_size );
+
+ delete[] array;
+}
+
+void TestInsertFindErase( int nthread ) {
+ int n=250000;
+
+ // compute m = number of unique keys
+ int m = 0;
+ for( int i=0; i<n; ++i )
+ m += UseKey(i);
+
+ ASSERT( MyDataCount==0, NULL );
+ MyTable table;
+ TraverseTable(table,n,0);
+ ParallelTraverseTable(table,n,0);
+
+ DoConcurrentOperations<Insert>(table,n,"insert",nthread);
+ ASSERT( MyDataCount==m, NULL );
+ TraverseTable(table,n,m);
+ ParallelTraverseTable(table,n,m);
+
+ DoConcurrentOperations<Find>(table,n,"find",nthread);
+ ASSERT( MyDataCount==m, NULL );
+
+ DoConcurrentOperations<FindConst>(table,n,"find(const)",nthread);
+ ASSERT( MyDataCount==m, NULL );
+
+ EraseCount=0;
+ DoConcurrentOperations<Erase>(table,n,"erase",nthread);
+ ASSERT( EraseCount==m, NULL );
+ ASSERT( MyDataCount==0, NULL );
+ TraverseTable(table,n,0);
+}
+
+volatile int Counter;
+
+class AddToTable {
+ MyTable& my_table;
+ const int my_nthread;
+ const int my_m;
+public:
+ AddToTable( MyTable& table, int nthread, int m ) : my_table(table), my_nthread(nthread), my_m(m) {}
+ void operator()( const tbb::blocked_range<int>& r ) const {
+ for( int i=0; i<my_m; ++i ) {
+ // Busy wait to synchronize threads
+ int j = 0;
+ while( Counter<i ) {
+ if( ++j==1000000 ) {
+ // If Counter<i after a million iterations, then we almost surely have
+ // more logical threads than physical threads, and should yield in
+ // order to let suspended logical threads make progress.
+ j = 0;
+#if __linux__||__APPLE__
+ sched_yield();
+#else
+ Sleep(0);
+#endif /* __linux__ */
+ }
+ }
+ // Now all threads attempt to simultaneously insert a key.
+ int k;
+ {
+ MyTable::accessor a, b;
+ MyKey key = MyKey::make(i);
+ if( my_table.insert( a, key ) )
+ a->second.set_value( 1 );
+ else
+ a->second.set_value( a->second.value_of()+1 );
+ k = a->second.value_of();
+ }
+ if( k==my_nthread )
+ Counter=i+1;
+ }
+ }
+};
+
+//! Test for memory leak in concurrent_hash_map (TR #153).
+void TestMultipleInsert( int nthread ) {
+ if( Verbose )
+ printf("testing multiple insertions of same key with %d threads\n", nthread);
+ {
+ ASSERT( MyDataCount==0, NULL );
+ MyTable table;
+ const int m = 1000;
+ tbb::tick_count t0 = tbb::tick_count::now();
+ tbb::parallel_for( tbb::blocked_range<int>(0,nthread,1), AddToTable(table,nthread,m) );
+ tbb::tick_count t1 = tbb::tick_count::now();
+ if( Verbose )
+ printf("time for multiple insertions = %g with %d threads\n",(t1-t0).seconds(),nthread);
+ ASSERT( MyDataCount==m, "memory leak detected" );
+ }
+ ASSERT( MyDataCount==0, "memory leak detected" );
+}
+
+void TestTypes() {
+ AssertSameType( static_cast<MyTable::key_type*>(0), static_cast<MyKey*>(0) );
+ AssertSameType( static_cast<MyTable::mapped_type*>(0), static_cast<MyData*>(0) );
+ AssertSameType( static_cast<MyTable::value_type*>(0), static_cast<std::pair<const MyKey,MyData>*>(0) );
+ AssertSameType( static_cast<MyTable::accessor::value_type*>(0), static_cast<MyTable::value_type*>(0) );
+ AssertSameType( static_cast<MyTable::const_accessor::value_type*>(0), static_cast<const MyTable::value_type*>(0) );
+ AssertSameType( static_cast<MyTable::size_type*>(0), static_cast<size_t*>(0) );
+ AssertSameType( static_cast<MyTable::difference_type*>(0), static_cast<ptrdiff_t*>(0) );
+}
+
+template<typename Iterator, typename T>
+void TestIteratorTraits() {
+ AssertSameType( static_cast<typename Iterator::difference_type*>(0), static_cast<ptrdiff_t*>(0) );
+ AssertSameType( static_cast<typename Iterator::value_type*>(0), static_cast<T*>(0) );
+ AssertSameType( static_cast<typename Iterator::pointer*>(0), static_cast<T**>(0) );
+ AssertSameType( static_cast<typename Iterator::iterator_category*>(0), static_cast<std::forward_iterator_tag*>(0) );
+ T x;
+ typename Iterator::reference xr = x;
+ typename Iterator::pointer xp = &x;
+ ASSERT( &xr==xp, NULL );
+}
+
+//------------------------------------------------------------------------
+// Test for copy constructor and assignment
+//------------------------------------------------------------------------
+
+void FillTable( MyTable& x, int n ) {
+ for( int i=0; i<n; ++i ) {
+ MyKey key( MyKey::make(i) );
+ MyTable::accessor a;
+ bool b = x.insert(a,key);
+ ASSERT(b,NULL);
+ a->second.set_value( i*i );
+ }
+}
+
+void CheckTable( const MyTable& x, int n ) {
+ ASSERT( x.size()==size_t(n), "table is different size than expected" );
+ ASSERT( x.empty()==(n==0), NULL );
+ ASSERT( x.size()<=x.max_size(), NULL );
+ for( int i=0; i<n; ++i ) {
+ MyKey key( MyKey::make(i) );
+ MyTable::const_accessor a;
+ bool b = x.find(a,key);
+ ASSERT( b, NULL );
+ ASSERT( a->second.value_of()==i*i, NULL );
+ }
+ int count = 0;
+ int key_sum = 0;
+ for( MyTable::const_iterator i(x.begin()); i!=x.end(); ++i ) {
+ ++count;
+ key_sum += i->first.value_of();
+ }
+ ASSERT( count==n, NULL );
+ ASSERT( key_sum==n*(n-1)/2, NULL );
+}
+
+void TestCopy() {
+ if( Verbose )
+ printf("testing copy\n");
+ MyTable t1;
+ for( int i=0; i<10000; i=(i<100 ? i+1 : i*3) ) {
+ MyDataCount = 0;
+
+ FillTable( t1, i );
+ CheckTable(t1,i);
+
+ MyTable t2(t1);
+ // Check that copy constructor did not mangle source table.
+ CheckTable(t1,i);
+
+ // Clear original table
+ t1.clear();
+ CheckTable(t1,0);
+
+ // Verify that copy of t1 is correct, even after t1 is cleared.
+ CheckTable(t2,i);
+ t2.clear();
+ CheckTable(t2,0);
+ ASSERT( MyDataCount==0, "data leak?" );
+ }
+}
+
+void TestAssignment() {
+ if( Verbose )
+ printf("testing assignment\n");
+ for( int i=0; i<1000; i=(i<30 ? i+1 : i*5) ) {
+ for( int j=0; j<1000; j=(j<30 ? j+1 : j*7) ) {
+ MyTable t1;
+ MyTable t2;
+ FillTable(t1,i);
+ FillTable(t2,j);
+ CheckTable(t1,i);
+ CheckTable(t2,j);
+
+ MyTable& tref = t2=t1;
+ ASSERT( &tref==&t2, NULL );
+ CheckTable(t1,i);
+ CheckTable(t2,i);
+
+ t1.clear();
+ CheckTable(t1,0);
+ CheckTable(t2,i);
+ ASSERT( MyDataCount==i, "data leak?" );
+
+ t2.clear();
+ CheckTable(t1,0);
+ CheckTable(t2,0);
+ ASSERT( MyDataCount==0, "data leak?" );
+ }
+ }
+}
+
+//------------------------------------------------------------------------
+// Test driver
+//------------------------------------------------------------------------
+
+#include "tbb/task_scheduler_init.h"
+
+//! Test driver
+int main( int argc, char* argv[] ) {
+ // Default minimum number of threads is 1.
+ MinThread = 1;
+
+ ParseCommandLine(argc,argv);
+ if( MinThread<0 ) {
+ printf("ERROR: must use at least one thread\n");
+ exit(1);
+ }
+
+ // Do serial tests
+ TestTypes();
+ TestIteratorTraits<MyTable::iterator,MyTable::value_type>();
+ TestIteratorTraits<MyTable::const_iterator,const MyTable::value_type>();
+ TestCopy();
+ TestAssignment();
+
+ // Do concurrency tests.
+ for( int nthread=MinThread; nthread<=MaxThread; ++nthread ) {
+ tbb::task_scheduler_init init( nthread );
+ TestInsertFindErase( nthread );
+ TestMultipleInsert( nthread );
+ }
+
+ printf("done\n");
+ return 0;
+}
diff --git a/src/test/test_concurrent_hash_map_string.cpp b/src/test/test_concurrent_hash_map_string.cpp
new file mode 100644
index 0000000..0df73c5
--- /dev/null
+++ b/src/test/test_concurrent_hash_map_string.cpp
@@ -0,0 +1,84 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+// Test for problem where Microsoft VC8 compiler could not compile
+// concurrent_hash_map that uses a FastString, as defined below.
+// The root problem was a missing "const" in the copy constructor for scalable_allocator.
+// Unfortunately, I (Arch Robison) was not able to reduce the test to
+// something that did not involve concurrent_hash_map, so this test
+// is regrettably large. The problem did not manifest itself when
+// the Intel or GNU compilers were used.
+
+#include "tbb/concurrent_hash_map.h"
+#include "tbb/scalable_allocator.h"
+#include "harness_assert.h"
+#include <string>
+
+typedef std::basic_string<char,std::char_traits<char>,tbb::scalable_allocator<char> > FastString;
+
+struct FastStringHashCompare {
+ static size_t hash( const FastString& x ) {
+ size_t h = 0;
+ for( const char* s = x.c_str(); *s; s++ )
+ h = (h*17)^*s;
+ return h;
+ }
+ //! True if FastStrings are equal
+ static bool equal( const FastString& x, const FastString& y ) {
+ return x==y;
+ }
+};
+
+void TestStringKey() {
+ typedef tbb::concurrent_hash_map<FastString,int,FastStringHashCompare> table_type;
+ table_type table;
+ static const FastString fruit[] = {"apple", "banana", "cherry"};
+ for( int i=0; i<12; ++i ) {
+ table_type::accessor a;
+ table.insert( a, fruit[i%3] );
+ a->second += 1;
+ }
+ table_type::iterator j=table.begin();
+ for( int i=0; i<3; ++i, ++j ) {
+ ASSERT( j->second==4, NULL );
+ }
+ ASSERT( j==table.end(), NULL );
+
+}
+
+#include "harness.h"
+
+//! Test driver
+int main( int argc, char* argv[] ) {
+
+ // Do test with string
+ TestStringKey();
+
+ printf("done\n");
+ return 0;
+}
diff --git a/src/test/test_concurrent_queue.cpp b/src/test/test_concurrent_queue.cpp
new file mode 100644
index 0000000..403a17a
--- /dev/null
+++ b/src/test/test_concurrent_queue.cpp
@@ -0,0 +1,324 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "tbb/concurrent_queue.h"
+#include "tbb/atomic.h"
+#include "tbb/tick_count.h"
+#include "tbb/blocked_range.h"
+#include "harness.h"
+
+static tbb::atomic<long> FooConstructed;
+static tbb::atomic<long> FooDestroyed;
+
+class Foo {
+ enum state_t{
+ LIVE=0x1234,
+ DEAD=0xDEAD
+ };
+ state_t state;
+public:
+ int thread_id;
+ int serial;
+ Foo() : state(LIVE) {
+ ++FooConstructed;
+ }
+ Foo( const Foo& item ) : state(LIVE) {
+ ASSERT( item.state==LIVE, NULL );
+ ++FooConstructed;
+ thread_id = item.thread_id;
+ serial = item.serial;
+ }
+ ~Foo() {
+ ASSERT( state==LIVE, NULL );
+ ++FooDestroyed;
+ state=DEAD;
+ thread_id=0xDEAD;
+ serial=0xDEAD;
+ }
+ void operator=( Foo& item ) {
+ ASSERT( item.state==LIVE, NULL );
+ ASSERT( state==LIVE, NULL );
+ thread_id = item.thread_id;
+ serial = item.serial;
+ }
+ bool is_const() {return false;}
+ bool is_const() const {return true;}
+};
+
+const size_t MAXTHREAD = 256;
+
+static int Sum[MAXTHREAD];
+
+//! Count of various pop operations
+/** [0] = pop_if_present that failed
+ [1] = pop_if_present that succeeded
+ [2] = pop */
+static tbb::atomic<long> PopKind[3];
+
+const int M = 10000;
+
+struct Body {
+ tbb::concurrent_queue<Foo>* queue;
+ const int nthread;
+ Body( int nthread_ ) : nthread(nthread_) {}
+ void operator()( const tbb::blocked_range<int>& r ) const {
+ long pop_kind[3] = {0,0,0};
+ int serial[MAXTHREAD+1];
+ memset( serial, 0, nthread*sizeof(unsigned) );
+ ASSERT( r.begin()+1==r.end(), NULL );
+ ASSERT( r.begin()<nthread, NULL );
+ ASSERT( r.end()<=nthread, NULL );
+
+ long sum = 0;
+ long thread_id = r.begin();
+ for( long j=0; j<M; ++j ) {
+ Foo f;
+ f.thread_id = 0xDEAD;
+ f.serial = 0xDEAD;
+ bool prepopped = false;
+ if( j&1 ) {
+ prepopped = queue->pop_if_present(f);
+ ++pop_kind[prepopped];
+ }
+ Foo g;
+ g.thread_id = thread_id;
+ g.serial = j+1;
+ queue->push( g );
+ if( !prepopped ) {
+ queue->pop(f);
+ ++pop_kind[2];
+ }
+ ASSERT( f.thread_id<=nthread, NULL );
+ ASSERT( f.thread_id==nthread || serial[f.thread_id]<f.serial, "partial order violation" );
+ serial[f.thread_id] = f.serial;
+ sum += f.serial-1;
+ }
+ Sum[r.begin()] = sum;
+ for( int k=0; k<3; ++k )
+ PopKind[k] += pop_kind[k];
+ }
+};
+
+void TestPushPop( int prefill, ptrdiff_t capacity, int nthread ) {
+ ASSERT( nthread>0, "nthread must be positive" );
+ if( prefill+1>=capacity )
+ return;
+ bool success = false;
+ for( int k=0; k<3; ++k )
+ PopKind[k] = 0;
+ for( int trial=0; !success; ++trial ) {
+ FooConstructed = 0;
+ FooDestroyed = 0;
+ Body body(nthread);
+ tbb::concurrent_queue<Foo> queue;
+ queue.set_capacity( capacity );
+ body.queue = &queue;
+ for( int i=0; i<prefill; ++i ) {
+ Foo f;
+ f.thread_id = nthread;
+ f.serial = 1+i;
+ queue.push(f);
+ ASSERT( queue.size()==i+1, NULL );
+ ASSERT( !queue.empty(), NULL );
+ }
+ tbb::tick_count t0 = tbb::tick_count::now();
+ NativeParallelFor( tbb::blocked_range<int>(0,nthread,1), body );
+ tbb::tick_count t1 = tbb::tick_count::now();
+ double timing = (t1-t0).seconds();
+ if( Verbose )
+ printf("prefill=%d capacity=%d time = %g = %g nsec/operation\n", prefill, int(capacity), timing, timing/(2*M*nthread)*1.E9);
+ int sum = 0;
+ for( int k=0; k<nthread; ++k )
+ sum += Sum[k];
+ int expected = nthread*((M-1)*M/2) + ((prefill-1)*prefill)/2;
+ for( int i=prefill; --i>=0; ) {
+ ASSERT( !queue.empty(), NULL );
+ Foo f;
+ queue.pop(f);
+ ASSERT( queue.size()==i, NULL );
+ sum += f.serial-1;
+ }
+ ASSERT( queue.empty(), NULL );
+ ASSERT( queue.size()==0, NULL );
+ if( sum!=expected )
+ printf("sum=%d expected=%d\n",sum,expected);
+ ASSERT( FooConstructed==FooDestroyed, NULL );
+
+ success = true;
+ if( nthread>1 && prefill==0 ) {
+ // Check that pop_if_present got sufficient exercise
+ for( int k=0; k<2; ++k ) {
+#if (_WIN32||_WIN64)
+ // The TBB library on Windows seems to have a tough time generating
+ // the desired interleavings for pop_if_present, so the code tries longer, and settles
+ // for fewer desired interleavings.
+ const int max_trial = 100;
+ const int min_requirement = 20;
+#else
+ const int min_requirement = 100;
+ const int max_trial = 20;
+#endif /* _WIN32||_WIN64 */
+ if( PopKind[k]<min_requirement ) {
+ if( trial>=max_trial ) {
+ printf("Warning: %d threads had only %ld pop_if_present operations %s after %d trials (expected at least %d)\n",
+ nthread, long(PopKind[k]), k==0?"fail":"succeed", max_trial, min_requirement);
+ printf("This problem may merely be unlucky scheduling.\n"
+ "Investigate only if it happens repeatedly.\n");
+ } else {
+ success = false;
+ }
+ }
+ }
+ }
+ }
+}
+
+template<typename Iterator1, typename Iterator2>
+void TestIteratorAux( Iterator1 i, Iterator2 j, int size ) {
+ // Now test iteration
+ Iterator1 old_i;
+ for( int k=0; k<size; ++k ) {
+ ASSERT( i!=j, NULL );
+ ASSERT( !(i==j), NULL );
+ Foo f;
+ if( k&1 ) {
+ // Test pre-increment
+ f = *old_i++;
+ // Test assignment
+ i = old_i;
+ } else {
+ // Test post-increment
+ f=*i++;
+ if( k<size-1 ) {
+ // Test "->"
+ ASSERT( k+2==i->serial, NULL );
+ }
+ // Test assignment
+ old_i = i;
+ }
+ ASSERT( k+1==f.serial, NULL );
+ }
+ ASSERT( !(i!=j), NULL );
+ ASSERT( i==j, NULL );
+}
+
+template<typename Iterator1, typename Iterator2>
+void TestIteratorAssignment( Iterator2 j ) {
+ Iterator1 i(j);
+ ASSERT( i==j, NULL );
+ ASSERT( !(i!=j), NULL );
+ Iterator1 k;
+ k = j;
+ ASSERT( k==j, NULL );
+ ASSERT( !(k!=j), NULL );
+}
+
+//! Test the iterators for concurrent_queue
+void TestIterator() {
+ tbb::concurrent_queue<Foo> queue;
+ tbb::concurrent_queue<Foo>& const_queue = queue;
+ for( int j=0; j<500; ++j ) {
+ TestIteratorAux( queue.begin(), queue.end(), j );
+ TestIteratorAux( const_queue.begin(), const_queue.end(), j );
+ TestIteratorAux( const_queue.begin(), queue.end(), j );
+ TestIteratorAux( queue.begin(), const_queue.end(), j );
+ Foo f;
+ f.serial = j+1;
+ queue.push(f);
+ }
+ TestIteratorAssignment<tbb::concurrent_queue<Foo>::const_iterator>( const_queue.begin() );
+ TestIteratorAssignment<tbb::concurrent_queue<Foo>::const_iterator>( queue.begin() );
+ TestIteratorAssignment<tbb::concurrent_queue<Foo>::iterator>( queue.begin() );
+}
+
+void TestConcurrenetQueueType() {
+ AssertSameType( tbb::concurrent_queue<Foo>::value_type(), Foo() );
+ Foo f;
+ const Foo g;
+ tbb::concurrent_queue<Foo>::reference r = f;
+ ASSERT( &r==&f, NULL );
+ ASSERT( !r.is_const(), NULL );
+ tbb::concurrent_queue<Foo>::const_reference cr = g;
+ ASSERT( &cr==&g, NULL );
+ ASSERT( cr.is_const(), NULL );
+}
+
+template<typename T>
+void TestEmptyQueue() {
+ const tbb::concurrent_queue<T> queue;
+ ASSERT( queue.size()==0, NULL );
+ ASSERT( queue.capacity()>0, NULL );
+ ASSERT( size_t(queue.capacity())>=size_t(-1)/(sizeof(void*)+sizeof(T)), NULL );
+}
+
+void TestFullQueue() {
+ for( int n=0; n<10; ++n ) {
+ FooConstructed = 0;
+ FooDestroyed = 0;
+ tbb::concurrent_queue<Foo> queue;
+ queue.set_capacity(n);
+ for( int i=0; i<=n; ++i ) {
+ Foo f;
+ f.serial = i;
+ bool result = queue.push_if_not_full( f );
+ ASSERT( result==(i<n), NULL );
+ }
+ for( int i=0; i<=n; ++i ) {
+ Foo f;
+ bool result = queue.pop_if_present( f );
+ ASSERT( result==(i<n), NULL );
+ ASSERT( !result || f.serial==i, NULL );
+ }
+ ASSERT( FooConstructed==FooDestroyed, NULL );
+ }
+}
+
+int main( int argc, char* argv[] ) {
+ // Set default for minimum number of threads.
+ MinThread = 1;
+ ParseCommandLine(argc,argv);
+
+ TestEmptyQueue<char>();
+ TestEmptyQueue<Foo>();
+ TestFullQueue();
+ TestConcurrenetQueueType();
+ TestIterator();
+
+ // Test concurrent operations
+ for( int nthread=MinThread; nthread<=MaxThread; ++nthread ) {
+ for( int prefill=0; prefill<64; prefill+=(1+prefill/3) ) {
+ TestPushPop(prefill,ptrdiff_t(-1),nthread);
+ TestPushPop(prefill,ptrdiff_t(1),nthread);
+ TestPushPop(prefill,ptrdiff_t(2),nthread);
+ TestPushPop(prefill,ptrdiff_t(10),nthread);
+ TestPushPop(prefill,ptrdiff_t(100),nthread);
+ }
+ }
+ printf("done\n");
+ return 0;
+}
diff --git a/src/test/test_concurrent_vector.cpp b/src/test/test_concurrent_vector.cpp
new file mode 100644
index 0000000..414c9c6
--- /dev/null
+++ b/src/test/test_concurrent_vector.cpp
@@ -0,0 +1,570 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "tbb/concurrent_vector.h"
+#include <cstdio>
+#include <cstdlib>
+#include "harness_assert.h"
+
+tbb::atomic<long> FooCount;
+
+//! Problem size
+const size_t N = 500000;
+
+struct Foo {
+ int my_bar;
+public:
+ enum State {
+ DefaultInitialized=0x1234,
+ CopyInitialized=0x89ab,
+ Destroyed=0x5678
+ } state;
+ int& bar() {
+ ASSERT( state==DefaultInitialized||state==CopyInitialized, NULL );
+ return my_bar;
+ }
+ int bar() const {
+ ASSERT( state==DefaultInitialized||state==CopyInitialized, NULL );
+ return my_bar;
+ }
+ static const int initial_value_of_bar = 42;
+ Foo() {
+ state = DefaultInitialized;
+ ++FooCount;
+ my_bar = initial_value_of_bar;
+ }
+ Foo( const Foo& foo ) {
+ state = CopyInitialized;
+ ++FooCount;
+ my_bar = foo.my_bar;
+ }
+ ~Foo() {
+ ASSERT( state==DefaultInitialized||state==CopyInitialized, NULL );
+ state = Destroyed;
+ my_bar = ~initial_value_of_bar;
+ --FooCount;
+ }
+ bool is_const() const {return true;}
+ bool is_const() {return false;}
+};
+
+class FooWithAssign: public Foo {
+public:
+ void operator=( const FooWithAssign& x ) {
+ ASSERT( x.state==DefaultInitialized||x.state==CopyInitialized, NULL );
+ ASSERT( state==DefaultInitialized||state==CopyInitialized, NULL );
+ my_bar = x.my_bar;
+ }
+};
+
+inline void NextSize( int& s ) {
+ if( s<=32 ) ++s;
+ else s += s/10;
+}
+
+static void CheckVector( const tbb::concurrent_vector<Foo>& cv, size_t expected_size, size_t old_size ) {
+ ASSERT( cv.size()==expected_size, NULL );
+ ASSERT( cv.empty()==(expected_size==0), NULL );
+ for( int j=0; j<int(expected_size); ++j ) {
+ if( cv[j].bar()!=~j )
+ printf("ERROR on line %d for old_size=%ld expected_size=%ld j=%d\n",__LINE__,long(old_size),long(expected_size),j);
+ }
+}
+
+void TestResizeAndCopy() {
+ typedef tbb::concurrent_vector<Foo> vector_t;
+ for( int old_size=0; old_size<=128; NextSize( old_size ) ) {
+ for( int new_size=old_size; new_size<=128; NextSize( new_size ) ) {
+ long count = FooCount;
+ vector_t v;
+ ASSERT( count==FooCount, NULL );
+ v.grow_by(old_size);
+ ASSERT( count+old_size==FooCount, NULL );
+ for( int j=0; j<old_size; ++j )
+ v[j].bar() = j*j;
+ v.grow_to_at_least(new_size);
+ ASSERT( count+new_size==FooCount, NULL );
+ for( int j=0; j<new_size; ++j ) {
+ int expected = j<old_size ? j*j : Foo::initial_value_of_bar;
+ if( v[j].bar()!=expected )
+ printf("ERROR on line %d for old_size=%ld new_size=%ld v[%ld].bar()=%d != %d\n",__LINE__,long(old_size),long(new_size),long(j),v[j].bar(), expected);
+ }
+ ASSERT( v.size()==size_t(new_size), NULL );
+ for( int j=0; j<new_size; ++j ) {
+ v[j].bar() = ~j;
+ }
+ const vector_t& cv = v;
+ // Try copy constructor
+ vector_t copy_of_v(cv);
+ CheckVector(cv,new_size,old_size);
+ v.clear();
+ ASSERT( v.empty(), NULL );
+ CheckVector(copy_of_v,new_size,old_size);
+ }
+ }
+}
+
+void TestCapacity() {
+ for( size_t old_size=0; old_size<=10000; old_size=(old_size<5 ? old_size+1 : 3*old_size) ) {
+ for( size_t new_size=0; new_size<=10000; new_size=(new_size<5 ? new_size+1 : 3*new_size) ) {
+ long count = FooCount;
+ {
+ typedef tbb::concurrent_vector<Foo> vector_t;
+ vector_t v;
+ v.reserve( old_size );
+ ASSERT( v.capacity()>=old_size, NULL );
+ v.reserve( new_size );
+ ASSERT( v.capacity()>=old_size, NULL );
+ ASSERT( v.capacity()>=new_size, NULL );
+ for( size_t i=0; i<2*new_size; ++i ) {
+ ASSERT( size_t(FooCount)==count+i, NULL );
+ size_t j = v.grow_by(1);
+ ASSERT( j==i, NULL );
+ }
+ }
+ ASSERT( FooCount==count, NULL );
+ }
+ }
+}
+
+struct AssignElement {
+ typedef tbb::concurrent_vector<int>::range_type::iterator iterator;
+ iterator base;
+ void operator()( const tbb::concurrent_vector<int>::range_type& range ) const {
+ for( iterator i=range.begin(); i!=range.end(); ++i ) {
+ if( *i!=0 )
+ printf("ERROR for v[%ld]\n", long(i-base));
+ *i = int(i-base);
+ }
+ }
+ AssignElement( iterator base_ ) : base(base_) {}
+};
+
+struct CheckElement {
+ typedef tbb::concurrent_vector<int>::const_range_type::iterator iterator;
+ iterator base;
+ void operator()( const tbb::concurrent_vector<int>::const_range_type& range ) const {
+ for( iterator i=range.begin(); i!=range.end(); ++i )
+ if( *i != int(i-base) )
+ printf("ERROR for v[%ld]\n", long(i-base));
+ }
+ CheckElement( iterator base_ ) : base(base_) {}
+};
+
+#include "tbb/tick_count.h"
+#include "tbb/parallel_for.h"
+#include "harness.h"
+
+void TestParallelFor( int nthread ) {
+ typedef tbb::concurrent_vector<int> vector_t;
+ vector_t v;
+ v.grow_to_at_least(N);
+ tbb::tick_count t0 = tbb::tick_count::now();
+ if( Verbose )
+ printf("Calling parallel_for.h with %ld threads\n",long(nthread));
+ tbb::parallel_for( v.range(10000), AssignElement(v.begin()) );
+ tbb::tick_count t1 = tbb::tick_count::now();
+ const vector_t& u = v;
+ tbb::parallel_for( u.range(10000), CheckElement(u.begin()) );
+ tbb::tick_count t2 = tbb::tick_count::now();
+ if( Verbose )
+ printf("Time for parallel_for.h: assign time = %8.5f, check time = %8.5f\n",
+ (t1-t0).seconds(),(t2-t1).seconds());
+ for( long i=0; size_t(i)<v.size(); ++i )
+ if( v[i]!=i )
+ printf("ERROR for v[%ld]\n", i);
+}
+
+template<typename Iterator1, typename Iterator2>
+void TestIteratorAssignment( Iterator2 j ) {
+ Iterator1 i(j);
+ ASSERT( i==j, NULL );
+ ASSERT( !(i!=j), NULL );
+ Iterator1 k;
+ k = j;
+ ASSERT( k==j, NULL );
+ ASSERT( !(k!=j), NULL );
+}
+
+template<typename Iterator, typename T>
+void TestIteratorTraits() {
+ AssertSameType( static_cast<typename Iterator::difference_type*>(0), static_cast<ptrdiff_t*>(0) );
+ AssertSameType( static_cast<typename Iterator::value_type*>(0), static_cast<T*>(0) );
+ AssertSameType( static_cast<typename Iterator::pointer*>(0), static_cast<T**>(0) );
+ AssertSameType( static_cast<typename Iterator::iterator_category*>(0), static_cast<std::random_access_iterator_tag*>(0) );
+ T x;
+ typename Iterator::reference xr = x;
+ typename Iterator::pointer xp = &x;
+ ASSERT( &xr==xp, NULL );
+}
+
+template<typename Vector, typename Iterator>
+void CheckConstIterator( const Vector& u, int i, const Iterator& cp ) {
+ typename Vector::const_reference pref = *cp;
+ if( pref.bar()!=i )
+ printf("ERROR for u[%ld] using const_iterator\n", long(i));
+ typename Vector::difference_type delta = cp-u.begin();
+ ASSERT( delta==i, NULL );
+ if( u[i].bar()!=i )
+ printf("ERROR for u[%ld] using subscripting\n", long(i));
+ ASSERT( u.begin()[i].bar()==i, NULL );
+}
+
+template<typename Iterator1, typename Iterator2, typename V>
+void CheckIteratorComparison( V& u ) {
+ Iterator1 i = u.begin();
+ for( int i_count=0; i_count<100; ++i_count ) {
+ Iterator2 j = u.begin();
+ for( int j_count=0; j_count<100; ++j_count ) {
+ ASSERT( (i==j)==(i_count==j_count), NULL );
+ ASSERT( (i!=j)==(i_count!=j_count), NULL );
+ ASSERT( (i-j)==(i_count-j_count), NULL );
+ ASSERT( (i<j)==(i_count<j_count), NULL );
+ ASSERT( (i>j)==(i_count>j_count), NULL );
+ ASSERT( (i<=j)==(i_count<=j_count), NULL );
+ ASSERT( (i>=j)==(i_count>=j_count), NULL );
+ ++j;
+ }
+ ++i;
+ }
+}
+
+//! Test sequential iterators for vector type V.
+/** Also does timing. */
+template<typename V>
+void TestSequentialFor() {
+ V v;
+ v.grow_by(N);
+
+ // Check iterator
+ tbb::tick_count t0 = tbb::tick_count::now();
+ typename V::iterator p = v.begin();
+ ASSERT( !(*p).is_const(), NULL );
+ ASSERT( !p->is_const(), NULL );
+ for( int i=0; size_t(i)<v.size(); ++i, ++p ) {
+ if( (*p).state!=Foo::DefaultInitialized )
+ printf("ERROR for v[%ld]\n", long(i));
+ typename V::reference pref = *p;
+ pref.bar() = i;
+ typename V::difference_type delta = p-v.begin();
+ ASSERT( delta==i, NULL );
+ ASSERT( -delta<=0, "difference type not signed?" );
+ }
+ tbb::tick_count t1 = tbb::tick_count::now();
+
+ // Check const_iterator going forwards
+ const V& u = v;
+ typename V::const_iterator cp = u.begin();
+ ASSERT( (*cp).is_const(), NULL );
+ ASSERT( cp->is_const(), NULL );
+ for( int i=0; size_t(i)<u.size(); ++i, ++cp ) {
+ CheckConstIterator(u,i,cp);
+ }
+ tbb::tick_count t2 = tbb::tick_count::now();
+ if( Verbose )
+ printf("Time for serial for: assign time = %8.5f, check time = %8.5f\n",
+ (t1-t0).seconds(),(t2-t1).seconds());
+
+ // Now go backwards
+ cp = u.end();
+ for( int i=int(u.size()); i>0; ) {
+ --i;
+ --cp;
+ if( i>0 ) {
+ typename V::const_iterator cp_old = cp--;
+ int here = (*cp_old).bar();
+ ASSERT( here==u[i].bar(), NULL );
+ typename V::const_iterator cp_new = cp++;
+ int prev = (*cp_new).bar();
+ ASSERT( prev==u[i-1].bar(), NULL );
+ }
+ CheckConstIterator(u,i,cp);
+ }
+
+ // Now go forwards and backwards
+ cp = u.begin();
+ ptrdiff_t j = 0;
+ for( size_t i=0; i<u.size(); ++i ) {
+ CheckConstIterator(u,int(j),cp);
+ typename V::difference_type delta = i*3 % u.size();
+ if( 0<=j+delta && size_t(j+delta)<u.size() ) {
+ cp += delta;
+ j += delta;
+ }
+ delta = i*7 % u.size();
+ if( 0<=j-delta && size_t(j-delta)<u.size() ) {
+ if( i&1 )
+ cp -= delta; // Test operator-=
+ else
+ cp = cp - delta; // Test operator-
+ j -= delta;
+ }
+ }
+
+ for( int i=0; size_t(i)<u.size(); i=(i<50?i+1:i*3) )
+ for( int j=-i; size_t(i+j)<u.size(); j=(j<50?j+1:j*5) ) {
+ ASSERT( (u.begin()+i)[j].bar()==i+j, NULL );
+ ASSERT( (v.begin()+i)[j].bar()==i+j, NULL );
+ ASSERT( (i+u.begin())[j].bar()==i+j, NULL );
+ ASSERT( (i+v.begin())[j].bar()==i+j, NULL );
+ }
+
+ CheckIteratorComparison<typename V::iterator, typename V::iterator>(v);
+ CheckIteratorComparison<typename V::iterator, typename V::const_iterator>(v);
+ CheckIteratorComparison<typename V::const_iterator, typename V::iterator>(v);
+ CheckIteratorComparison<typename V::const_iterator, typename V::const_iterator>(v);
+
+ TestIteratorAssignment<typename V::const_iterator>( u.begin() );
+ TestIteratorAssignment<typename V::const_iterator>( v.begin() );
+ TestIteratorAssignment<typename V::iterator>( v.begin() );
+
+ // Check reverse_iterator
+ typename V::reverse_iterator rp = v.rbegin();
+ for( size_t i=v.size(); i>0; --i, ++rp ) {
+ typename V::reference pref = *rp;
+ ASSERT( size_t(pref.bar())==i-1, NULL );
+ ASSERT( rp!=v.rend(), NULL );
+ }
+ ASSERT( rp==v.rend(), NULL );
+
+ // Check const_reverse_iterator
+ typename V::const_reverse_iterator crp = u.rbegin();
+ for( size_t i=v.size(); i>0; --i, ++crp ) {
+ typename V::const_reference cpref = *crp;
+ ASSERT( size_t(cpref.bar())==i-1, NULL );
+ ASSERT( crp!=u.rend(), NULL );
+ }
+ ASSERT( crp==u.rend(), NULL );
+
+ TestIteratorAssignment<typename V::const_reverse_iterator>( u.rbegin() );
+ TestIteratorAssignment<typename V::reverse_iterator>( v.rbegin() );
+}
+
+static const size_t Modulus = 7;
+
+typedef tbb::concurrent_vector<Foo> MyVector;
+
+class GrowToAtLeast {
+ MyVector& my_vector;
+public:
+ void operator()( const tbb::blocked_range<size_t>& range ) const {
+ for( size_t i=range.begin(); i!=range.end(); ++i ) {
+ size_t n = my_vector.size();
+ size_t k = n==0 ? 0 : i % (2*n+1);
+ my_vector.grow_to_at_least(k+1);
+ ASSERT( my_vector.size()>=k+1, NULL );
+ }
+ }
+ GrowToAtLeast( MyVector& vector ) : my_vector(vector) {}
+};
+
+void TestConcurrentGrowToAtLeast() {
+ MyVector v;
+ for( size_t s=1; s<1000; s*=10 ) {
+ tbb::parallel_for( tbb::blocked_range<size_t>(0,1000000,100), GrowToAtLeast(v) );
+ }
+}
+
+//! Test concurrent invocations of method concurrent_vector::grow_by
+class GrowBy {
+ MyVector& my_vector;
+public:
+ void operator()( const tbb::blocked_range<int>& range ) const {
+ for( int i=range.begin(); i!=range.end(); ++i ) {
+ if( i%3 ) {
+ Foo& element = my_vector[my_vector.grow_by(1)];
+ element.bar() = i;
+ } else {
+ Foo f;
+ f.bar() = i;
+ size_t k = my_vector.push_back( f );
+ ASSERT( my_vector[k].bar()==i, NULL );
+ }
+ }
+ }
+ GrowBy( MyVector& vector ) : my_vector(vector) {}
+};
+
+//! Test concurrent invocations of method concurrent_vector::grow_by
+void TestConcurrentGrowBy( int nthread ) {
+ int m = 100000;
+ MyVector v;
+ tbb::parallel_for( tbb::blocked_range<int>(0,m,1000), GrowBy(v) );
+ ASSERT( v.size()==size_t(m), NULL );
+
+ // Verify that v is a permutation of 0..m
+ int inversions = 0;
+ bool* found = new bool[m];
+ memset( found, 0, m );
+ for( int i=0; i<m; ++i ) {
+ int index = v[i].bar();
+ ASSERT( !found[index], NULL );
+ found[index] = true;
+ if( i>0 )
+ inversions += v[i].bar()<v[i-1].bar();
+ }
+ for( int i=0; i<m; ++i ) {
+ ASSERT( found[i], NULL );
+ ASSERT( nthread>1 || v[i].bar()==i, "sequential execution is wrong" );
+ }
+ delete[] found;
+ if( nthread>1 && inversions<m/10 )
+ printf("WARNING: not much concurrency in TestConcurrentGrowBy\n");
+}
+
+//! Test the assignment operator
+void TestAssign() {
+ typedef tbb::concurrent_vector<FooWithAssign> vector_t;
+ for( int dst_size=1; dst_size<=128; NextSize( dst_size ) ) {
+ for( int src_size=2; src_size<=128; NextSize( src_size ) ) {
+ vector_t u;
+ u.grow_to_at_least(src_size);
+ for( int i=0; i<src_size; ++i )
+ u[i].bar() = i*i;
+ vector_t v;
+ v.grow_to_at_least(dst_size);
+ for( int i=0; i<dst_size; ++i )
+ v[i].bar() = -i;
+ v = u;
+ u.clear();
+ ASSERT( u.size()==0, NULL );
+ ASSERT( v.size()==size_t(src_size), NULL );
+ for( int i=0; i<src_size; ++i )
+ ASSERT( v[i].bar()==(i*i), NULL );
+ }
+ }
+}
+
+//------------------------------------------------------------------------
+// Regression test for problem where on oversubscription caused
+// concurrent_vector::grow_by to run very slowly (TR#196).
+//------------------------------------------------------------------------
+
+#include "tbb/task_scheduler_init.h"
+#include <math.h>
+
+typedef unsigned long Number;
+
+static tbb::concurrent_vector<Number> Primes;
+
+class FindPrimes {
+ bool is_prime( Number val ) const {
+ int limit, factor = 3;
+ if( val<5u )
+ return val==2;
+ else {
+ limit = long(sqrtf(float(val))+0.5f);
+ while( factor<=limit && val % factor )
+ ++factor;
+ return factor>limit;
+ }
+ }
+public:
+ void operator()( const tbb::blocked_range<Number>& r ) const {
+ for( Number i=r.begin(); i!=r.end(); ++i ) {
+ if( i%2 && is_prime(i) ) {
+ Primes[Primes.grow_by(1)] = i;
+ }
+ }
+ }
+};
+
+static double TimeFindPrimes( int nthread ) {
+ Primes.clear();
+ tbb::task_scheduler_init init(nthread);
+ tbb::tick_count t0 = tbb::tick_count::now();
+ tbb::parallel_for( tbb::blocked_range<Number>(0,1000000,500), FindPrimes() );
+ tbb::tick_count t1 = tbb::tick_count::now();
+ return (t1-t0).seconds();
+}
+
+static void TestFindPrimes() {
+ // Time fully subscribed run.
+ double t2 = TimeFindPrimes( tbb::task_scheduler_init::automatic );
+
+ // Time parallel run that is very likely oversubscribed.
+ double t128 = TimeFindPrimes(128);
+
+ if( Verbose )
+ printf("TestFindPrimes: t2==%g t128=%g\n", t2, t128 );
+
+ // We allow the 128-thread run a little extra time to allow for thread overhead.
+ // Theoretically, following test will fail on machine with >128 processors.
+ // But that situation is not going to come up in the near future,
+ // and the generalization to fix the issue is not worth the trouble.
+ if( t128>1.10*t2 ) {
+ printf("Warning: grow_by is pathetically slow: t2==%g t128=%g\n", t2, t128);
+ }
+}
+
+//------------------------------------------------------------------------
+// Test compatibility with STL sort.
+//------------------------------------------------------------------------
+
+#include <algorithm>
+
+void TestSort() {
+ for( int n=1; n<100; n*=3 ) {
+ tbb::concurrent_vector<int> array;
+ array.grow_by( n );
+ for( int i=0; i<n; ++i )
+ array[i] = (i*7)%n;
+ std::sort( array.begin(), array.end() );
+ for( int i=0; i<n; ++i )
+ ASSERT( array[i]==i, NULL );
+ }
+}
+
+//------------------------------------------------------------------------
+
+//! Test driver
+int main( int argc, char* argv[] ) {
+ // Test requires at least one thread.
+ MinThread = 1;
+ ParseCommandLine( argc, argv );
+ if( MinThread<1 ) {
+ printf("ERROR: MinThread=%d, but must be at least 1\n",MinThread);
+ }
+
+ TestIteratorTraits<tbb::concurrent_vector<Foo>::iterator,Foo>();
+ TestIteratorTraits<tbb::concurrent_vector<Foo>::const_iterator,const Foo>();
+ TestSequentialFor<tbb::concurrent_vector<Foo> > ();
+ TestResizeAndCopy();
+ TestAssign();
+ TestCapacity();
+ for( int nthread=MinThread; nthread<=MaxThread; ++nthread ) {
+ tbb::task_scheduler_init init( nthread );
+ TestParallelFor( nthread );
+ TestConcurrentGrowToAtLeast();
+ TestConcurrentGrowBy( nthread );
+ }
+ TestFindPrimes();
+ TestSort();
+ printf("done\n");
+ return 0;
+}
diff --git a/src/test/test_halt.cpp b/src/test/test_halt.cpp
new file mode 100644
index 0000000..7e20c0a
--- /dev/null
+++ b/src/test/test_halt.cpp
@@ -0,0 +1,123 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include <cstdio>
+#include <cstdlib>
+#include <cassert>
+#include <utility>
+#include "tbb/task.h"
+#include "tbb/task_scheduler_init.h"
+#include "tbb/tick_count.h"
+#include "tbb/parallel_for.h"
+#include "tbb/blocked_range.h"
+#include "tbb/mutex.h"
+#include "tbb/spin_mutex.h"
+#include "tbb/queuing_mutex.h"
+#include "harness.h"
+
+using namespace std;
+using namespace tbb;
+
+///////////////////// Parallel methods ////////////////////////
+
+// *** Serial shared by mutexes *** //
+int SharedI = 1, SharedN;
+template<typename M>
+class SharedSerialFibBody {
+ M &mutex;
+public:
+ SharedSerialFibBody( M &m ) : mutex( m ) {}
+ //! main loop
+ void operator()( const blocked_range<int>& range ) const {
+ for(;;) {
+ typename M::scoped_lock lock( mutex );
+ if(SharedI >= SharedN) break;
+ volatile double sum = 7.3; sum *= 11.17;
+ ++SharedI;
+ }
+ }
+};
+
+//! Root function
+template<class M>
+void SharedSerialFib(int n)
+{
+ SharedI = 1; SharedN = n; M mutex;
+ parallel_for( blocked_range<int>(0,4,1), SharedSerialFibBody<M>( mutex ) );
+}
+
+/////////////////////////// Main ////////////////////////////////////////////////////
+
+double Tsum = 0; int Tnum = 0;
+
+typedef void (*MeasureFunc)(int);
+//! Measure ticks count in loop [2..n]
+void Measure(const char *name, MeasureFunc func, int n)
+{
+ tick_count t0;
+ tick_count::interval_t T;
+ if( Verbose )
+ printf(name);
+ t0 = tick_count::now();
+ for(int number = 2; number <= n; number++)
+ func(number);
+ T = tick_count::now() - t0;
+ double avg = Tnum? Tsum/Tnum : 1;
+ if (avg == 0.0) avg = 1;
+ if(avg * 100 < T.seconds()) {
+ printf("Warning: halting detected (%g sec, av: %g)\n", T.seconds(), avg);
+ ASSERT(avg * 1000 > T.seconds(), "Too long halting period");
+ } else {
+ Tsum += T.seconds(); Tnum++;
+ }
+ if( Verbose )
+ printf("\t- in %f msec\n", T.seconds()*1000);
+}
+
+//! program entry
+int main( int argc, char* argv[] ) {
+ MaxThread = 8; MinThread = 2;
+ ParseCommandLine( argc, argv );
+ int NumbersCount = 100;
+ short recycle = 100;
+
+ do {
+ for(int threads = 2; threads <= MaxThread; threads++)
+ {
+ task_scheduler_init scheduler_init(threads);
+ if( Verbose )
+ printf("Threads number is %d\t", threads);
+ Measure("Shared serial (wrapper mutex)\t", SharedSerialFib<mutex>, NumbersCount);
+ //sum = Measure("Shared serial (spin_mutex)", SharedSerialFib<tbb::spin_mutex>, NumbersCount);
+ //sum = Measure("Shared serial (queuing_mutex)", SharedSerialFib<tbb::queuing_mutex>, NumbersCount);
+ }
+ } while(--recycle);
+ if(!Verbose)
+ printf("done\n");
+ return 0;
+}
diff --git a/src/test/test_handle_perror.cpp b/src/test/test_handle_perror.cpp
new file mode 100644
index 0000000..5abf6bc
--- /dev/null
+++ b/src/test/test_handle_perror.cpp
@@ -0,0 +1,56 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+// Program for basic correctness of handle_perror, which is internal
+// to the TBB shared library.
+
+#include <cerrno>
+#include <stdexcept>
+#include "tbb/tbb_misc.h"
+#include "harness.h"
+
+static void TestHandlePerror() {
+ bool caught = false;
+ try {
+ tbb::internal::handle_perror( EAGAIN, "apple" );
+ } catch( std::runtime_error& e ) {
+ if( Verbose )
+ printf("caught runtime_exception('%s')\n",e.what());
+ ASSERT( memcmp(e.what(),"apple: ",7)==0, NULL );
+ ASSERT( strstr(e.what(),"unavailable")!=NULL, "bad error message?" );
+ caught = true;
+ }
+ ASSERT(caught,NULL);
+}
+
+int main( int argc, char* argv[] ) {
+ ParseCommandLine( argc, argv );
+ TestHandlePerror();
+ printf("done\n");
+ return 0;
+}
diff --git a/src/test/test_inits_loop.cpp b/src/test/test_inits_loop.cpp
new file mode 100644
index 0000000..25c1d2d
--- /dev/null
+++ b/src/test/test_inits_loop.cpp
@@ -0,0 +1,93 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "harness.h"
+#include <cstdlib>
+#include <cstdio>
+#include "tbb/task_scheduler_init.h"
+
+#if __APPLE__
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+#include <signal.h>
+#include <errno.h>
+
+bool exec_test(const char *self) {
+ int status = 1;
+ pid_t p = fork();
+ if(p < 0) {
+ printf("fork error: errno=%d: %s\n", errno, strerror(errno));
+ return true;
+ }
+ else if(p) { // parent
+ if(waitpid(p, &status, 0) != p) {
+ printf("wait error: errno=%d: %s\n", errno, strerror(errno));
+ return true;
+ }
+ if(WIFEXITED(status)) {
+ if(!WEXITSTATUS(status)) return false; // ok
+ else printf("child has exited with return code 0x%x\n", WEXITSTATUS(status));
+ } else {
+ printf("child error 0x%x:%s%s ", status, WIFSIGNALED(status)?" signalled":"",
+ WIFSTOPPED(status)?" stopped":"");
+ if(WIFSIGNALED(status))
+ printf("%s%s", sys_siglist[WTERMSIG(status)], WCOREDUMP(status)?" core dumped":"");
+ if(WIFSTOPPED(status))
+ printf("with %d stop-code", WSTOPSIG(status));
+ printf("\n");
+ }
+ }
+ else { // child
+ // reproduces error much often
+ execl(self, self, "0", NULL);
+ printf("exec fails %s: %d: %s\n", self, errno, strerror(errno));
+ exit(2);
+ }
+ return true;
+}
+#endif
+
+int main( int argc, char * argv[] ) {
+ MinThread = 3000;
+ ParseCommandLine( argc, argv );
+ if( MinThread <= 0 ) {
+ tbb::task_scheduler_init init( 2 ); // even number reuired for an error
+ } else {
+#if __APPLE__
+ for(int i = 0; i<MinThread; i++)
+ if(exec_test(argv[0])) {
+ printf("ERROR: execution fails at %d-th iteration!\n", i);
+ exit(1);
+ }
+
+#endif
+ printf("done\n");
+ }
+ return 0;
+}
diff --git a/src/test/test_malloc_compliance.cpp b/src/test/test_malloc_compliance.cpp
new file mode 100644
index 0000000..2ab6fd1
--- /dev/null
+++ b/src/test/test_malloc_compliance.cpp
@@ -0,0 +1,724 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#define MByte 1048576 //1MB
+
+#if _WIN32 || _WIN64
+#undef _WIN32_WINNT
+#define _WIN32_WINNT 0x0500
+#include <windows.h>
+void limitMem( int limit )
+{
+ JOBOBJECT_EXTENDED_LIMIT_INFORMATION jobInfo;
+ jobInfo.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_PROCESS_MEMORY;
+ jobInfo.ProcessMemoryLimit = limit*MByte;
+ HANDLE hJob = CreateJobObject(NULL, NULL);
+ AssignProcessToJobObject(hJob, GetCurrentProcess());
+ SetInformationJobObject(hJob, JobObjectExtendedLimitInformation, &jobInfo, sizeof(jobInfo));
+}
+#else
+#include <sys/resource.h>
+void limitMem( int limit )
+{
+ rlimit rlim;
+ rlim.rlim_cur = limit*MByte;
+ rlim.rlim_max = limit*MByte;
+ setrlimit(RLIMIT_AS,&rlim);
+}
+#endif
+
+#include <time.h>
+#include <errno.h>
+#include <vector>
+#include "tbb/scalable_allocator.h"
+
+#include "tbb/blocked_range.h"
+#include "test/harness.h"
+
+#pragma pack(1)
+
+#define COUNT_ELEM_CALLOC 2
+#define COUNT_TESTS 1000
+
+#define COUNT_ELEM 50000
+#define MAX 1000
+#define MByte 1048576 //1MB
+#define APPROACHES 100
+#define COUNTEXPERIMENT 10000
+#define MB 25
+#define MB_MAX 500
+
+const char strError[]="failed";
+const char strOk[]="done";
+
+typedef unsigned int UINT;
+typedef unsigned char UCHAR;
+typedef unsigned long DWORD;
+typedef unsigned char BYTE;
+
+
+typedef void* TestMalloc(size_t size);
+typedef void* TestCalloc(size_t num, size_t size);
+typedef void* TestRealloc(void* memblock, size_t size);
+typedef void TestFree(void* memblock);
+
+TestMalloc* Tmalloc;
+TestCalloc* Tcalloc;
+TestRealloc* Trealloc;
+TestFree* Tfree;
+
+
+using namespace tbb;
+
+
+
+struct MemStruct
+{
+ void* Pointer;
+ UINT Size;
+};
+
+class CMemTest
+{
+ UINT CountErrors;
+public:
+ bool FullLog;
+
+ CMemTest();
+ CMemTest(bool verb);
+ void ReallocParam(); // realloc with different parameters
+ void InvariantDataRealloc(); //realloc does not change data
+ void NULLReturn(UINT MinSize, UINT MaxSize); // NULL pointer + check errno
+ void UniquePointer(); // unique pointer - check with padding
+ void AddrArifm(); // unique pointer - check with pointer arithmetic
+ void Free_NULL(); //
+ void Zerofilling(); // check if arrays are zero-filled
+ void RunAllTests();
+ ~CMemTest() {};
+};
+
+int argC;
+char** argV;
+
+struct RoundRobin {
+ const long number_of_threads;
+ mutable CMemTest test;
+ RoundRobin( long p ) : number_of_threads(p) ,test() {}
+
+ void operator()( const tbb::blocked_range<long> &r ) const
+ {
+ test.FullLog=Verbose;
+ test.RunAllTests();
+ }
+};
+
+
+
+int main(int argc, char* argv[])
+{
+ argC=argc;
+ argV=argv;
+ MaxThread = MinThread = 1;
+ Tmalloc=scalable_malloc;
+ Trealloc=scalable_realloc;
+ Tcalloc=scalable_calloc;
+ Tfree=scalable_free;
+ // check if we were called to test standard behavior
+ for (int i=1; i< argc; i++) {
+ if (strcmp((char*)*(argv+i),"-s")==0)
+ {
+ argC--;
+ Tmalloc=malloc;
+ Trealloc=realloc;
+ Tcalloc=calloc;
+ Tfree=free;
+ break;
+ }
+ }
+ ParseCommandLine( argC, argV );
+ limitMem( 500*MaxThread );
+ //-------------------------------------
+ for( int p=MaxThread; p>=MinThread; --p ) {
+ limitMem( 500*p );
+ if( Verbose ) printf("testing with %d threads\n", p );
+ NativeParallelFor( tbb::blocked_range<long>(0,p,1), RoundRobin(p) );
+ }
+ printf("done\n");
+ return 0;
+}
+
+struct TestStruct
+{
+ DWORD field1:2;
+ DWORD field2:6;
+ double field3;
+ UCHAR field4[100];
+ TestStruct* field5;
+// std::string field6;
+ std::vector<int> field7;
+ double field8;
+ bool IzZero()
+ {
+ UCHAR *tmp;
+ tmp=(UCHAR*)this;
+ bool b=true;
+ for (int i=0; i<sizeof(TestStruct); i++)
+ if (tmp[i]) b=false;
+ return b;
+ }
+};
+
+
+CMemTest::CMemTest()
+{
+ time_t zzz;
+ srand((UINT)time(&zzz));
+ FullLog=false;
+ UINT i=rand()%100;
+}
+CMemTest::CMemTest(bool verb)
+{
+ time_t zzz;
+ srand((UINT)time(&zzz));
+ FullLog=verb;
+ UINT i=rand()%100;
+}
+
+void CMemTest::InvariantDataRealloc()
+{
+ UINT size, sizeMin;
+ CountErrors=0;
+ if (FullLog) printf("\nInvariant data by realloc....");
+ UCHAR* pchar;
+ sizeMin=size=rand()%MAX+10;
+ pchar=(UCHAR*)Trealloc(NULL,size);
+ for (UINT k=0; k<size; k++)
+ pchar[k]=(UCHAR)k%255+1;
+ for (UINT i=0; i<COUNTEXPERIMENT; i++)
+ {
+ size=rand()%MAX+10;
+ sizeMin=size<sizeMin ? size : sizeMin;
+ pchar=(UCHAR*)Trealloc(pchar,size);
+ for (UINT k=0; k<sizeMin; k++)
+ if (pchar[k] != (UCHAR)k%255+1)
+ {
+ CountErrors++;
+ if (FullLog)
+ {
+ printf("stand '%c', must stand '%c'\n",pchar[k],(UCHAR)k%255+1);
+ printf("error: data changed (at %d, SizeMin=%d)\n",k,sizeMin);
+ }
+ }
+ }
+ Trealloc(pchar,0);
+ if (CountErrors) printf("%s\n",strError);
+ else if (FullLog) printf("%s\n",strOk);
+ //printf("end check\n");
+}
+void CMemTest::ReallocParam()
+{
+ TestStruct *TSold, *TSnew;
+ CountErrors=0;
+ UINT CountTry=0;
+ if (FullLog) printf("\nrealloc with different params....");
+ //
+ for (UINT i=0; i<COUNTEXPERIMENT; i++)
+ {
+ TSnew=(TestStruct*)Tmalloc(sizeof(TestStruct)); // allocate memory
+ TSold=TSnew; // store address
+ Tfree(TSnew); // free memory
+ TSnew=(TestStruct*)Tmalloc(sizeof(TestStruct));
+ while (TSnew != TSold)
+ {
+ CountTry++;
+ TSold=TSnew;
+ Tfree(TSnew);
+ TSnew=(TestStruct*)Tmalloc(sizeof(TestStruct));
+ }
+ TSold=TSnew;
+ Trealloc(TSnew,0); //realloc should work as free
+ TSnew=NULL;
+ TSnew=(TestStruct*)Trealloc(NULL,sizeof(TestStruct)); //realloc should work as malloc
+ if (TSold == TSnew)
+ {
+/* if (FullLog)
+ {
+ printf("CountTry: %d\n", CountTry);
+ printf("realloc ok\n");
+ }
+*/
+ }
+ else
+ {
+ CountErrors++;
+ if (FullLog) printf("realloc error");
+ }
+ }
+ if (CountErrors) printf("%s\n",strError);
+ else if (FullLog) printf("%s\n",strOk);
+}
+
+void CMemTest::AddrArifm()
+{
+ int* MasPointer[COUNT_ELEM];
+ UINT MasCountElem[COUNT_ELEM];
+ DWORD count;
+ int* tmpAddr;
+ UINT j;
+ UINT CountZero=0;
+ CountErrors=0;
+ if (FullLog) printf("\nUnique pointer using Address arithmetics\n");
+ if (FullLog) printf("malloc....");
+ for (UINT i=0; i<COUNT_ELEM; i++)
+ {
+ count=rand()%MAX;
+ if (count == 0)
+ CountZero++;
+ tmpAddr=(int*)Tmalloc(count*sizeof(int));
+ for (j=0; j<i; j++) // find a place for the new address
+ {
+ if (*(MasPointer+j)>tmpAddr) break;
+ }
+ for (UINT k=i; k>j; k--)
+ {
+ MasPointer[k]=MasPointer[k-1];
+ MasCountElem[k]=MasCountElem[k-1];
+ }
+ MasPointer[j]=tmpAddr;
+ MasCountElem[j]=count*sizeof(int);/**/
+ }
+ if (FullLog) printf("Count zero: %d\n",CountZero);
+ for (int i=0; i<COUNT_ELEM-1; i++)
+ {
+ if ((DWORD)MasPointer[i]+MasCountElem[i] > (DWORD)MasPointer[i+1])
+ {
+ CountErrors++;
+// if (FullLog) printf("intersection detect at 0x%x between %d element(int) and 0x%x\n"
+// ,(MasPointer+i),MasCountElem[i],(MasPointer+i+1));
+ }
+ }
+ if (CountErrors) printf("%s\n",strError);
+ else if (FullLog) printf("%s\n",strOk);
+ //----------------------------------------------------------------
+ CountErrors=0;
+ if (FullLog) printf("realloc....");
+ for (UINT i=0; i<COUNT_ELEM; i++)
+ {
+ count=MasCountElem[i]*2;
+ if (count == 0)
+ CountZero++;
+ tmpAddr=(int*)Trealloc(MasPointer[i],count);
+ for (j=0; j<i; j++) // find a place for the new address
+ {
+ if (*(MasPointer+j)>tmpAddr) break;
+ }
+ for (UINT k=i; k>j; k--)
+ {
+ MasPointer[k]=MasPointer[k-1];
+ MasCountElem[k]=MasCountElem[k-1];
+ }
+ MasPointer[j]=tmpAddr;
+ MasCountElem[j]=count;//*sizeof(int);/**/
+ }
+ if (FullLog) printf("Count zero: %d\n",CountZero);
+
+ // now we have a sorted array of pointers
+ for (int i=0; i<COUNT_ELEM-1; i++)
+ {
+ if ((DWORD)MasPointer[i]+MasCountElem[i] > (DWORD)MasPointer[i+1])
+ {
+ CountErrors++;
+// if (FullLog) printf("intersection detect at 0x%x between %d element(int) and 0x%x\n"
+// ,(MasPointer+i),MasCountElem[i],(MasPointer+i+1));
+ }
+ }
+ if (CountErrors) printf("%s\n",strError);
+ else if (FullLog) printf("%s\n",strOk);
+ for (int i=0; i<COUNT_ELEM; i++)
+ {
+ Tfree(MasPointer[i]);
+ }
+ //-------------------------------------------
+ CountErrors=0;
+ if (FullLog) printf("calloc....");
+ for (UINT i=0; i<COUNT_ELEM; i++)
+ {
+ count=rand()%MAX;
+ if (count == 0)
+ CountZero++;
+ tmpAddr=(int*)Tcalloc(count*sizeof(int),2);
+ for (j=0; j<i; j++) // find a place for the new address
+ {
+ if (*(MasPointer+j)>tmpAddr) break;
+ }
+ for (UINT k=i; k>j; k--)
+ {
+ MasPointer[k]=MasPointer[k-1];
+ MasCountElem[k]=MasCountElem[k-1];
+ }
+ MasPointer[j]=tmpAddr;
+ MasCountElem[j]=count*sizeof(int)*2;/**/
+ }
+ if (FullLog) printf("Count zero: %d\n",CountZero);
+
+ // now we have a sorted array of pointers
+ for (int i=0; i<COUNT_ELEM-1; i++)
+ {
+ if ((DWORD)MasPointer[i]+MasCountElem[i] > (DWORD)MasPointer[i+1])
+ {
+ CountErrors++;
+// if (FullLog) printf("intersection detect at 0x%x between %d element(int) and 0x%x\n"
+// ,(MasPointer+i),MasCountElem[i],(MasPointer+i+1));
+ }
+ }
+ if (CountErrors) printf("%s\n",strError);
+ else if (FullLog) printf("%s\n",strOk);
+ for (int i=0; i<COUNT_ELEM; i++)
+ {
+ Tfree(MasPointer[i]);
+ }
+}
+
+void CMemTest::Zerofilling()
+{
+ TestStruct* TSMas;
+ int CountElement;
+ CountErrors=0;
+ if (FullLog) printf("\nzeroings elements of array....");
+ //test struct
+ for (int i=0; i<COUNTEXPERIMENT; i++)
+ {
+ CountElement=rand()%MAX;
+ TSMas=(TestStruct*)Tcalloc(CountElement,sizeof(TestStruct));
+ for (int j=0; j<CountElement; j++)
+ {
+ if (!TSMas->IzZero())
+ {
+ CountErrors++;
+ if (FullLog) printf("detect nonzero element at TestStruct\n");
+ }
+ }
+ Tfree(TSMas);
+ }
+ if (CountErrors) printf("%s\n",strError);
+ else if (FullLog) printf("%s\n",strOk);
+}
+
+
+
+void CMemTest::NULLReturn(UINT MinSize, UINT MaxSize)
+{
+ std::vector<MemStruct> PointerList;
+ MemStruct MStruct;
+ void *tmp=Tmalloc(MByte);
+ CountErrors=0;
+ int CountNULL;
+ if (FullLog) printf("\nNULL return & check errno:\n");
+ UINT i=0;
+ UINT Size;
+ BYTE *zer;
+ /* //----------------------------------------------
+ float mb=0;
+ UINT mbInd=0;
+ if (FullLog)
+ {
+ printf("0");
+ for (i=0; i<MB_MAX/MB; i++)
+ printf(" ");
+ printf("500Mb");
+ for (i=0; i<MB_MAX/MB-4; i++)
+ printf(" ");
+ printf("1Gb\n");
+ }
+ */ //----------------------------------------------
+ while(tmp != NULL)
+ {
+ Size=rand()%(MaxSize-MinSize)+MinSize;
+ /* //----------------------------------------------
+ if (FullLog)
+ {
+ mb+=((float)Size)/MByte;
+ if (mb > mbInd)
+ {
+ printf(".");
+ mbInd+=MB;
+ }
+ }
+ */ //----------------------------------------------
+ tmp=Tmalloc(Size);
+ if (tmp != NULL)
+ {
+ zer=(BYTE*)tmp;
+ for (UINT k=0; k<Size; k++)
+ zer[k]=0;
+ MStruct.Pointer=tmp;
+ MStruct.Size=Size;
+ PointerList.push_back(MStruct);
+ }
+ i++;
+ }
+ if (FullLog) printf("\n");
+
+ // preparation complete, now running tests
+ // malloc
+ if (FullLog) printf("malloc....");
+ CountNULL = 0;
+ while (CountNULL==0)
+ for (int j=0; j<COUNT_TESTS; j++)
+ {
+ Size=rand()%(MaxSize-MinSize)+MinSize;
+ errno = 0;
+ tmp=Tmalloc(Size);
+ if (tmp == NULL)
+ {
+ CountNULL++;
+ if (errno != ENOMEM) {
+ CountErrors++;
+ if (FullLog) printf("NULL returned, error: errno != ENOMEM\n");
+ }
+ }
+ else
+ {
+ if (errno != 0) {
+ CountErrors++;
+ if (FullLog) printf("valid pointer returned, error: errno not kept\n");
+ }
+ zer=(BYTE*)tmp;
+ for (UINT k=0; k<Size; k++)
+ zer[k]=0;
+ MStruct.Pointer=tmp;
+ MStruct.Size=Size;
+ PointerList.push_back(MStruct);
+ i++;
+ }
+ }
+ if (FullLog) printf("end malloc\n");
+ if (CountErrors) printf("%s\n",strError);
+ else if (FullLog) printf("%s\n",strOk);
+ CountErrors=0;
+ //calloc
+ if (FullLog) printf("calloc....");
+ CountNULL = 0;
+ while (CountNULL==0)
+ for (int j=0; j<COUNT_TESTS; j++)
+ {
+ Size=rand()%(MaxSize-MinSize)+MinSize;
+ errno = 0;
+ tmp=Tcalloc(COUNT_ELEM_CALLOC,Size);
+ if (tmp == NULL)
+ {
+ CountNULL++;
+ if (errno != ENOMEM) {
+ CountErrors++;
+ if (FullLog) printf("NULL returned, error: errno != ENOMEM\n");
+ }
+ }
+ else
+ {
+ if (errno != 0) {
+ CountErrors++;
+ if (FullLog) printf("valid pointer returned, error: errno not kept\n");
+ }
+ MStruct.Pointer=tmp;
+ MStruct.Size=Size;
+ PointerList.push_back(MStruct);
+ i++;
+ }
+ }
+ if (FullLog) printf("end calloc\n");
+ if (CountErrors) printf("%s\n",strError);
+ else if (FullLog) printf("%s\n",strOk);
+ CountErrors=0;
+ if (FullLog) printf("realloc....");
+ CountNULL = 0;
+ while (CountNULL==0)
+ for (i=0;i<COUNT_TESTS && i<PointerList.size();i++)
+ {
+ errno = 0;
+ tmp=Trealloc(PointerList[i].Pointer,PointerList[i].Size*2);
+ if (PointerList[i].Pointer == tmp) // the same place
+ {
+ if (errno != 0) {
+ CountErrors++;
+ if (FullLog) printf("valid pointer returned, error: errno not kept\n");
+ }
+ PointerList[i].Size *= 2;
+ }
+ else if (tmp != PointerList[i].Pointer && tmp != NULL) // another place
+ {
+ if (errno != 0) {
+ CountErrors++;
+ if (FullLog) printf("valid pointer returned, error: errno not kept\n");
+ }
+ PointerList[i].Pointer = tmp;
+ PointerList[i].Size *= 2;
+ }
+ else if (tmp == NULL)
+ {
+ CountNULL++;
+ if (errno != ENOMEM)
+ {
+ CountErrors++;
+ if (FullLog) printf("NULL returned, error: errno != ENOMEM\n");
+ }
+ // check data integrity
+ zer=(BYTE*)PointerList[i].Pointer;
+ for (UINT k=0; k<PointerList[i].Size; k++)
+ if (zer[k] != 0)
+ {
+ CountErrors++;
+ if (FullLog) printf("NULL returned, error: data changed\n");
+ }
+ }
+ }
+ if (FullLog) printf("realloc end\n");
+ if (CountErrors) printf("%s\n",strError);
+ else if (FullLog) printf("%s\n",strOk);
+ for (UINT i=0; i<PointerList.size(); i++)
+ {
+ Tfree(PointerList[i].Pointer);
+ }
+}
+
+
+void CMemTest::UniquePointer()
+{
+ CountErrors=0;
+ int* MasPointer[COUNT_ELEM];
+ UINT MasCountElem[COUNT_ELEM];
+ if (FullLog) printf("\nUnique pointer using 0\n");
+ //
+ //-------------------------------------------------------
+ //malloc
+ for (int i=0; i<COUNT_ELEM; i++)
+ {
+ MasCountElem[i]=rand()%MAX;
+ MasPointer[i]=(int*)Tmalloc(MasCountElem[i]*sizeof(int));
+ for (UINT j=0; j<MasCountElem[i]; j++)
+ *(MasPointer[i]+j)=0;
+ }
+ if (FullLog) printf("malloc....");
+ for (UINT i=0; i<COUNT_ELEM-1; i++)
+ {
+ for (UINT j=0; j<MasCountElem[i]; j++)
+ {
+ if (*(*(MasPointer+i)+j)!=0)
+ {
+ CountErrors++;
+// if (FullLog) printf("error, detect 1 with 0x%x\n",(*(MasPointer+i)+j));
+ }
+ *(*(MasPointer+i)+j)+=1;
+ }
+ }
+ if (CountErrors) printf("%s\n",strError);
+ else if (FullLog) printf("%s\n",strOk);
+ //----------------------------------------------------------
+ //calloc
+ for (int i=0; i<COUNT_ELEM; i++)
+ Tfree(MasPointer[i]);
+ CountErrors=0;
+ for (long i=0; i<COUNT_ELEM; i++)
+ {
+ MasPointer[i]=(int*)Tcalloc(MasCountElem[i]*sizeof(int),2);
+ }
+ if (FullLog) printf("calloc....");
+ for (int i=0; i<COUNT_ELEM-1; i++)
+ {
+ for (UINT j=0; j<*(MasCountElem+i); j++)
+ {
+ if (*(*(MasPointer+i)+j)!=0)
+ {
+ CountErrors++;
+// if (FullLog) printf("error, detect 1 with 0x%x\n",(*(MasPointer+i)+j));
+ }
+ *(*(MasPointer+i)+j)+=1;
+ }
+ }
+ if (CountErrors) printf("%s\n",strError);
+ else if (FullLog) printf("%s\n",strOk);
+ //---------------------------------------------------------
+ //realloc
+ CountErrors=0;
+ for (UINT i=0; i<COUNT_ELEM; i++)
+ {
+ MasCountElem[i]*=2;
+ *(MasPointer+i)=(int*)Trealloc(*(MasPointer+i),MasCountElem[i]*sizeof(int));
+ for (UINT j=0; j<MasCountElem[i]; j++)
+ *(*(MasPointer+i)+j)=0;
+ }
+ if (FullLog) printf("realloc....");
+ for (int i=0; i<COUNT_ELEM-1; i++)
+ {
+ for (UINT j=0; j<*(MasCountElem+i); j++)
+ {
+ if (*(*(MasPointer+i)+j)!=0)
+ {
+ CountErrors++;
+ }
+ *(*(MasPointer+i)+j)+=1;
+ }
+ }
+ if (CountErrors) printf("%s\n",strError);
+ else if (FullLog) printf("%s\n",strOk);
+ for (int i=0; i<COUNT_ELEM; i++)
+ Tfree(MasPointer[i]);
+}
+
+void CMemTest::Free_NULL()
+{
+ CountErrors=0;
+ if (FullLog) printf("\ncall free with parameter NULL....");
+ for (UINT i=0; i<COUNTEXPERIMENT; i++)
+ {
+ Tfree(NULL);
+ if (errno != 0)
+ {
+ CountErrors++;
+ if (FullLog) printf("error is found by a call free with parameter NULL\n");
+ }
+ }
+ if (CountErrors) printf("%s\n",strError);
+ else if (FullLog) printf("%s\n",strOk);
+}
+
+void CMemTest::RunAllTests()
+{
+ Zerofilling();
+ Free_NULL();
+ InvariantDataRealloc();
+ ReallocParam();
+#if __APPLE__
+ printf("Warning: skipping some tests (known issue on Mac OS* X)\n");
+ return;
+#else
+ UniquePointer();
+ AddrArifm();
+ NULLReturn(1*MByte,100*MByte);
+#endif
+ if (FullLog) printf("All tests ended\nclearing memory....");
+}
diff --git a/src/test/test_malloc_pure_c.c b/src/test/test_malloc_pure_c.c
new file mode 100644
index 0000000..d887d91
--- /dev/null
+++ b/src/test/test_malloc_pure_c.c
@@ -0,0 +1,75 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#ifdef __cplusplus
+#error For testing purpose, this file should be compiled with a C compiler, not C++
+#endif /*__cplusplus */
+
+#include "tbb/scalable_allocator.h"
+#include <stdio.h>
+#include <assert.h>
+
+/*
+ * The test is to check if the scalable_allocator.h and its functions
+ * can be used from pure C programs; also some regression checks are done
+ */
+
+int main(void)
+{
+ size_t i, j;
+ void *p1=NULL, *p2=NULL;
+ for( i=0; i<=1<<16; ++i)
+ scalable_free(scalable_malloc(i));
+ for( i=1024*1024; ; i/=2 )
+ {
+ scalable_free(p1);
+ p1 = scalable_realloc(p2, i);
+ p2 = scalable_calloc(i, 32);
+ if (p2) {
+ if (i<sizeof(size_t)) {
+ for (j=0; j<i; j++)
+ assert(0==*((char*)p2+j));
+ } else {
+ for (j=0; j<i; j+=sizeof(size_t))
+ assert(0==*((size_t*)p2+j));
+ }
+ }
+ scalable_free(p2);
+ p2 = scalable_malloc(i);
+ if (i==0) break;
+ }
+ for( i=1; i<1024*1024; i*=2 )
+ {
+ scalable_free(p1);
+ p1 = scalable_realloc(p2, i);
+ p2 = scalable_malloc(i);
+ }
+ scalable_free(p2);
+ printf("done\n");
+ return 0;
+}
diff --git a/src/test/test_model_plugin.cpp b/src/test/test_model_plugin.cpp
new file mode 100644
index 0000000..afeaa9c
--- /dev/null
+++ b/src/test/test_model_plugin.cpp
@@ -0,0 +1,171 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#if _WIN32 || _WIN64
+#include <windows.h>
+#else
+#include <dlfcn.h>
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdexcept>
+
+#ifdef _USRDLL
+#include "tbb/task_scheduler_init.h"
+
+class CModel {
+public:
+ CModel(void) {};
+ static tbb::task_scheduler_init tbb_init;
+
+ void init_and_terminate( int );
+};
+
+tbb::task_scheduler_init CModel::tbb_init(1);
+
+//! Test that task::initialize and task::terminate work when doing nothing else.
+/** maxthread is treated as the "maximum" number of worker threads. */
+void CModel::init_and_terminate( int maxthread ) {
+ for( int i=0; i<200; ++i ) {
+ switch( i&3 ) {
+ default: {
+ tbb::task_scheduler_init init( rand() % maxthread + 1 );
+ break;
+ }
+ case 0: {
+ tbb::task_scheduler_init init;
+ break;
+ }
+ case 1: {
+ tbb::task_scheduler_init init( tbb::task_scheduler_init::automatic );
+ break;
+ }
+ case 2: {
+ tbb::task_scheduler_init init( tbb::task_scheduler_init::deferred );
+ init.initialize( rand() % maxthread + 1 );
+ init.terminate();
+ break;
+ }
+ }
+ }
+}
+
+extern "C"
+#if _WIN32 || _WIN64
+__declspec(dllexport)
+#endif
+void plugin_call(int maxthread)
+{
+ srand(2);
+ try {
+ CModel model;
+ model.init_and_terminate(maxthread);
+ } catch( std::runtime_error& error ) {
+ fprintf(stderr, "ERROR: %s\n", error.what());
+ }
+}
+
+#else /* _USRDLL undefined */
+
+#include "harness.h"
+
+extern "C" void plugin_call(int);
+
+void report_error_in(char* function_name)
+{
+#if _WIN32 || _WIN64
+ char* message;
+ int code = GetLastError();
+
+ FormatMessage(
+ FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
+ NULL, code,MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ (char*)&message, 0, NULL );
+#else
+ char* message = dlerror();
+ int code = 0;
+#endif
+ fprintf(stderr,
+ "%s failed with error %d: %s\n",
+ function_name, code, message);
+
+#if _WIN32 || _WIN64
+ LocalFree(message);
+#endif
+}
+
+typedef void (*PLUGIN_CALL)(int);
+
+int main(int argc, char* argv[])
+{
+ ParseCommandLine( argc, argv );
+
+ PLUGIN_CALL plugin_call;
+
+#if _WIN32 || _WIN64
+ HMODULE hLib = LoadLibrary("test_model_plugin.dll");
+ if (hLib==NULL){
+ report_error_in("LoadLibrary");
+ return -1;
+ }
+ plugin_call = (PLUGIN_CALL) GetProcAddress(hLib, "plugin_call");
+ if (plugin_call==NULL) {
+ report_error_in("GetProcAddress");
+ return -1;
+ }
+#else
+#if __APPLE__
+ char *dllname = "test_model_plugin.dylib";
+#else
+ char *dllname = "test_model_plugin.so";
+#endif
+ void* hLib = dlopen( dllname, RTLD_LAZY );
+ if (hLib==NULL){
+ report_error_in("dlopen");
+ return -1;
+ }
+ plugin_call = PLUGIN_CALL (dlsym(hLib, "plugin_call"));
+ if (plugin_call==NULL) {
+ report_error_in("dlsym");
+ return -1;
+ }
+#endif
+
+ plugin_call(MaxThread);
+
+#if _WIN32 || _WIN64
+ FreeLibrary(hLib);
+#else
+ dlclose(hLib);
+#endif
+ printf("done\n");
+ return 0;
+}
+
+#endif
diff --git a/src/test/test_mutex.cpp b/src/test/test_mutex.cpp
new file mode 100644
index 0000000..b5aecf1
--- /dev/null
+++ b/src/test/test_mutex.cpp
@@ -0,0 +1,294 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+//------------------------------------------------------------------------
+// Test TBB mutexes when used with parallel_for.h
+//
+// Usage: test_Mutex.exe [-v] nthread
+//
+// The -v option causes timing information to be printed.
+//
+// Compile with _OPENMP and -openmp
+//------------------------------------------------------------------------
+#include "tbb/spin_mutex.h"
+#include "tbb/spin_rw_mutex.h"
+#include "tbb/queuing_rw_mutex.h"
+#include "tbb/queuing_mutex.h"
+#include "tbb/mutex.h"
+#include "tbb/parallel_for.h"
+#include "tbb/blocked_range.h"
+#include "tbb/tick_count.h"
+#include "tbb/atomic.h"
+#include "harness.h"
+#include <cstdlib>
+#include <cstdio>
+#if _OPENMP
+#include "test/OpenMP_Mutex.h"
+#endif /* _OPENMP */
+
+
+#if __linux__
+#define STD std
+#else
+#define STD /* Cater to broken Windows compilers that are missing "std". */
+#endif /* __linux__ */
+
+// This test deliberately avoids a "using tbb" statement,
+// so that the error of putting types in the wrong namespace will be caught.
+
+template<typename M>
+struct Counter {
+ typedef M mutex_type;
+ M mutex;
+ volatile long value;
+};
+
+//! Function object for use with parallel_for.h.
+template<typename C>
+struct AddOne {
+ C& counter;
+ /** Increments counter once for each iteration in the iteration space. */
+ void operator()( tbb::blocked_range<size_t>& range ) const {
+ for( size_t i=range.begin(); i!=range.end(); ++i ) {
+ if( i&1 ) {
+ // Try implicit acquire and explicit release
+ typename C::mutex_type::scoped_lock lock(counter.mutex);
+ counter.value = counter.value+1;
+ lock.release();
+ } else {
+ // Try explicit acquire and implicit release
+ typename C::mutex_type::scoped_lock lock;
+ lock.acquire(counter.mutex);
+ counter.value = counter.value+1;
+ }
+ }
+ }
+ AddOne( C& counter_ ) : counter(counter_) {}
+};
+
+//! Generic test of a TBB mutex type M.
+/** Does not test features specific to reader-writer locks. */
+template<typename M>
+void Test( const char * name ) {
+ if( Verbose ) {
+ printf("%s time = ",name);
+ fflush(stdout);
+ }
+ Counter<M> counter;
+ counter.value = 0;
+ const int n = 100000;
+ tbb::tick_count t0 = tbb::tick_count::now();
+ tbb::parallel_for(tbb::blocked_range<size_t>(0,n,10000),AddOne<Counter<M> >(counter));
+ tbb::tick_count t1 = tbb::tick_count::now();
+ if( Verbose )
+ printf("%g usec\n",(t1-t0).seconds());
+ if( counter.value!=n )
+ STD::printf("ERROR for %s: counter.value=%ld\n",name,counter.value);
+}
+
+template<typename M, size_t N>
+struct Invariant {
+ typedef M mutex_type;
+ M mutex;
+ const char* mutex_name;
+ volatile long value[N];
+ volatile long single_value;
+ Invariant( const char* mutex_name_ ) :
+ mutex_name(mutex_name_)
+ {
+ single_value = 0;
+ for( size_t k=0; k<N; ++k )
+ value[k] = 0;
+ }
+ void update() {
+ for( size_t k=0; k<N; ++k )
+ ++value[k];
+ }
+ bool value_is( long expected_value ) const {
+ long tmp;
+ for( size_t k=0; k<N; ++k )
+// if( value[k]!=expected_value )
+// return false;
+ if( (tmp=value[k])!=expected_value ) {
+ printf("ATTN! %ld!=%ld\n", tmp, expected_value);
+ return false;
+ }
+ return true;
+ }
+ bool is_okay() {
+ return value_is( value[0] );
+ }
+};
+
+//! Function object for use with parallel_for.h.
+template<typename I>
+struct TwiddleInvariant {
+ I& invariant;
+ /** Increments counter once for each iteration in the iteration space. */
+ void operator()( tbb::blocked_range<size_t>& range ) const {
+ for( size_t i=range.begin(); i!=range.end(); ++i ) {
+ //! Every 8th access is a write access
+ bool write = (i%8)==7;
+ bool okay = true;
+ bool lock_kept = true;
+ if( (i/8)&1 ) {
+ // Try implicit acquire and explicit release
+ typename I::mutex_type::scoped_lock lock(invariant.mutex,write);
+ if( write ) {
+ long my_value = invariant.value[0];
+ invariant.update();
+ if( i%16==7 ) {
+ lock_kept = lock.downgrade_to_reader();
+ if( !lock_kept )
+ my_value = invariant.value[0] - 1;
+ okay = invariant.value_is(my_value+1);
+ }
+ } else {
+ okay = invariant.is_okay();
+ if( i%8==3 ) {
+ long my_value = invariant.value[0];
+ lock_kept = lock.upgrade_to_writer();
+ if( !lock_kept )
+ my_value = invariant.value[0];
+ invariant.update();
+ okay = invariant.value_is(my_value+1);
+ }
+ }
+ lock.release();
+ } else {
+ // Try explicit acquire and implicit release
+ typename I::mutex_type::scoped_lock lock;
+ lock.acquire(invariant.mutex,write);
+ if( write ) {
+ long my_value = invariant.value[0];
+ invariant.update();
+ if( i%16==7 ) {
+ lock_kept = lock.downgrade_to_reader();
+ if( !lock_kept )
+ my_value = invariant.value[0] - 1;
+ okay = invariant.value_is(my_value+1);
+ }
+ } else {
+ okay = invariant.is_okay();
+ if( i%8==3 ) {
+ long my_value = invariant.value[0];
+ lock_kept = lock.upgrade_to_writer();
+ if( !lock_kept )
+ my_value = invariant.value[0];
+ invariant.update();
+ okay = invariant.value_is(my_value+1);
+ }
+ }
+ }
+ if( !okay ) {
+ STD::printf( "ERROR for %s at %ld: %s %s %s %s\n",invariant.mutex_name, long(i),
+ write?"write,":"read,", write?(i%16==7?"downgrade,":""):(i%8==3?"upgrade,":""),
+ lock_kept?"lock kept,":"lock not kept,", (i/8)&1?"imp/exp":"exp/imp" );
+ }
+ }
+ }
+ TwiddleInvariant( I& invariant_ ) : invariant(invariant_) {}
+};
+
+/** This test is generic so that we can test any other kinds of ReaderWriter locks we write later. */
+template<typename M>
+void TestReaderWriterLock( const char * mutex_name ) {
+ if( Verbose ) {
+ printf("%s readers & writers time = ",mutex_name);
+ fflush(stdout);
+ }
+ Invariant<M,8> invariant(mutex_name);
+ const size_t n = 500000;
+ tbb::tick_count t0 = tbb::tick_count::now();
+ tbb::parallel_for(tbb::blocked_range<size_t>(0,n,5000),TwiddleInvariant<Invariant<M,8> >(invariant));
+ tbb::tick_count t1 = tbb::tick_count::now();
+ // There is either a writer or a reader upgraded to a writer for each 4th iteration
+ long expected_value = n/4;
+ if( !invariant.value_is(expected_value) )
+ STD::printf("ERROR for %s: final invariant value is wrong\n",mutex_name);
+ if( Verbose )
+ printf("%g usec\n",(t1-t0).seconds());
+}
+
+/** Test try_acquire functionality of a non-reenterable mutex */
+template<typename M>
+void TestTryAcquire_OneThread( const char * mutex_name ) {
+ M tested_mutex;
+ typename M::scoped_lock lock1;
+ if( lock1.try_acquire(tested_mutex) )
+ lock1.release();
+ else
+ STD::printf("ERROR for %s: try_acquire failed though it should not\n", mutex_name);
+ {
+ typename M::scoped_lock lock2(tested_mutex);
+ if( lock1.try_acquire(tested_mutex) )
+ STD::printf("ERROR for %s: try_acquire succeeded though it should not\n", mutex_name);
+ }
+ if( lock1.try_acquire(tested_mutex) )
+ lock1.release();
+ else
+ STD::printf("ERROR for %s: try_acquire failed though it should not\n", mutex_name);
+}
+
+#include "tbb/task_scheduler_init.h"
+
+int main( int argc, char * argv[] ) {
+ ParseCommandLine( argc, argv );
+ for( int p=MinThread; p<=MaxThread; ++p ) {
+ tbb::task_scheduler_init init( p );
+ if( Verbose )
+ printf( "testing with %d workers\n", static_cast<int>(p) );
+ // Run each test 3 times.
+ for( int i=0; i<3; ++i ) {
+ Test<tbb::spin_mutex>( "Spin Mutex" );
+#if _OPENMP
+ Test<OpenMP_Mutex>( "OpenMP_Mutex" );
+#endif /* _OPENMP */
+ Test<tbb::queuing_mutex>( "Queuing Mutex" );
+ Test<tbb::mutex>( "Wrapper Mutex" );
+ Test<tbb::queuing_rw_mutex>( "Queuing RW Mutex" );
+ Test<tbb::spin_rw_mutex>( "Spin RW Mutex" );
+
+ TestTryAcquire_OneThread<tbb::spin_mutex>("Spin Mutex");
+ TestTryAcquire_OneThread<tbb::queuing_mutex>("Queuing Mutex");
+#if USE_PTHREAD
+ // under ifdef because on Windows tbb::mutex is reenterable and the test will fail
+ TestTryAcquire_OneThread<tbb::mutex>("Wrapper Mutex");
+#endif /* USE_PTHREAD */
+ TestTryAcquire_OneThread<tbb::spin_rw_mutex>("Spin RW Mutex"); // only tests try_acquire for writers
+ TestTryAcquire_OneThread<tbb::queuing_rw_mutex>("Queuing RW Mutex"); // only tests try_acquire for writers
+
+ TestReaderWriterLock<tbb::queuing_rw_mutex>( "Queuing RW Mutex" );
+ TestReaderWriterLock<tbb::spin_rw_mutex>( "Spin RW Mutex" );
+ if( Verbose )
+ printf( "calling destructor for task_scheduler_init\n" );
+ }
+ }
+ STD::printf("done\n");
+ return 0;
+}
diff --git a/src/test/test_mutex_native_threads.cpp b/src/test/test_mutex_native_threads.cpp
new file mode 100644
index 0000000..c5adc8b
--- /dev/null
+++ b/src/test/test_mutex_native_threads.cpp
@@ -0,0 +1,283 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "harness.h"
+#include <cstdio>
+
+#if USE_PTHREAD
+
+#include <cstdlib>
+#include "tbb/spin_mutex.h"
+#include "tbb/queuing_mutex.h"
+#include "tbb/queuing_rw_mutex.h"
+#include "tbb/spin_rw_mutex.h"
+#include "tbb/tick_count.h"
+#include "tbb/atomic.h"
+
+
+#if __linux__
+#define STD std
+#else
+#define STD /* Cater to broken Windows compilers that are missing "std". */
+#endif /* __linux__ */
+
+// This test deliberately avoids a "using tbb" statement,
+// so that the error of putting types in the wrong namespace will be caught.
+
+template<typename M>
+struct Counter {
+ typedef M mutex_type;
+ M mutex;
+ volatile long value;
+};
+
+template<typename C>
+void AddOne (C& counter, size_t mode)
+/** Increments counter once for each iteration in the iteration space. */
+{
+ if( mode&1 ) {
+ // Try implicit acquire and explicit release
+ typename C::mutex_type::scoped_lock lock(counter.mutex);
+ counter.value = counter.value+1;
+ lock.release();
+ } else {
+ // Try explicit acquire and implicit release
+ typename C::mutex_type::scoped_lock lock;
+ lock.acquire(counter.mutex);
+ counter.value = counter.value+1;
+ }
+}
+
+template<typename M, size_t N>
+struct Invariant {
+ typedef M mutex_type;
+ M mutex;
+ const char* mutex_name;
+ volatile long value[N];
+ volatile long single_value;
+ Invariant( const char* mutex_name_ ) :
+ mutex_name(mutex_name_)
+ {
+ single_value = 0;
+ for( size_t k=0; k<N; ++k )
+ value[k] = 0;
+ }
+ void update() {
+ for( size_t k=0; k<N; ++k )
+ ++value[k];
+ }
+ bool value_is( long expected_value ) const {
+ long tmp;
+ for( size_t k=0; k<N; ++k )
+// if( value[k]!=expected_value )
+// return false;
+ if( (tmp=value[k])!=expected_value ) {
+ printf("ATTN! %ld!=%ld\n", tmp, expected_value);
+ return false;
+ }
+ return true;
+ }
+ bool is_okay() {
+ return value_is( value[0] );
+ }
+};
+
+template<typename I>
+void TwiddleInvariant( I& invariant, size_t mode )
+{
+ //! Every 8th access is a write access
+ bool write = (mode%8)==7;
+ bool okay = true;
+ bool lock_kept = true;
+ if( (mode/8)&1 ) {
+ // Try implicit acquire and explicit release
+ typename I::mutex_type::scoped_lock lock(invariant.mutex,write);
+ if( write ) {
+ long my_value = invariant.value[0];
+ invariant.update();
+ if( mode%16==7 ) {
+ lock_kept = lock.downgrade_to_reader();
+ if( !lock_kept )
+ my_value = invariant.value[0] - 1;
+ okay = invariant.value_is(my_value+1);
+ }
+ } else {
+ okay = invariant.is_okay();
+ if( mode%8==3 ) {
+ long my_value = invariant.value[0];
+ lock_kept = lock.upgrade_to_writer();
+ if( !lock_kept )
+ my_value = invariant.value[0];
+ invariant.update();
+ okay = invariant.value_is(my_value+1);
+ }
+ }
+ lock.release();
+ } else {
+ // Try explicit acquire and implicit release
+ typename I::mutex_type::scoped_lock lock;
+ lock.acquire(invariant.mutex,write);
+ if( write ) {
+ long my_value = invariant.value[0];
+ invariant.update();
+ if( mode%16==7 ) {
+ lock_kept = lock.downgrade_to_reader();
+ if( !lock_kept )
+ my_value = invariant.value[0] - 1;
+ okay = invariant.value_is(my_value+1);
+ }
+ } else {
+ okay = invariant.is_okay();
+ if( mode%8==3 ) {
+ long my_value = invariant.value[0];
+ lock_kept = lock.upgrade_to_writer();
+ if( !lock_kept )
+ my_value = invariant.value[0];
+ invariant.update();
+ okay = invariant.value_is(my_value+1);
+ }
+ }
+ }
+ if( !okay ) {
+ STD::printf( "ERROR for %s at %ld: %s %s %s %s\n",invariant.mutex_name, long(mode),
+ write?"write,":"read,", write?(mode%16==7?"downgrade,":""):(mode%8==3?"upgrade,":""),
+ lock_kept?"lock kept,":"lock not kept,", (mode/8)&1?"imp/exp":"exp/imp" );
+ }
+}
+
+template<typename M>
+class Work
+{
+public:
+ static tbb::atomic<size_t> order;
+ static const long mutex_test_size;
+ static const long readwrite_test_size;
+ static const long chunk;
+
+ static void* mutex_work(void* p)
+ {
+ Counter<M>* pCounter = reinterpret_cast<Counter<M>*>(p);
+ long step, i;
+ while( (step=order.fetch_and_add<tbb::acquire>(chunk))<mutex_test_size ){
+ for( i=0; i<chunk && step<mutex_test_size; ++i, ++step ) {
+ AddOne(*pCounter, step);
+ }
+ }
+ return NULL;
+ }
+
+ static void* readwrite_work(void* p)
+ {
+ Invariant<M,8>* pInv = reinterpret_cast<Invariant<M,8>*>(p);
+ long step, i;
+ while( (step=order.fetch_and_add<tbb::acquire>(chunk))<readwrite_test_size ){
+ for( i=0; i<chunk && step<readwrite_test_size; ++i, ++step ) {
+ TwiddleInvariant(*pInv, step);
+ }
+ }
+ return NULL;
+ }
+};
+
+template<typename M> tbb::atomic<size_t> Work<M>::order;
+template<typename M> const long Work<M>::mutex_test_size = 100000;
+template<typename M> const long Work<M>::readwrite_test_size = 1000000;
+template<typename M> const long Work<M>::chunk = 100;
+
+typedef void* thread_func( void* );
+
+//! Generic test of a TBB mutex type M.
+/** Does not test features specific to reader-writer locks. */
+template<typename M>
+void Test( const char * name ) {
+ if( Verbose )
+ printf("testing %s\n",name);
+ Counter<M> counter;
+ counter.value = 0;
+ Work<M>::order = 0;
+ thread_func* mutex = reinterpret_cast<thread_func*>(&(Work<M>::mutex_work));
+ pthread_t* thr = new pthread_t[NThread];
+
+ tbb::tick_count t0 = tbb::tick_count::now();
+ for (int i=0; i<NThread; ++i)
+ pthread_create(thr+i, NULL, mutex, reinterpret_cast<void*>(&counter));
+ for (int i=0; i<NThread; ++i)
+ pthread_join(*(thr+i), NULL);
+ tbb::tick_count t1 = tbb::tick_count::now();
+ if( Verbose )
+ printf("%s time = %g usec\n",name, (t1-t0).seconds() );
+ if( counter.value!=Work<M>::mutex_test_size )
+ STD::printf("ERROR for %s: counter.value=%ld\n",name,counter.value);
+ delete[] thr;
+}
+
+
+/** This test is generic so that we can test any other kinds of ReaderWriter locks we write later. */
+template<typename M>
+void TestReaderWriterLock( const char * mutex_name ) {
+ if( Verbose )
+ printf("testing %s\n",mutex_name);
+ Invariant<M,8> invariant(mutex_name);
+ Work<M>::order = 0;
+ thread_func* readwrite = reinterpret_cast<thread_func*>(Work<M>::readwrite_work);
+ pthread_t* thr = new pthread_t[NThread];
+ tbb::tick_count t0 = tbb::tick_count::now();
+ for (int i=0; i<NThread; ++i)
+ pthread_create(thr+i, NULL, readwrite, reinterpret_cast<void*>(&invariant));
+ for (int i=0; i<NThread; ++i)
+ pthread_join(*(thr+i), NULL);
+ tbb::tick_count t1 = tbb::tick_count::now();
+ // There is either a writer or a reader upgraded to a writer for each 4th iteration
+ long expected_value = Work<M>::readwrite_test_size/4;
+ if( !invariant.value_is(expected_value) )
+ STD::printf("ERROR for %s: final invariant value is wrong\n",mutex_name);
+ if( Verbose )
+ printf("%s readers & writers time = %g usec\n",mutex_name,(t1-t0).seconds());
+ delete[] thr;
+}
+#endif /* USE_PTHREAD */
+
+int main( int argc, char * argv[] ) {
+ ParseCommandLine( argc, argv );
+#if USE_PTHREAD
+ if( Verbose )
+ printf( "testing with %d threads\n", NThread );
+ Test<tbb::spin_mutex>( "Spin Mutex" );
+ Test<tbb::queuing_mutex>( "Queuing Mutex" );
+ Test<tbb::queuing_rw_mutex>( "Queuing RW Mutex" );
+ Test<tbb::spin_rw_mutex>( "Spin RW Mutex" );
+ TestReaderWriterLock<tbb::queuing_rw_mutex>( "Queuing RW Mutex" );
+ TestReaderWriterLock<tbb::spin_rw_mutex>( "Spin RW Mutex" );
+ STD::printf("done\n");
+#else
+ if( Verbose )
+ printf("this test need pthreads to work; define USE_PTHREAD before compilation.\n");
+ printf("skip\n");
+#endif /* USE_PTHREAD */
+ return 0;
+}
diff --git a/src/test/test_openmp.cpp b/src/test/test_openmp.cpp
new file mode 100644
index 0000000..5187b82
--- /dev/null
+++ b/src/test/test_openmp.cpp
@@ -0,0 +1,224 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+// Test mixing OpenMP and TBB
+
+/* SCR #471
+ Bellow is workaround to compile test within enviroment of Intel Compiler
+ but by Microsoft Compiler. So, there is wrong "omp.h" file included and
+ manifest section is missed from .exe file - restoring here.
+ */
+#if !defined(__INTEL_COMPILER) && _MSC_VER >= 1400
+ #include <crtassem.h>
+ #if !defined(_OPENMP)
+ #define _OPENMP
+ #if defined(_DEBUG)
+ #pragma comment(lib, "vcompd")
+ #else // _DEBUG
+ #pragma comment(lib, "vcomp")
+ #endif // _DEBUG
+ #endif // _OPENMP
+
+ #if defined(_DEBUG)
+ #if defined(_M_IX86)
+ #pragma comment(linker,"/manifestdependency:\"type='win32' " \
+ "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".DebugOpenMP' " \
+ "version='" _CRT_ASSEMBLY_VERSION "' " \
+ "processorArchitecture='x86' " \
+ "publicKeyToken='" _VC_ASSEMBLY_PUBLICKEYTOKEN "'\"")
+ #elif defined(_M_AMD64)
+ #pragma comment(linker,"/manifestdependency:\"type='win32' " \
+ "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".DebugOpenMP' " \
+ "version='" _CRT_ASSEMBLY_VERSION "' " \
+ "processorArchitecture='amd64' " \
+ "publicKeyToken='" _VC_ASSEMBLY_PUBLICKEYTOKEN "'\"")
+ #elif defined(_M_IA64)
+ #pragma comment(linker,"/manifestdependency:\"type='win32' " \
+ "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".DebugOpenMP' " \
+ "version='" _CRT_ASSEMBLY_VERSION "' " \
+ "processorArchitecture='ia64' " \
+ "publicKeyToken='" _VC_ASSEMBLY_PUBLICKEYTOKEN "'\"")
+ #endif
+ #else // _DEBUG
+ #if defined(_M_IX86)
+ #pragma comment(linker,"/manifestdependency:\"type='win32' " \
+ "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".OpenMP' " \
+ "version='" _CRT_ASSEMBLY_VERSION "' " \
+ "processorArchitecture='x86' " \
+ "publicKeyToken='" _VC_ASSEMBLY_PUBLICKEYTOKEN "'\"")
+ #elif defined(_M_AMD64)
+ #pragma comment(linker,"/manifestdependency:\"type='win32' " \
+ "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".OpenMP' " \
+ "version='" _CRT_ASSEMBLY_VERSION "' " \
+ "processorArchitecture='amd64' " \
+ "publicKeyToken='" _VC_ASSEMBLY_PUBLICKEYTOKEN "'\"")
+ #elif defined(_M_IA64)
+ #pragma comment(linker,"/manifestdependency:\"type='win32' " \
+ "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".OpenMP' " \
+ "version='" _CRT_ASSEMBLY_VERSION "' " \
+ "processorArchitecture='ia64' " \
+ "publicKeyToken='" _VC_ASSEMBLY_PUBLICKEYTOKEN "'\"")
+ #endif
+ #endif // _DEBUG
+ #define _OPENMP_NOFORCE_MANIFEST
+#endif
+
+#include <omp.h>
+
+
+typedef short T;
+
+void SerialConvolve( T c[], const T a[], int m, const T b[], int n ) {
+ for( int i=0; i<m+n-1; ++i ) {
+ int start = i<n ? 0 : i-n+1;
+ int finish = i<m ? i+1 : m;
+ T sum = 0;
+ for( int j=start; j<finish; ++j )
+ sum += a[j]*b[i-j];
+ c[i] = sum;
+ }
+}
+
+#include "tbb/blocked_range.h"
+#include "tbb/parallel_for.h"
+#include "tbb/parallel_reduce.h"
+#include "tbb/task_scheduler_init.h"
+#include "harness.h"
+
+using namespace tbb;
+
+class InnerBody {
+ const T* my_a;
+ const T* my_b;
+ const int i;
+public:
+ T sum;
+ InnerBody( T c[], const T a[], const T b[], int i ) :
+ my_a(a), my_b(b), sum(0), i(i)
+ {}
+ InnerBody( InnerBody& x, split ) :
+ my_a(x.my_a), my_b(x.my_b), sum(0), i(x.i)
+ {
+ }
+ void join( InnerBody& x ) {sum += x.sum;}
+ void operator()( const blocked_range<int>& range ) {
+ for( int j=range.begin(); j!=range.end(); ++j )
+ sum += my_a[j]*my_b[i-j];
+ }
+};
+
+//! Test OpenMMP loop around TBB loop
+void OpenMP_TBB_Convolve( T c[], const T a[], int m, const T b[], int n ) {
+ if( Verbose )
+ printf("testing OpenMP loop around TBB loop\n");
+#pragma omp parallel
+ {
+ task_scheduler_init init;
+#pragma omp for
+ for( int i=0; i<m+n-1; ++i ) {
+ int start = i<n ? 0 : i-n+1;
+ int finish = i<m ? i+1 : m;
+ InnerBody body(c,a,b,i);
+ parallel_reduce( blocked_range<int>(start,finish,10), body );
+ c[i] = body.sum;
+ }
+ }
+}
+
+class OuterBody {
+ const T* my_a;
+ const T* my_b;
+ T* my_c;
+ const int m;
+ const int n;
+public:
+ T sum;
+ OuterBody( T c[], const T a[], int m_, const T b[], int n_ ) :
+ my_c(c), my_a(a), my_b(b), m(m_), n(n_)
+ {}
+ void operator()( const blocked_range<int>& range ) const {
+ for( int i=range.begin(); i!=range.end(); ++i ) {
+ int start = i<n ? 0 : i-n+1;
+ int finish = i<m ? i+1 : m;
+ T sum = 0;
+#pragma omp parallel for reduction(+:sum)
+ for( int j=start; j<finish; ++j )
+ sum += my_a[j]*my_b[i-j];
+ my_c[i] = sum;
+ }
+ }
+};
+
+//! Test TBB loop around OpenMP loop
+void TBB_OpenMP_Convolve( T c[], const T a[], int m, const T b[], int n ) {
+ if( Verbose )
+ printf("testing TBB loop around OpenMP loop\n");
+ parallel_for( blocked_range<int>(0,m+n-1,10), OuterBody( c, a, m, b, n ) );
+}
+
+#include <stdio.h>
+
+const int M = 17*17;
+const int N = 13*13;
+
+int main( int argc, char* argv[] ) {
+#ifdef _PGO_INSTRUMENT
+ printf("Warning: test_openmp.exe has problems if compiled with -prof-genx; skipping\n");
+ return 0;
+#endif
+ ParseCommandLine(argc,argv);
+ MinThread = 1;
+ for( int p=MinThread; p<=MaxThread; ++p ) {
+ T a[M];
+ T b[N];
+ for( int m=1; m<=M; m*=17 ) {
+ for( int n=1; n<=M; n*=13 ) {
+ for( int i=0; i<m; ++i ) a[i] = 1+i/5;
+ for( int i=0; i<n; ++i ) b[i] = 1+i/7;
+ T expected[M+N];
+ SerialConvolve( expected, a, m, b, n );
+ task_scheduler_init init(p);
+ T actual[M+N];
+ for( int k = 0; k<2; ++k ) {
+ memset( actual, -1, sizeof(actual) );
+ switch(k) {
+ case 0:
+ TBB_OpenMP_Convolve( actual, a, m, b, n );
+ break;
+ case 1: OpenMP_TBB_Convolve( actual, a, m, b, n ); break;
+ }
+ for( int i=0; i<m+n-1; ++i ) {
+ ASSERT( actual[i]==expected[i], NULL );
+ }
+ }
+ }
+ }
+ }
+ printf("done\n");
+ return 0;
+}
diff --git a/src/test/test_parallel_for.cpp b/src/test/test_parallel_for.cpp
new file mode 100644
index 0000000..96275ea
--- /dev/null
+++ b/src/test/test_parallel_for.cpp
@@ -0,0 +1,162 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+// Test for function template parallel_for.h
+
+#include "tbb/parallel_for.h"
+#include "tbb/atomic.h"
+#include "harness_assert.h"
+#include "harness.h"
+
+static tbb::atomic<int> FooBodyCount;
+
+//! An range object whose only public members are those required by the Range concept.
+template<size_t Pad>
+class FooRange {
+ //! Start of range
+ int start;
+
+ //! Size of range
+ int size;
+ FooRange( int start_, int size_ ) : start(start_), size(size_) {
+ zero_fill<char>(pad, Pad);
+ pad[Pad-1] = 'x';
+ }
+ template<size_t Pad_> friend void Flog( int nthread );
+ template<size_t Pad_> friend class FooBody;
+ void operator&();
+
+ char pad[Pad];
+public:
+ bool empty() const {return size==0;}
+ bool is_divisible() const {return size>1;}
+ FooRange( FooRange& original, tbb::split ) : size(original.size/2) {
+ original.size -= size;
+ start = original.start+original.size;
+ ASSERT( original.pad[Pad-1]=='x', NULL );
+ pad[Pad-1] = 'x';
+ }
+};
+
+//! An range object whose only public members are those required by the parallel_for.h body concept.
+template<size_t Pad>
+class FooBody {
+ static const int LIVE = 0x1234;
+ tbb::atomic<int>* array;
+ int state;
+ friend class FooRange<Pad>;
+ template<size_t Pad_> friend void Flog( int nthread );
+ FooBody( tbb::atomic<int>* array_ ) : array(array_), state(LIVE) {}
+public:
+ ~FooBody() {
+ --FooBodyCount;
+ for( size_t i=0; i<sizeof(*this); ++i )
+ reinterpret_cast<char*>(this)[i] = -1;
+ }
+ //! Copy constructor
+ FooBody( const FooBody& other ) : array(other.array), state(other.state) {
+ ++FooBodyCount;
+ ASSERT( state==LIVE, NULL );
+ }
+ void operator()( FooRange<Pad>& r ) const {
+ for( int k=0; k<r.size; ++k )
+ array[r.start+k]++;
+ }
+};
+
+#include "tbb/tick_count.h"
+
+static const int N = 1000;
+static tbb::atomic<int> Array[N];
+
+template<size_t Pad>
+void Flog( int nthread ) {
+ tbb::tick_count T0 = tbb::tick_count::now();
+ for( int i=0; i<N; ++i ) {
+ for ( int mode = 0; mode < 3; ++mode) {
+ FooRange<Pad> r( 0, i );
+ const FooRange<Pad> rc = r;
+ FooBody<Pad> f( Array );
+ const FooBody<Pad> fc = f;
+ memset( Array, 0, sizeof(Array) );
+ FooBodyCount = 1;
+ switch (mode) {
+ case 0:
+ tbb::parallel_for( rc, fc );
+ break;
+ case 1:
+ tbb::parallel_for( rc, fc, tbb::simple_partitioner() );
+ break;
+ case 2:
+ tbb::parallel_for( rc, fc, tbb::auto_partitioner() );
+ break;
+ }
+ for( int j=0; j<i; ++j )
+ ASSERT( Array[j]==1, NULL );
+ for( int j=i; j<N; ++j )
+ ASSERT( Array[j]==0, NULL );
+ // Destruction of bodies might take a while, but there should be at most one body per thread
+ // at this point.
+ while( FooBodyCount>1 ) {
+ ASSERT( FooBodyCount<=nthread, NULL );
+ }
+ ASSERT( FooBodyCount==1, NULL );
+ }
+ }
+ tbb::tick_count T1 = tbb::tick_count::now();
+ if( Verbose )
+ printf("time=%g\tnthread=%d\tpad=%d\n",(T1-T0).seconds(),nthread,int(Pad));
+}
+
+#include <cstdio>
+#include "tbb/task_scheduler_init.h"
+#include "harness_cpu.h"
+
+int main( int argc, char* argv[] ) {
+ MinThread = 1;
+ ParseCommandLine(argc,argv);
+ if( MinThread<1 ) {
+ printf("number of threads must be positive\n");
+ exit(1);
+ }
+ for( int p=MinThread; p<=MaxThread; ++p ) {
+ if( p>0 ) {
+ tbb::task_scheduler_init init( p );
+ Flog<1>(p);
+ Flog<10>(p);
+ Flog<100>(p);
+ Flog<1000>(p);
+ Flog<10000>(p);
+
+ // Test that all workers sleep when no work
+ TestCPUUserTime(p-1);
+ }
+ }
+ printf("done\n");
+ return 0;
+}
diff --git a/src/test/test_parallel_reduce.cpp b/src/test/test_parallel_reduce.cpp
new file mode 100644
index 0000000..000bc26
--- /dev/null
+++ b/src/test/test_parallel_reduce.cpp
@@ -0,0 +1,150 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "tbb/parallel_reduce.h"
+#include "tbb/blocked_range.h"
+#include "tbb/tick_count.h"
+#include "tbb/atomic.h"
+#include "harness_assert.h"
+#include <cstdlib>
+#include <cstdio>
+
+using namespace std;
+
+static tbb::atomic<long> ForkCount;
+
+class FooBody {
+private:
+ FooBody( const FooBody& ); // Deny access
+ void operator=( const FooBody& ); // Deny access
+public:
+ //! Parent that created this body via split operation. NULL if original body.
+ FooBody* parent;
+ //! Total number of index values processed by body and its children.
+ long sum;
+ //! Number of join operations done so far on this body and its children.
+ long join_count;
+ //! Range that has been processed so far by this body and its children.
+ size_t begin, end;
+ //! True if body has not yet been processed at least once by operator().
+ bool is_new;
+ //! 1 if body was created by split; 0 if original body.
+ int forked;
+
+ FooBody() : parent(reinterpret_cast<FooBody*>(-1L)), forked(0) {}
+ ~FooBody() {
+ forked = 0xDEADBEEF;
+ sum=0xDEADBEEF;
+ join_count=0xDEADBEEF;
+ }
+ FooBody( FooBody& other, tbb::split ) {
+ ++ForkCount;
+ sum = 0;
+ parent = &other;
+ join_count = 0;
+ is_new = true;
+ forked = 1;
+ }
+ void join( FooBody& s ) {
+ ASSERT( s.forked==1, NULL );
+ ASSERT( this!=&s, NULL );
+ if( this!=s.parent ) {
+ printf( "ERROR: %p.join(%p): s.parent=%p\n", this, &s, s.parent );
+ exit(1);
+ }
+ ASSERT( end==s.begin, NULL );
+ end = s.end;
+ sum += s.sum;
+ join_count += s.join_count + 1;
+ s.forked = 2;
+ }
+ void operator()( tbb::blocked_range<size_t>& r ) {
+ for( size_t k=r.begin(); k<r.end(); ++k )
+ ++sum;
+ if( is_new ) {
+ is_new = false;
+ begin = r.begin();
+ } else
+ ASSERT( end==r.begin(), NULL );
+ end = r.end();
+ }
+};
+
+static size_t ChunkSize = 1;
+
+#include "harness.h"
+
+void Flog( int nthread ) {
+ FooBody f;
+ tbb::tick_count T0 = tbb::tick_count::now();
+ long join_count = 0;
+ for( size_t i=0; i<=1000; ++i ) {
+ for (int mode = 0; mode < 3; mode++) {
+ f.sum = 0;
+ f.parent = NULL;
+ f.join_count = 0;
+ f.is_new = true;
+ f.forked = 0;
+ switch (mode) {
+ case 0:
+ tbb::parallel_reduce( tbb::blocked_range<size_t>(0,i,ChunkSize), f );
+ break;
+ case 1:
+ tbb::parallel_reduce( tbb::blocked_range<size_t>(0,i,ChunkSize), f, tbb::simple_partitioner() );
+ break;
+ case 2:
+ tbb::parallel_reduce( tbb::blocked_range<size_t>(0,i,ChunkSize), f, tbb::auto_partitioner() );
+ break;
+ }
+ join_count += f.join_count;
+ }
+ }
+ tbb::tick_count T1 = tbb::tick_count::now();
+ if( Verbose )
+ printf("time=%g f.sum=%ld join_count=%ld ForkCount=%ld nthread=%d\n",(T1-T0).seconds(),f.sum,join_count,long(ForkCount), nthread);
+}
+
+#include "tbb/task_scheduler_init.h"
+#include "harness_cpu.h"
+
+int main( int argc, char* argv[] ) {
+ ParseCommandLine( argc, argv );
+ if( MinThread<0 ) {
+ printf("Usage: nthread must be positive\n");
+ exit(1);
+ }
+ for( int p=MinThread; p<=MaxThread; ++p ) {
+ tbb::task_scheduler_init init( p );
+ Flog(p);
+
+ // Test that all workers sleep when no work
+ TestCPUUserTime(p-1);
+ }
+ printf("done\n");
+ return 0;
+}
diff --git a/src/test/test_parallel_scan.cpp b/src/test/test_parallel_scan.cpp
new file mode 100644
index 0000000..d8be458
--- /dev/null
+++ b/src/test/test_parallel_scan.cpp
@@ -0,0 +1,272 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "tbb/parallel_scan.h"
+#include "tbb/blocked_range.h"
+#include "harness_assert.h"
+
+typedef tbb::blocked_range<long> Range;
+
+static volatile bool ScanIsRunning = false;
+
+//! Sum of 0..i with wrap around on overflow.
+inline int TriangularSum( int i ) {
+ return i&1 ? ((i>>1)+1)*i : (i>>1)*(i+1);
+}
+
+//! Verify that sum is sum of integers in closed interval [start_index..finish_index].
+/** line should be the source line of the caller */
+static void VerifySum( long start_index, long finish_index, int sum, int line );
+
+const int MAXN = 2000;
+
+enum AddendFlag {
+ UNUSED=0,
+ USED_NONFINAL=1,
+ USED_FINAL=2
+};
+
+//! Array recording how each addend was used.
+/** 'unsigned char' instead of AddendFlag for sake of compactness. */
+static unsigned char AddendHistory[MAXN];
+
+//! Set to 1 for debugging output
+#define PRINT_DEBUG 0
+
+#include "tbb/atomic.h"
+#if PRINT_DEBUG
+#include <stdio.h>
+tbb::atomic<long> NextBodyId;
+#endif /* PRINT_DEBUG */
+
+struct BodyId {
+#if PRINT_DEBUG
+ const int id;
+ BodyId() : id(NextBodyId++) {}
+#endif /* PRINT_DEBUG */
+};
+
+tbb::atomic<long> NumberOfLiveAccumulator;
+
+static void Snooze( bool scan_should_be_running ) {
+ ASSERT( ScanIsRunning==scan_should_be_running, NULL );
+}
+
+template<typename T>
+class Accumulator: BodyId {
+ T my_total;
+ const T* my_array;
+ T* my_sum;
+ Range my_range;
+ //! Equals this while object is fully constructed, NULL otherwise.
+ /** Used to detect premature destruction and accidental bitwise copy. */
+ Accumulator* self;
+ Accumulator( const T array[], T sum[] ) :
+ my_total(), my_array(array), my_sum(sum), my_range(-1,-1,1)
+ {
+ ++NumberOfLiveAccumulator;
+ // Set self as last action of constructor, to indicate that object is fully constructed.
+ self = this;
+ }
+ friend void TestAccumulator( int mode, int nthread );
+public:
+#if PRINT_DEBUG
+ void print() const {
+ printf("%d [%ld..%ld)\n", id,my_range.begin(),my_range.end() );
+ }
+#endif /* PRINT_DEBUG */
+ ~Accumulator() {
+#if PRINT_DEBUG
+ printf("%d [%ld..%ld) destroyed\n",id,my_range.begin(),my_range.end() );
+#endif /* PRINT_DEBUG */
+ // Clear self as first action of destructor, to indicate that object is not fully constructed.
+ self = 0;
+ --NumberOfLiveAccumulator;
+ }
+ Accumulator( Accumulator& a, tbb::split ) :
+ my_total(0), my_array(a.my_array), my_sum(a.my_sum), my_range(-1,-1,1)
+ {
+ ++NumberOfLiveAccumulator;
+#if PRINT_DEBUG
+ printf("%d forked from %d\n",id,a.id);
+#endif /* PRINT_DEBUG */
+ Snooze(true);
+ // Set self as last action of constructor, to indicate that object is fully constructed.
+ self = this;
+ }
+ template<typename Tag>
+ void operator()( const Range& r, Tag tag ) {
+ Snooze(true);
+#if PRINT_DEBUG
+ if( my_range.empty() )
+ printf("%d computing %s [%ld..%ld)\n",id,tag.is_final_scan()?"final":"lookahead",r.begin(),r.end() );
+ else
+ printf("%d computing %s [%ld..%ld) [%ld..%ld)\n",id,tag.is_final_scan()?"final":"lookahead",my_range.begin(),my_range.end(),r.begin(),r.end());
+#endif /* PRINT_DEBUG */
+ ASSERT( !tag.is_final_scan() || my_range.begin()==0 && my_range.end()==r.begin() || my_range.empty() && r.begin()==0, NULL );
+ for( long i=r.begin(); i<r.end(); ++i ) {
+ my_total += my_array[i];
+ if( tag.is_final_scan() ) {
+ ASSERT( AddendHistory[i]<USED_FINAL, "addend used 'finally' twice?" );
+ AddendHistory[i] |= USED_FINAL;
+ my_sum[i] = my_total;
+ VerifySum( 0L, i, int(my_sum[i]), __LINE__ );
+ } else {
+ ASSERT( AddendHistory[i]==UNUSED, "addend used too many times" );
+ AddendHistory[i] |= USED_NONFINAL;
+ }
+ }
+ if( my_range.empty() )
+ my_range = r;
+ else
+ my_range = Range(my_range.begin(), r.end(), 1 );
+ Snooze(true);
+ ASSERT( self==this, "this Accumulator corrupted or prematurely destroyed" );
+ }
+ void reverse_join( const Accumulator& left ) {
+#if PRINT_DEBUG
+ printf("reverse join %d [%ld..%ld) %d [%ld..%ld)\n",
+ left.id,left.my_range.begin(),left.my_range.end(),
+ id,my_range.begin(),my_range.end());
+#endif /* PRINT_DEBUG */
+ Snooze(true);
+ ASSERT( ScanIsRunning, NULL );
+ ASSERT( left.my_range.end()==my_range.begin(), NULL );
+ my_total += left.my_total;
+ my_range = Range( left.my_range.begin(), my_range.end(), 1 );
+ ASSERT( ScanIsRunning, NULL );
+ Snooze(true);
+ ASSERT( ScanIsRunning, NULL );
+ ASSERT( self==this, NULL );
+ ASSERT( left.self==&left, NULL );
+ }
+ void assign( const Accumulator& other ) {
+ my_total = other.my_total;
+ my_range = other.my_range;
+ ASSERT( self==this, NULL );
+ ASSERT( other.self==&other, "other Accumulator corrupted or prematurely destroyed" );
+ }
+};
+
+#include "tbb/tick_count.h"
+#include "harness.h"
+
+static void VerifySum( long start_index, long finish_index, int sum, int line ) {
+ int expected = TriangularSum( finish_index ) - TriangularSum( start_index );
+ if( expected!=sum ) {
+ printf("line %d: sum[%ld..%ld] should be = %d, but was computed as %d\n", line, start_index, finish_index, expected, sum );
+ abort();
+ }
+}
+
+void TestAccumulator( int mode, int nthread ) {
+ typedef int T;
+ T* addend = new T[MAXN];
+ T* sum = new T[MAXN];
+ for( long n=0; n<=MAXN; ++n ) {
+ for( long i=0; i<MAXN; ++i ) {
+ addend[i] = -1;
+ sum[i] = -2;
+ AddendHistory[i] = UNUSED;
+ }
+ for( long i=0; i<n; ++i )
+ addend[i] = i;
+ Accumulator<T> acc( addend, sum );
+ tbb::tick_count t0 = tbb::tick_count::now();
+#if PRINT_DEBUG
+ printf("--------- mode=%d range=[0..%ld)\n",mode,n);
+#endif /* PRINT_DEBUG */
+ ScanIsRunning = true;
+
+ switch (mode) {
+ case 0:
+ tbb::parallel_scan( Range( 0, n, 1 ), acc );
+ break;
+ case 1:
+ tbb::parallel_scan( Range( 0, n, 1 ), acc, tbb::simple_partitioner() );
+ break;
+ case 2:
+ tbb::parallel_scan( Range( 0, n, 1 ), acc, tbb::auto_partitioner() );
+ break;
+ }
+
+ ScanIsRunning = false;
+#if PRINT_DEBUG
+ printf("=========\n");
+#endif /* PRINT_DEBUG */
+ Snooze(false);
+ tbb::tick_count t1 = tbb::tick_count::now();
+ long used_once_count = 0;
+ for( long i=0; i<n; ++i )
+ if( !(AddendHistory[i]&USED_FINAL) ) {
+ printf("failed to use addend[%ld] %s\n",i,AddendHistory[i]&USED_NONFINAL?"(but used nonfinal)":"");
+ }
+ for( long i=0; i<n; ++i ) {
+ VerifySum( 0, i, sum[i], __LINE__ );
+ used_once_count += AddendHistory[i]==USED_FINAL;
+ }
+ if( n )
+ ASSERT( acc.my_total==sum[n-1], NULL );
+ else
+ ASSERT( acc.my_total==0, NULL );
+ if( Verbose )
+ printf("time [n=%ld] = %g\tused_once%% = %g\tnthread=%d\n",n,(t1-t0).seconds(), n==0 ? 0 : 100.0*used_once_count/n,nthread);
+ }
+ delete[] addend;
+ delete[] sum;
+}
+
+static void TestScanTags() {
+ ASSERT( tbb::pre_scan_tag::is_final_scan()==false, NULL );
+ ASSERT( tbb::final_scan_tag::is_final_scan()==true, NULL );
+}
+
+#include "tbb/task_scheduler_init.h"
+#include "harness_cpu.h"
+
+int main(int argc, char* argv[]) {
+ ParseCommandLine(argc,argv);
+ TestScanTags();
+ for( int p=MinThread; p<=MaxThread; ++p ) {
+ for (int mode = 0; mode < 3; mode++) {
+ tbb::task_scheduler_init init(p);
+ NumberOfLiveAccumulator = 0;
+ TestAccumulator(mode, p);
+
+ // Test that all workers sleep when no work
+ TestCPUUserTime(p-1);
+
+ // Checking has to be done late, because when parallel_scan makes copies of
+ // the user's "Body", the copies might be destroyed slightly after parallel_scan
+ // returns.
+ ASSERT( NumberOfLiveAccumulator==0, NULL );
+ }
+ }
+ printf("done\n");
+ return 0;
+}
diff --git a/src/test/test_parallel_sort.cpp b/src/test/test_parallel_sort.cpp
new file mode 100644
index 0000000..f5dc9c0
--- /dev/null
+++ b/src/test/test_parallel_sort.cpp
@@ -0,0 +1,527 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "harness_assert.h"
+#include "harness.h"
+#include <math.h>
+#include <algorithm>
+#include <iterator>
+#include <functional>
+#include <string>
+#include <cstring>
+#include <exception>
+
+#include "tbb/task_scheduler_init.h"
+#include "tbb/parallel_sort.h"
+#include "tbb/concurrent_vector.h"
+
+/** Has tighly controlled interface so that we can verify
+ that parallel_sort uses only the required interface. */
+class Minimal {
+ int val;
+public:
+ Minimal() {}
+ void set_val(int i) { val = i; }
+ int get_val(int i) { return val; }
+ static bool CompareWith (const Minimal &a, const Minimal &b) {
+ return (a.val < b.val);
+ }
+ static bool AreEqual( Minimal &a, Minimal &b) {
+ return a.val == b.val;
+ }
+};
+
+//! Defines a comparison function object for Minimal
+class MinimalCompare {
+public:
+ bool operator() (const Minimal &a, const Minimal &b) const {
+ return Minimal::CompareWith(a,b);
+ }
+};
+
+//! The default validate; but it uses operator== which is not required
+template<typename RandomAccessIterator>
+bool Validate(RandomAccessIterator a, RandomAccessIterator b, size_t n) {
+ for (size_t i = 0; i < n; i++) {
+ ASSERT( a[i] == b[i], NULL );
+ }
+ return true;
+}
+
+//! A Validate specialized to string for debugging-only
+template<>
+bool Validate<std::string *>(std::string * a, std::string * b, size_t n) {
+ for (size_t i = 0; i < n; i++) {
+ if ( Verbose && a[i] != b[i]) {
+ for (size_t j = 0; j < n; j++) {
+ printf("a[%llu] == %s and b[%llu] == %s\n", static_cast<unsigned long long>(j), a[j].c_str(), static_cast<unsigned long long>(j), b[j].c_str());
+ }
+ }
+ ASSERT( a[i] == b[i], NULL );
+ }
+ return true;
+}
+
+//! A Validate specialized to Minimal since it does not define an operator==
+template<>
+bool Validate<Minimal *>(Minimal *a, Minimal *b, size_t n) {
+ for (size_t i = 0; i < n; i++) {
+ ASSERT( Minimal::AreEqual(a[i],b[i]), NULL );
+ }
+ return true;
+}
+
+//! A Validate specialized to concurrent_vector<Minimal> since it does not define an operator==
+template<>
+bool Validate<tbb::concurrent_vector<Minimal>::iterator>(tbb::concurrent_vector<Minimal>::iterator a,
+ tbb::concurrent_vector<Minimal>::iterator b, size_t n) {
+ for (size_t i = 0; i < n; i++) {
+ ASSERT( Minimal::AreEqual(a[i],b[i]), NULL );
+ }
+ return true;
+}
+
+//! used in Verbose mode for identifying which data set is being used
+static std::string test_type;
+
+//! The default initialization routine.
+/*! This routine assumes that you can assign to the elements from a float.
+ It assumes that iter and sorted_list have already been allocated. It fills
+ them according to the current data set (tracked by a local static variable).
+ Returns true if a valid test has been setup, or false if there is no test to
+ perform.
+*/
+
+template < typename RandomAccessIterator, typename Compare >
+bool init_iter(RandomAccessIterator iter, RandomAccessIterator sorted_list, size_t n, const Compare &compare, bool reset) {
+ static char test_case = 0;
+ const char num_cases = 3;
+
+ if (reset) test_case = 0;
+
+ if (test_case < num_cases) {
+ // switch on the current test case, filling the iter and sorted_list appropriately
+ switch(test_case) {
+ case 0:
+ /* use sin to generate the values */
+ test_type = "sin";
+ for (size_t i = 0; i < n; i++)
+ iter[i] = sorted_list[i] = static_cast<typename std::iterator_traits< RandomAccessIterator >::value_type>(sin(float(i)));
+ break;
+ case 1:
+ /* presorted list */
+ test_type = "pre-sorted";
+ for (size_t i = 0; i < n; i++)
+ iter[i] = sorted_list[i] = static_cast<typename std::iterator_traits< RandomAccessIterator >::value_type>(i);
+ break;
+ case 2:
+ /* reverse-sorted list */
+ test_type = "reverse-sorted";
+ for (size_t i = 0; i < n; i++)
+ iter[i] = sorted_list[i] = static_cast<typename std::iterator_traits< RandomAccessIterator >::value_type>(n - i);
+ break;
+ }
+
+ // pre-sort sorted_list for later validity testing
+ std::sort(sorted_list, sorted_list + n, compare);
+ test_case++;
+ return true;
+ }
+ return false;
+}
+
+template < typename T, typename Compare >
+bool init_iter(T * iter, T * sorted_list, size_t n, const Compare &compare, bool reset) {
+ static char test_case = 0;
+ const char num_cases = 3;
+
+ if (reset) test_case = 0;
+
+ if (test_case < num_cases) {
+ // switch on the current test case, filling the iter and sorted_list appropriately
+ switch(test_case) {
+ case 0:
+ /* use sin to generate the values */
+ test_type = "sin";
+ for (size_t i = 0; i < n; i++)
+ iter[i] = sorted_list[i] = T(sin(float(i)));
+ break;
+ case 1:
+ /* presorted list */
+ test_type = "pre-sorted";
+ for (size_t i = 0; i < n; i++)
+ iter[i] = sorted_list[i] = T(i);
+ break;
+ case 2:
+ /* reverse-sorted list */
+ test_type = "reverse-sorted";
+ for (size_t i = 0; i < n; i++)
+ iter[i] = sorted_list[i] = T(n - i);
+ break;
+ }
+
+ // pre-sort sorted_list for later validity testing
+ std::sort(sorted_list, sorted_list + n, compare);
+ test_case++;
+ return true;
+ }
+ return false;
+}
+
+
+//! The initialization routine specialized to the class Minimal
+/*! Minimal cannot have floats assigned to it. This function uses the set_val method
+*/
+
+template < >
+bool init_iter(Minimal* iter, Minimal * sorted_list, size_t n, const MinimalCompare &compare, bool reset) {
+ static char test_case = 0;
+ const char num_cases = 3;
+
+ if (reset) test_case = 0;
+
+ if (test_case < num_cases) {
+ switch(test_case) {
+ case 0:
+ /* use sin to generate the values */
+ test_type = "sin";
+ for (size_t i = 0; i < n; i++) {
+ iter[i].set_val( int( sin( float(i) ) * 1000.f) );
+ sorted_list[i].set_val( int ( sin( float(i) ) * 1000.f) );
+ }
+ break;
+ case 1:
+ /* presorted list */
+ test_type = "pre-sorted";
+ for (size_t i = 0; i < n; i++) {
+ iter[i].set_val( int(i) );
+ sorted_list[i].set_val( int(i) );
+ }
+ break;
+ case 2:
+ /* reverse-sorted list */
+ test_type = "reverse-sorted";
+ for (size_t i = 0; i < n; i++) {
+ iter[i].set_val( int(n-i) );
+ sorted_list[i].set_val( int(n-i) );
+ }
+ break;
+ }
+ std::sort(sorted_list, sorted_list + n, compare);
+ test_case++;
+ return true;
+ }
+ return false;
+}
+
+//! The initialization routine specialized to the class concurrent_vector<Minimal>
+/*! Minimal cannot have floats assigned to it. This function uses the set_val method
+*/
+
+template < >
+bool init_iter(tbb::concurrent_vector<Minimal>::iterator iter, tbb::concurrent_vector<Minimal>::iterator sorted_list,
+ size_t n, const MinimalCompare &compare, bool reset) {
+ static char test_case = 0;
+ const char num_cases = 3;
+
+ if (reset) test_case = 0;
+
+ if (test_case < num_cases) {
+ switch(test_case) {
+ case 0:
+ /* use sin to generate the values */
+ test_type = "sin";
+ for (size_t i = 0; i < n; i++) {
+ iter[i].set_val( int( sin( float(i) ) * 1000.f) );
+ sorted_list[i].set_val( int ( sin( float(i) ) * 1000.f) );
+ }
+ break;
+ case 1:
+ /* presorted list */
+ test_type = "pre-sorted";
+ for (size_t i = 0; i < n; i++) {
+ iter[i].set_val( int(i) );
+ sorted_list[i].set_val( int(i) );
+ }
+ break;
+ case 2:
+ /* reverse-sorted list */
+ test_type = "reverse-sorted";
+ for (size_t i = 0; i < n; i++) {
+ iter[i].set_val( int(n-i) );
+ sorted_list[i].set_val( int(n-i) );
+ }
+ break;
+ }
+ std::sort(sorted_list, sorted_list + n, compare);
+ test_case++;
+ return true;
+ }
+ return false;
+}
+
+//! The initialization routine specialized to the class string
+/*! strings are created from floats.
+*/
+
+template<>
+bool init_iter(std::string *iter, std::string *sorted_list, size_t n, const std::less<std::string> &compare, bool reset) {
+ static char test_case = 0;
+ const char num_cases = 1;
+
+ if (reset) test_case = 0;
+
+ if (test_case < num_cases) {
+ switch(test_case) {
+ case 0:
+ /* use sin to generate the values */
+ test_type = "sin";
+ for (size_t i = 0; i < n; i++) {
+ char buffer[20];
+#if __STDC_SECURE_LIB__>=200411
+ sprintf_s(buffer, sizeof(buffer), "%f", float(sin(float(i))));
+#else
+ sprintf(buffer, "%f", float(sin(float(i))));
+#endif /* _MSC_VER>=1400 */
+ sorted_list[i] = iter[i] = std::string(buffer);
+ }
+ break;
+ }
+ std::sort(sorted_list, sorted_list + n, compare);
+ test_case++;
+ return true;
+ }
+ return false;
+}
+
+//! The current number of threads in use (for Verbose only)
+static size_t current_p;
+
+//! The current data type being sorted (for Verbose only)
+static std::string current_type;
+
+//! The default test routine.
+/*! Tests all data set sizes from 0 to N, all grainsizes from 0 to G=10, and selects from
+ all possible interfaces to parallel_sort depending on whether a scratch space and
+ compare have been provided.
+*/
+template<typename RandomAccessIterator, typename Compare>
+bool parallel_sortTest(size_t n, RandomAccessIterator iter, RandomAccessIterator sorted_list, const Compare *comp) {
+ bool passed = true;
+
+ Compare local_comp;
+
+ init_iter(iter, sorted_list, n, local_comp, true);
+ do {
+ if ( Verbose)
+ printf("%s %s p=%llu n=%llu :",current_type.c_str(), test_type.c_str(),
+ static_cast<unsigned long long>(current_p), static_cast<unsigned long long>(n));
+ if (comp != NULL) {
+ tbb::parallel_sort(iter, iter + n, local_comp );
+ } else {
+ tbb::parallel_sort(iter, iter + n );
+ }
+ if (!Validate(iter, sorted_list, n))
+ passed = false;
+ if ( Verbose ) printf("passed\n");
+ } while (init_iter(iter, sorted_list, n, local_comp, false));
+ return passed;
+}
+
+//! The test routine specialize to Minimal, since it does not have a less defined for it
+template<>
+bool parallel_sortTest(size_t n, Minimal * iter, Minimal * sorted_list, const MinimalCompare *compare) {
+ bool passed = true;
+
+ if (compare == NULL) return passed;
+
+ init_iter(iter, sorted_list, n, *compare, true);
+ do {
+ if ( Verbose)
+ printf("%s %s p=%llu n=%llu :",current_type.c_str(), test_type.c_str(),
+ static_cast<unsigned long long>(current_p), static_cast<unsigned long long>(n));
+
+ tbb::parallel_sort(iter, iter + n, *compare );
+
+ if (!Validate(iter, sorted_list, n))
+ passed = false;
+ if ( Verbose ) printf("passed\n");
+ } while (init_iter(iter, sorted_list, n, *compare, false));
+ return passed;
+}
+
+//! The test routine specialize to concurrent_vector of Minimal, since it does not have a less defined for it
+template<>
+bool parallel_sortTest(size_t n, tbb::concurrent_vector<Minimal>::iterator iter,
+ tbb::concurrent_vector<Minimal>::iterator sorted_list, const MinimalCompare *compare) {
+ bool passed = true;
+
+ if (compare == NULL) return passed;
+
+ init_iter(iter, sorted_list, n, *compare, true);
+ do {
+ if ( Verbose)
+ printf("%s %s p=%llu n=%llu :",current_type.c_str(), test_type.c_str(),
+ static_cast<unsigned long long>(current_p), static_cast<unsigned long long>(n));
+
+ tbb::parallel_sort(iter, iter + n, *compare );
+
+ if (!Validate(iter, sorted_list, n))
+ passed = false;
+ if ( Verbose ) printf("passed\n");
+ } while (init_iter(iter, sorted_list, n, *compare, false));
+ return passed;
+}
+
+//! The main driver for the tests.
+/*! Minimal, float and string types are used. All interfaces to parallel_sort that are usable
+ by each type are tested.
+*/
+void Flog( int nthread ) {
+ // For eacg type create:
+ // the list to be sorted by parallel_sort (array)
+ // the list to be sort by STL sort (array_2)
+ // and a less function object
+
+ const size_t N = 50000;
+
+ Minimal *minimal_array = new Minimal[N];
+ Minimal *minimal_array_2 = new Minimal[N];
+ MinimalCompare minimal_less;
+
+ float *float_array = new float[N];
+ float *float_array_2 = new float[N];
+ std::less<float> float_less;
+
+ std::string *string_array = new std::string[N];
+ std::string *string_array_2 = new std::string[N];
+ std::less<std::string> string_less;
+
+ tbb::concurrent_vector<float> float_cv1;
+ tbb::concurrent_vector<float> float_cv2;
+ float_cv1.grow_to_at_least(N);
+ float_cv2.grow_to_at_least(N);
+
+ tbb::concurrent_vector<Minimal> minimal_cv1;
+ tbb::concurrent_vector<Minimal> minimal_cv2;
+ minimal_cv1.grow_to_at_least(N);
+ minimal_cv2.grow_to_at_least(N);
+
+
+ // run the appropriate tests for each type
+
+ current_type = "Minimal(less)";
+ parallel_sortTest(0, minimal_array, minimal_array_2, &minimal_less);
+ parallel_sortTest(1, minimal_array, minimal_array_2, &minimal_less);
+ parallel_sortTest(10, minimal_array, minimal_array_2, &minimal_less);
+ parallel_sortTest(9999, minimal_array, minimal_array_2, &minimal_less);
+ parallel_sortTest(50000, minimal_array, minimal_array_2, &minimal_less);
+
+ current_type = "float (no less)";
+ parallel_sortTest(0, float_array, float_array_2, static_cast<std::less<float> *>(NULL));
+ parallel_sortTest(1, float_array, float_array_2, static_cast<std::less<float> *>(NULL));
+ parallel_sortTest(10, float_array, float_array_2, static_cast<std::less<float> *>(NULL));
+ parallel_sortTest(9999, float_array, float_array_2, static_cast<std::less<float> *>(NULL));
+ parallel_sortTest(50000, float_array, float_array_2, static_cast<std::less<float> *>(NULL));
+
+ current_type = "float (less)";
+ parallel_sortTest(0, float_array, float_array_2, &float_less);
+ parallel_sortTest(1, float_array, float_array_2, &float_less);
+ parallel_sortTest(10, float_array, float_array_2, &float_less);
+ parallel_sortTest(9999, float_array, float_array_2, &float_less);
+ parallel_sortTest(50000, float_array, float_array_2, &float_less);
+
+ current_type = "string (no less)";
+ parallel_sortTest(0, string_array, string_array_2, static_cast<std::less<std::string> *>(NULL));
+ parallel_sortTest(1, string_array, string_array_2, static_cast<std::less<std::string> *>(NULL));
+ parallel_sortTest(10, string_array, string_array_2, static_cast<std::less<std::string> *>(NULL));
+ parallel_sortTest(9999, string_array, string_array_2, static_cast<std::less<std::string> *>(NULL));
+ parallel_sortTest(50000, string_array, string_array_2, static_cast<std::less<std::string> *>(NULL));
+
+ current_type = "string (less)";
+ parallel_sortTest(0, string_array, string_array_2, &string_less);
+ parallel_sortTest(1, string_array, string_array_2, &string_less);
+ parallel_sortTest(10, string_array, string_array_2, &string_less);
+ parallel_sortTest(9999, string_array, string_array_2, &string_less);
+ parallel_sortTest(50000, string_array, string_array_2, &string_less);
+
+ current_type = "concurrent_vector<float> (no less)";
+ parallel_sortTest(0, float_cv1.begin(), float_cv2.begin(), static_cast<std::less<float> *>(NULL));
+ parallel_sortTest(1, float_cv1.begin(), float_cv2.begin(), static_cast<std::less<float> *>(NULL));
+ parallel_sortTest(10, float_cv1.begin(), float_cv2.begin(), static_cast<std::less<float> *>(NULL));
+ parallel_sortTest(9999, float_cv1.begin(), float_cv2.begin(), static_cast<std::less<float> *>(NULL));
+ parallel_sortTest(50000, float_cv1.begin(), float_cv2.begin(), static_cast<std::less<float> *>(NULL));
+
+ current_type = "concurrent_vector<float> (less)";
+ parallel_sortTest(0, float_cv1.begin(), float_cv2.begin(), &float_less);
+ parallel_sortTest(1, float_cv1.begin(), float_cv2.begin(), &float_less);
+ parallel_sortTest(10, float_cv1.begin(), float_cv2.begin(), &float_less);
+ parallel_sortTest(9999, float_cv1.begin(), float_cv2.begin(), &float_less);
+ parallel_sortTest(50000, float_cv1.begin(), float_cv2.begin(), &float_less);
+
+ current_type = "concurrent_vector<Minimal> (less)";
+ parallel_sortTest(0, minimal_cv1.begin(), minimal_cv2.begin(), &minimal_less);
+ parallel_sortTest(1, minimal_cv1.begin(), minimal_cv2.begin(), &minimal_less);
+ parallel_sortTest(10, minimal_cv1.begin(), minimal_cv2.begin(), &minimal_less);
+ parallel_sortTest(9999, minimal_cv1.begin(), minimal_cv2.begin(), &minimal_less);
+ parallel_sortTest(50000, minimal_cv1.begin(), minimal_cv2.begin(), &minimal_less);
+
+ delete [] minimal_array;
+ delete [] minimal_array_2;
+
+ delete [] float_array;
+ delete [] float_array_2;
+
+ delete [] string_array;
+ delete [] string_array_2;
+}
+
+#include <cstdio>
+#include "harness_cpu.h"
+
+//! Parses the command line and iterates over the number of threads, calling Flog
+int main( int argc, char* argv[] ) {
+ ParseCommandLine(argc,argv);
+ if( MinThread<1 ) {
+ printf("Usage: number of threads must be positive\n");
+ exit(1);
+ }
+ for( int p=MinThread; p<=MaxThread; ++p ) {
+ if( p>0 ) {
+ tbb::task_scheduler_init init( p );
+ current_p = p;
+ Flog(p);
+
+ // Test that all workers sleep when no work
+ TestCPUUserTime(p-1);
+ }
+ }
+ printf("done\n");
+ return 0;
+}
+
diff --git a/src/test/test_parallel_while.cpp b/src/test/test_parallel_while.cpp
new file mode 100644
index 0000000..e4b8f82
--- /dev/null
+++ b/src/test/test_parallel_while.cpp
@@ -0,0 +1,183 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "tbb/parallel_while.h"
+#include "harness_assert.h"
+
+const int N = 200;
+
+typedef int Element;
+
+//! Representation of an array index with only those signatures required by parallel_while.
+class MinimalArgumentType {
+ void operator=( const MinimalArgumentType& );
+ long my_value;
+ enum {
+ DEAD=0xDEAD,
+ LIVE=0x2718,
+ INITIALIZED=0x3141
+ } my_state;
+public:
+ ~MinimalArgumentType() {
+ ASSERT( my_state==LIVE||my_state==INITIALIZED, NULL );
+ my_state = DEAD;
+ }
+ MinimalArgumentType() {
+ my_state = LIVE;
+ }
+ void set_value( long i ) {
+ ASSERT( my_state==LIVE||my_state==INITIALIZED, NULL );
+ my_value = i;
+ my_state = INITIALIZED;
+ }
+ long get_value() const {
+ ASSERT( my_state==INITIALIZED, NULL );
+ return my_value;
+ }
+};
+
+class IntegerStream {
+ long my_limit;
+ long my_index;
+public:
+ IntegerStream( long n ) : my_limit(n), my_index(0) {}
+ bool pop_if_present( MinimalArgumentType& v ) {
+ if( my_index>=my_limit )
+ return false;
+ v.set_value( my_index );
+ my_index+=2;
+ return true;
+ }
+};
+
+class MatrixMultiplyBody {
+ Element (*a)[N];
+ Element (*b)[N];
+ Element (*c)[N];
+ const int n;
+ tbb::parallel_while<MatrixMultiplyBody>& my_while;
+public:
+ typedef MinimalArgumentType argument_type;
+ void operator()( argument_type i_arg ) const {
+ long i = i_arg.get_value();
+ if( (i&1)==0 && i+1<N ) {
+ MinimalArgumentType value;
+ value.set_value(i+1);
+ my_while.add( value );
+ }
+ for( int j=0; j<n; ++j )
+ c[i][j] = 0;
+ for( int k=0; k<n; ++k ) {
+ Element aik = a[i][k];
+ for( int j=0; j<n; ++j )
+ c[i][j] += aik*b[k][j];
+ }
+ }
+ MatrixMultiplyBody( tbb::parallel_while<MatrixMultiplyBody>& w, Element c_[N][N], Element a_[N][N], Element b_[N][N], int n_ ) :
+ a(a_), b(b_), c(c_), n(n_), my_while(w)
+ {}
+};
+
+void WhileMatrixMultiply( Element c[N][N], Element a[N][N], Element b[N][N], int n ) {
+ IntegerStream stream( N );
+ tbb::parallel_while<MatrixMultiplyBody> w;
+ MatrixMultiplyBody body(w,c,a,b,n);
+ w.run( stream, body );
+}
+
+#include "harness.h"
+#include "tbb/tick_count.h"
+#include <cstdlib>
+#include <cstdio>
+using namespace std;
+
+static long Iterations = 5;
+
+static void SerialMatrixMultiply( Element c[N][N], Element a[N][N], Element b[N][N], int n ) {
+ for( int i=0; i<n; ++i ) {
+ for( int j=0; j<n; ++j )
+ c[i][j] = 0;
+ for( int k=0; k<n; ++k ) {
+ Element aik = a[i][k];
+ for( int j=0; j<n; ++j )
+ c[i][j] += aik*b[k][j];
+ }
+ }
+}
+
+static void InitializeMatrix( Element x[N][N], int n, int salt ) {
+ for( int i=0; i<n; ++i )
+ for( int j=0; j<n; ++j )
+ x[i][j] = (i*n+j)^salt;
+}
+
+static Element A[N][N], B[N][N], C[N][N], D[N][N];
+
+static void Run( int nthread, int n ) {
+ /* Initialize matrices */
+ InitializeMatrix(A,n,5);
+ InitializeMatrix(B,n,10);
+ InitializeMatrix(C,n,0);
+ InitializeMatrix(D,n,15);
+
+ tbb::tick_count t0 = tbb::tick_count::now();
+ for( long i=0; i<Iterations; ++i ) {
+ WhileMatrixMultiply( C, A, B, n );
+ }
+ tbb::tick_count t1 = tbb::tick_count::now();
+ SerialMatrixMultiply( D, A, B, n );
+
+ // Check result
+ for( int i=0; i<n; ++i )
+ for( int j=0; j<n; ++j )
+ ASSERT( C[i][j]==D[i][j], NULL );
+ if( Verbose )
+ printf("time=%g\tnthread=%d\tn=%d\n",(t1-t0).seconds(),nthread,n);
+}
+
+#include "tbb/task_scheduler_init.h"
+#include "harness_cpu.h"
+
+int main( int argc, char* argv[] ) {
+ ParseCommandLine( argc, argv );
+ if( MinThread<1 ) {
+ printf("number of threads must be positive\n");
+ exit(1);
+ }
+ for( int p=MinThread; p<=MaxThread; ++p ) {
+ tbb::task_scheduler_init init( p );
+ for( int n=N/4; n<=N; n+=N/4 )
+ Run(p,n);
+
+ // Test that all workers sleep when no work
+ TestCPUUserTime(p-1);
+ }
+ printf("done\n");
+ return 0;
+}
+
diff --git a/src/test/test_pipeline.cpp b/src/test/test_pipeline.cpp
new file mode 100644
index 0000000..e550cee
--- /dev/null
+++ b/src/test/test_pipeline.cpp
@@ -0,0 +1,173 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "tbb/pipeline.h"
+#include "tbb/tick_count.h"
+#include <cstdlib>
+#include <cstdio>
+#include "harness.h"
+
+struct Buffer {
+ int id;
+ //! True if Buffer is in use.
+ bool is_busy;
+ Buffer() : id(-1), is_busy(false) {}
+};
+
+static size_t InputCounter;
+static const size_t MaxStreamSize = 1<<12;
+//! Maximum number of filters allowed
+static const int MaxFilters = 5;
+static size_t StreamSize;
+static const size_t MaxBuffer = 8;
+static bool Done[MaxFilters][MaxStreamSize];
+
+class MyFilter: public tbb::filter {
+ bool* const my_done;
+ const bool my_is_last;
+public:
+ MyFilter( bool is_ordered, bool done[], bool is_last ) :
+ filter(is_ordered) ,
+ my_done(done),
+ my_is_last(is_last)
+ {}
+ /*override*/void* operator()( void* item ) {
+ Buffer& b = *static_cast<Buffer*>(item);
+ ASSERT( 0<=b.id && size_t(b.id)<StreamSize, NULL );
+ ASSERT( !my_done[b.id], "duplicate processing of token?" );
+ ASSERT( !is_serial() || b.id==0 || my_done[b.id-1], NULL );
+ ASSERT( b.is_busy, NULL );
+ my_done[b.id] = true;
+ if( my_is_last ) {
+ b.is_busy = false;
+ }
+ return item;
+ }
+};
+
+class MyInput: public tbb::filter {
+ const size_t my_number_of_filters;
+ size_t next_buffer;
+ Buffer buffer[MaxBuffer];
+ /*override*/void* operator()( void* );
+public:
+ MyInput( bool is_ordered, int number_of_filters ) :
+ tbb::filter(is_ordered),
+ my_number_of_filters(number_of_filters),
+ next_buffer(0)
+ {}
+ bool last_filter_is_ordered;
+};
+
+void* MyInput::operator()(void*) {
+ if( InputCounter>=StreamSize )
+ return NULL;
+ else {
+retry:
+ Buffer& b = buffer[next_buffer];
+ ASSERT( &buffer[0] <= &b, NULL );
+ ASSERT( &b <= &buffer[MaxBuffer-1], NULL );
+ next_buffer = (next_buffer+1) % MaxBuffer;
+ if( !last_filter_is_ordered && b.is_busy )
+ goto retry;
+ ASSERT( !b.is_busy, "premature reuse of buffer");
+ b.id = int(InputCounter++);
+ b.is_busy = my_number_of_filters>1;
+ return &b;
+ }
+}
+
+//! Test pipeline that has a single stage, which is ordered, or two stages, where first is unordered.
+void TestTrivialpipeline( size_t nthread, int number_of_filters ) {
+ if( Verbose )
+ printf("testing with %d filters\n", number_of_filters );
+ ASSERT( number_of_filters<=MaxFilters, "too many filters" );
+ // Iterate over possible ordered/unordered filter sequences
+ for( int bitmask=0; bitmask<1<<number_of_filters; ++bitmask ) {
+ // Build pipeline
+ tbb::pipeline pipeline;
+ tbb::filter* filter[MaxFilters];
+ for( int i=0; i<number_of_filters; ++i ) {
+ const bool is_ordered = bitmask>>i&1;
+ const bool is_last = i==number_of_filters-1;
+ if( i==0 )
+ filter[i] = new MyInput(is_ordered,number_of_filters);
+ else
+ filter[i] = new MyFilter(is_ordered,Done[i],is_last);
+ pipeline.add_filter(*filter[i]);
+ if( is_last )
+ static_cast<MyInput*>(filter[0])->last_filter_is_ordered = is_ordered;
+ }
+ for( StreamSize=0; StreamSize<=MaxStreamSize; StreamSize += StreamSize/3+1 ) {
+ memset( Done, 0, sizeof(Done) );
+ InputCounter = 0;
+ tbb::tick_count t0 = tbb::tick_count::now();
+ pipeline.run( nthread<MaxBuffer ? nthread : MaxBuffer-1 );
+ tbb::tick_count t1 = tbb::tick_count::now();
+ if( number_of_filters>0 )
+ ASSERT( InputCounter==StreamSize, NULL );
+ for( int i=1; i<MaxFilters; ++i )
+ for( size_t j=0; j<StreamSize; ++j ) {
+ ASSERT( Done[i][j]==(i<number_of_filters), NULL );
+ }
+ }
+ pipeline.clear();
+ for( int i=number_of_filters; --i>=0; ) {
+ delete filter[i];
+ filter[i] = NULL;
+ }
+ }
+}
+
+#include "tbb/task_scheduler_init.h"
+#include "harness_cpu.h"
+
+int main( int argc, char* argv[] ) {
+ // Default is at least one thread.
+ MinThread = 1;
+ ParseCommandLine(argc,argv);
+ if( MinThread<1 ) {
+ printf("must have at least one thread");
+ exit(1);
+ }
+
+ // Test with varying number of threads.
+ for( int nthread=MinThread; nthread<=MaxThread; ++nthread ) {
+ // Initialize TBB task scheduler
+ tbb::task_scheduler_init init( nthread );
+
+ // Test pipelines with n filters
+ for( int n=0; n<=5; ++n )
+ TestTrivialpipeline(size_t(nthread),n);
+
+ // Test that all workers sleep when no work
+ TestCPUUserTime(nthread-1);
+ }
+ printf("done\n");
+ return 0;
+}
diff --git a/src/test/test_rwm_upgrade_downgrade.cpp b/src/test/test_rwm_upgrade_downgrade.cpp
new file mode 100644
index 0000000..0f8658c
--- /dev/null
+++ b/src/test/test_rwm_upgrade_downgrade.cpp
@@ -0,0 +1,92 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "tbb/queuing_rw_mutex.h"
+#include "tbb/spin_rw_mutex.h"
+#include "harness.h"
+#include "tbb/blocked_range.h"
+
+#define USE_TBB_PFOR 1
+
+#if USE_TBB_PFOR
+#include "tbb/task.h"
+#include "tbb/parallel_for.h"
+#endif
+
+using namespace tbb;
+
+volatile int Count = 0;
+
+template<typename RWMutex>
+struct Hammer {
+ RWMutex &MutexProtectingCount;
+ mutable volatile int dummy;
+
+ Hammer(RWMutex &m): MutexProtectingCount(m) {}
+ void operator()( const blocked_range<int>& range ) const {
+ for( int j=0; j<100000; ++j ) {
+ typename RWMutex::scoped_lock lock(MutexProtectingCount,false);
+ int c = Count;
+ for( int j=0; j<10; ++j ) {
+ ++dummy;
+ }
+ if( lock.upgrade_to_writer() ) {
+ // The upgrade suceeded without any intervening writers
+ ASSERT( c==Count, "another thread modified Count while I held a read lock" );
+ } else {
+ c = Count;
+ }
+ for( int j=0; j<10; ++j ) {
+ ++Count;
+ }
+ lock.downgrade_to_reader();
+ for( int j=0; j<10; ++j ) {
+ ++dummy;
+ }
+ }
+ }
+};
+
+queuing_rw_mutex QRW_mutex;
+spin_rw_mutex SRW_mutex;
+
+#include "tbb/task_scheduler_init.h"
+
+int main( int argc, char* argv[]) {
+ ParseCommandLine( argc, argv );
+#if USE_TBB_PFOR
+ task_scheduler_init init(NThread);
+ parallel_for( blocked_range<int>( 0, NThread, 1 ), Hammer<queuing_rw_mutex>(QRW_mutex) ); Count = 0;
+ parallel_for( blocked_range<int>( 0, NThread, 1 ), Hammer<spin_rw_mutex>(SRW_mutex) );
+#else
+ NativeParallelFor( blocked_range<int>( 0, NThread, 1 ), Hammer<queuing_rw_mutex>(QRW_mutex) ); Count = 0;
+ NativeParallelFor( blocked_range<int>( 0, NThread, 1 ), Hammer<spin_rw_mutex>(SRW_mutex) );
+#endif
+ printf("done\n");
+ return 0;
+}
diff --git a/src/test/test_task.cpp b/src/test/test_task.cpp
new file mode 100644
index 0000000..874dfa6
--- /dev/null
+++ b/src/test/test_task.cpp
@@ -0,0 +1,299 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "tbb/task.h"
+#include "tbb/atomic.h"
+#include "harness_assert.h"
+#include <cstdlib>
+
+//------------------------------------------------------------------------
+// Test for task::spawn_children and task_list
+//------------------------------------------------------------------------
+
+tbb::atomic<int> Count;
+
+class RecursiveTask: public tbb::task {
+ const int my_child_count;
+ const int my_depth;
+ //! Spawn tasks in list. Exact method depends upon my_depth&bit_mask.
+ void spawn_list( tbb::task_list& list, int bit_mask ) {
+ if( my_depth&bit_mask ) {
+ spawn(list);
+ ASSERT( list.empty(), NULL );
+ wait_for_all();
+ } else {
+ spawn_and_wait_for_all(list);
+ ASSERT( list.empty(), NULL );
+ }
+ }
+public:
+ RecursiveTask( int child_count, int depth ) : my_child_count(child_count), my_depth(depth) {}
+ /*override*/ tbb::task* execute() {
+ ++Count;
+ if( my_depth>0 ) {
+ tbb::task_list list;
+ ASSERT( list.empty(), NULL );
+ for( int k=0; k<my_child_count; ++k ) {
+ list.push_back( *new( tbb::task::allocate_child() ) RecursiveTask(my_child_count/2,my_depth-1 ) );
+ ASSERT( !list.empty(), NULL );
+ }
+ set_ref_count( my_child_count+1 );
+ spawn_list( list, 1 );
+ // Now try reusing this as the parent.
+ set_ref_count(2);
+ list.push_back( *new (tbb::task::allocate_child() ) tbb::empty_task() );
+ spawn_list( list, 2 );
+ }
+ return NULL;
+ }
+};
+
+//! Compute what Count should be after RecursiveTask(child_count,depth) runs.
+static int Expected( int child_count, int depth ) {
+ return depth<=0 ? 1 : 1+child_count*Expected(child_count/2,depth-1);
+}
+
+#include "tbb/task_scheduler_init.h"
+#include "harness.h"
+
+//! Test task::spawn( task_list& )
+void TestSpawnChildren( int nthread ) {
+ if( Verbose )
+ printf("testing task::spawn_children for %d threads\n",nthread);
+ tbb::task_scheduler_init init(nthread);
+ for( int j=0; j<50; ++j ) {
+ Count = 0;
+ RecursiveTask& p = *new( tbb::task::allocate_root() ) RecursiveTask(j,4);
+ tbb::task::spawn_root_and_wait(p);
+ int expected = Expected(j,4);
+ ASSERT( Count==expected, NULL );
+ }
+}
+
+//! Test task::spawn_root_and_wait( task_list& )
+void TestSpawnRootList( int nthread ) {
+ if( Verbose )
+ printf("testing task::spawn_root_and_wait(task_list&) for %d threads\n",nthread);
+ tbb::task_scheduler_init init(nthread);
+ for( int j=0; j<5; ++j )
+ for( int k=0; k<10; ++k ) {
+ Count = 0;
+ tbb::task_list list;
+ for( int i=0; i<k; ++i )
+ list.push_back( *new( tbb::task::allocate_root() ) RecursiveTask(j,4) );
+ tbb::task::spawn_root_and_wait(list);
+ int expected = k*Expected(j,4);
+ ASSERT( Count==expected, NULL );
+ }
+}
+
+//------------------------------------------------------------------------
+// Test for task::recycle_as_safe_continuation
+//------------------------------------------------------------------------
+
+class TaskGenerator: public tbb::task {
+ int my_child_count;
+ int my_depth;
+
+public:
+ TaskGenerator( int child_count, int depth ) : my_child_count(child_count), my_depth(depth) {}
+ ~TaskGenerator( ) { my_child_count = my_depth = -125; }
+
+ /*override*/ tbb::task* execute() {
+ ASSERT( my_child_count>=0 && my_depth>=0, NULL );
+ if( my_depth>0 ) {
+ recycle_as_safe_continuation();
+ set_ref_count( my_child_count+1 );
+ for( int j=0; j<my_child_count; ++j ) {
+ tbb::task& t = *new( allocate_child() ) TaskGenerator(my_child_count/2,my_depth-1);
+ spawn(t);
+ }
+ --my_depth;
+#if __linux__||__APPLE__
+ sched_yield();
+#else
+ Sleep(0);
+#endif /* __linux__ */
+ ASSERT( state()==recycle && ref_count()>0, NULL);
+ }
+ return NULL;
+ }
+};
+
+void TestSafeContinuation( int nthread ) {
+ if( Verbose )
+ printf("testing task::recycle_as_safe_continuation for %d threads\n",nthread);
+ tbb::task_scheduler_init init(nthread);
+ for( int j=8; j<33; ++j ) {
+ TaskGenerator& p = *new( tbb::task::allocate_root() ) TaskGenerator(j,5);
+ tbb::task::spawn_root_and_wait(p);
+ }
+}
+
+//------------------------------------------------------------------------
+// Test that important assertions in class task fail as expected.
+//------------------------------------------------------------------------
+
+#include "tbb/blocked_range.h"
+#include "harness_bad_expr.h"
+
+//! Task that will be abused.
+tbb::task* volatile AbusedTask;
+
+//! Number of times that AbuseOneTask
+int AbuseOneTaskRan;
+
+//! Body used to create task in thread 0 and abuse it in thread 1.
+struct AbuseOneTask {
+ void operator()( const tbb::blocked_range<int>& r ) const {
+ tbb::task_scheduler_init init;
+ // Thread 1 attempts to incorrectly use the task created by thread 0.
+ TRY_BAD_EXPR(AbusedTask->spawn(*AbusedTask),"owne");
+ TRY_BAD_EXPR(AbusedTask->spawn_and_wait_for_all(*AbusedTask),"owne");
+ TRY_BAD_EXPR(tbb::task::spawn_root_and_wait(*AbusedTask),"owne");
+
+ // Try variant that operate on a tbb::task_list
+ tbb::task_list list;
+ TRY_BAD_EXPR(AbusedTask->spawn(list),"owne");
+ TRY_BAD_EXPR(AbusedTask->spawn_and_wait_for_all(list),"owne");
+ // spawn_root_and_wait over empty list should vacuously succeed.
+ tbb::task::spawn_root_and_wait(list);
+
+ // Check that spawn_root_and_wait fails on non-empty list.
+ list.push_back(*AbusedTask);
+ TRY_BAD_EXPR(tbb::task::spawn_root_and_wait(list),"owne");
+
+ TRY_BAD_EXPR(AbusedTask->destroy(*AbusedTask),"owne");
+ TRY_BAD_EXPR(AbusedTask->wait_for_all(),"owne");
+
+ // Try abusing recycle_as_continuation
+ TRY_BAD_EXPR(AbusedTask->recycle_as_continuation(), "execute" );
+ TRY_BAD_EXPR(AbusedTask->recycle_as_safe_continuation(), "execute" );
+ TRY_BAD_EXPR(AbusedTask->recycle_to_reexecute(), "execute" );
+
+ // Check correct use of depth parameter
+ tbb::task::depth_type depth = AbusedTask->depth();
+ ASSERT( depth==0, NULL );
+ for( int k=1; k<=81; k*=3 ) {
+ AbusedTask->set_depth(depth+k);
+ ASSERT( AbusedTask->depth()==depth+k, NULL );
+ AbusedTask->add_to_depth(k+1);
+ ASSERT( AbusedTask->depth()==depth+2*k+1, NULL );
+ }
+ AbusedTask->set_depth(0);
+
+ // Try abusing the depth parameter
+ TRY_BAD_EXPR(AbusedTask->set_depth(-1),"negative");
+ TRY_BAD_EXPR(AbusedTask->add_to_depth(-1),"negative");
+
+ ++AbuseOneTaskRan;
+ }
+};
+
+//! Test various __TBB_ASSERT assertions related to class tbb::task.
+void TestTaskAssertions() {
+#if TBB_DO_ASSERT
+ // Catch assertion failures
+ tbb::set_assertion_handler( AssertionFailureHandler );
+ tbb::task_scheduler_init init;
+ // Create task to be abused
+ AbusedTask = new( tbb::task::allocate_root() ) tbb::empty_task;
+ NativeParallelFor( tbb::blocked_range<int>(0,1,1), AbuseOneTask() );
+ ASSERT( AbuseOneTaskRan==1, NULL );
+ AbusedTask->destroy(*AbusedTask);
+ // Restore normal assertion handling
+ tbb::set_assertion_handler( NULL );
+#endif /* TBB_DO_ASSERT */
+}
+
+//------------------------------------------------------------------------
+// Test that recovery actions work correctly for task::allocate_* methods
+// when a task's constructor throws an exception.
+//------------------------------------------------------------------------
+
+static int TestUnconstructibleTaskCount;
+
+struct ConstructionFailure {
+};
+
+//! Task that cannot be constructed.
+struct UnconstructibleTask: public tbb::empty_task {
+ UnconstructibleTask() {
+ throw ConstructionFailure();
+ }
+};
+
+#define TRY_BAD_CONSTRUCTION(x) \
+ { \
+ try { \
+ new(x) UnconstructibleTask; \
+ } catch( ConstructionFailure ) { \
+ ASSERT( parent()==original_parent, NULL ); \
+ ASSERT( ref_count()==original_ref_count, "incorrectly changed ref_count" );\
+ ++TestUnconstructibleTaskCount; \
+ } \
+ }
+
+struct RootTaskForTestUnconstructibleTask: public tbb::task {
+ tbb::task* execute() {
+ tbb::task* original_parent = parent();
+ ASSERT( original_parent!=NULL, NULL );
+ int original_ref_count = ref_count();
+ TRY_BAD_CONSTRUCTION( allocate_root() );
+ TRY_BAD_CONSTRUCTION( allocate_child() );
+ TRY_BAD_CONSTRUCTION( allocate_continuation() );
+ TRY_BAD_CONSTRUCTION( allocate_additional_child_of(*this) );
+ return NULL;
+ }
+};
+
+void TestUnconstructibleTask() {
+ TestUnconstructibleTaskCount = 0;
+ tbb::task_scheduler_init init;
+ tbb::task* t = new( tbb::task::allocate_root() ) RootTaskForTestUnconstructibleTask;
+ tbb::task::spawn_root_and_wait(*t);
+ ASSERT( TestUnconstructibleTaskCount==4, NULL );
+}
+
+//------------------------------------------------------------------------
+
+int main(int argc, char* argv[]) {
+ srand(2);
+ MinThread = 1;
+ ParseCommandLine( argc, argv );
+ TestTaskAssertions();
+ TestUnconstructibleTask();
+ for( int p=MinThread; p<=MaxThread; ++p ) {
+ TestSpawnChildren( p );
+ TestSpawnRootList( p );
+ TestSafeContinuation( p );
+ }
+ printf("done\n");
+ return 0;
+}
+
diff --git a/src/test/test_task_leaks.cpp b/src/test/test_task_leaks.cpp
new file mode 100644
index 0000000..000f1c0
--- /dev/null
+++ b/src/test/test_task_leaks.cpp
@@ -0,0 +1,147 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+
+#define COUNT_TASK_NODES 1
+#include "../tbb/task.cpp"
+
+#include "tbb/atomic.h"
+#include "harness_assert.h"
+#include <cstdlib>
+
+//------------------------------------------------------------------------
+// Test for task::spawn_children
+//------------------------------------------------------------------------
+
+tbb::atomic<int> Count;
+
+#include "tbb/task_scheduler_init.h"
+#include "harness.h"
+using namespace tbb;
+using namespace tbb::internal;
+
+class TaskGenerator: public tbb::task {
+ const int my_child_count;
+ int my_depth;
+public:
+ TaskGenerator(int child_count, int depth) : my_child_count(child_count), my_depth(depth) {}
+ /*override*/ tbb::task* execute() {
+ if( my_depth>0 ) {
+ tbb::task& c = *new( tbb::task::allocate_continuation() ) tbb::empty_task;
+ c.set_ref_count( my_child_count );
+ recycle_as_child_of(c);
+ for( int j=1; j<my_child_count; ++j ) {
+ tbb::task& t = *new( c.allocate_child() ) TaskGenerator(my_child_count, my_depth-1);
+ c.spawn(t);
+ }
+ --my_depth;
+ return this;
+ }
+ return NULL;
+ }
+};
+
+#include "harness_memory.h"
+#include <math.h>
+
+//! Tests whether task scheduler allows thieves to hoard task objects.
+/** The test takes a while to run, so we run it only with the default
+ number of threads. */
+void TestTaskReclamation() {
+ if( Verbose )
+ printf("testing task reclamation\n");
+ size_t initial_amount_of_memory = 0;
+ double task_count_sum = 0;
+ double task_count_sum_square = 0;
+ double average, sigma;
+
+ tbb::task_scheduler_init init;
+ int N = 20;
+ for( int i=0; i<N; ++i ) {
+ // First N iterations fill internal buffers and collect initial statistics
+ for( int j=0; j<10; ++j ) {
+ tbb::task& t = *new( tbb::task::allocate_root() ) TaskGenerator(/*child_count=*/4, /*depth=*/6);
+ tbb::task::spawn_root_and_wait(t);
+ }
+
+ size_t m = GetMemoryUsage();
+ if( m-initial_amount_of_memory > 0)
+ initial_amount_of_memory = m;
+
+ tbb::internal::intptr n = (*reinterpret_cast<GenericScheduler**>(&init))->get_task_node_count( /*count_arena_workers=*/true );
+ task_count_sum += n;
+ task_count_sum_square += n*n;
+ }
+ // Calculate statistical values
+ average = task_count_sum / N;
+ sigma = sqrt( (task_count_sum_square - task_count_sum*task_count_sum/N)/N );
+ if( Verbose )
+ printf("Average task count: %g, sigma: %g, sum: %g, square sum:%g \n", average, sigma, task_count_sum, task_count_sum_square);
+
+ int error_count = 0;
+ for( int i=0; i<500; ++i ) {
+ // These iterations check for excessive memory use and unreasonable task count
+ for( int j=0; j<10; ++j ) {
+ tbb::task& t = *new( tbb::task::allocate_root() ) TaskGenerator(/*child_count=*/4, /*depth=*/6);
+ tbb::task::spawn_root_and_wait(t);
+ }
+ tbb::internal::intptr n = (*reinterpret_cast<GenericScheduler**>(&init))->get_task_node_count( /*count_arena_workers=*/true );
+ size_t m = GetMemoryUsage();
+
+ if( (m-initial_amount_of_memory > 0) && (n > average+4*sigma) ) {
+ ++error_count;
+ // Use 4*sigma interval (for normal distribution, 3*sigma contains ~99% of values).
+ // Issue a warning for the first couple of times, then errors
+ printf( "%s: possible leak of up to %ld bytes; currently %ld cached task objects (iteration=%d)\n",
+ error_count>3?"Error":"Warning", long(m-initial_amount_of_memory), long(n), i );
+ initial_amount_of_memory = m;
+ if( error_count>5 ) break;
+ } else {
+ if( Verbose )
+ printf( "Consumed %ld bytes and %ld objects (iteration=%d)\n", long(m), long(n), i );
+ }
+ }
+}
+
+//------------------------------------------------------------------------
+
+int main(int argc, char* argv[]) {
+#if _WIN32||_WIN64
+ // This initialization is normally done by DllMain in task.cpp,
+ // but because this test directly includes task.cpp,
+ // the initialization must be done explicitly.
+ InitializeCriticalSection(&OneTimeInitializationCriticalSection);
+#endif /* _WIN32||_WIN64 */
+ srand(2);
+ MinThread = 1;
+ ParseCommandLine( argc, argv );
+ TestTaskReclamation();
+ printf("done\n");
+ return 0;
+}
+
diff --git a/src/test/test_task_scheduler_init.cpp b/src/test/test_task_scheduler_init.cpp
new file mode 100644
index 0000000..3b6e91c
--- /dev/null
+++ b/src/test/test_task_scheduler_init.cpp
@@ -0,0 +1,98 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "tbb/task_scheduler_init.h"
+#include <cstdlib>
+
+//! Test that task::initialize and task::terminate work when doing nothing else.
+/** maxthread is treated as the "maximum" number of worker threads. */
+void InitializeAndTerminate( int maxthread ) {
+ for( int i=0; i<200; ++i ) {
+ switch( i&3 ) {
+ default: {
+ tbb::task_scheduler_init init( rand() % maxthread + 1 );
+ break;
+ }
+ case 0: {
+ tbb::task_scheduler_init init;
+ break;
+ }
+ case 1: {
+ tbb::task_scheduler_init init( tbb::task_scheduler_init::automatic );
+ break;
+ }
+ case 2: {
+ tbb::task_scheduler_init init( tbb::task_scheduler_init::deferred );
+ init.initialize( rand() % maxthread + 1 );
+ init.terminate();
+ break;
+ }
+ }
+ }
+}
+
+#include <cstdio>
+#include <stdexcept>
+#include "harness.h"
+#include "tbb/blocked_range.h"
+
+#if _WIN64
+namespace std { // 64-bit Windows compilers have not caught up with 1998 ISO C++ standard
+ using ::srand;
+ using ::printf;
+}
+#endif /* _WIN64 */
+
+struct ThreadedInit {
+ void operator()( const tbb::blocked_range<long>& r ) const {
+ try {
+ InitializeAndTerminate(MaxThread);
+ } catch( std::runtime_error& error ) {
+ std::printf("ERROR: %s\n", error.what() );
+ }
+ }
+};
+
+//! Test driver
+int main(int argc, char* argv[]) {
+ std::srand(2);
+ // Set defaults
+ MaxThread = MinThread = 2;
+ ParseCommandLine( argc, argv );
+ try {
+ InitializeAndTerminate(MaxThread);
+ } catch( std::runtime_error& error ) {
+ std::printf("ERROR: %s\n", error.what() );
+ }
+ for( int p=MinThread; p<=MaxThread; ++p ) {
+ if( Verbose ) printf("testing with %d threads\n", p );
+ NativeParallelFor( tbb::blocked_range<long>(0,p,1), ThreadedInit() );
+ }
+ std::printf("done\n");
+ return 0;
+}
diff --git a/src/test/test_tick_count.cpp b/src/test/test_tick_count.cpp
new file mode 100644
index 0000000..c13e99b
--- /dev/null
+++ b/src/test/test_tick_count.cpp
@@ -0,0 +1,160 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+#include "tbb/tick_count.h"
+#include "harness.h"
+#include <cstdio>
+
+//! Assert that two times in seconds are very close.
+void AssertNear( double x, double y ) {
+ ASSERT( -1.0E-10 <= x-y && x-y <=1.0E-10, NULL );
+}
+
+//! Test arithmetic operators on tick_count::interval_t
+void TestArithmetic( const tbb::tick_count& t0, const tbb::tick_count& t1, const tbb::tick_count& t2 ) {
+ tbb::tick_count::interval_t i= t1-t0;
+ tbb::tick_count::interval_t j = t2-t1;
+ tbb::tick_count::interval_t k = t2-t0;
+ AssertSameType( tbb::tick_count::interval_t(), i-j );
+ AssertSameType( tbb::tick_count::interval_t(), i+j );
+ ASSERT( i.seconds()>1E-9, NULL );
+ ASSERT( j.seconds()>1E-9, NULL );
+ ASSERT( k.seconds()>2E-9, NULL );
+ AssertNear( (i+j).seconds(), k.seconds() );
+ AssertNear( (k-j).seconds(), i.seconds() );
+ AssertNear( ((k-j)+(j-i)).seconds(), k.seconds()-i.seconds() );
+ tbb::tick_count::interval_t sum;
+ sum += i;
+ sum += j;
+ AssertNear( sum.seconds(), k.seconds() );
+ sum -= i;
+ AssertNear( sum.seconds(), j.seconds() );
+ sum -= j;
+ AssertNear( sum.seconds(), 0.0 );
+}
+
+//------------------------------------------------------------------------
+// Test for overhead in calls to tick_count
+//------------------------------------------------------------------------
+
+//! Wait for given duration.
+/** The duration parameter is in units of seconds. */
+static void WaitForDuration( double duration ) {
+ tbb::tick_count start = tbb::tick_count::now();
+ while( (tbb::tick_count::now()-start).seconds() < duration )
+ continue;
+}
+
+//! Test that average timer overhead is within acceptable limit.
+/** The 'tolerance' value inside the test specifies the limit. */
+void TestSimpleDelay( int ntrial, double duration, double tolerance ) {
+ double total_worktime = 0;
+ // Iteration -1 warms up the code cache.
+ for( int trial=-1; trial<ntrial; ++trial ) {
+ tbb::tick_count t0 = tbb::tick_count::now();
+ if( duration ) WaitForDuration(duration);
+ tbb::tick_count t1 = tbb::tick_count::now();
+ if( trial>=0 ) {
+ total_worktime += (t1-t0).seconds();
+ }
+ }
+ // Compute average worktime and average delta
+ double worktime = total_worktime/ntrial;
+ double delta = worktime-duration;
+ if (Verbose)
+ printf("worktime=%g delta=%g tolerance=%g\n", worktime, delta, tolerance);
+
+ // Check that delta is acceptable
+ if( delta<0 )
+ printf("ERROR: delta=%g < 0\n",delta);
+ if( delta>tolerance )
+ printf("%s: delta=%g > %g=tolerance where duration=%g\n",delta>3*tolerance?"ERROR":"WARNING",delta,tolerance,duration);
+}
+
+//------------------------------------------------------------------------
+// Test for subtracting calls to tick_count from different threads.
+//------------------------------------------------------------------------
+
+#include "tbb/atomic.h"
+#include "tbb/blocked_range.h"
+const int MAX_NTHREAD = 1000;
+static tbb::atomic<int> Counter;
+static volatile bool Flag;
+static tbb::tick_count tick_countArray[MAX_NTHREAD];
+
+struct tick_countDifferenceBody {
+ void operator()( const tbb::blocked_range<int>& range ) const {
+ ASSERT( range.begin()+1==range.end(), "grainsize must be 1" );
+ int id = range.begin();
+ if( --Counter==0 ) Flag = true;
+ while( !Flag ) continue;
+ tick_countArray[id] = tbb::tick_count::now();
+ }
+};
+
+//! Test that two tick_count values recorded on different threads can be meaningfully subtracted.
+void Testtick_countDifference( int n ) {
+ double tolerance = 3E-4;
+ for( int trial=0; trial<10; ++trial ) {
+ Counter = n;
+ Flag = false;
+ NativeParallelFor( tbb::blocked_range<int>(0,n,1), tick_countDifferenceBody() );
+ ASSERT( Counter==0, NULL );
+ for( int i=0; i<n; ++i )
+ for( int j=0; j<i; ++j ) {
+ double diff = (tick_countArray[i]-tick_countArray[j]).seconds();
+ if( diff<0 ) diff = -diff;
+ if( diff>tolerance ) {
+ printf("%s: cross-thread tick_count difference = %g > %g = tolerance\n",
+ diff>3*tolerance?"ERROR":"WARNING",diff,tolerance);
+ }
+ }
+ }
+}
+
+//------------------------------------------------------------------------
+// Test driver
+//------------------------------------------------------------------------
+
+//! Top level test driver.
+int main( int argc, char* argv[]) {
+ ParseCommandLine(argc, argv);
+
+ tbb::tick_count t0 = tbb::tick_count::now();
+ TestSimpleDelay(/*ntrial=*/1000000,/*duration=*/0, /*tolerance=*/2E-6);
+ tbb::tick_count t1 = tbb::tick_count::now();
+ TestSimpleDelay(/*ntrial=*/10, /*duration=*/0.125,/*tolerance=*/5E-6);
+ tbb::tick_count t2 = tbb::tick_count::now();
+ TestArithmetic(t0,t1,t2);
+
+ for( int n=MinThread; n<=MaxThread; ++n ) {
+ Testtick_countDifference(n);
+ }
+ printf("done\n");
+ return 0;
+}
diff --git a/src/test/test_yield.cpp b/src/test/test_yield.cpp
new file mode 100644
index 0000000..12f20c8
--- /dev/null
+++ b/src/test/test_yield.cpp
@@ -0,0 +1,79 @@
+/*
+ Copyright 2005-2007 Intel Corporation. All Rights Reserved.
+
+ This file is part of Threading Building Blocks.
+
+ Threading Building Blocks is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public License
+ version 2 as published by the Free Software Foundation.
+
+ Threading Building Blocks 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Threading Building Blocks; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ As a special exception, you may use this file as part of a free software
+ library without restriction. Specifically, if other files instantiate
+ templates or use macros or inline functions from this file, or you compile
+ this file and link it with other files to produce an executable, this
+ file does not by itself cause the resulting executable to be covered by
+ the GNU General Public License. This exception does not however
+ invalidate any other reasons why the executable file might be covered by
+ the GNU General Public License.
+*/
+
+// Test that __TBB_Yield works.
+// On Red Hat EL4 U1, it does not work, because sched_yield is broken.
+
+#include "tbb/tbb_machine.h"
+#include "harness.h"
+#include "tbb/blocked_range.h"
+#include "tbb/tick_count.h"
+
+static volatile long CyclicCounter;
+static volatile bool Quit;
+double SingleThreadTime;
+
+struct RoundRobin {
+ const int number_of_threads;
+ RoundRobin( long p ) : number_of_threads(p) {}
+ void operator()( const tbb::blocked_range<long>& r ) const {
+ const long k = r.begin();
+ tbb::tick_count t0 = tbb::tick_count::now();
+ for( long i=0; i<10000; ++i ) {
+ // Wait for previous thread to notify us
+ for( int j=0; CyclicCounter!=k && !Quit; ++j ) {
+ __TBB_Yield();
+ if( j%100==0 ) {
+ tbb::tick_count t1 = tbb::tick_count::now();
+ if( (t1-t0).seconds()>=1.0*number_of_threads ) {
+ printf("Warning: __TBB_Yield failing to yield with %d threads (or system is heavily loaded)\n",number_of_threads);
+ Quit = true;
+ return;
+ }
+ }
+ }
+ // Notify next thread that it can run
+ CyclicCounter = (k+1)%number_of_threads;
+ }
+ }
+};
+
+int main( long argc, char* argv[] ) {
+ // Set defaults
+ MaxThread = MinThread = 3;
+ ParseCommandLine( argc, argv );
+ for( int p=MinThread; p<=MaxThread; ++p ) {
+ if( Verbose ) printf("testing with %d threads\n", p );
+ CyclicCounter = 0;
+ Quit = false;
+ NativeParallelFor( tbb::blocked_range<long>(0,p,1), RoundRobin(p) );
+ }
+ printf("done\n");
+ return 0;
+}
+
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/tbb.git
More information about the debian-science-commits
mailing list