diff --git a/Dockerfile b/Dockerfile index 6267a5f00..d622191c6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -54,7 +54,7 @@ RUN pip3 install tf_slim RUN ln -s /usr/bin/python3 /usr/bin/python # Install bazel -ARG BAZEL_VERSION=2.0.0 +ARG BAZEL_VERSION=3.0.0 RUN mkdir /bazel && \ wget --no-check-certificate -O /bazel/installer.sh "https://github.com/bazelbuild/bazel/releases/download/${BAZEL_VERSION}/b\ azel-${BAZEL_VERSION}-installer-linux-x86_64.sh" && \ diff --git a/README.md b/README.md index d7287dc35..420eea905 100644 --- a/README.md +++ b/README.md @@ -89,7 +89,8 @@ run code search using ## Publications -* [Instant Motion Tracking With MediaPipe](https://mediapipe.page.link/instant-motion-tracking-blog) +* [Face AR with MediaPipe Face Mesh](https://mediapipe.page.link/face-geometry-blog) in Google Developers Blog +* [Instant Motion Tracking With MediaPipe](https://developers.googleblog.com/2020/08/instant-motion-tracking-with-mediapipe.html) in Google Developers Blog * [BlazePose - On-device Real-time Body Pose Tracking](https://ai.googleblog.com/2020/08/on-device-real-time-body-pose-tracking.html) in Google AI Blog diff --git a/build_desktop_examples.sh b/build_desktop_examples.sh new file mode 100644 index 000000000..7b971f1bc --- /dev/null +++ b/build_desktop_examples.sh @@ -0,0 +1,108 @@ +#!/bin/bash +# Copyright 2020 The MediaPipe Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ========================================================================= +# +# Script to build/run all MediaPipe desktop example apps (with webcam input). +# +# To build and run all apps and store them in out_dir: +# $ ./build_ios_examples.sh -d out_dir +# Omitting -d and the associated directory saves all generated apps in the +# current directory. +# To build all apps and store them in out_dir: +# $ ./build_ios_examples.sh -d out_dir -b +# Omitting -d and the associated directory saves all generated apps in the +# current directory. +# To run all apps already stored in out_dir: +# $ ./build_ios_examples.sh -d out_dir -r +# Omitting -d and the associated directory assumes all apps are in the current +# directory. + +set -e + +out_dir="." +build_only=false +run_only=false +app_dir="mediapipe/examples/desktop" +bin_dir="bazel-bin" +declare -a default_bazel_flags=(build -c opt --define MEDIAPIPE_DISABLE_GPU=1) + +while [[ -n $1 ]]; do + case $1 in + -d) + shift + out_dir=$1 + ;; + -b) + build_only=true + ;; + -r) + run_only=true + ;; + *) + echo "Unsupported input argument $1." + exit 1 + ;; + esac + shift +done + +echo "app_dir: $app_dir" +echo "out_dir: $out_dir" + +declare -a bazel_flags + +apps="${app_dir}/*" +for app in ${apps}; do + if [[ -d "${app}" ]]; then + target_name=${app##*/} + if [[ "${target_name}" == "autoflip" || + "${target_name}" == "hello_world" || + "${target_name}" == "media_sequence" || + "${target_name}" == "template_matching" || + "${target_name}" == "youtube8m" ]]; then + continue + fi + target="${app}:${target_name}_cpu" + + echo "=== Target: ${target}" + + if [[ $run_only == false ]]; then + bazel_flags=("${default_bazel_flags[@]}") + bazel_flags+=(${target}) + + bazel "${bazel_flags[@]}" + cp -f "${bin_dir}/${app}/"*"_cpu" "${out_dir}" + fi + if [[ $build_only == false ]]; then + if [[ ${target_name} == "multi_hand_tracking" ]]; then + graph_name="hand_tracking/multi_hand_tracking" + elif [[ ${target_name} == "object_tracking" ]]; then + graph_name="tracking/object_detection_tracking" + elif [[ ${target_name} == "upper_body_pose_tracking" ]]; then + graph_name="pose_tracking/upper_body_pose_tracking" + else + graph_name="${target_name}/${target_name}" + fi + if [[ ${target_name} == "iris_tracking" || + ${target_name} == "upper_body_pose_tracking" ]]; then + graph_suffix="cpu" + else + graph_suffix="desktop_live" + fi + GLOG_logtostderr=1 "${out_dir}/${target_name}_cpu" \ + --calculator_graph_config_file=mediapipe/graphs/"${graph_name}_${graph_suffix}.pbtxt" + fi + fi +done diff --git a/docs/images/face_geometry_metric_3d_space.gif b/docs/images/face_geometry_metric_3d_space.gif new file mode 100644 index 000000000..1ecd20921 Binary files /dev/null and b/docs/images/face_geometry_metric_3d_space.gif differ diff --git a/docs/images/face_geometry_renderer.gif b/docs/images/face_geometry_renderer.gif new file mode 100644 index 000000000..1f18f765f Binary files /dev/null and b/docs/images/face_geometry_renderer.gif differ diff --git a/docs/images/face_mesh_ar_effects.gif b/docs/images/face_mesh_ar_effects.gif index 868a40c4d..cf56ec719 100644 Binary files a/docs/images/face_mesh_ar_effects.gif and b/docs/images/face_mesh_ar_effects.gif differ diff --git a/docs/index.md b/docs/index.md index 3b67a53fa..f4d743b11 100644 --- a/docs/index.md +++ b/docs/index.md @@ -89,7 +89,8 @@ run code search using ## Publications -* [Instant Motion Tracking With MediaPipe](https://mediapipe.page.link/instant-motion-tracking-blog) +* [Face AR with MediaPipe Face Mesh](https://mediapipe.page.link/face-geometry-blog) in Google Developers Blog +* [Instant Motion Tracking With MediaPipe](https://developers.googleblog.com/2020/08/instant-motion-tracking-with-mediapipe.html) in Google Developers Blog * [BlazePose - On-device Real-time Body Pose Tracking](https://ai.googleblog.com/2020/08/on-device-real-time-body-pose-tracking.html) in Google AI Blog diff --git a/docs/solutions/face_detection.md b/docs/solutions/face_detection.md index 036624332..62abf0dd5 100644 --- a/docs/solutions/face_detection.md +++ b/docs/solutions/face_detection.md @@ -102,9 +102,4 @@ to cross-compile and run MediaPipe examples on the [BlazeFace: Sub-millisecond Neural Face Detection on Mobile GPUs](https://arxiv.org/abs/1907.05047) ([presentation](https://docs.google.com/presentation/d/1YCtASfnYyZtH-41QvnW5iZxELFnf0MF-pPWSLGj8yjQ/present?slide=id.g5bc8aeffdd_1_0)) ([poster](https://drive.google.com/file/d/1u6aB6wxDY7X2TmeUUKgFydulNtXkb3pu/view)) -* For front-facing/selfie camera: - [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/models/face_detection_front.tflite), - [TFLite model quantized for EdgeTPU/Coral](https://github.com/google/mediapipe/tree/master/mediapipe/examples/coral/models/face-detector-quantized_edgetpu.tflite) -* For back-facing camera: - [TFLite model ](https://github.com/google/mediapipe/tree/master/mediapipe/models/face_detection_back.tflite) -* [Model card](https://mediapipe.page.link/blazeface-mc) +* [Models and model cards](./models.md#face_detection) diff --git a/docs/solutions/face_mesh.md b/docs/solutions/face_mesh.md index 712ea5b0b..ed187ba09 100644 --- a/docs/solutions/face_mesh.md +++ b/docs/solutions/face_mesh.md @@ -19,13 +19,18 @@ landmarks in real-time even on mobile devices. It employs machine learning (ML) to infer the 3D surface geometry, requiring only a single camera input without the need for a dedicated depth sensor. Utilizing lightweight model architectures together with GPU acceleration throughout the pipeline, the solution delivers -real-time performance critical for live experiences. The core of the solution is -the same as what powers -[YouTube Stories](https://youtube-creators.googleblog.com/2018/11/introducing-more-ways-to-share-your.html)' -creator effects, the -[Augmented Faces API in ARCore](https://developers.google.com/ar/develop/java/augmented-faces/) -and the -[ML Kit Face Contour Detection API](https://firebase.google.com/docs/ml-kit/face-detection-concepts#contours). +real-time performance critical for live experiences. + +Additionally, the solution is bundled with the Face Geometry module that bridges +the gap between the face landmark estimation and useful real-time augmented +reality (AR) applications. It establishes a metric 3D space and uses the face +landmark screen positions to estimate face geometry within that space. The face +geometry data consists of common 3D geometry primitives, including a face pose +transformation matrix and a triangular face mesh. Under the hood, a lightweight +statistical analysis method called +[Procrustes Analysis](https://en.wikipedia.org/wiki/Procrustes_analysis) is +employed to drive a robust, performant and portable logic. The analysis runs on +CPU and has a minimal speed/memory footprint on top of the ML model inference. ![face_mesh_ar_effects.gif](../images/face_mesh_ar_effects.gif) | :-------------------------------------------------------------: | @@ -67,15 +72,15 @@ Note: To visualize a graph, copy the graph and paste it into to visualize its associated subgraphs, please see [visualizer documentation](../tools/visualizer.md). -## Models +### Models -### Face Detection Model +#### Face Detection Model The face detector is the same [BlazeFace](https://arxiv.org/abs/1907.05047) model used in [MediaPipe Face Detection](./face_detection.md). Please refer to [MediaPipe Face Detection](./face_detection.md) for details. -### Face Landmark Model +#### Face Landmark Model For 3D face landmarks we employed transfer learning and trained a network with several objectives: the network simultaneously predicts 3D landmark coordinates @@ -98,7 +103,108 @@ You can find more information about the face landmark model in this ![face_mesh_android_gpu.gif](../images/mobile/face_mesh_android_gpu.gif) | :------------------------------------------------------------------------: | -*Fig 2. Output of MediaPipe Face Mesh: the red box indicates the cropped area as input to the landmark model, the red dots represent the 468 landmarks in 3D, and the green lines connecting landmarks illustrate the contours around the eyes, eyebrows, lips and the entire face.* | +*Fig 2. Face landmarks: the red box indicates the cropped area as input to the landmark model, the red dots represent the 468 landmarks in 3D, and the green lines connecting landmarks illustrate the contours around the eyes, eyebrows, lips and the entire face.* | + +## Face Geometry Module + +The [Face Landmark Model](#face-landmark-model) performs a single-camera face landmark +detection in the screen coordinate space: the X- and Y- coordinates are +normalized screen coordinates, while the Z coordinate is relative and is scaled +as the X coodinate under the +[weak perspective projection camera model](https://en.wikipedia.org/wiki/3D_projection#Weak_perspective_projection). +This format is well-suited for some applications, however it does not directly +enable the full spectrum of augmented reality (AR) features like aligning a +virtual 3D object with a detected face. + +The +[Face Geometry module](https://github.com/google/mediapipe/tree/master/mediapipe/modules/face_geometry) +moves away from the screen coordinate space towards a metric 3D space and +provides necessary primitives to handle a detected face as a regular 3D object. +By design, you'll be able to use a perspective camera to project the final 3D +scene back into the screen coordinate space with a guarantee that the face +landmark positions are not changed. + +### Key Concepts + +#### Metric 3D Space + +The **Metric 3D space** established within the Face Geometry module is a +right-handed orthonormal metric 3D coordinate space. Within the space, there is +a **virtual perspective camera** located at the space origin and pointed in the +negative direction of the Z-axis. In the current pipeline, it is assumed that +the input camera frames are observed by exactly this virtual camera and +therefore its parameters are later used to convert the screen landmark +coordinates back into the Metric 3D space. The *virtual camera parameters* can +be set freely, however for better results it is advised to set them as close to +the *real physical camera parameters* as possible. + +![face_geometry_metric_3d_space.gif](../images/face_geometry_metric_3d_space.gif) | +:----------------------------------------------------------------------------: | +*Fig 3. A visualization of multiple key elements in the Metric 3D space.* | + +#### Canonical Face Model + +The **Canonical Face Model** is a static 3D model of a human face, which follows +the 468 3D face landmark topology of the +[Face Landmark Model](#face-landmark-model). The model bears two important +functions: + +- **Defines metric units**: the scale of the canonical face model defines the + metric units of the Metric 3D space. A metric unit used by the + [default canonical face model](https://github.com/google/mediapipe/tree/master/mediapipe/modules/face_geometry/data/canonical_face_model.fbx) + is a centimeter; +- **Bridges static and runtime spaces**: the face pose transformation matrix + is - in fact - a linear map from the canonical face model into the runtime + face landmark set estimated on each frame. This way, virtual 3D assets + modeled around the canonical face model can be aligned with a tracked face + by applying the face pose transformation matrix to them. + +### Components + +#### Geometry Pipeline + +The **Geometry Pipeline** is a key component, which is responsible for +estimating face geometry objects within the Metric 3D space. On each frame, the +following steps are executed in the given order: + +- Face landmark screen coordinates are converted into the Metric 3D space + coordinates; +- Face pose transformation matrix is estimated as a rigid linear mapping from + the canonical face metric landmark set into the runtime face metric landmark + set in a way that minimizes a difference between the two; +- A face mesh is created using the runtime face metric landmarks as the vertex + positions (XYZ), while both the vertex texture coordinates (UV) and the + triangular topology are inherited from the canonical face model. + +The geometry pipeline is implemented as a MediaPipe +[calculator](https://github.com/google/mediapipe/tree/master/mediapipe/modules/face_geometry/geometry_pipeline_calculator.cc). +For your convenience, the face geometry pipeline calculator is bundled together +with the face landmark module into a unified MediaPipe +[subgraph](https://github.com/google/mediapipe/tree/master/mediapipe/modules/face_geometry/face_geometry_front_gpu.pbtxt). +The face geometry format is defined as a Protocol Buffer +[message](https://github.com/google/mediapipe/tree/master/mediapipe/modules/face_geometry/protos/face_geometry.proto). + +#### Effect Renderer + +The **Effect Renderer** is a component, which serves as a working example of a +face effect renderer. It targets the *OpenGL ES 2.0* API to enable a real-time +performance on mobile devices and supports the following rendering modes: + +- **3D object rendering mode**: a virtual object is aligned with a detected + face to emulate an object attached to the face (example: glasses); +- **Face mesh rendering mode**: a texture is stretched on top of the face mesh + surface to emulate a face painting technique. + +In both rendering modes, the face mesh is first rendered as an occluder straight +into the depth buffer. This step helps to create a more believable effect via +hiding invisible elements behind the face surface. + +The effect renderer is implemented as a MediaPipe +[calculator](https://github.com/google/mediapipe/tree/master/mediapipe/modules/face_geometry/effect_renderer_calculator.cc). + +| ![face_geometry_renderer.gif](../images/face_geometry_renderer.gif) | +| :---------------------------------------------------------------------: | +| *Fig 4. An example of face effects rendered by the Face Geometry Effect Renderer.* | ## Example Apps @@ -111,7 +217,12 @@ Note: To visualize a graph, copy the graph and paste it into to visualize its associated subgraphs, please see [visualizer documentation](../tools/visualizer.md). -### Mobile +### Face Landmark Example + +Face landmark example showcases real-time, cross-platform face landmark +detection. For visual reference, please refer to *Fig. 2*. + +#### Mobile * Graph: [`mediapipe/graphs/face_mesh/face_mesh_mobile.pbtxt`](https://github.com/google/mediapipe/tree/master/mediapipe/graphs/face_mesh/face_mesh_mobile.pbtxt) @@ -127,7 +238,7 @@ it, for Android modify `NUM_FACES` in and for iOS modify `kNumFaces` in [FaceMeshGpuViewController.mm](https://github.com/google/mediapipe/tree/master/mediapipe/examples/ios/facemeshgpu/FaceMeshGpuViewController.mm). -### Desktop +#### Desktop * Running on CPU * Graph: @@ -143,18 +254,35 @@ and for iOS modify `kNumFaces` in Tip: Maximum number of faces to detect/process is set to 1 by default. To change it, in the graph file modify the option of `ConstantSidePacketCalculator`. +### Face Effect Example + +Face effect example showcases real-time mobile face effect application use case +for the Face Mesh solution. To enable a better user experience, this example +only works for a single face. For visual reference, please refer to *Fig. 4*. + +#### Mobile + +* Graph: + [`mediapipe/graphs/face_effect/face_effect_gpu.pbtxt`](https://github.com/google/mediapipe/tree/master/mediapipe/graphs/face_effect/face_effect_gpu.pbtxt) +* Android target: + [(or download prebuilt ARM64 APK)](https://drive.google.com/file/d/1ccnaDnffEuIXriBZr2SK_Eu4FpO7K44s) + [`mediapipe/examples/android/src/java/com/google/mediapipe/apps/faceeffect`](https://github.com/google/mediapipe/tree/master/mediapipe/examples/android/src/java/com/google/mediapipe/apps/faceeffect/BUILD) +* iOS target: + [`mediapipe/examples/ios/faceeffect`](http:/mediapipe/examples/ios/faceeffect/BUILD) + ## Resources * Google AI Blog: [Real-Time AR Self-Expression with Machine Learning](https://ai.googleblog.com/2019/03/real-time-ar-self-expression-with.html) * TensorFlow Blog: [Face and hand tracking in the browser with MediaPipe and TensorFlow.js](https://blog.tensorflow.org/2020/03/face-and-hand-tracking-in-browser-with-mediapipe-and-tensorflowjs.html) +* Google Developers Blog: + [Face AR with MediaPipe Face Mesh](https://mediapipe.page.link/face-geometry-blog) * Paper: [Real-time Facial Surface Geometry from Monocular Video on Mobile GPUs](https://arxiv.org/abs/1907.06724) ([poster](https://docs.google.com/presentation/d/1-LWwOMO9TzEVdrZ1CS1ndJzciRHfYDJfbSxH_ke_JRg/present?slide=id.g5986dd4b4c_4_212)) -* Face detection model: - [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/modules/face_detection/face_detection_front.tflite) -* Face landmark model: - [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/modules/face_landmark/face_landmark.tflite), - [TF.js model](https://tfhub.dev/mediapipe/facemesh/1) -* [Model card](https://mediapipe.page.link/facemesh-mc) +* Canonical face model: + [FBX](https://github.com/google/mediapipe/tree/master/mediapipe/modules/face_geometry/data/canonical_face_model.fbx), + [OBJ](https://github.com/google/mediapipe/tree/master/mediapipe/modules/face_geometry/data/canonical_face_model.obj), + [UV visualization](https://github.com/google/mediapipe/tree/master/mediapipe/modules/face_geometry/data/canonical_face_model_uv_visualization.png) +* [Models and model cards](./models.md#face_mesh) diff --git a/docs/solutions/hair_segmentation.md b/docs/solutions/hair_segmentation.md index 0521ad60d..a7200c2d8 100644 --- a/docs/solutions/hair_segmentation.md +++ b/docs/solutions/hair_segmentation.md @@ -54,5 +54,4 @@ Please refer to [these instructions](../index.md#mediapipe-on-the-web). [Real-time Hair segmentation and recoloring on Mobile GPUs](https://arxiv.org/abs/1907.06740) ([presentation](https://drive.google.com/file/d/1C8WYlWdDRNtU1_pYBvkkG5Z5wqYqf0yj/view)) ([supplementary video](https://drive.google.com/file/d/1LPtM99Ch2ogyXYbDNpEqnUfhFq0TfLuf/view)) -* [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/models/hair_segmentation.tflite) -* [Model card](https://mediapipe.page.link/hairsegmentation-mc) +* [Models and model cards](./models.md#hair_segmentation) diff --git a/docs/solutions/hands.md b/docs/solutions/hands.md index 8edfd5850..7e49fba69 100644 --- a/docs/solutions/hands.md +++ b/docs/solutions/hands.md @@ -226,10 +226,4 @@ Please refer to [these instructions](../index.md#mediapipe-on-the-web). * Paper: [MediaPipe Hands: On-device Real-time Hand Tracking](https://arxiv.org/abs/2006.10214) ([presentation](https://www.youtube.com/watch?v=I-UOrvxxXEk)) -* Palm detection model: - [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/models/palm_detection.tflite), - [TF.js model](https://tfhub.dev/mediapipe/handdetector/1) -* Hand landmark model: - [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/models/hand_landmark.tflite), - [TF.js model](https://tfhub.dev/mediapipe/handskeleton/1) -* [Model card](https://mediapipe.page.link/handmc) +* [Models and model cards](./models.md#hands) diff --git a/docs/solutions/instant_motion_tracking.md b/docs/solutions/instant_motion_tracking.md index cf23a7b8c..dfc4835a3 100644 --- a/docs/solutions/instant_motion_tracking.md +++ b/docs/solutions/instant_motion_tracking.md @@ -114,9 +114,9 @@ MediaPipe examples. ## Resources -* Google Developers Blog: - [Instant Motion Tracking With MediaPipe](https://mediapipe.page.link/instant-motion-tracking-blog) -* Google AI Blog: - [The Instant Motion Tracking Behind Motion Stills AR](https://ai.googleblog.com/2018/02/the-instant-motion-tracking-behind.html) -* Paper: - [Instant Motion Tracking and Its Applications to Augmented Reality](https://arxiv.org/abs/1907.06796) +* Google Developers Blog: + [Instant Motion Tracking With MediaPipe](https://developers.googleblog.com/2020/08/instant-motion-tracking-with-mediapipe.html) +* Google AI Blog: + [The Instant Motion Tracking Behind Motion Stills AR](https://ai.googleblog.com/2018/02/the-instant-motion-tracking-behind.html) +* Paper: + [Instant Motion Tracking and Its Applications to Augmented Reality](https://arxiv.org/abs/1907.06796) diff --git a/docs/solutions/iris.md b/docs/solutions/iris.md index 8bf207402..706504196 100644 --- a/docs/solutions/iris.md +++ b/docs/solutions/iris.md @@ -199,11 +199,4 @@ Please refer to [these instructions](../index.md#mediapipe-on-the-web). * Paper: [Real-time Pupil Tracking from Monocular Video for Digital Puppetry](https://arxiv.org/abs/2006.11341) ([presentation](https://youtu.be/cIhXkiiapQI)) -* Face detection model: - [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/modules/face_detection/face_detection_front.tflite) -* Face landmark model: - [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/modules/face_landmark/face_landmark.tflite), - [TF.js model](https://tfhub.dev/mediapipe/facemesh/1) -* Iris landmark model: - [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/modules/iris_landmark/iris_landmark.tflite) -* [Model card](https://mediapipe.page.link/iris-mc) +* [Models and model cards](./models.md#iris) diff --git a/docs/solutions/knift.md b/docs/solutions/knift.md index 8e4ed98b0..e59875705 100644 --- a/docs/solutions/knift.md +++ b/docs/solutions/knift.md @@ -139,7 +139,4 @@ to run regular TFLite inference. * Google Developers Blog: [MediaPipe KNIFT: Template-based feature matching](https://developers.googleblog.com/2020/04/mediapipe-knift-template-based-feature-matching.html) -* [TFLite model for up to 200 keypoints](https://github.com/google/mediapipe/tree/master/mediapipe/models/knift_float.tflite) -* [TFLite model for up to 400 keypoints](https://github.com/google/mediapipe/tree/master/mediapipe/models/knift_float_400.tflite) -* [TFLite model for up to 1000 keypoints](https://github.com/google/mediapipe/tree/master/mediapipe/models/knift_float_1k.tflite) -* [Model card](https://mediapipe.page.link/knift-mc) +* [Models and model cards](./models.md#knift) diff --git a/docs/solutions/models.md b/docs/solutions/models.md new file mode 100644 index 000000000..ac105f733 --- /dev/null +++ b/docs/solutions/models.md @@ -0,0 +1,77 @@ +--- +layout: default +title: Models and Model Cards +parent: Solutions +nav_order: 30 +--- + +# Models and Model Cards +{: .no_toc } + +1. TOC +{:toc} +--- + +### [Face Detection](https://google.github.io/mediapipe/solutions/face_detection) + +* Face detection model for front-facing/selfie camera: + [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/models/face_detection_front.tflite), + [TFLite model quantized for EdgeTPU/Coral](https://github.com/google/mediapipe/tree/master/mediapipe/examples/coral/models/face-detector-quantized_edgetpu.tflite) +* Face detection model for back-facing camera: + [TFLite model ](https://github.com/google/mediapipe/tree/master/mediapipe/models/face_detection_back.tflite) +* [Model card](https://mediapipe.page.link/blazeface-mc) + +### [Face Mesh](https://google.github.io/mediapipe/solutions/face_mesh) + +* Face landmark model: + [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/modules/face_landmark/face_landmark.tflite), + [TF.js model](https://tfhub.dev/mediapipe/facemesh/1) +* [Model card](https://mediapipe.page.link/facemesh-mc) + +### [Iris](https://google.github.io/mediapipe/solutions/iris) + +* Iris landmark model: + [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/modules/iris_landmark/iris_landmark.tflite) +* [Model card](https://mediapipe.page.link/iris-mc) + +### [Hands](https://google.github.io/mediapipe/solutions/hands) + +* Palm detection model: + [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/models/palm_detection.tflite), + [TF.js model](https://tfhub.dev/mediapipe/handdetector/1) +* Hand landmark model: + [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/models/hand_landmark.tflite), + [TF.js model](https://tfhub.dev/mediapipe/handskeleton/1) +* [Model card](https://mediapipe.page.link/handmc) + +### [Pose](https://google.github.io/mediapipe/solutions/pose) + +* Pose detection model: + [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/modules/pose_detection/pose_detection.tflite) +* Upper-body pose landmark model: + [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/modules/pose_landmark/pose_landmark_upper_body.tflite) +* [Model card](https://mediapipe.page.link/blazepose-mc) + +### [Hair Segmentation](https://google.github.io/mediapipe/solutions/hair_segmentation) + +* [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/models/hair_segmentation.tflite) +* [Model card](https://mediapipe.page.link/hairsegmentation-mc) + +### [Object Detection](https://google.github.io/mediapipe/solutions/object_detection) + +* [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/models/ssdlite_object_detection.tflite) +* [TFLite model quantized for EdgeTPU/Coral](https://github.com/google/mediapipe/tree/master/mediapipe/examples/coral/models/object-detector-quantized_edgetpu.tflite) +* [TensorFlow model](https://github.com/google/mediapipe/tree/master/mediapipe/models/object_detection_saved_model) +* [Model information](https://github.com/google/mediapipe/tree/master/mediapipe/models/object_detection_saved_model/README.md) + +### [Objectron](https://google.github.io/mediapipe/solutions/objectron) + +* [TFLite model for shoes](https://github.com/google/mediapipe/tree/master/mediapipe/models/object_detection_3d_sneakers.tflite) +* [TFLite model for chairs](https://github.com/google/mediapipe/tree/master/mediapipe/models/object_detection_3d_chair.tflite) + +### [KNIFT](https://google.github.io/mediapipe/solutions/knift) + +* [TFLite model for up to 200 keypoints](https://github.com/google/mediapipe/tree/master/mediapipe/models/knift_float.tflite) +* [TFLite model for up to 400 keypoints](https://github.com/google/mediapipe/tree/master/mediapipe/models/knift_float_400.tflite) +* [TFLite model for up to 1000 keypoints](https://github.com/google/mediapipe/tree/master/mediapipe/models/knift_float_1k.tflite) +* [Model card](https://mediapipe.page.link/knift-mc) diff --git a/docs/solutions/object_detection.md b/docs/solutions/object_detection.md index 1cb353d0e..e4081d8d9 100644 --- a/docs/solutions/object_detection.md +++ b/docs/solutions/object_detection.md @@ -144,7 +144,4 @@ to cross-compile and run MediaPipe examples on the ## Resources -* [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/models/ssdlite_object_detection.tflite) -* [TFLite model quantized for EdgeTPU/Coral](https://github.com/google/mediapipe/tree/master/mediapipe/examples/coral/models/object-detector-quantized_edgetpu.tflite) -* [TensorFlow model](https://github.com/google/mediapipe/tree/master/mediapipe/models/object_detection_saved_model) -* [Model information](https://github.com/google/mediapipe/tree/master/mediapipe/models/object_detection_saved_model/README.md) +* [Models and model cards](./models.md#object_detection) diff --git a/docs/solutions/objectron.md b/docs/solutions/objectron.md index 4c18f9f0f..d6abcbe75 100644 --- a/docs/solutions/objectron.md +++ b/docs/solutions/objectron.md @@ -191,5 +191,4 @@ to visualize its associated subgraphs, please see * Paper: [Instant 3D Object Tracking with Applications in Augmented Reality](https://drive.google.com/open?id=1O_zHmlgXIzAdKljp20U_JUkEHOGG52R8) ([presentation](https://www.youtube.com/watch?v=9ndF1AIo7h0)) -* [TFLite model for shoes](https://github.com/google/mediapipe/tree/master/mediapipe/models/object_detection_3d_sneakers.tflite) -* [TFLite model for chairs](https://github.com/google/mediapipe/tree/master/mediapipe/models/object_detection_3d_chair.tflite) +* [Models and model cards](./models.md#objectron) diff --git a/docs/solutions/pose.md b/docs/solutions/pose.md index 6b3fa3868..cb20f2272 100644 --- a/docs/solutions/pose.md +++ b/docs/solutions/pose.md @@ -88,10 +88,12 @@ hip midpoints. ### Pose Landmark Model (BlazePose Tracker) The landmark model currently included in MediaPipe Pose predicts the location of -25 upper-body landmarks (see figure below), with three degrees of freedom each -(x, y location and visibility), plus two virtual alignment keypoints. It shares -the same architecture as the full-body version that predicts 33 landmarks, -described in more detail in the +25 upper-body landmarks (see figure below), each with `(x, y, z, visibility)`, +plus two virtual alignment keypoints. Note that the `z` value should be +discarded as the model is currently not fully trained to predict depth, but this +is something we have on the roadmap. The model shares the same architecture as +the full-body version that predicts 33 landmarks, described in more detail in +the [BlazePose Google AI Blog](https://ai.googleblog.com/2020/08/on-device-real-time-body-pose-tracking.html) and in this [paper](https://arxiv.org/abs/2006.10204). @@ -189,8 +191,4 @@ Please refer to [these instructions](../index.md#mediapipe-on-the-web). * Paper: [BlazePose: On-device Real-time Body Pose Tracking](https://arxiv.org/abs/2006.10204) ([presentation](https://youtu.be/YPpUOTRn5tA)) -* Pose detection model: - [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/modules/pose_detection/pose_detection.tflite) -* Upper-body pose landmark model: - [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/modules/pose_landmark/pose_landmark_upper_body.tflite) -* [Model card](https://mediapipe.page.link/blazepose-mc) +* [Models and model cards](./models.md#pose) diff --git a/docs/tools/tracing_and_profiling.md b/docs/tools/tracing_and_profiling.md index 055993349..789071f3d 100644 --- a/docs/tools/tracing_and_profiling.md +++ b/docs/tools/tracing_and_profiling.md @@ -71,6 +71,9 @@ MediaPipe will emit data into a pre-specified directory: You can open the Download Container. Logs will be located in `application container/.xcappdata/AppData/Documents/` + If XCode shows empty content for the downloaded container file, you can + right click and select 'Show Package Contents' in Finder. Logs + will be located in 'AppData/Documents/' ![Windows Download Container](../images/visualizer/ios_download_container.png) diff --git a/mediapipe/MediaPipe.tulsiproj/Configs/MediaPipe.tulsigen b/mediapipe/MediaPipe.tulsiproj/Configs/MediaPipe.tulsigen index 7d501c803..f35ed538a 100644 --- a/mediapipe/MediaPipe.tulsiproj/Configs/MediaPipe.tulsigen +++ b/mediapipe/MediaPipe.tulsiproj/Configs/MediaPipe.tulsigen @@ -10,6 +10,7 @@ "mediapipe/examples/ios/helloworld/BUILD", "mediapipe/examples/ios/facedetectioncpu/BUILD", "mediapipe/examples/ios/facedetectiongpu/BUILD", + "mediapipe/examples/ios/faceeffect/BUILD", "mediapipe/examples/ios/facemeshgpu/BUILD", "mediapipe/examples/ios/handdetectiongpu/BUILD", "mediapipe/examples/ios/handtrackinggpu/BUILD", @@ -23,6 +24,7 @@ "//mediapipe/examples/ios/helloworld:HelloWorldApp", "//mediapipe/examples/ios/facedetectioncpu:FaceDetectionCpuApp", "//mediapipe/examples/ios/facedetectiongpu:FaceDetectionGpuApp", + "//mediapipe/examples/ios/faceeffect:FaceEffectApp", "//mediapipe/examples/ios/facemeshgpu:FaceMeshGpuApp", "//mediapipe/examples/ios/handdetectiongpu:HandDetectionGpuApp", "//mediapipe/examples/ios/handtrackinggpu:HandTrackingGpuApp", @@ -90,6 +92,8 @@ "mediapipe/examples/ios/helloworld", "mediapipe/examples/ios/facedetectioncpu", "mediapipe/examples/ios/facedetectiongpu", + "mediapipe/examples/ios/faceeffect", + "mediapipe/examples/ios/faceeffect/Base.lproj", "mediapipe/examples/ios/handdetectiongpu", "mediapipe/examples/ios/handtrackinggpu", "mediapipe/examples/ios/iristrackinggpu", @@ -110,6 +114,7 @@ "mediapipe/graphs", "mediapipe/graphs/edge_detection", "mediapipe/graphs/face_detection", + "mediapipe/graphs/face_geometry", "mediapipe/graphs/hand_tracking", "mediapipe/graphs/object_detection", "mediapipe/graphs/pose_tracking", diff --git a/mediapipe/MediaPipe.tulsiproj/project.tulsiconf b/mediapipe/MediaPipe.tulsiproj/project.tulsiconf index 432316521..f202cedde 100644 --- a/mediapipe/MediaPipe.tulsiproj/project.tulsiconf +++ b/mediapipe/MediaPipe.tulsiproj/project.tulsiconf @@ -13,6 +13,7 @@ "mediapipe/examples/ios", "mediapipe/examples/ios/facedetectioncpu", "mediapipe/examples/ios/facedetectiongpu", + "mediapipe/examples/ios/faceeffect", "mediapipe/examples/ios/facemeshgpu", "mediapipe/examples/ios/handdetectiongpu", "mediapipe/examples/ios/handtrackinggpu", diff --git a/mediapipe/calculators/core/concatenate_vector_calculator.cc b/mediapipe/calculators/core/concatenate_vector_calculator.cc index c57f84f1e..93fa5b3a3 100644 --- a/mediapipe/calculators/core/concatenate_vector_calculator.cc +++ b/mediapipe/calculators/core/concatenate_vector_calculator.cc @@ -50,6 +50,9 @@ REGISTER_CALCULATOR(ConcatenateInt32VectorCalculator); typedef ConcatenateVectorCalculator ConcatenateUInt64VectorCalculator; REGISTER_CALCULATOR(ConcatenateUInt64VectorCalculator); +typedef ConcatenateVectorCalculator ConcatenateBoolVectorCalculator; +REGISTER_CALCULATOR(ConcatenateBoolVectorCalculator); + // Example config: // node { // calculator: "ConcatenateTfLiteTensorVectorCalculator" diff --git a/mediapipe/calculators/core/mux_calculator_test.cc b/mediapipe/calculators/core/mux_calculator_test.cc index ac6f7d6ee..78fbb7999 100644 --- a/mediapipe/calculators/core/mux_calculator_test.cc +++ b/mediapipe/calculators/core/mux_calculator_test.cc @@ -12,6 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include + #include "mediapipe/calculators/core/split_vector_calculator.h" #include "mediapipe/framework/calculator_framework.h" #include "mediapipe/framework/calculator_runner.h" @@ -233,5 +235,71 @@ TEST(MuxCalculatorTest, InputStreamSelector_MuxInputStreamHandler) { kOutputName, output_fn); EXPECT_EQ(output, input_packets); } + +constexpr char kDualInputGraphConfig[] = R"proto( + input_stream: "input_0" + input_stream: "input_1" + input_stream: "input_select" + output_stream: "test_output" + node { + calculator: "MuxCalculator" + input_stream: "INPUT:0:input_0" + input_stream: "INPUT:1:input_1" + input_stream: "SELECT:input_select" + output_stream: "OUTPUT:test_output" + } +)proto"; + +TEST(MuxCalculatorTest, DiscardSkippedInputs_MuxInputStreamHandler) { + CalculatorGraphConfig config = + ::mediapipe::ParseTextProtoOrDie( + kDualInputGraphConfig); + CalculatorGraph graph; + MP_ASSERT_OK(graph.Initialize(config)); + + std::shared_ptr output; + MP_ASSERT_OK( + graph.ObserveOutputStream("test_output", [&output](const Packet& p) { + output = p.Get>(); + return ::mediapipe::OkStatus(); + })); + + MP_ASSERT_OK(graph.StartRun({})); + + auto one = std::make_shared(1); + auto two = std::make_shared(2); + auto three = std::make_shared(3); + std::weak_ptr one_weak = one; + std::weak_ptr two_weak = two; + + MP_ASSERT_OK(graph.AddPacketToInputStream( + "input_0", + MakePacket>(std::move(one)).At(Timestamp(0)))); + MP_ASSERT_OK(graph.AddPacketToInputStream( + "input_1", + MakePacket>(std::move(two)).At(Timestamp(0)))); + MP_ASSERT_OK(graph.AddPacketToInputStream( + "input_1", + MakePacket>(std::move(three)).At(Timestamp(1)))); + EXPECT_EQ(one, nullptr); + EXPECT_EQ(two, nullptr); + EXPECT_EQ(three, nullptr); + + MP_ASSERT_OK(graph.AddPacketToInputStream( + "input_select", MakePacket(0).At(Timestamp(0)))); + MP_ASSERT_OK(graph.WaitUntilIdle()); + EXPECT_EQ(*output, 1); + EXPECT_NE(one_weak.lock(), nullptr); + EXPECT_EQ(two_weak.lock(), nullptr); + + MP_ASSERT_OK(graph.AddPacketToInputStream( + "input_select", MakePacket(1).At(Timestamp(1)))); + MP_ASSERT_OK(graph.WaitUntilIdle()); + EXPECT_EQ(*output, 3); + + MP_ASSERT_OK(graph.CloseAllInputStreams()); + MP_ASSERT_OK(graph.WaitUntilDone()); +} + } // namespace } // namespace mediapipe diff --git a/mediapipe/calculators/util/BUILD b/mediapipe/calculators/util/BUILD index 9e327511f..5b4447f10 100644 --- a/mediapipe/calculators/util/BUILD +++ b/mediapipe/calculators/util/BUILD @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -load("//mediapipe/framework/port:build_config.bzl", "mediapipe_cc_proto_library") +load("//mediapipe/framework/port:build_config.bzl", "mediapipe_cc_proto_library", "mediapipe_proto_library") licenses(["notice"]) @@ -945,6 +945,31 @@ cc_library( alwayslink = 1, ) +mediapipe_proto_library( + name = "landmarks_smoothing_calculator_proto", + srcs = ["landmarks_smoothing_calculator.proto"], + visibility = ["//visibility:public"], + deps = [ + "//mediapipe/framework:calculator_options_proto", + ], +) + +cc_library( + name = "landmarks_smoothing_calculator", + srcs = ["landmarks_smoothing_calculator.cc"], + visibility = ["//visibility:public"], + deps = [ + ":landmarks_smoothing_calculator_cc_proto", + "//mediapipe/framework:calculator_framework", + "//mediapipe/framework:timestamp", + "//mediapipe/framework/formats:landmark_cc_proto", + "//mediapipe/framework/port:ret_check", + "//mediapipe/util/filtering:relative_velocity_filter", + "@com_google_absl//absl/algorithm:container", + ], + alwayslink = 1, +) + cc_library( name = "landmarks_to_floats_calculator", srcs = ["landmarks_to_floats_calculator.cc"], @@ -1103,6 +1128,7 @@ cc_library( "//mediapipe/framework/formats:classification_cc_proto", "//mediapipe/framework/formats:landmark_cc_proto", "//mediapipe/framework/formats:rect_cc_proto", + "//mediapipe/framework/port:integral_types", "//mediapipe/framework/port:ret_check", "//mediapipe/framework/port:status", "@com_google_absl//absl/strings", diff --git a/mediapipe/calculators/util/filter_collection_calculator.cc b/mediapipe/calculators/util/filter_collection_calculator.cc index 356b03dd6..690ca2a93 100644 --- a/mediapipe/calculators/util/filter_collection_calculator.cc +++ b/mediapipe/calculators/util/filter_collection_calculator.cc @@ -20,9 +20,14 @@ #include "mediapipe/framework/formats/classification.pb.h" #include "mediapipe/framework/formats/landmark.pb.h" #include "mediapipe/framework/formats/rect.pb.h" +#include "mediapipe/framework/port/integral_types.h" namespace mediapipe { +typedef FilterCollectionCalculator> + FilterUInt64CollectionCalculator; +REGISTER_CALCULATOR(FilterUInt64CollectionCalculator); + typedef FilterCollectionCalculator> FilterNormalizedRectCollectionCalculator; REGISTER_CALCULATOR(FilterNormalizedRectCollectionCalculator); diff --git a/mediapipe/graphs/pose_tracking/calculators/landmarks_smoothing_calculator.cc b/mediapipe/calculators/util/landmarks_smoothing_calculator.cc similarity index 94% rename from mediapipe/graphs/pose_tracking/calculators/landmarks_smoothing_calculator.cc rename to mediapipe/calculators/util/landmarks_smoothing_calculator.cc index 4b9b0f87b..be2bc24ad 100644 --- a/mediapipe/graphs/pose_tracking/calculators/landmarks_smoothing_calculator.cc +++ b/mediapipe/calculators/util/landmarks_smoothing_calculator.cc @@ -13,12 +13,12 @@ // limitations under the License. #include "absl/algorithm/container.h" +#include "mediapipe/calculators/util/landmarks_smoothing_calculator.pb.h" #include "mediapipe/framework/calculator_framework.h" #include "mediapipe/framework/formats/landmark.pb.h" #include "mediapipe/framework/port/ret_check.h" #include "mediapipe/framework/timestamp.h" -#include "mediapipe/graphs/pose_tracking/calculators/landmarks_smoothing_calculator.pb.h" -#include "mediapipe/graphs/pose_tracking/calculators/relative_velocity_filter.h" +#include "mediapipe/util/filtering/relative_velocity_filter.h" namespace mediapipe { @@ -38,17 +38,17 @@ using ::mediapipe::RelativeVelocityFilter; // with sides parallel to axis. float GetObjectScale(const NormalizedLandmarkList& landmarks, int image_width, int image_height) { - const auto& [lm_min_x, lm_max_x] = absl::c_minmax_element( + const auto& lm_minmax_x = absl::c_minmax_element( landmarks.landmark(), [](const auto& a, const auto& b) { return a.x() < b.x(); }); - const float x_min = lm_min_x->x(); - const float x_max = lm_max_x->x(); + const float x_min = lm_minmax_x.first->x(); + const float x_max = lm_minmax_x.second->x(); - const auto& [lm_min_y, lm_max_y] = absl::c_minmax_element( + const auto& lm_minmax_y = absl::c_minmax_element( landmarks.landmark(), [](const auto& a, const auto& b) { return a.y() < b.y(); }); - const float y_min = lm_min_y->y(); - const float y_max = lm_max_y->y(); + const float y_min = lm_minmax_y.first->y(); + const float y_max = lm_minmax_y.second->y(); const float object_width = (x_max - x_min) * image_width; const float object_height = (y_max - y_min) * image_height; @@ -191,8 +191,8 @@ class VelocityFilter : public LandmarksFilter { // input_stream: "NORM_LANDMARKS:pose_landmarks" // input_stream: "IMAGE_SIZE:image_size" // output_stream: "NORM_FILTERED_LANDMARKS:pose_landmarks_filtered" -// node_options: { -// [type.googleapis.com/mediapipe.LandmarksSmoothingCalculatorOptions] { +// options: { +// [mediapipe.LandmarksSmoothingCalculatorOptions.ext] { // velocity_filter: { // window_size: 5 // velocity_scale: 10.0 diff --git a/mediapipe/graphs/pose_tracking/calculators/landmarks_smoothing_calculator.proto b/mediapipe/calculators/util/landmarks_smoothing_calculator.proto similarity index 96% rename from mediapipe/graphs/pose_tracking/calculators/landmarks_smoothing_calculator.proto rename to mediapipe/calculators/util/landmarks_smoothing_calculator.proto index 9c7dd502b..aca539cab 100644 --- a/mediapipe/graphs/pose_tracking/calculators/landmarks_smoothing_calculator.proto +++ b/mediapipe/calculators/util/landmarks_smoothing_calculator.proto @@ -16,7 +16,7 @@ syntax = "proto2"; package mediapipe; -import "mediapipe/framework/calculator.proto"; +import "mediapipe/framework/calculator_options.proto"; message LandmarksSmoothingCalculatorOptions { extend CalculatorOptions { diff --git a/mediapipe/calculators/util/landmarks_to_render_data_calculator.cc b/mediapipe/calculators/util/landmarks_to_render_data_calculator.cc index 6d8ee3fed..fab2a06e8 100644 --- a/mediapipe/calculators/util/landmarks_to_render_data_calculator.cc +++ b/mediapipe/calculators/util/landmarks_to_render_data_calculator.cc @@ -103,8 +103,8 @@ void AddConnectionsWithDepth(const LandmarkListType& landmarks, for (int i = 0; i < landmark_connections.size(); i += 2) { const auto& ld0 = landmarks.landmark(landmark_connections[i]); const auto& ld1 = landmarks.landmark(landmark_connections[i + 1]); - if (visibility_threshold && (ld0.visibility() < visibility_threshold || - ld1.visibility() < visibility_threshold)) { + if (utilize_visibility && (ld0.visibility() < visibility_threshold || + ld1.visibility() < visibility_threshold)) { continue; } const int gray_val1 = @@ -141,8 +141,8 @@ void AddConnections(const LandmarkListType& landmarks, for (int i = 0; i < landmark_connections.size(); i += 2) { const auto& ld0 = landmarks.landmark(landmark_connections[i]); const auto& ld1 = landmarks.landmark(landmark_connections[i + 1]); - if (visibility_threshold && (ld0.visibility() < visibility_threshold || - ld1.visibility() < visibility_threshold)) { + if (utilize_visibility && (ld0.visibility() < visibility_threshold || + ld1.visibility() < visibility_threshold)) { continue; } AddConnectionToRenderData(ld0, ld1, connection_color, diff --git a/mediapipe/examples/android/src/java/com/google/mediapipe/apps/faceeffect/BUILD b/mediapipe/examples/android/src/java/com/google/mediapipe/apps/faceeffect/BUILD new file mode 100644 index 000000000..c665f563f --- /dev/null +++ b/mediapipe/examples/android/src/java/com/google/mediapipe/apps/faceeffect/BUILD @@ -0,0 +1,67 @@ +# Copyright 2020 The MediaPipe Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +licenses(["notice"]) + +package(default_visibility = ["//visibility:private"]) + +cc_binary( + name = "libmediapipe_jni.so", + linkshared = 1, + linkstatic = 1, + deps = [ + "//mediapipe/graphs/face_effect:face_effect_gpu_deps", + "//mediapipe/java/com/google/mediapipe/framework/jni:mediapipe_framework_jni", + ], +) + +cc_library( + name = "mediapipe_jni_lib", + srcs = [":libmediapipe_jni.so"], + alwayslink = 1, +) + +android_binary( + name = "faceeffect", + srcs = glob(["*.java"]), + assets = [ + "//mediapipe/graphs/face_effect/data:facepaint.pngblob", + "//mediapipe/graphs/face_effect/data:glasses.binarypb", + "//mediapipe/graphs/face_effect/data:glasses.pngblob", + "//mediapipe/graphs/face_effect:face_effect_gpu.binarypb", + "//mediapipe/modules/face_detection:face_detection_front.tflite", + "//mediapipe/modules/face_geometry/data:geometry_pipeline_metadata.binarypb", + "//mediapipe/modules/face_landmark:face_landmark.tflite", + ], + assets_dir = "", + manifest = "//mediapipe/examples/android/src/java/com/google/mediapipe/apps/basic:AndroidManifest.xml", + manifest_values = { + "applicationId": "com.google.mediapipe.apps.faceeffect", + "appName": "Face Effect", + "mainActivity": ".MainActivity", + "cameraFacingFront": "True", + "binaryGraphName": "face_effect_gpu.binarypb", + "inputVideoStreamName": "input_video", + "outputVideoStreamName": "output_video", + "flipFramesVertically": "True", + }, + multidex = "native", + deps = [ + ":mediapipe_jni_lib", + "//mediapipe/examples/android/src/java/com/google/mediapipe/apps/basic:basic_lib", + "//mediapipe/framework/formats:matrix_data_java_proto_lite", + "//mediapipe/java/com/google/mediapipe/framework:android_framework", + "//mediapipe/modules/face_geometry/protos:face_geometry_java_proto_lite", + ], +) diff --git a/mediapipe/examples/android/src/java/com/google/mediapipe/apps/faceeffect/MainActivity.java b/mediapipe/examples/android/src/java/com/google/mediapipe/apps/faceeffect/MainActivity.java new file mode 100644 index 000000000..e9c4cb80e --- /dev/null +++ b/mediapipe/examples/android/src/java/com/google/mediapipe/apps/faceeffect/MainActivity.java @@ -0,0 +1,176 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.mediapipe.apps.faceeffect; + +import android.graphics.Color; +import android.os.Bundle; +import android.util.Log; +import android.view.GestureDetector; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.widget.RelativeLayout; +import android.widget.TextView; +import com.google.mediapipe.framework.Packet; +import com.google.mediapipe.framework.PacketGetter; +import com.google.mediapipe.modules.facegeometry.FaceGeometryProto.FaceGeometry; +import com.google.mediapipe.formats.proto.MatrixDataProto.MatrixData; +import java.util.List; + +/** Main activity of MediaPipe face mesh app. */ +public class MainActivity extends com.google.mediapipe.apps.basic.MainActivity { + private static final String TAG = "MainActivity"; + + // Stream names. + private static final String IS_FACEPAINT_EFFECT_SELECTED_INPUT_STREAM_NAME = + "is_facepaint_effect_selected"; + private static final String OUTPUT_FACE_GEOMETRY_STREAM_NAME = "multi_face_geometry"; + + private static final String EFFECT_SWITCHING_HINT_TEXT = "Tap to switch between effects!"; + + private static final int MATRIX_TRANSLATION_Z_INDEX = 14; + + private final Object isFacepaintEffectSelectedLock = new Object(); + private boolean isFacepaintEffectSelected; + + private View effectSwitchingHintView; + private GestureDetector tapGestureDetector; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Add an effect switching hint view to the preview layout. + effectSwitchingHintView = createEffectSwitchingHintView(); + effectSwitchingHintView.setVisibility(View.INVISIBLE); + ViewGroup viewGroup = findViewById(R.id.preview_display_layout); + viewGroup.addView(effectSwitchingHintView); + + // By default, render the glasses effect. + isFacepaintEffectSelected = false; + + // This callback demonstrates how the output face geometry packet can be obtained and used + // in an Android app. As an example, the Z-translation component of the face pose transform + // matrix is logged for each face being equal to the approximate distance away from the camera + // in centimeters. + processor.addPacketCallback( + OUTPUT_FACE_GEOMETRY_STREAM_NAME, + (packet) -> { + effectSwitchingHintView.post( + new Runnable() { + @Override + public void run() { + effectSwitchingHintView.setVisibility(View.VISIBLE); + } + }); + + Log.d(TAG, "Received a multi face geometry packet."); + List multiFaceGeometry = + PacketGetter.getProtoVector(packet, FaceGeometry.parser()); + + StringBuilder approxDistanceAwayFromCameraLogMessage = new StringBuilder(); + for (FaceGeometry faceGeometry : multiFaceGeometry) { + if (approxDistanceAwayFromCameraLogMessage.length() > 0) { + approxDistanceAwayFromCameraLogMessage.append(' '); + } + MatrixData poseTransformMatrix = faceGeometry.getPoseTransformMatrix(); + approxDistanceAwayFromCameraLogMessage.append( + -poseTransformMatrix.getPackedData(MATRIX_TRANSLATION_Z_INDEX)); + } + + Log.d( + TAG, + "[TS:" + + packet.getTimestamp() + + "] size = " + + multiFaceGeometry.size() + + "; approx. distance away from camera in cm for faces = [" + + approxDistanceAwayFromCameraLogMessage + + "]"); + }); + + // Alongside the input camera frame, we also send the `is_facepaint_effect_selected` boolean + // packet to indicate which effect should be rendered on this frame. + processor.setOnWillAddFrameListener( + (timestamp) -> { + Packet isFacepaintEffectSelectedPacket = null; + try { + synchronized (isFacepaintEffectSelectedLock) { + isFacepaintEffectSelectedPacket = + processor.getPacketCreator().createBool(isFacepaintEffectSelected); + } + + processor + .getGraph() + .addPacketToInputStream( + IS_FACEPAINT_EFFECT_SELECTED_INPUT_STREAM_NAME, + isFacepaintEffectSelectedPacket, + timestamp); + } catch (RuntimeException e) { + Log.e( + TAG, + "Exception while adding packet to input stream while switching effects: " + e); + } finally { + if (isFacepaintEffectSelectedPacket != null) { + isFacepaintEffectSelectedPacket.release(); + } + } + }); + + // We use the tap gesture detector to switch between face effects. This allows users to try + // multiple pre-bundled face effects without a need to recompile the app. + tapGestureDetector = + new GestureDetector( + this, + new GestureDetector.SimpleOnGestureListener() { + @Override + public void onLongPress(MotionEvent event) { + switchEffect(); + } + + @Override + public boolean onSingleTapUp(MotionEvent event) { + switchEffect(); + return true; + } + + private void switchEffect() { + synchronized (isFacepaintEffectSelectedLock) { + isFacepaintEffectSelected = !isFacepaintEffectSelected; + } + } + }); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + return tapGestureDetector.onTouchEvent(event); + } + + private View createEffectSwitchingHintView() { + TextView effectSwitchingHintView = new TextView(getApplicationContext()); + effectSwitchingHintView.setLayoutParams( + new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); + effectSwitchingHintView.setText(EFFECT_SWITCHING_HINT_TEXT); + effectSwitchingHintView.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM); + effectSwitchingHintView.setPadding(0, 0, 0, 480); + effectSwitchingHintView.setTextColor(Color.parseColor("#ffffff")); + effectSwitchingHintView.setTextSize((float) 24); + + return effectSwitchingHintView; + } +} diff --git a/mediapipe/examples/desktop/autoflip/calculators/content_zooming_calculator.cc b/mediapipe/examples/desktop/autoflip/calculators/content_zooming_calculator.cc index cba751057..bf122f0fe 100644 --- a/mediapipe/examples/desktop/autoflip/calculators/content_zooming_calculator.cc +++ b/mediapipe/examples/desktop/autoflip/calculators/content_zooming_calculator.cc @@ -35,7 +35,7 @@ constexpr char kDetectedBorders[] = "BORDERS"; constexpr char kCropRect[] = "CROP_RECT"; // Field-of-view (degrees) of the camera's x-axis (width). // TODO: Parameterize FOV based on camera specs. -constexpr float kWidthFieldOfView = 60; +constexpr float kFieldOfView = 60; namespace mediapipe { namespace autoflip { @@ -256,13 +256,13 @@ void MakeStaticFeatures(const int top_border, const int bottom_border, if (!initialized_) { path_solver_height_ = std::make_unique( options_.kinematic_options_zoom(), 0, frame_height_, - static_cast(frame_width_) / kWidthFieldOfView); + static_cast(frame_height_) / kFieldOfView); path_solver_width_ = std::make_unique( options_.kinematic_options_pan(), 0, frame_width_, - static_cast(frame_width_) / kWidthFieldOfView); + static_cast(frame_width_) / kFieldOfView); path_solver_offset_ = std::make_unique( options_.kinematic_options_tilt(), 0, frame_height_, - static_cast(frame_width_) / kWidthFieldOfView); + static_cast(frame_height_) / kFieldOfView); max_frame_value_ = 1.0; target_aspect_ = frame_width_ / static_cast(frame_height_); // If target size is set and wider than input aspect, make sure to always @@ -339,15 +339,24 @@ void MakeStaticFeatures(const int top_border, const int bottom_border, offset_y = last_measured_y_offset_; } - // Compute smoothed camera paths. + // Compute smoothed zoom camera path. MP_RETURN_IF_ERROR(path_solver_height_->AddObservation( height, cc->InputTimestamp().Microseconds())); + int path_height; + MP_RETURN_IF_ERROR(path_solver_height_->GetState(&path_height)); + int path_width = path_height * target_aspect_; + + // Update pixel-per-degree value for pan/tilt. + MP_RETURN_IF_ERROR(path_solver_width_->UpdatePixelsPerDegree( + static_cast(path_width) / kFieldOfView)); + MP_RETURN_IF_ERROR(path_solver_offset_->UpdatePixelsPerDegree( + static_cast(path_height) / kFieldOfView)); + + // Compute smoothed pan/tilt paths. MP_RETURN_IF_ERROR(path_solver_width_->AddObservation( offset_x, cc->InputTimestamp().Microseconds())); MP_RETURN_IF_ERROR(path_solver_offset_->AddObservation( offset_y, cc->InputTimestamp().Microseconds())); - int path_height; - MP_RETURN_IF_ERROR(path_solver_height_->GetState(&path_height)); int path_offset_x; MP_RETURN_IF_ERROR(path_solver_width_->GetState(&path_offset_x)); int path_offset_y; @@ -359,7 +368,7 @@ void MakeStaticFeatures(const int top_border, const int bottom_border, } else if (path_offset_y + ceil(path_height / 2.0) > frame_height_) { path_offset_y = frame_height_ - ceil(path_height / 2.0); } - int path_width = path_height * target_aspect_; + if (path_offset_x - ceil(path_width / 2.0) < 0) { path_offset_x = ceil(path_width / 2.0); } else if (path_offset_x + ceil(path_width / 2.0) > frame_width_) { diff --git a/mediapipe/examples/desktop/autoflip/calculators/content_zooming_calculator_test.cc b/mediapipe/examples/desktop/autoflip/calculators/content_zooming_calculator_test.cc index 818e6b4a1..3477e4cc9 100644 --- a/mediapipe/examples/desktop/autoflip/calculators/content_zooming_calculator_test.cc +++ b/mediapipe/examples/desktop/autoflip/calculators/content_zooming_calculator_test.cc @@ -174,15 +174,15 @@ TEST(ContentZoomingCalculatorTest, PanConfig) { ContentZoomingCalculatorOptions::ext); options->mutable_kinematic_options_pan()->set_min_motion_to_reframe(0.0); options->mutable_kinematic_options_pan()->set_update_rate_seconds(2); - options->mutable_kinematic_options_tilt()->set_min_motion_to_reframe(5.0); - options->mutable_kinematic_options_zoom()->set_min_motion_to_reframe(5.0); + options->mutable_kinematic_options_tilt()->set_min_motion_to_reframe(50.0); + options->mutable_kinematic_options_zoom()->set_min_motion_to_reframe(50.0); auto runner = ::absl::make_unique(config); AddDetection(cv::Rect_(.4, .5, .1, .1), 0, runner.get()); AddDetection(cv::Rect_(.45, .55, .15, .15), 1000000, runner.get()); MP_ASSERT_OK(runner->Run()); CheckCropRect(450, 550, 111, 111, 0, runner->Outputs().Tag("CROP_RECT").packets); - CheckCropRect(488, 550, 111, 111, 1, + CheckCropRect(483, 550, 111, 111, 1, runner->Outputs().Tag("CROP_RECT").packets); } @@ -190,17 +190,17 @@ TEST(ContentZoomingCalculatorTest, TiltConfig) { auto config = ParseTextProtoOrDie(kConfigD); auto* options = config.mutable_options()->MutableExtension( ContentZoomingCalculatorOptions::ext); - options->mutable_kinematic_options_pan()->set_min_motion_to_reframe(5.0); + options->mutable_kinematic_options_pan()->set_min_motion_to_reframe(50.0); options->mutable_kinematic_options_tilt()->set_min_motion_to_reframe(0.0); options->mutable_kinematic_options_tilt()->set_update_rate_seconds(2); - options->mutable_kinematic_options_zoom()->set_min_motion_to_reframe(5.0); + options->mutable_kinematic_options_zoom()->set_min_motion_to_reframe(50.0); auto runner = ::absl::make_unique(config); AddDetection(cv::Rect_(.4, .5, .1, .1), 0, runner.get()); AddDetection(cv::Rect_(.45, .55, .15, .15), 1000000, runner.get()); MP_ASSERT_OK(runner->Run()); CheckCropRect(450, 550, 111, 111, 0, runner->Outputs().Tag("CROP_RECT").packets); - CheckCropRect(450, 588, 111, 111, 1, + CheckCropRect(450, 583, 111, 111, 1, runner->Outputs().Tag("CROP_RECT").packets); } @@ -208,8 +208,8 @@ TEST(ContentZoomingCalculatorTest, ZoomConfig) { auto config = ParseTextProtoOrDie(kConfigD); auto* options = config.mutable_options()->MutableExtension( ContentZoomingCalculatorOptions::ext); - options->mutable_kinematic_options_pan()->set_min_motion_to_reframe(5.0); - options->mutable_kinematic_options_tilt()->set_min_motion_to_reframe(5.0); + options->mutable_kinematic_options_pan()->set_min_motion_to_reframe(50.0); + options->mutable_kinematic_options_tilt()->set_min_motion_to_reframe(50.0); options->mutable_kinematic_options_zoom()->set_min_motion_to_reframe(0.0); options->mutable_kinematic_options_zoom()->set_update_rate_seconds(2); auto runner = ::absl::make_unique(config); diff --git a/mediapipe/examples/desktop/autoflip/quality/kinematic_path_solver.cc b/mediapipe/examples/desktop/autoflip/quality/kinematic_path_solver.cc index 573c990d7..a12af47a5 100644 --- a/mediapipe/examples/desktop/autoflip/quality/kinematic_path_solver.cc +++ b/mediapipe/examples/desktop/autoflip/quality/kinematic_path_solver.cc @@ -87,5 +87,13 @@ namespace autoflip { return ::mediapipe::OkStatus(); } +::mediapipe::Status KinematicPathSolver::UpdatePixelsPerDegree( + const float pixels_per_degree) { + RET_CHECK_GT(pixels_per_degree_, 0) + << "pixels_per_degree must be larger than 0."; + pixels_per_degree_ = pixels_per_degree; + return ::mediapipe::OkStatus(); +} + } // namespace autoflip } // namespace mediapipe diff --git a/mediapipe/examples/desktop/autoflip/quality/kinematic_path_solver.h b/mediapipe/examples/desktop/autoflip/quality/kinematic_path_solver.h index 2dcd9e520..f2d26f0b0 100644 --- a/mediapipe/examples/desktop/autoflip/quality/kinematic_path_solver.h +++ b/mediapipe/examples/desktop/autoflip/quality/kinematic_path_solver.h @@ -46,6 +46,8 @@ class KinematicPathSolver { ::mediapipe::Status UpdatePrediction(const int64 time_us); // Get the state at a time. ::mediapipe::Status GetState(int* position); + // Update PixelPerDegree value. + ::mediapipe::Status UpdatePixelsPerDegree(const float pixels_per_degree); private: // Tuning options. diff --git a/mediapipe/examples/desktop/autoflip/quality/kinematic_path_solver_test.cc b/mediapipe/examples/desktop/autoflip/quality/kinematic_path_solver_test.cc index 0bdfb50d2..38e3e4f0b 100644 --- a/mediapipe/examples/desktop/autoflip/quality/kinematic_path_solver_test.cc +++ b/mediapipe/examples/desktop/autoflip/quality/kinematic_path_solver_test.cc @@ -207,6 +207,28 @@ TEST(KinematicPathSolverTest, PassMaxVelocity) { EXPECT_EQ(state, 600); } +TEST(KinematicPathSolverTest, PassDegPerPxChange) { + KinematicOptions options; + // Set min motion to 2deg + options.set_min_motion_to_reframe(2.0); + options.set_update_rate(1); + options.set_max_velocity(1000); + // Set degrees / pixel to 16.6 + KinematicPathSolver solver(options, 0, 1000, 1000.0 / kWidthFieldOfView); + int state; + MP_ASSERT_OK(solver.AddObservation(500, kMicroSecInSec * 0)); + // Move target by 20px / 16.6 = 1.2deg + MP_ASSERT_OK(solver.AddObservation(520, kMicroSecInSec * 1)); + MP_ASSERT_OK(solver.GetState(&state)); + // Expect cam to not move. + EXPECT_EQ(state, 500); + MP_ASSERT_OK(solver.UpdatePixelsPerDegree(500.0 / kWidthFieldOfView)); + MP_ASSERT_OK(solver.AddObservation(520, kMicroSecInSec * 2)); + MP_ASSERT_OK(solver.GetState(&state)); + // Expect cam to move. + EXPECT_EQ(state, 516); +} + } // namespace } // namespace autoflip } // namespace mediapipe diff --git a/mediapipe/examples/desktop/autoflip/subgraph/front_face_detection_subgraph.pbtxt b/mediapipe/examples/desktop/autoflip/subgraph/front_face_detection_subgraph.pbtxt index b88ea0c75..3b2d410f5 100644 --- a/mediapipe/examples/desktop/autoflip/subgraph/front_face_detection_subgraph.pbtxt +++ b/mediapipe/examples/desktop/autoflip/subgraph/front_face_detection_subgraph.pbtxt @@ -1,5 +1,5 @@ # MediaPipe graph that performs face detection with TensorFlow Lite on CPU. Model paths setup for web use. -# TODO: parameterize input paths to support desktop use. +# TODO: parameterize input paths to support desktop use, for web only. input_stream: "VIDEO:input_video" output_stream: "DETECTIONS:output_detections" @@ -37,7 +37,7 @@ node { output_stream: "TENSORS:detection_tensors" options: { [mediapipe.TfLiteInferenceCalculatorOptions.ext] { - model_path: "mediapipe/models/face_detection_front.tflite" + model_path: "face_detection_front.tflite" } } } @@ -118,7 +118,7 @@ node { output_stream: "labeled_detections" options: { [mediapipe.DetectionLabelIdToTextCalculatorOptions.ext] { - label_map_path: "mediapipe/models/face_detection_front_labelmap.txt" + label_map_path: "face_detection_front_labelmap.txt" } } } diff --git a/mediapipe/examples/ios/faceeffect/AppDelegate.h b/mediapipe/examples/ios/faceeffect/AppDelegate.h new file mode 100644 index 000000000..f7c48321c --- /dev/null +++ b/mediapipe/examples/ios/faceeffect/AppDelegate.h @@ -0,0 +1,21 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +@interface AppDelegate : UIResponder + +@property(strong, nonatomic) UIWindow *window; + +@end diff --git a/mediapipe/examples/ios/faceeffect/AppDelegate.m b/mediapipe/examples/ios/faceeffect/AppDelegate.m new file mode 100644 index 000000000..42f9acd54 --- /dev/null +++ b/mediapipe/examples/ios/faceeffect/AppDelegate.m @@ -0,0 +1,59 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "AppDelegate.h" + +@interface AppDelegate () + +@end + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application + didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + // Override point for customization after application launch. + return YES; +} + +- (void)applicationWillResignActive:(UIApplication *)application { + // Sent when the application is about to move from active to inactive state. This can occur for + // certain types of temporary interruptions (such as an incoming phone call or SMS message) or + // when the user quits the application and it begins the transition to the background state. Use + // this method to pause ongoing tasks, disable timers, and invalidate graphics rendering + // callbacks. Games should use this method to pause the game. +} + +- (void)applicationDidEnterBackground:(UIApplication *)application { + // Use this method to release shared resources, save user data, invalidate timers, and store + // enough application state information to restore your application to its current state in case + // it is terminated later. If your application supports background execution, this method is + // called instead of applicationWillTerminate: when the user quits. +} + +- (void)applicationWillEnterForeground:(UIApplication *)application { + // Called as part of the transition from the background to the active state; here you can undo + // many of the changes made on entering the background. +} + +- (void)applicationDidBecomeActive:(UIApplication *)application { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If + // the application was previously in the background, optionally refresh the user interface. +} + +- (void)applicationWillTerminate:(UIApplication *)application { + // Called when the application is about to terminate. Save data if appropriate. See also + // applicationDidEnterBackground:. +} + +@end diff --git a/mediapipe/examples/ios/faceeffect/BUILD b/mediapipe/examples/ios/faceeffect/BUILD new file mode 100644 index 000000000..0437c0dc9 --- /dev/null +++ b/mediapipe/examples/ios/faceeffect/BUILD @@ -0,0 +1,92 @@ +# Copyright 2020 The MediaPipe Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load( + "@build_bazel_rules_apple//apple:ios.bzl", + "ios_application", +) +load( + "//mediapipe/examples/ios:bundle_id.bzl", + "BUNDLE_ID_PREFIX", + "example_provisioning", +) + +licenses(["notice"]) + +MIN_IOS_VERSION = "10.0" + +alias( + name = "faceeffect", + actual = "FaceEffectApp", +) + +ios_application( + name = "FaceEffectApp", + app_icons = ["//mediapipe/examples/ios/common:AppIcon"], + bundle_id = BUNDLE_ID_PREFIX + ".FaceMeshGpu", + families = [ + "iphone", + "ipad", + ], + infoplists = ["Info.plist"], + minimum_os_version = MIN_IOS_VERSION, + provisioning_profile = example_provisioning(), + deps = [ + ":FaceEffectAppLibrary", + "@ios_opencv//:OpencvFramework", + ], +) + +objc_library( + name = "FaceEffectAppLibrary", + srcs = [ + "AppDelegate.m", + "FaceEffectViewController.mm", + "main.m", + ], + hdrs = [ + "AppDelegate.h", + "FaceEffectViewController.h", + ], + data = [ + "Base.lproj/LaunchScreen.storyboard", + "Base.lproj/Main.storyboard", + "//mediapipe/graphs/face_effect:face_effect_gpu.binarypb", + "//mediapipe/graphs/face_effect/data:facepaint.pngblob", + "//mediapipe/graphs/face_effect/data:glasses.binarypb", + "//mediapipe/graphs/face_effect/data:glasses.pngblob", + "//mediapipe/modules/face_detection:face_detection_front.tflite", + "//mediapipe/modules/face_geometry/data:geometry_pipeline_metadata.binarypb", + "//mediapipe/modules/face_landmark:face_landmark.tflite", + ], + sdk_frameworks = [ + "AVFoundation", + "CoreGraphics", + "CoreMedia", + "UIKit", + ], + deps = [ + "//mediapipe/objc:mediapipe_framework_ios", + "//mediapipe/objc:mediapipe_input_sources_ios", + "//mediapipe/objc:mediapipe_layer_renderer", + ] + select({ + "//mediapipe:ios_i386": [], + "//mediapipe:ios_x86_64": [], + "//conditions:default": [ + "//mediapipe/framework/formats:matrix_data_cc_proto", + "//mediapipe/graphs/face_effect:face_effect_gpu_deps", + "//mediapipe/modules/face_geometry/protos:face_geometry_cc_proto", + ], + }), +) diff --git a/mediapipe/examples/ios/faceeffect/Base.lproj/LaunchScreen.storyboard b/mediapipe/examples/ios/faceeffect/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 000000000..bfa361294 --- /dev/null +++ b/mediapipe/examples/ios/faceeffect/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mediapipe/examples/ios/faceeffect/Base.lproj/Main.storyboard b/mediapipe/examples/ios/faceeffect/Base.lproj/Main.storyboard new file mode 100644 index 000000000..d7a79730e --- /dev/null +++ b/mediapipe/examples/ios/faceeffect/Base.lproj/Main.storyboard @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mediapipe/examples/ios/faceeffect/FaceEffectViewController.h b/mediapipe/examples/ios/faceeffect/FaceEffectViewController.h new file mode 100644 index 000000000..5d863cbf2 --- /dev/null +++ b/mediapipe/examples/ios/faceeffect/FaceEffectViewController.h @@ -0,0 +1,19 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +@interface FaceEffectViewController : UIViewController + +@end diff --git a/mediapipe/examples/ios/faceeffect/FaceEffectViewController.mm b/mediapipe/examples/ios/faceeffect/FaceEffectViewController.mm new file mode 100644 index 000000000..2fd8f5f6f --- /dev/null +++ b/mediapipe/examples/ios/faceeffect/FaceEffectViewController.mm @@ -0,0 +1,254 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FaceEffectViewController.h" + +#import "mediapipe/objc/MPPCameraInputSource.h" +#import "mediapipe/objc/MPPGraph.h" +#import "mediapipe/objc/MPPLayerRenderer.h" + +#include + +#include "mediapipe/framework/formats/matrix_data.pb.h" +#include "mediapipe/framework/calculator_framework.h" +#include "mediapipe/modules/face_geometry/protos/face_geometry.pb.h" + +static NSString* const kGraphName = @"face_effect_gpu"; + +static const char* kInputStream = "input_video"; +static const char* kIsFacepaintEffectSelectedInputStream = "is_facepaint_effect_selected"; +static const char* kOutputStream = "output_video"; +static const char* kMultiFaceGeometryStream = "multi_face_geometry"; +static const char* kVideoQueueLabel = "com.google.mediapipe.example.videoQueue"; + +static const int kMatrixTranslationZIndex = 14; + +@interface FaceEffectViewController () + +// The MediaPipe graph currently in use. Initialized in viewDidLoad, started in viewWillAppear: and +// sent video frames on _videoQueue. +@property(nonatomic) MPPGraph* graph; + +@end + +@implementation FaceEffectViewController { + /// Handle tap gestures. + UITapGestureRecognizer* _tapGestureRecognizer; + BOOL _isFacepaintEffectSelected; + + /// Handles camera access via AVCaptureSession library. + MPPCameraInputSource* _cameraSource; + + /// Inform the user when camera is unavailable. + IBOutlet UILabel* _noCameraLabel; + /// Inform the user about how to switch between effects. + UILabel* _effectSwitchingHintLabel; + /// Display the camera preview frames. + IBOutlet UIView* _liveView; + /// Render frames in a layer. + MPPLayerRenderer* _renderer; + + /// Process camera frames on this queue. + dispatch_queue_t _videoQueue; +} + +#pragma mark - Cleanup methods + +- (void)dealloc { + self.graph.delegate = nil; + [self.graph cancel]; + // Ignore errors since we're cleaning up. + [self.graph closeAllInputStreamsWithError:nil]; + [self.graph waitUntilDoneWithError:nil]; +} + +#pragma mark - MediaPipe graph methods + ++ (MPPGraph*)loadGraphFromResource:(NSString*)resource { + // Load the graph config resource. + NSError* configLoadError = nil; + NSBundle* bundle = [NSBundle bundleForClass:[self class]]; + if (!resource || resource.length == 0) { + return nil; + } + NSURL* graphURL = [bundle URLForResource:resource withExtension:@"binarypb"]; + NSData* data = [NSData dataWithContentsOfURL:graphURL options:0 error:&configLoadError]; + if (!data) { + NSLog(@"Failed to load MediaPipe graph config: %@", configLoadError); + return nil; + } + + // Parse the graph config resource into mediapipe::CalculatorGraphConfig proto object. + mediapipe::CalculatorGraphConfig config; + config.ParseFromArray(data.bytes, data.length); + + // Create MediaPipe graph with mediapipe::CalculatorGraphConfig proto object. + MPPGraph* newGraph = [[MPPGraph alloc] initWithGraphConfig:config]; + [newGraph addFrameOutputStream:kOutputStream outputPacketType:MPPPacketTypePixelBuffer]; + [newGraph addFrameOutputStream:kMultiFaceGeometryStream outputPacketType:MPPPacketTypeRaw]; + return newGraph; +} + +#pragma mark - UIViewController methods + +- (void)viewDidLoad { + [super viewDidLoad]; + + _effectSwitchingHintLabel.hidden = YES; + _tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self + action:@selector(handleTap)]; + [self.view addGestureRecognizer:_tapGestureRecognizer]; + + // By default, render the glasses effect. + _isFacepaintEffectSelected = NO; + + _renderer = [[MPPLayerRenderer alloc] init]; + _renderer.layer.frame = _liveView.layer.bounds; + [_liveView.layer insertSublayer:_renderer.layer atIndex:0]; + _renderer.frameScaleMode = MPPFrameScaleModeFillAndCrop; + _renderer.mirrored = NO; + + dispatch_queue_attr_t qosAttribute = dispatch_queue_attr_make_with_qos_class( + DISPATCH_QUEUE_SERIAL, QOS_CLASS_USER_INTERACTIVE, /*relative_priority=*/0); + _videoQueue = dispatch_queue_create(kVideoQueueLabel, qosAttribute); + + _cameraSource = [[MPPCameraInputSource alloc] init]; + [_cameraSource setDelegate:self queue:_videoQueue]; + _cameraSource.sessionPreset = AVCaptureSessionPresetHigh; + _cameraSource.cameraPosition = AVCaptureDevicePositionFront; + // The frame's native format is rotated with respect to the portrait orientation. + _cameraSource.orientation = AVCaptureVideoOrientationPortrait; + _cameraSource.videoMirrored = YES; + + self.graph = [[self class] loadGraphFromResource:kGraphName]; + self.graph.delegate = self; + // Set maxFramesInFlight to a small value to avoid memory contention for real-time processing. + self.graph.maxFramesInFlight = 2; +} + +// In this application, there is only one ViewController which has no navigation to other view +// controllers, and there is only one View with live display showing the result of running the +// MediaPipe graph on the live video feed. If more view controllers are needed later, the graph +// setup/teardown and camera start/stop logic should be updated appropriately in response to the +// appearance/disappearance of this ViewController, as viewWillAppear: can be invoked multiple times +// depending on the application navigation flow in that case. +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + [_cameraSource requestCameraAccessWithCompletionHandler:^void(BOOL granted) { + if (granted) { + [self startGraphAndCamera]; + dispatch_async(dispatch_get_main_queue(), ^{ + _noCameraLabel.hidden = YES; + }); + } + }]; +} + +- (void)startGraphAndCamera { + // Start running self.graph. + NSError* error; + if (![self.graph startWithError:&error]) { + NSLog(@"Failed to start graph: %@", error); + } + + // Start fetching frames from the camera. + dispatch_async(_videoQueue, ^{ + [_cameraSource start]; + }); +} + +#pragma mark - UITapGestureRecognizer methods + +// We use the tap gesture recognizer to switch between face effects. This allows users to try +// multiple pre-bundled face effects without a need to recompile the app. +- (void)handleTap { + dispatch_async(_videoQueue, ^{ + _isFacepaintEffectSelected = !_isFacepaintEffectSelected; + }); +} + +#pragma mark - MPPGraphDelegate methods + +// Receives CVPixelBufferRef from the MediaPipe graph. Invoked on a MediaPipe worker thread. +- (void)mediapipeGraph:(MPPGraph*)graph + didOutputPixelBuffer:(CVPixelBufferRef)pixelBuffer + fromStream:(const std::string&)streamName { + if (streamName == kOutputStream) { + // Display the captured image on the screen. + CVPixelBufferRetain(pixelBuffer); + dispatch_async(dispatch_get_main_queue(), ^{ + _effectSwitchingHintLabel.hidden = NO; + [_renderer renderPixelBuffer:pixelBuffer]; + CVPixelBufferRelease(pixelBuffer); + }); + } +} + +// Receives a raw packet from the MediaPipe graph. Invoked on a MediaPipe worker thread. +// +// This callback demonstrates how the output face geometry packet can be obtained and used in an +// iOS app. As an example, the Z-translation component of the face pose transform matrix is logged +// for each face being equal to the approximate distance away from the camera in centimeters. +- (void)mediapipeGraph:(MPPGraph*)graph + didOutputPacket:(const ::mediapipe::Packet&)packet + fromStream:(const std::string&)streamName { + if (streamName == kMultiFaceGeometryStream) { + if (packet.IsEmpty()) { + NSLog(@"[TS:%lld] No face geometry", packet.Timestamp().Value()); + return; + } + + const auto& multiFaceGeometry = + packet.Get>(); + NSLog(@"[TS:%lld] Number of face instances with geometry: %lu ", packet.Timestamp().Value(), + multiFaceGeometry.size()); + for (int faceIndex = 0; faceIndex < multiFaceGeometry.size(); ++faceIndex) { + const auto& faceGeometry = multiFaceGeometry[faceIndex]; + NSLog(@"\tApprox. distance away from camera for face[%d]: %.6f cm", faceIndex, + -faceGeometry.pose_transform_matrix().packed_data(kMatrixTranslationZIndex)); + } + } +} + +#pragma mark - MPPInputSourceDelegate methods + +// Must be invoked on _videoQueue. +- (void)processVideoFrame:(CVPixelBufferRef)imageBuffer + timestamp:(CMTime)timestamp + fromSource:(MPPInputSource*)source { + if (source != _cameraSource) { + NSLog(@"Unknown source: %@", source); + return; + } + + mediapipe::Timestamp graphTimestamp(static_cast( + mediapipe::Timestamp::kTimestampUnitsPerSecond * CMTimeGetSeconds(timestamp))); + + mediapipe::Packet isFacepaintEffectSelectedPacket = + mediapipe::MakePacket(_isFacepaintEffectSelected).At(graphTimestamp); + + [self.graph sendPixelBuffer:imageBuffer + intoStream:kInputStream + packetType:MPPPacketTypePixelBuffer + timestamp:graphTimestamp]; + + // Alongside the input camera frame, we also send the `is_facepaint_effect_selected` boolean + // packet to indicate which effect should be rendered on this frame. + [self.graph movePacket:std::move(isFacepaintEffectSelectedPacket) + intoStream:kIsFacepaintEffectSelectedInputStream + error:nil]; +} + +@end diff --git a/mediapipe/examples/ios/faceeffect/Info.plist b/mediapipe/examples/ios/faceeffect/Info.plist new file mode 100644 index 000000000..30db14c62 --- /dev/null +++ b/mediapipe/examples/ios/faceeffect/Info.plist @@ -0,0 +1,42 @@ + + + + + NSCameraUsageDescription + This app uses the camera to demonstrate live video processing. + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + + + diff --git a/mediapipe/examples/ios/faceeffect/main.m b/mediapipe/examples/ios/faceeffect/main.m new file mode 100644 index 000000000..8848aeef4 --- /dev/null +++ b/mediapipe/examples/ios/faceeffect/main.m @@ -0,0 +1,22 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import "AppDelegate.h" + +int main(int argc, char* argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/mediapipe/examples/python/upper_body_pose_tracker.py b/mediapipe/examples/python/upper_body_pose_tracker.py index edb1dfe73..9c1f7dd57 100644 --- a/mediapipe/examples/python/upper_body_pose_tracker.py +++ b/mediapipe/examples/python/upper_body_pose_tracker.py @@ -150,7 +150,7 @@ class UpperBodyPoseTracker: success, input_frame = cap.read() if not success: break - input_frame = cv2.cvtColor(input_frame, cv2.COLOR_BGR2RGB) + input_frame = cv2.cvtColor(cv2.flip(input_frame, 1), cv2.COLOR_BGR2RGB) input_frame.flags.writeable = False _, output_frame = self._run_graph(input_frame) cv2.imshow('MediaPipe upper body pose tracker', diff --git a/mediapipe/framework/BUILD b/mediapipe/framework/BUILD index a61ee12df..a6e5fb01a 100644 --- a/mediapipe/framework/BUILD +++ b/mediapipe/framework/BUILD @@ -947,6 +947,7 @@ cc_library( ], }), visibility = [ + "//mediapipe/calculators:__subpackages__", "//mediapipe/framework:__subpackages__", "//mediapipe/framework/port:__pkg__", "//mediapipe/util:__subpackages__", diff --git a/mediapipe/framework/calculator_graph.cc b/mediapipe/framework/calculator_graph.cc index 702497fe9..7dad637aa 100644 --- a/mediapipe/framework/calculator_graph.cc +++ b/mediapipe/framework/calculator_graph.cc @@ -330,6 +330,9 @@ CalculatorGraph::~CalculatorGraph() { ::mediapipe::Status CalculatorGraph::InitializeDefaultExecutor( const ThreadPoolExecutorOptions* default_executor_options, bool use_application_thread) { +#ifdef __EMSCRIPTEN__ + use_application_thread = true; +#endif // __EMSCRIPTEN__ // If specified, run synchronously on the calling thread. if (use_application_thread) { use_application_thread_ = true; diff --git a/mediapipe/framework/deps/file_helpers.cc b/mediapipe/framework/deps/file_helpers.cc index 0e12eb77d..ae9048a7a 100644 --- a/mediapipe/framework/deps/file_helpers.cc +++ b/mediapipe/framework/deps/file_helpers.cc @@ -27,7 +27,9 @@ #include "mediapipe/framework/deps/canonical_errors.h" #include "mediapipe/framework/deps/file_path.h" +#include "mediapipe/framework/deps/status.h" #include "mediapipe/framework/deps/status_builder.h" +#include "mediapipe/framework/deps/status_macros.h" namespace mediapipe { namespace file { @@ -212,7 +214,7 @@ class DirectoryListing { ::mediapipe::Status Exists(absl::string_view file_name) { struct stat buffer; int status; - status = stat(file_name.data(), &buffer); + status = stat(std::string(file_name).c_str(), &buffer); if (status == 0) { return ::mediapipe::OkStatus(); } @@ -224,5 +226,30 @@ class DirectoryListing { } } +#ifndef _WIN32 +int mkdir(std::string path) { + return ::mkdir(path.c_str(), S_IRWXU | S_IRWXG | S_IRWXO); +} +#else +int mkdir(std::string path) { return _mkdir(path.c_str()); } +#endif + +::mediapipe::Status RecursivelyCreateDir(absl::string_view path) { + if (path.empty() || Exists(path).ok()) { + return mediapipe::OkStatus(); + } + auto split_path = file::SplitPath(path); + MP_RETURN_IF_ERROR(RecursivelyCreateDir(split_path.first)); + if (mkdir(std::string(path)) != 0) { + switch (errno) { + case EACCES: + return ::mediapipe::PermissionDeniedError("Insufficient permissions."); + default: + return ::mediapipe::UnavailableError("Failed to create directory."); + } + } + return mediapipe::OkStatus(); +} + } // namespace file } // namespace mediapipe diff --git a/mediapipe/framework/deps/file_helpers.h b/mediapipe/framework/deps/file_helpers.h index 08a7f1f99..c79909ed7 100644 --- a/mediapipe/framework/deps/file_helpers.h +++ b/mediapipe/framework/deps/file_helpers.h @@ -36,6 +36,8 @@ namespace file { ::mediapipe::Status Exists(absl::string_view file_name); +::mediapipe::Status RecursivelyCreateDir(absl::string_view path); + } // namespace file } // namespace mediapipe diff --git a/mediapipe/framework/deps/threadpool_pthread_impl.cc b/mediapipe/framework/deps/threadpool_pthread_impl.cc index a0e97e104..d9c32d35e 100644 --- a/mediapipe/framework/deps/threadpool_pthread_impl.cc +++ b/mediapipe/framework/deps/threadpool_pthread_impl.cc @@ -47,7 +47,8 @@ class ThreadPool::WorkerThread { ThreadPool::WorkerThread::WorkerThread(ThreadPool* pool, const std::string& name_prefix) : pool_(pool), name_prefix_(name_prefix) { - pthread_create(&thread_, nullptr, ThreadBody, this); + int res = pthread_create(&thread_, nullptr, ThreadBody, this); + CHECK_EQ(res, 0) << "pthread_create failed"; } ThreadPool::WorkerThread::~WorkerThread() {} @@ -59,9 +60,9 @@ void* ThreadPool::WorkerThread::ThreadBody(void* arg) { int nice_priority_level = thread->pool_->thread_options().nice_priority_level(); const std::set selected_cpus = thread->pool_->thread_options().cpu_set(); +#if defined(__linux__) const std::string name = internal::CreateThreadName(thread->name_prefix_, syscall(SYS_gettid)); -#if defined(__linux__) if (nice_priority_level != 0) { if (nice(nice_priority_level) != -1 || errno == 0) { VLOG(1) << "Changed the nice priority level by " << nice_priority_level; @@ -94,16 +95,19 @@ void* ThreadPool::WorkerThread::ThreadBody(void* arg) { << "Failed to set name for thread: " << name; } #else + const std::string name = internal::CreateThreadName(thread->name_prefix_, 0); if (nice_priority_level != 0 || !selected_cpus.empty()) { LOG(ERROR) << "Thread priority and processor affinity feature aren't " "supported on the current platform."; } +#if __APPLE__ int error = pthread_setname_np(name.c_str()); if (error != 0) { LOG(ERROR) << "Error : " << strerror(error) << std::endl << "Failed to set name for thread: " << name; } -#endif +#endif // __APPLE__ +#endif // __linux__ thread->pool_->RunWorker(); return nullptr; } @@ -178,6 +182,12 @@ const ThreadOptions& ThreadPool::thread_options() const { namespace internal { +// TODO: revise this: +// - thread_id is not portable +// - the 16-byte limit is Linux-specific +// - the std::thread implementation has a copy of this but doesn't use it +// - why do we even need the thread id in the name? any thread list should show +// the id too. std::string CreateThreadName(const std::string& prefix, int thread_id) { std::string name = absl::StrCat(prefix, "/", thread_id); // 16 is the limit allowed by `pthread_setname_np`, including diff --git a/mediapipe/framework/encode_binary_proto.bzl b/mediapipe/framework/encode_binary_proto.bzl index 1ed64a954..7ab235beb 100644 --- a/mediapipe/framework/encode_binary_proto.bzl +++ b/mediapipe/framework/encode_binary_proto.bzl @@ -1,3 +1,17 @@ +# Copyright 2019-2020 The MediaPipe Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + """A rule for encoding a text format protocol buffer into binary. Example usage: diff --git a/mediapipe/framework/formats/BUILD b/mediapipe/framework/formats/BUILD index fb10550b3..8b092bcae 100644 --- a/mediapipe/framework/formats/BUILD +++ b/mediapipe/framework/formats/BUILD @@ -227,3 +227,28 @@ filegroup( srcs = glob(["*.proto"]), visibility = ["//mediapipe:__subpackages__"], ) + +cc_library( + name = "image_frame_pool", + srcs = ["image_frame_pool.cc"], + hdrs = ["image_frame_pool.h"], + visibility = ["//visibility:public"], + deps = [ + ":image_frame", + "@com_google_absl//absl/memory", + "@com_google_absl//absl/synchronization", + ], +) + +cc_test( + name = "image_frame_pool_test", + size = "small", + srcs = ["image_frame_pool_test.cc"], + tags = ["linux"], + deps = [ + ":image_frame_pool", + "//mediapipe/framework/port:gtest_main", + "//mediapipe/framework/port:status", + "@com_google_absl//absl/memory", + ], +) diff --git a/mediapipe/framework/formats/image_frame_pool.cc b/mediapipe/framework/formats/image_frame_pool.cc new file mode 100644 index 000000000..ed1e28fe8 --- /dev/null +++ b/mediapipe/framework/formats/image_frame_pool.cc @@ -0,0 +1,88 @@ +// Copyright 2019 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "mediapipe/framework/formats/image_frame_pool.h" + +#include "absl/synchronization/mutex.h" + +namespace mediapipe { + +ImageFramePool::ImageFramePool(int width, int height, + ImageFormat::Format format, int keep_count) + : width_(width), + height_(height), + format_(format), + keep_count_(keep_count) {} + +ImageFrameSharedPtr ImageFramePool::GetBuffer() { + std::unique_ptr buffer; + + { + absl::MutexLock lock(&mutex_); + if (available_.empty()) { + // Fix alignment at 4 for best compatability with OpenGL. + buffer = std::make_unique( + format_, width_, height_, ImageFrame::kGlDefaultAlignmentBoundary); + if (!buffer) return nullptr; + } else { + buffer = std::move(available_.back()); + available_.pop_back(); + } + + ++in_use_count_; + } + + // Return a shared_ptr with a custom deleter that adds the buffer back + // to our available list. + std::weak_ptr weak_pool(shared_from_this()); + return std::shared_ptr(buffer.release(), + [weak_pool](ImageFrame* buf) { + auto pool = weak_pool.lock(); + if (pool) { + pool->Return(buf); + } else { + delete buf; + } + }); +} + +std::pair ImageFramePool::GetInUseAndAvailableCounts() { + absl::MutexLock lock(&mutex_); + return {in_use_count_, available_.size()}; +} + +void ImageFramePool::Return(ImageFrame* buf) { + std::vector> trimmed; + { + absl::MutexLock lock(&mutex_); + --in_use_count_; + available_.emplace_back(buf); + TrimAvailable(&trimmed); + } + // The trimmed buffers will be released without holding the lock. +} + +void ImageFramePool::TrimAvailable( + std::vector>* trimmed) { + int keep = std::max(keep_count_ - in_use_count_, 0); + if (available_.size() > keep) { + auto trim_it = std::next(available_.begin(), keep); + if (trimmed) { + std::move(trim_it, available_.end(), std::back_inserter(*trimmed)); + } + available_.erase(trim_it, available_.end()); + } +} + +} // namespace mediapipe diff --git a/mediapipe/framework/formats/image_frame_pool.h b/mediapipe/framework/formats/image_frame_pool.h new file mode 100644 index 000000000..5b364b6cd --- /dev/null +++ b/mediapipe/framework/formats/image_frame_pool.h @@ -0,0 +1,78 @@ +// Copyright 2019 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Consider this file an implementation detail. None of this is part of the +// public API. + +#ifndef MEDIAPIPE_FRAMEWORK_FORMATS_IMAGE_FRAME_POOL_H_ +#define MEDIAPIPE_FRAMEWORK_FORMATS_IMAGE_FRAME_POOL_H_ + +#include +#include + +#include "absl/synchronization/mutex.h" +#include "mediapipe/framework/formats/image_frame.h" + +namespace mediapipe { + +using ImageFrameSharedPtr = std::shared_ptr; + +class ImageFramePool : public std::enable_shared_from_this { + public: + // Creates a pool. This pool will manage buffers of the specified dimensions, + // and will keep keep_count buffers around for reuse. + // We enforce creation as a shared_ptr so that we can use a weak reference in + // the buffers' deleters. + static std::shared_ptr Create(int width, int height, + ImageFormat::Format format, + int keep_count) { + return std::shared_ptr( + new ImageFramePool(width, height, format, keep_count)); + } + + // Obtains a buffers. May either be reused or created anew. + ImageFrameSharedPtr GetBuffer(); + + int width() const { return width_; } + int height() const { return height_; } + ImageFormat::Format format() const { return format_; } + + // This method is meant for testing. + std::pair GetInUseAndAvailableCounts(); + + private: + ImageFramePool(int width, int height, ImageFormat::Format format, + int keep_count); + + // Return a buffer to the pool. + void Return(ImageFrame* buf); + + // If the total number of buffers is greater than keep_count, destroys any + // surplus buffers that are no longer in use. + void TrimAvailable(std::vector>* trimmed) + ABSL_EXCLUSIVE_LOCKS_REQUIRED(mutex_); + + const int width_; + const int height_; + const ImageFormat::Format format_; + const int keep_count_; + + absl::Mutex mutex_; + int in_use_count_ ABSL_GUARDED_BY(mutex_) = 0; + std::vector> available_ ABSL_GUARDED_BY(mutex_); +}; + +} // namespace mediapipe + +#endif // MEDIAPIPE_FRAMEWORK_FORMATS_IMAGE_FRAME_POOL_H_ diff --git a/mediapipe/framework/formats/image_frame_pool_test.cc b/mediapipe/framework/formats/image_frame_pool_test.cc new file mode 100644 index 000000000..4da5060e9 --- /dev/null +++ b/mediapipe/framework/formats/image_frame_pool_test.cc @@ -0,0 +1,103 @@ +// Copyright 2019 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "mediapipe/framework/formats/image_frame_pool.h" + +#include "absl/memory/memory.h" +#include "mediapipe/framework/port/gmock.h" +#include "mediapipe/framework/port/gtest.h" +#include "mediapipe/framework/port/status.h" + +namespace mediapipe { +namespace { + +using Pair = std::pair; + +constexpr int kWidth = 300; +constexpr int kHeight = 200; +constexpr ImageFormat::Format kFormat = ImageFormat::SRGBA; +constexpr int kKeepCount = 2; + +class ImageFramePoolTest : public ::testing::Test { + protected: + ImageFramePoolTest() { + pool_ = ImageFramePool::Create(kWidth, kHeight, kFormat, kKeepCount); + } + + void SetUp() override {} + + std::shared_ptr pool_; +}; + +TEST_F(ImageFramePoolTest, GetBuffer) { + EXPECT_EQ(Pair(0, 0), pool_->GetInUseAndAvailableCounts()); + auto buffer = pool_->GetBuffer(); + EXPECT_EQ(Pair(1, 0), pool_->GetInUseAndAvailableCounts()); + buffer = nullptr; + EXPECT_EQ(Pair(0, 1), pool_->GetInUseAndAvailableCounts()); + buffer = pool_->GetBuffer(); + EXPECT_EQ(Pair(1, 0), pool_->GetInUseAndAvailableCounts()); +} + +TEST_F(ImageFramePoolTest, GetMoreBuffers) { + EXPECT_EQ(Pair(0, 0), pool_->GetInUseAndAvailableCounts()); + std::vector buffers; + + // Create kKeepCount + 1 buffers + for (int i = 0; i <= kKeepCount; i++) { + buffers.emplace_back(pool_->GetBuffer()); + } + EXPECT_EQ(Pair(kKeepCount + 1, 0), pool_->GetInUseAndAvailableCounts()); + + // Delete one + buffers.resize(kKeepCount); + EXPECT_EQ(Pair(kKeepCount, 0), pool_->GetInUseAndAvailableCounts()); + + // Delete all + buffers.resize(0); + EXPECT_EQ(Pair(0, kKeepCount), pool_->GetInUseAndAvailableCounts()); + + // Create one more + buffers.emplace_back(pool_->GetBuffer()); + EXPECT_EQ(Pair(1, kKeepCount - 1), pool_->GetInUseAndAvailableCounts()); +} + +TEST_F(ImageFramePoolTest, DeleteNotLast) { + EXPECT_EQ(Pair(0, 0), pool_->GetInUseAndAvailableCounts()); + std::vector buffers; + + // Create kKeepCount + 1 buffers + for (int i = 0; i <= kKeepCount; i++) { + buffers.emplace_back(pool_->GetBuffer()); + } + EXPECT_EQ(Pair(kKeepCount + 1, 0), pool_->GetInUseAndAvailableCounts()); + + // Delete second + buffers.erase(buffers.begin() + 1); + EXPECT_EQ(Pair(kKeepCount, 0), pool_->GetInUseAndAvailableCounts()); + + // Delete first + buffers.erase(buffers.begin()); + EXPECT_EQ(Pair(kKeepCount - 1, 1), pool_->GetInUseAndAvailableCounts()); +} + +TEST(ImageFrameBufferPoolStaticTest, BufferCanOutlivePool) { + auto pool = ImageFramePool::Create(kWidth, kHeight, kFormat, kKeepCount); + auto buffer = pool->GetBuffer(); + pool = nullptr; + buffer = nullptr; +} + +} // anonymous namespace +} // namespace mediapipe diff --git a/mediapipe/framework/mediapipe_register_type.bzl b/mediapipe/framework/mediapipe_register_type.bzl new file mode 100644 index 000000000..91d274661 --- /dev/null +++ b/mediapipe/framework/mediapipe_register_type.bzl @@ -0,0 +1,117 @@ +# Copyright 2020 The MediaPipe Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""A rule for registering types with mediapipe. + +Example usage: + mediapipe_proto_library( + name = "foo_proto", + srcs = ["foo.proto"], + ) + + load("//mediapipe/framework:mediapipe_register_type.bzl", + "mediapipe_register_type") + + # Creates rules "foo_registration" + mediapipe_register_type( + base_name = "foo" + include_headers = ["mediapipe/framework/formats/foo.proto.h""], + types = [ + "::mediapipe::Foo", + "::mediapipe::FooList", + "::std::vector<::mediapipe::Foo>", + ], + deps = [":foo_cc_proto"], + ) + +Args + base_name: The base name of the target + (name + "_registration" will be created). + types: A list of C++ classes to register using MEDIAPIPE_REGISTER_TYPE. + deps: A list of cc deps. + include_headers: A list of header files that must be included. +""" + +load("//mediapipe/framework/tool:build_defs.bzl", "clean_dep") + +def _mediapipe_register_type_generate_cc_impl(ctx): + """Generate a cc file that registers types with mediapipe.""" + file_data_template = ''' +{include_headers} +#include "mediapipe/framework/type_map.h" + +{registration_commands} +''' + header_lines = [] + for header in ctx.attr.include_headers: + header_lines.append('#include "{}"'.format(header)) + registration_lines = [] + for registration_type in ctx.attr.types: + if " " in registration_type: + fail(('registration type "{}" should be fully qualified ' + + "and must not include spaces").format(registration_type)) + registration_lines.append( + "#define TEMP_MP_TYPE {}".format(registration_type), + ) + registration_lines.append( + ("MEDIAPIPE_REGISTER_TYPE(\n" + + " TEMP_MP_TYPE,\n" + + ' "{}",\n'.format(registration_type) + + " nullptr, nullptr);\n"), + ) + registration_lines.append("#undef TEMP_MP_TYPE") + + file_data = file_data_template.format( + include_headers = "\n".join(header_lines), + registration_commands = "\n".join(registration_lines), + ) + + ctx.actions.write(ctx.outputs.output, file_data) + +mediapipe_register_type_generate_cc = rule( + implementation = _mediapipe_register_type_generate_cc_impl, + attrs = { + "deps": attr.label_list(), + "types": attr.string_list( + mandatory = True, + ), + "include_headers": attr.string_list( + mandatory = True, + ), + "output": attr.output(), + }, +) + +def mediapipe_register_type( + base_name, + types, + deps = [], + include_headers = [], + visibility = ["//visibility:public"]): + mediapipe_register_type_generate_cc( + name = base_name + "_registration_cc", + types = types, + include_headers = include_headers, + output = base_name + "_registration.cc", + ) + + native.cc_library( + name = base_name + "_registration", + srcs = [base_name + "_registration.cc"], + deps = depset(deps + [ + clean_dep("//mediapipe/framework:type_map"), + ]), + visibility = visibility, + alwayslink = 1, + ) diff --git a/mediapipe/framework/port.h b/mediapipe/framework/port.h index e1a96bea4..d88752d9d 100644 --- a/mediapipe/framework/port.h +++ b/mediapipe/framework/port.h @@ -52,12 +52,12 @@ // Compile time target platform definitions. // Example: #if MEDIAPIPE_OPENGL_ES_VERSION >= MEDIAPIPE_OPENGL_ES_31 -#define MEDIAPIPE_OPENGL_ES_UNSUPPORTED 0 #define MEDIAPIPE_OPENGL_ES_20 200 +#define MEDIAPIPE_OPENGL_ES_30 300 #define MEDIAPIPE_OPENGL_ES_31 310 #if defined(MEDIAPIPE_DISABLE_GPU) -#define MEDIAPIPE_OPENGL_ES_VERSION MEDIAPIPE_OPENGL_ES_UNSUPPORTED +#define MEDIAPIPE_OPENGL_ES_VERSION 0 #define MEDIAPIPE_METAL_ENABLED 0 #else #if defined(MEDIAPIPE_ANDROID) @@ -71,11 +71,11 @@ #define MEDIAPIPE_OPENGL_ES_VERSION MEDIAPIPE_OPENGL_ES_20 #define MEDIAPIPE_METAL_ENABLED 1 #elif defined(MEDIAPIPE_OSX) -#define MEDIAPIPE_OPENGL_ES_VERSION MEDIAPIPE_OPENGL_ES_UNSUPPORTED +#define MEDIAPIPE_OPENGL_ES_VERSION 0 #define MEDIAPIPE_METAL_ENABLED 1 #else -// GPU is not supported on Linux yet. -#define MEDIAPIPE_OPENGL_ES_VERSION MEDIAPIPE_OPENGL_ES_UNSUPPORTED +// WebGL config. +#define MEDIAPIPE_OPENGL_ES_VERSION MEDIAPIPE_OPENGL_ES_30 #define MEDIAPIPE_METAL_ENABLED 0 #endif #endif diff --git a/mediapipe/framework/profiler/BUILD b/mediapipe/framework/profiler/BUILD index 432746ea9..fc3f53756 100644 --- a/mediapipe/framework/profiler/BUILD +++ b/mediapipe/framework/profiler/BUILD @@ -269,7 +269,7 @@ cc_test( cc_library( name = "profiler_resource_util", - srcs = select({ + srcs = ["profiler_resource_util_common.cc"] + select({ "//conditions:default": ["profiler_resource_util.cc"], "//mediapipe:android": ["profiler_resource_util_android.cc"], "//mediapipe:ios": ["profiler_resource_util_ios.cc"], @@ -288,15 +288,22 @@ cc_library( deps = [ "@com_google_absl//absl/strings", "//mediapipe/framework/port:logging", + "//mediapipe/framework/port:ret_check", "//mediapipe/framework/port:statusor", "//mediapipe/framework/port:status", + "@com_google_absl//absl/flags:flag", + "//mediapipe/framework/deps:file_path", ] + select({ "//conditions:default": [ + "//mediapipe/framework/port:file_helpers", ], "//mediapipe:android": [ "//mediapipe/java/com/google/mediapipe/framework/jni:jni_util", + "//mediapipe/util/android/file/base", + ], + "//mediapipe:apple": [ + "//mediapipe/framework/port:file_helpers", ], - "//mediapipe:apple": [], }), ) diff --git a/mediapipe/framework/profiler/graph_profiler_test.cc b/mediapipe/framework/profiler/graph_profiler_test.cc index 86c6a16c3..0f1497d76 100644 --- a/mediapipe/framework/profiler/graph_profiler_test.cc +++ b/mediapipe/framework/profiler/graph_profiler_test.cc @@ -22,6 +22,7 @@ #include "mediapipe/framework/port/gmock.h" #include "mediapipe/framework/port/gtest.h" #include "mediapipe/framework/port/status_matchers.h" +#include "mediapipe/framework/port/statusor.h" #include "mediapipe/framework/profiler/test_context_builder.h" #include "mediapipe/framework/tool/simulation_clock.h" #include "mediapipe/framework/tool/tag_map_helper.h" diff --git a/mediapipe/framework/profiler/profiler_resource_util.h b/mediapipe/framework/profiler/profiler_resource_util.h index 4b41dc509..920193446 100644 --- a/mediapipe/framework/profiler/profiler_resource_util.h +++ b/mediapipe/framework/profiler/profiler_resource_util.h @@ -27,6 +27,10 @@ namespace mediapipe { // error. StatusOr GetDefaultTraceLogDirectory(); +// Given a log file path, this function provides an absolute path with which +// it can be accessed as a file. Enclosing directories are created as needed. +StatusOr PathToLogFile(const std::string& path); + } // namespace mediapipe #endif // MEDIAPIPE_FRAMEWORK_PROFILER_PROFILER_RESOURCE_UTIL_H_ diff --git a/mediapipe/framework/profiler/profiler_resource_util_common.cc b/mediapipe/framework/profiler/profiler_resource_util_common.cc new file mode 100644 index 000000000..f4da002a7 --- /dev/null +++ b/mediapipe/framework/profiler/profiler_resource_util_common.cc @@ -0,0 +1,60 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "absl/flags/flag.h" +#include "mediapipe/framework/deps/file_path.h" +#include "mediapipe/framework/port/ret_check.h" +#include "mediapipe/framework/port/status_macros.h" +#include "mediapipe/framework/profiler/profiler_resource_util.h" + +// TODO: Move this Android include to port/file_helpers. +// Also move this from resource_util.cc. +#ifdef __ANDROID__ +#include "mediapipe/util/android/file/base/filesystem.h" +#else +#include "mediapipe/framework/port/file_helpers.h" +#endif + +ABSL_FLAG(std::string, log_root_dir, "", + "The absolute path to the logging output directory. If specified, " + "log_root_dir will be prepended to each specified log file path."); + +#ifdef __ANDROID__ +namespace mediapipe { +namespace file { +::mediapipe::Status RecursivelyCreateDir(absl::string_view path) { + return RecursivelyCreateDir(path, file::Options()); +} +} // namespace file +} // namespace mediapipe +#endif + +namespace mediapipe { + +::mediapipe::StatusOr GetLogDirectory() { + if (!FLAGS_log_root_dir.CurrentValue().empty()) { + return FLAGS_log_root_dir.CurrentValue(); + } + return GetDefaultTraceLogDirectory(); +} + +::mediapipe::StatusOr PathToLogFile(const std::string& path) { + ASSIGN_OR_RETURN(std::string log_dir, GetLogDirectory()); + std::string result = file::JoinPath(log_dir, path); + MP_RETURN_IF_ERROR( + ::mediapipe::file::RecursivelyCreateDir(file::Dirname(result))); + return result; +} + +} // namespace mediapipe diff --git a/mediapipe/framework/stream_handler/mux_input_stream_handler.cc b/mediapipe/framework/stream_handler/mux_input_stream_handler.cc index 3aa4a936d..f9b7eed6e 100644 --- a/mediapipe/framework/stream_handler/mux_input_stream_handler.cc +++ b/mediapipe/framework/stream_handler/mux_input_stream_handler.cc @@ -14,6 +14,7 @@ #include "absl/strings/substitute.h" #include "absl/synchronization/mutex.h" +#include "mediapipe/framework/collection_item_id.h" #include "mediapipe/framework/input_stream_handler.h" #include "mediapipe/framework/port/logging.h" @@ -121,6 +122,16 @@ class MuxInputStreamHandler : public InputStreamHandler { num_packets_dropped, data_stream->Name()); AddPacketToShard(&input_set->Get(data_stream_id), std::move(data_packet), stream_is_done); + + // Discard old packets on other streams. + // Note that control_stream_id is the last valid id. + auto next_timestamp = input_timestamp.NextAllowedInStream(); + for (CollectionItemId id = input_stream_managers_.BeginId(); + id < control_stream_id; ++id) { + if (id == data_stream_id) continue; + auto& other_stream = input_stream_managers_.Get(id); + other_stream->ErasePacketsEarlierThan(next_timestamp); + } } private: diff --git a/mediapipe/framework/tool/simulation_clock_executor.cc b/mediapipe/framework/tool/simulation_clock_executor.cc index 28447d321..dfbe798b3 100644 --- a/mediapipe/framework/tool/simulation_clock_executor.cc +++ b/mediapipe/framework/tool/simulation_clock_executor.cc @@ -19,11 +19,11 @@ namespace mediapipe { SimulationClockExecutor::SimulationClockExecutor(int num_threads) - : ThreadPoolExecutor(num_threads), clock_(new SimulationClock()) {} + : clock_(new SimulationClock()), executor_(num_threads) {} void SimulationClockExecutor::Schedule(std::function task) { clock_->ThreadStart(); - ThreadPoolExecutor::Schedule([this, task] { + executor_.Schedule([this, task] { clock_->Sleep(absl::ZeroDuration()); task(); clock_->ThreadFinish(); diff --git a/mediapipe/framework/tool/simulation_clock_executor.h b/mediapipe/framework/tool/simulation_clock_executor.h index b8a4fbf4f..ae1ee5da9 100644 --- a/mediapipe/framework/tool/simulation_clock_executor.h +++ b/mediapipe/framework/tool/simulation_clock_executor.h @@ -23,7 +23,7 @@ namespace mediapipe { // Simulation clock multithreaded executor. This is intended to be used with // graphs that are using SimulationClock class to emulate various parts of the // graph taking specific time to process the incoming packets. -class SimulationClockExecutor : public ThreadPoolExecutor { +class SimulationClockExecutor : public Executor { public: explicit SimulationClockExecutor(int num_threads); void Schedule(std::function task) override; @@ -36,6 +36,9 @@ class SimulationClockExecutor : public ThreadPoolExecutor { private: // SimulationClock instance used by this executor. std::shared_ptr clock_; + // The delegate ThreadPoolExecutor. This is declared after clock_ + // so that it is destroyed before clock_. + ThreadPoolExecutor executor_; }; } // namespace mediapipe diff --git a/mediapipe/framework/transitive_protos.bzl b/mediapipe/framework/transitive_protos.bzl index e2566b123..a8e311a25 100644 --- a/mediapipe/framework/transitive_protos.bzl +++ b/mediapipe/framework/transitive_protos.bzl @@ -1,3 +1,17 @@ +# Copyright 2019-2020 The MediaPipe Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + """Extract a cc_library compatible dependency with only the top level proto rules.""" ProtoLibsInfo = provider(fields = ["targets", "out"]) diff --git a/mediapipe/gpu/BUILD b/mediapipe/gpu/BUILD index 4992a3d51..df15e7fa8 100644 --- a/mediapipe/gpu/BUILD +++ b/mediapipe/gpu/BUILD @@ -159,7 +159,7 @@ cc_library( "//conditions:default": [], "//mediapipe:apple": [ "-x objective-c++", - "-fobjc-arc", + "-fobjc-arc", # enable reference-counting ], }), visibility = ["//visibility:public"], @@ -407,20 +407,29 @@ cc_library( }), ) +cc_library( + name = "gl_texture_buffer_pool", + srcs = ["gl_texture_buffer_pool.cc"], + hdrs = ["gl_texture_buffer_pool.h"], + visibility = ["//visibility:public"], + deps = [ + ":gl_base", + ":gl_texture_buffer", + ":gpu_buffer", + ":gpu_shared_data_header", + "//mediapipe/framework:calculator_context", + "//mediapipe/framework:calculator_node", + "//mediapipe/framework/port:logging", + "@com_google_absl//absl/memory", + "@com_google_absl//absl/synchronization", + ], +) + cc_library( name = "gpu_buffer_multi_pool", - srcs = ["gpu_buffer_multi_pool.cc"] + select({ - "//conditions:default": [ - "gl_texture_buffer_pool.cc", - ], - "//mediapipe:ios": [], - "//mediapipe:macos": [ - "gl_texture_buffer_pool.cc", - ], - }), + srcs = ["gpu_buffer_multi_pool.cc"], hdrs = ["gpu_buffer_multi_pool.h"] + select({ "//conditions:default": [ - "gl_texture_buffer_pool.h", ], "//mediapipe:ios": [ # The inclusions check does not see that this is provided by @@ -429,7 +438,6 @@ cc_library( "pixel_buffer_pool_util.h", ], "//mediapipe:macos": [ - "gl_texture_buffer_pool.h", ], }), copts = select({ @@ -452,6 +460,7 @@ cc_library( ] + select({ "//conditions:default": [ ":gl_texture_buffer", + ":gl_texture_buffer_pool", ], "//mediapipe:ios": [ ":pixel_buffer_pool_util", @@ -460,6 +469,7 @@ cc_library( "//mediapipe:macos": [ ":pixel_buffer_pool_util", ":gl_texture_buffer", + ":gl_texture_buffer_pool", ], }), ) diff --git a/mediapipe/gpu/gl_calculator_helper.cc b/mediapipe/gpu/gl_calculator_helper.cc index 16f16f264..8b6373506 100644 --- a/mediapipe/gpu/gl_calculator_helper.cc +++ b/mediapipe/gpu/gl_calculator_helper.cc @@ -14,14 +14,19 @@ #include "mediapipe/gpu/gl_calculator_helper.h" -#include "absl/memory/memory.h" +#include "mediapipe/framework/formats/image_frame.h" #include "mediapipe/framework/legacy_calculator_support.h" #include "mediapipe/framework/port/canonical_errors.h" #include "mediapipe/framework/port/ret_check.h" #include "mediapipe/framework/port/status.h" #include "mediapipe/gpu/gl_calculator_helper_impl.h" +#include "mediapipe/gpu/gpu_buffer.h" #include "mediapipe/gpu/gpu_service.h" +#ifdef __APPLE__ +#include "mediapipe/objc/util.h" +#endif + namespace mediapipe { GlTexture::GlTexture(GLuint name, int width, int height) diff --git a/mediapipe/gpu/gl_calculator_helper.h b/mediapipe/gpu/gl_calculator_helper.h index 171fe3be0..53178da44 100644 --- a/mediapipe/gpu/gl_calculator_helper.h +++ b/mediapipe/gpu/gl_calculator_helper.h @@ -15,8 +15,6 @@ #ifndef MEDIAPIPE_GPU_GL_CALCULATOR_HELPER_H_ #define MEDIAPIPE_GPU_GL_CALCULATOR_HELPER_H_ -#include - #include "absl/memory/memory.h" #include "mediapipe/framework/calculator_context.h" #include "mediapipe/framework/calculator_contract.h" @@ -29,6 +27,7 @@ #include "mediapipe/gpu/gl_context.h" #include "mediapipe/gpu/gpu_buffer.h" #include "mediapipe/gpu/graph_support.h" + #ifdef __APPLE__ #include @@ -50,6 +49,8 @@ typedef CVOpenGLESTextureRef CVTextureType; #endif // TARGET_OS_OSX #endif // __APPLE__ +using ImageFrameSharedPtr = std::shared_ptr; + // TODO: remove this and Process below, or make Process available // on Android. typedef std::function @@ -121,7 +122,7 @@ class GlCalculatorHelper { // where it is supported (iOS, for now) they take advantage of memory sharing // between the CPU and GPU, avoiding memory copies. - // Creates a texture representing an input frame. + // Creates a texture representing an input frame, and manages sync token. GlTexture CreateSourceTexture(const GpuBuffer& pixel_buffer); GlTexture CreateSourceTexture(const ImageFrame& image_frame); @@ -137,7 +138,7 @@ class GlCalculatorHelper { void GetGpuBufferDimensions(const GpuBuffer& pixel_buffer, int* width, int* height); - // Creates a texture representing an output frame. + // Creates a texture representing an output frame, and manages sync token. // TODO: This should either return errors or a status. GlTexture CreateDestinationTexture( int output_width, int output_height, @@ -152,11 +153,22 @@ class GlCalculatorHelper { GlContext& GetGlContext() const; + // Check if the calculator helper has been previously initialized. + bool Initialized() { return impl_ != nullptr; } + private: std::unique_ptr impl_; }; -// Represents an OpenGL texture. +// Represents an OpenGL texture, and is a 'view' into the memory pool. +// It's more like a GlTextureLock, because it's main purpose (in conjunction +// with the helper): to manage GL sync points in the gl command queue. +// +// This class should be the main way to interface with GL memory within a single +// calculator. This is the preferred way to utilize the memory pool inside of +// the helper, because GlTexture manages efficiently releasing memory back into +// the pool. A GPU backed Image can be extracted from the unerlying +// memory. class GlTexture { public: GlTexture() {} @@ -170,11 +182,12 @@ class GlTexture { GLuint name() const { return name_; } // Returns a buffer that can be sent to another calculator. - // Can be used with GpuBuffer or ImageFrame. + // & manages sync token + // Can be used with GpuBuffer or ImageFrame or Image template std::unique_ptr GetFrame() const; - // Releases texture memory + // Releases texture memory & manages sync token void Release(); private: diff --git a/mediapipe/gpu/gl_calculator_helper_impl.h b/mediapipe/gpu/gl_calculator_helper_impl.h index 8f90eb5fd..2a20b8438 100644 --- a/mediapipe/gpu/gl_calculator_helper_impl.h +++ b/mediapipe/gpu/gl_calculator_helper_impl.h @@ -42,10 +42,10 @@ class GlCalculatorHelperImpl { CalculatorContext* calculator_context); GlTexture CreateSourceTexture(const ImageFrame& image_frame); - GlTexture CreateSourceTexture(const GpuBuffer& pixel_buffer); + GlTexture CreateSourceTexture(const GpuBuffer& gpu_buffer); // Note: multi-plane support is currently only available on iOS. - GlTexture CreateSourceTexture(const GpuBuffer& pixel_buffer, int plane); + GlTexture CreateSourceTexture(const GpuBuffer& gpu_buffer, int plane); // Creates a framebuffer and returns the texture that it is bound to. GlTexture CreateDestinationTexture(int output_width, int output_height, diff --git a/mediapipe/gpu/gl_context_egl.cc b/mediapipe/gpu/gl_context_egl.cc index 58ab00784..eb7f8aebe 100644 --- a/mediapipe/gpu/gl_context_egl.cc +++ b/mediapipe/gpu/gl_context_egl.cc @@ -177,6 +177,27 @@ GlContext::StatusOrGlContext GlContext::Create(EGLContext share_context, } void GlContext::DestroyContext() { +#ifdef __ANDROID__ + if (HasContext()) { + // Detach the current program to work around b/166322604. + auto detach_program = [this] { + GlContext::ContextBinding saved_context; + GetCurrentContextBinding(&saved_context); + // Note: cannot use ThisContextBinding because it calls shared_from_this, + // which is not available during destruction. + if (eglMakeCurrent(display_, surface_, surface_, context_)) { + glUseProgram(0); + } else { + LOG(ERROR) << "eglMakeCurrent() returned error " << std::showbase + << std::hex << eglGetError(); + } + return SetCurrentContextBinding(saved_context); + }; + auto status = thread_ ? thread_->Run(detach_program) : detach_program(); + LOG_IF(ERROR, !status.ok()) << status; + } +#endif // __ANDROID__ + if (thread_) { // Delete thread-local storage. // TODO: in theory our EglThreadExitCallback should suffice for @@ -191,18 +212,6 @@ void GlContext::DestroyContext() { .IgnoreError(); } -#ifdef __ANDROID__ - if (HasContext()) { - // Detach the current program to work around b/166322604. - if (eglMakeCurrent(display_, surface_, surface_, context_)) { - glUseProgram(0); - } else { - LOG(ERROR) << "eglMakeCurrent() returned error " << std::showbase - << std::hex << eglGetError(); - } - } -#endif // __ANDROID__ - // Destroy the context and surface. if (IsCurrent()) { if (!eglMakeCurrent(display_, EGL_NO_SURFACE, EGL_NO_SURFACE, diff --git a/mediapipe/gpu/gpu_buffer.h b/mediapipe/gpu/gpu_buffer.h index b56e3b79b..e08164f45 100644 --- a/mediapipe/gpu/gpu_buffer.h +++ b/mediapipe/gpu/gpu_buffer.h @@ -72,7 +72,6 @@ class GpuBuffer { int width() const; int height() const; - GpuBufferFormat format() const; // Converts to true iff valid. diff --git a/mediapipe/gpu/gpu_buffer_multi_pool.cc b/mediapipe/gpu/gpu_buffer_multi_pool.cc index b334f62a8..f6ee59d73 100644 --- a/mediapipe/gpu/gpu_buffer_multi_pool.cc +++ b/mediapipe/gpu/gpu_buffer_multi_pool.cc @@ -44,8 +44,8 @@ static constexpr int kRequestCountScrubInterval = 50; #if MEDIAPIPE_GPU_BUFFER_USE_CV_PIXEL_BUFFER -CvPixelBufferPoolWrapper::CvPixelBufferPoolWrapper(const BufferSpec& spec, - CFTimeInterval maxAge) { +CvPixelBufferPoolWrapper::CvPixelBufferPoolWrapper( + const GpuBufferMultiPool::BufferSpec& spec, CFTimeInterval maxAge) { OSType cv_format = CVPixelFormatForGpuBufferFormat(spec.format); CHECK_NE(cv_format, -1) << "unsupported pixel format"; pool_ = MakeCFHolderAdopting( @@ -90,7 +90,7 @@ std::string CvPixelBufferPoolWrapper::GetDebugString() const { void CvPixelBufferPoolWrapper::Flush() { CVPixelBufferPoolFlush(*pool_, 0); } GpuBufferMultiPool::SimplePool GpuBufferMultiPool::MakeSimplePool( - const BufferSpec& spec) { + const GpuBufferMultiPool::BufferSpec& spec) { return std::make_shared(spec, kMaxInactiveBufferAge); } diff --git a/mediapipe/gpu/gpu_buffer_multi_pool.h b/mediapipe/gpu/gpu_buffer_multi_pool.h index a8ee5a197..201a070ba 100644 --- a/mediapipe/gpu/gpu_buffer_multi_pool.h +++ b/mediapipe/gpu/gpu_buffer_multi_pool.h @@ -40,56 +40,7 @@ namespace mediapipe { struct GpuSharedData; - -struct BufferSpec { - BufferSpec(int w, int h, GpuBufferFormat f) - : width(w), height(h), format(f) {} - int width; - int height; - GpuBufferFormat format; -}; - -inline bool operator==(const BufferSpec& lhs, const BufferSpec& rhs) { - return lhs.width == rhs.width && lhs.height == rhs.height && - lhs.format == rhs.format; -} -inline bool operator!=(const BufferSpec& lhs, const BufferSpec& rhs) { - return !operator==(lhs, rhs); -} - -// This generates a "rol" instruction with both Clang and GCC. -static inline std::size_t RotateLeft(std::size_t x, int n) { - return (x << n) | (x >> (std::numeric_limits::digits - n)); -} - -struct BufferSpecHash { - std::size_t operator()(const mediapipe::BufferSpec& spec) const { - // Width and height are expected to be smaller than half the width of - // size_t. We can combine them into a single integer, and then use - // std::hash, which is what go/hashing recommends for hashing numbers. - constexpr int kWidth = std::numeric_limits::digits; - return std::hash{}( - spec.width ^ RotateLeft(spec.height, kWidth / 2) ^ - RotateLeft(static_cast(spec.format), kWidth / 4)); - } -}; - -#if MEDIAPIPE_GPU_BUFFER_USE_CV_PIXEL_BUFFER -class CvPixelBufferPoolWrapper { - public: - CvPixelBufferPoolWrapper(const BufferSpec& spec, CFTimeInterval maxAge); - GpuBuffer GetBuffer(std::function flush); - - int GetBufferCount() const { return count_; } - std::string GetDebugString() const; - - void Flush(); - - private: - CFHolder pool_; - int count_ = 0; -}; -#endif // MEDIAPIPE_GPU_BUFFER_USE_CV_PIXEL_BUFFER +class CvPixelBufferPoolWrapper; class GpuBufferMultiPool { public: @@ -114,6 +65,31 @@ class GpuBufferMultiPool { void FlushTextureCaches(); #endif // defined(__APPLE__) + // This generates a "rol" instruction with both Clang and GCC. + inline static std::size_t RotateLeft(std::size_t x, int n) { + return (x << n) | (x >> (std::numeric_limits::digits - n)); + } + + struct BufferSpec { + BufferSpec(int w, int h, mediapipe::GpuBufferFormat f) + : width(w), height(h), format(f) {} + int width; + int height; + mediapipe::GpuBufferFormat format; + }; + + struct BufferSpecHash { + std::size_t operator()(const BufferSpec& spec) const { + // Width and height are expected to be smaller than half the width of + // size_t. We can combine them into a single integer, and then use + // std::hash, which is what go/hashing recommends for hashing numbers. + constexpr int kWidth = std::numeric_limits::digits; + return std::hash{}( + spec.width ^ RotateLeft(spec.height, kWidth / 2) ^ + RotateLeft(static_cast(spec.format), kWidth / 4)); + } + }; + private: #if MEDIAPIPE_GPU_BUFFER_USE_CV_PIXEL_BUFFER using SimplePool = std::shared_ptr; @@ -175,6 +151,35 @@ class GpuBufferMultiPool { #endif // defined(__APPLE__) }; +#if MEDIAPIPE_GPU_BUFFER_USE_CV_PIXEL_BUFFER +class CvPixelBufferPoolWrapper { + public: + CvPixelBufferPoolWrapper(const GpuBufferMultiPool::BufferSpec& spec, + CFTimeInterval maxAge); + GpuBuffer GetBuffer(std::function flush); + + int GetBufferCount() const { return count_; } + std::string GetDebugString() const; + + void Flush(); + + private: + CFHolder pool_; + int count_ = 0; +}; +#endif // MEDIAPIPE_GPU_BUFFER_USE_CV_PIXEL_BUFFER + +// BufferSpec equality operators +inline bool operator==(const GpuBufferMultiPool::BufferSpec& lhs, + const GpuBufferMultiPool::BufferSpec& rhs) { + return lhs.width == rhs.width && lhs.height == rhs.height && + lhs.format == rhs.format; +} +inline bool operator!=(const GpuBufferMultiPool::BufferSpec& lhs, + const GpuBufferMultiPool::BufferSpec& rhs) { + return !operator==(lhs, rhs); +} + } // namespace mediapipe #endif // MEDIAPIPE_GPU_GPU_BUFFER_MULTI_POOL_H_ diff --git a/mediapipe/gpu/gpu_shared_data_internal.cc b/mediapipe/gpu/gpu_shared_data_internal.cc index 2b6d8826e..e399e1715 100644 --- a/mediapipe/gpu/gpu_shared_data_internal.cc +++ b/mediapipe/gpu/gpu_shared_data_internal.cc @@ -110,6 +110,7 @@ GpuResources::~GpuResources() { std::string node_type = node->GetCalculatorState().CalculatorType(); std::string context_key; +#ifndef __EMSCRIPTEN__ // TODO Allow calculators to request a separate context. // For now, white-list a few calculators to run in their own context. bool gets_own_context = (node_type == "ImageFrameToGpuBufferCalculator") || @@ -126,6 +127,10 @@ GpuResources::~GpuResources() { } else { context_key = absl::StrCat("auto:", node_id); } +#else + // On Emscripten we currently do not support multiple contexts. + context_key = SharedContextKey(); +#endif // !__EMSCRIPTEN__ node_key_[node_id] = context_key; ASSIGN_OR_RETURN(std::shared_ptr context, diff --git a/mediapipe/graphs/face_effect/BUILD b/mediapipe/graphs/face_effect/BUILD new file mode 100644 index 000000000..401ac043c --- /dev/null +++ b/mediapipe/graphs/face_effect/BUILD @@ -0,0 +1,43 @@ +# Copyright 2020 The MediaPipe Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load( + "//mediapipe/framework/tool:mediapipe_graph.bzl", + "mediapipe_binary_graph", +) + +licenses(["notice"]) + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "face_effect_gpu_deps", + deps = [ + "//mediapipe/calculators/core:flow_limiter_calculator", + "//mediapipe/calculators/core:gate_calculator", + "//mediapipe/calculators/core:immediate_mux_calculator", + "//mediapipe/calculators/image:image_properties_calculator", + "//mediapipe/graphs/face_effect/subgraphs:single_face_smooth_landmark_gpu", + "//mediapipe/modules/face_geometry", + "//mediapipe/modules/face_geometry:effect_renderer_calculator", + "//mediapipe/modules/face_geometry:env_generator_calculator", + ], +) + +mediapipe_binary_graph( + name = "face_effect_gpu_binary_graph", + graph = "face_effect_gpu.pbtxt", + output_name = "face_effect_gpu.binarypb", + deps = [":face_effect_gpu_deps"], +) diff --git a/mediapipe/graphs/face_effect/data/BUILD b/mediapipe/graphs/face_effect/data/BUILD new file mode 100644 index 000000000..21368da60 --- /dev/null +++ b/mediapipe/graphs/face_effect/data/BUILD @@ -0,0 +1,36 @@ +# Copyright 2020 The MediaPipe Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load("//mediapipe/framework:encode_binary_proto.bzl", "encode_binary_proto") + +licenses(["notice"]) + +package(default_visibility = ["//visibility:public"]) + +encode_binary_proto( + name = "glasses", + input = "glasses.pbtxt", + message_type = "mediapipe.face_geometry.Mesh3d", + output = "glasses.binarypb", + deps = [ + "//mediapipe/modules/face_geometry/protos:mesh_3d_proto", + ], +) + +# `.pngblob` is used instead of `.png` to prevent iOS build from preprocessing the image. +# OpenCV is unable to read a PNG file preprocessed by the iOS build. +exports_files([ + "facepaint.pngblob", + "glasses.pngblob", +]) diff --git a/mediapipe/graphs/face_effect/data/facepaint.pngblob b/mediapipe/graphs/face_effect/data/facepaint.pngblob new file mode 100644 index 000000000..7658149b8 Binary files /dev/null and b/mediapipe/graphs/face_effect/data/facepaint.pngblob differ diff --git a/mediapipe/graphs/face_effect/data/glasses.pbtxt b/mediapipe/graphs/face_effect/data/glasses.pbtxt new file mode 100644 index 000000000..dcfef527e --- /dev/null +++ b/mediapipe/graphs/face_effect/data/glasses.pbtxt @@ -0,0 +1,27815 @@ +# Copyright 2020 The MediaPipe Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +vertex_type: VERTEX_PT +primitive_type: TRIANGLE +vertex_buffer: 6.466000 +vertex_buffer: 3.606349 +vertex_buffer: 5.547389 +vertex_buffer: 0.456900 +vertex_buffer: 0.660100 +vertex_buffer: 6.568000 +vertex_buffer: 3.419411 +vertex_buffer: 5.525260 +vertex_buffer: 0.475100 +vertex_buffer: 0.668900 +vertex_buffer: 7.041000 +vertex_buffer: 3.393790 +vertex_buffer: 5.444396 +vertex_buffer: 0.485100 +vertex_buffer: 0.711200 +vertex_buffer: 7.047000 +vertex_buffer: 3.546470 +vertex_buffer: 5.447816 +vertex_buffer: 0.471100 +vertex_buffer: 0.711700 +vertex_buffer: 6.632000 +vertex_buffer: 3.918372 +vertex_buffer: 5.528612 +vertex_buffer: 0.431000 +vertex_buffer: 0.678400 +vertex_buffer: -7.047000 +vertex_buffer: 3.546470 +vertex_buffer: 5.447816 +vertex_buffer: 0.471100 +vertex_buffer: 0.711700 +vertex_buffer: -7.041000 +vertex_buffer: 3.393790 +vertex_buffer: 5.444396 +vertex_buffer: 0.485100 +vertex_buffer: 0.711200 +vertex_buffer: -6.568000 +vertex_buffer: 3.419411 +vertex_buffer: 5.525260 +vertex_buffer: 0.475100 +vertex_buffer: 0.668900 +vertex_buffer: -6.466000 +vertex_buffer: 3.606349 +vertex_buffer: 5.547389 +vertex_buffer: 0.456900 +vertex_buffer: 0.660100 +vertex_buffer: -6.632000 +vertex_buffer: 3.918372 +vertex_buffer: 5.528612 +vertex_buffer: 0.431000 +vertex_buffer: 0.678400 +vertex_buffer: 5.129000 +vertex_buffer: 4.348364 +vertex_buffer: 5.535068 +vertex_buffer: 0.359600 +vertex_buffer: 0.551300 +vertex_buffer: 5.128000 +vertex_buffer: 4.330357 +vertex_buffer: 5.541740 +vertex_buffer: 0.361200 +vertex_buffer: 0.550600 +vertex_buffer: 5.567000 +vertex_buffer: 4.268441 +vertex_buffer: 5.472582 +vertex_buffer: 0.370600 +vertex_buffer: 0.590500 +vertex_buffer: 5.571000 +vertex_buffer: 4.286449 +vertex_buffer: 5.464946 +vertex_buffer: 0.369000 +vertex_buffer: 0.591400 +vertex_buffer: 5.118000 +vertex_buffer: 4.243356 +vertex_buffer: 5.541220 +vertex_buffer: 0.368700 +vertex_buffer: 0.548600 +vertex_buffer: 5.541000 +vertex_buffer: 4.185438 +vertex_buffer: 5.475054 +vertex_buffer: 0.377700 +vertex_buffer: 0.587200 +vertex_buffer: 4.708000 +vertex_buffer: 4.384293 +vertex_buffer: 5.593466 +vertex_buffer: 0.352000 +vertex_buffer: 0.513000 +vertex_buffer: 4.708000 +vertex_buffer: 4.367285 +vertex_buffer: 5.600235 +vertex_buffer: 0.353600 +vertex_buffer: 0.512400 +vertex_buffer: 4.253000 +vertex_buffer: 4.405225 +vertex_buffer: 5.649831 +vertex_buffer: 0.345200 +vertex_buffer: 0.471700 +vertex_buffer: 4.253000 +vertex_buffer: 4.387217 +vertex_buffer: 5.656703 +vertex_buffer: 0.346800 +vertex_buffer: 0.471000 +vertex_buffer: 4.251000 +vertex_buffer: 4.301218 +vertex_buffer: 5.656061 +vertex_buffer: 0.354400 +vertex_buffer: 0.469500 +vertex_buffer: 4.704000 +vertex_buffer: 4.280284 +vertex_buffer: 5.600062 +vertex_buffer: 0.361200 +vertex_buffer: 0.510800 +vertex_buffer: 3.712000 +vertex_buffer: 4.403163 +vertex_buffer: 5.701223 +vertex_buffer: 0.338700 +vertex_buffer: 0.422600 +vertex_buffer: 3.713000 +vertex_buffer: 4.386153 +vertex_buffer: 5.709153 +vertex_buffer: 0.340400 +vertex_buffer: 0.422100 +vertex_buffer: 3.035000 +vertex_buffer: 4.374107 +vertex_buffer: 5.746506 +vertex_buffer: 0.332700 +vertex_buffer: 0.361400 +vertex_buffer: 3.035000 +vertex_buffer: 4.357099 +vertex_buffer: 5.754267 +vertex_buffer: 0.334300 +vertex_buffer: 0.360700 +vertex_buffer: 3.034000 +vertex_buffer: 4.271099 +vertex_buffer: 5.753122 +vertex_buffer: 0.341900 +vertex_buffer: 0.358900 +vertex_buffer: 3.711000 +vertex_buffer: 4.300154 +vertex_buffer: 5.708760 +vertex_buffer: 0.348000 +vertex_buffer: 0.420400 +vertex_buffer: 2.359000 +vertex_buffer: 4.303060 +vertex_buffer: 5.785590 +vertex_buffer: 0.329900 +vertex_buffer: 0.299400 +vertex_buffer: 2.358000 +vertex_buffer: 4.321068 +vertex_buffer: 5.778964 +vertex_buffer: 0.328100 +vertex_buffer: 0.300100 +vertex_buffer: 1.820000 +vertex_buffer: 4.245048 +vertex_buffer: 5.795635 +vertex_buffer: 0.324600 +vertex_buffer: 0.251100 +vertex_buffer: 1.823000 +vertex_buffer: 4.228040 +vertex_buffer: 5.802235 +vertex_buffer: 0.326400 +vertex_buffer: 0.250600 +vertex_buffer: 1.836000 +vertex_buffer: 4.142041 +vertex_buffer: 5.800324 +vertex_buffer: 0.334400 +vertex_buffer: 0.249400 +vertex_buffer: 2.362000 +vertex_buffer: 4.217062 +vertex_buffer: 5.783886 +vertex_buffer: 0.337600 +vertex_buffer: 0.297700 +vertex_buffer: 1.410000 +vertex_buffer: 4.152036 +vertex_buffer: 5.806158 +vertex_buffer: 0.322400 +vertex_buffer: 0.212900 +vertex_buffer: 1.405000 +vertex_buffer: 4.170044 +vertex_buffer: 5.799617 +vertex_buffer: 0.320500 +vertex_buffer: 0.213200 +vertex_buffer: 5.551000 +vertex_buffer: 4.106152 +vertex_buffer: 5.709693 +vertex_buffer: 0.402100 +vertex_buffer: 0.579100 +vertex_buffer: 5.486000 +vertex_buffer: 3.986141 +vertex_buffer: 5.718381 +vertex_buffer: 0.412000 +vertex_buffer: 0.572000 +vertex_buffer: 5.819000 +vertex_buffer: 3.920209 +vertex_buffer: 5.663535 +vertex_buffer: 0.421100 +vertex_buffer: 0.602200 +vertex_buffer: 6.010000 +vertex_buffer: 4.027245 +vertex_buffer: 5.632739 +vertex_buffer: 0.413400 +vertex_buffer: 0.620600 +vertex_buffer: 6.101000 +vertex_buffer: 3.839266 +vertex_buffer: 5.615214 +vertex_buffer: 0.431300 +vertex_buffer: 0.627700 +vertex_buffer: 6.386000 +vertex_buffer: 3.956323 +vertex_buffer: 5.569576 +vertex_buffer: 0.423500 +vertex_buffer: 0.654600 +vertex_buffer: 6.428000 +vertex_buffer: 3.592345 +vertex_buffer: 5.550429 +vertex_buffer: 0.457600 +vertex_buffer: 0.656300 +vertex_buffer: 6.533000 +vertex_buffer: 3.412464 +vertex_buffer: 5.527380 +vertex_buffer: 0.474800 +vertex_buffer: 0.665700 +vertex_buffer: 6.595000 +vertex_buffer: 3.198286 +vertex_buffer: 5.512281 +vertex_buffer: 0.494800 +vertex_buffer: 0.670900 +vertex_buffer: 6.627000 +vertex_buffer: 3.198302 +vertex_buffer: 5.510076 +vertex_buffer: 0.495800 +vertex_buffer: 0.673400 +vertex_buffer: 6.619000 +vertex_buffer: 2.959405 +vertex_buffer: 5.501948 +vertex_buffer: 0.516700 +vertex_buffer: 0.670900 +vertex_buffer: 6.652000 +vertex_buffer: 2.957454 +vertex_buffer: 5.499708 +vertex_buffer: 0.517700 +vertex_buffer: 0.673200 +vertex_buffer: 6.653000 +vertex_buffer: 2.716597 +vertex_buffer: 5.493766 +vertex_buffer: 0.538700 +vertex_buffer: 0.668700 +vertex_buffer: 6.617000 +vertex_buffer: 2.717522 +vertex_buffer: 5.497011 +vertex_buffer: 0.537900 +vertex_buffer: 0.666200 +vertex_buffer: 6.539000 +vertex_buffer: 2.186655 +vertex_buffer: 5.498873 +vertex_buffer: 0.579700 +vertex_buffer: 0.642800 +vertex_buffer: 6.383000 +vertex_buffer: 1.687333 +vertex_buffer: 5.513467 +vertex_buffer: 0.614200 +vertex_buffer: 0.610700 +vertex_buffer: 6.420000 +vertex_buffer: 1.682484 +vertex_buffer: 5.510983 +vertex_buffer: 0.615100 +vertex_buffer: 0.613800 +vertex_buffer: 6.578000 +vertex_buffer: 2.182802 +vertex_buffer: 5.495497 +vertex_buffer: 0.580600 +vertex_buffer: 0.645900 +vertex_buffer: 6.180000 +vertex_buffer: 1.161807 +vertex_buffer: 5.531222 +vertex_buffer: 0.648100 +vertex_buffer: 0.572700 +vertex_buffer: 6.214000 +vertex_buffer: 1.153944 +vertex_buffer: 5.529571 +vertex_buffer: 0.649300 +vertex_buffer: 0.575600 +vertex_buffer: 5.976000 +vertex_buffer: 0.774659 +vertex_buffer: 5.548143 +vertex_buffer: 0.672000 +vertex_buffer: 0.540800 +vertex_buffer: 6.006000 +vertex_buffer: 0.759837 +vertex_buffer: 5.546113 +vertex_buffer: 0.674000 +vertex_buffer: 0.543200 +vertex_buffer: 5.738000 +vertex_buffer: 0.483219 +vertex_buffer: 5.569363 +vertex_buffer: 0.689400 +vertex_buffer: 0.510800 +vertex_buffer: 5.765000 +vertex_buffer: 0.459438 +vertex_buffer: 5.566656 +vertex_buffer: 0.692000 +vertex_buffer: 0.512700 +vertex_buffer: 5.435000 +vertex_buffer: 0.241572 +vertex_buffer: 5.597222 +vertex_buffer: 0.703400 +vertex_buffer: 0.477900 +vertex_buffer: 5.459000 +vertex_buffer: 0.213714 +vertex_buffer: 5.594969 +vertex_buffer: 0.706300 +vertex_buffer: 0.479400 +vertex_buffer: 5.043000 +vertex_buffer: 0.047655 +vertex_buffer: 5.633954 +vertex_buffer: 0.714700 +vertex_buffer: 0.439400 +vertex_buffer: 5.060000 +vertex_buffer: 0.015697 +vertex_buffer: 5.632053 +vertex_buffer: 0.717800 +vertex_buffer: 0.440200 +vertex_buffer: 4.534000 +vertex_buffer: -0.103409 +vertex_buffer: 5.679254 +vertex_buffer: 0.723700 +vertex_buffer: 0.391800 +vertex_buffer: 4.543000 +vertex_buffer: -0.140581 +vertex_buffer: 5.678630 +vertex_buffer: 0.726900 +vertex_buffer: 0.391800 +vertex_buffer: 4.005000 +vertex_buffer: -0.195870 +vertex_buffer: 5.728422 +vertex_buffer: 0.728400 +vertex_buffer: 0.343300 +vertex_buffer: 4.007000 +vertex_buffer: -0.236085 +vertex_buffer: 5.727403 +vertex_buffer: 0.731900 +vertex_buffer: 0.342800 +vertex_buffer: 1.098000 +vertex_buffer: 4.116043 +vertex_buffer: 5.800600 +vertex_buffer: 0.315600 +vertex_buffer: 0.185500 +vertex_buffer: 1.103000 +vertex_buffer: 4.098034 +vertex_buffer: 5.808094 +vertex_buffer: 0.317600 +vertex_buffer: 0.185200 +vertex_buffer: 1.126000 +vertex_buffer: 4.010036 +vertex_buffer: 5.805807 +vertex_buffer: 0.325900 +vertex_buffer: 0.184200 +vertex_buffer: 1.432000 +vertex_buffer: 4.066038 +vertex_buffer: 5.804105 +vertex_buffer: 0.330600 +vertex_buffer: 0.212100 +vertex_buffer: 0.883999 +vertex_buffer: 4.081041 +vertex_buffer: 5.802060 +vertex_buffer: 0.311200 +vertex_buffer: 0.166300 +vertex_buffer: 0.887998 +vertex_buffer: 4.062030 +vertex_buffer: 5.809504 +vertex_buffer: 0.313200 +vertex_buffer: 0.166000 +vertex_buffer: 0.162758 +vertex_buffer: 3.804688 +vertex_buffer: 6.122684 +vertex_buffer: 0.333600 +vertex_buffer: 0.088700 +vertex_buffer: -0.000000 +vertex_buffer: 3.803644 +vertex_buffer: 6.128218 +vertex_buffer: 0.327400 +vertex_buffer: 0.075700 +vertex_buffer: -0.000000 +vertex_buffer: 3.547017 +vertex_buffer: 6.117342 +vertex_buffer: 0.347200 +vertex_buffer: 0.065200 +vertex_buffer: 0.165816 +vertex_buffer: 3.544578 +vertex_buffer: 6.111334 +vertex_buffer: 0.354600 +vertex_buffer: 0.078000 +vertex_buffer: 0.313999 +vertex_buffer: 3.805656 +vertex_buffer: 6.117985 +vertex_buffer: 0.339400 +vertex_buffer: 0.100800 +vertex_buffer: 0.319898 +vertex_buffer: 3.542312 +vertex_buffer: 6.106232 +vertex_buffer: 0.361400 +vertex_buffer: 0.090000 +vertex_buffer: 0.584504 +vertex_buffer: 3.526286 +vertex_buffer: 6.088815 +vertex_buffer: 0.371900 +vertex_buffer: 0.112100 +vertex_buffer: 0.582000 +vertex_buffer: 3.814673 +vertex_buffer: 6.103284 +vertex_buffer: 0.347300 +vertex_buffer: 0.124400 +vertex_buffer: 0.432000 +vertex_buffer: 3.031033 +vertex_buffer: 6.071945 +vertex_buffer: 0.411000 +vertex_buffer: 0.070300 +vertex_buffer: 0.522999 +vertex_buffer: 2.920398 +vertex_buffer: 6.062136 +vertex_buffer: 0.424300 +vertex_buffer: 0.072800 +vertex_buffer: 0.547999 +vertex_buffer: 2.930367 +vertex_buffer: 6.069046 +vertex_buffer: 0.423500 +vertex_buffer: 0.076700 +vertex_buffer: 0.452999 +vertex_buffer: 3.052091 +vertex_buffer: 6.080023 +vertex_buffer: 0.409300 +vertex_buffer: 0.074700 +vertex_buffer: 0.591999 +vertex_buffer: 2.935434 +vertex_buffer: 6.066682 +vertex_buffer: 0.423800 +vertex_buffer: 0.082000 +vertex_buffer: 0.500000 +vertex_buffer: 3.112521 +vertex_buffer: 6.080370 +vertex_buffer: 0.405500 +vertex_buffer: 0.082900 +vertex_buffer: 0.625000 +vertex_buffer: 2.745313 +vertex_buffer: 6.055617 +vertex_buffer: 0.442100 +vertex_buffer: 0.076800 +vertex_buffer: 0.664999 +vertex_buffer: 2.741312 +vertex_buffer: 6.054260 +vertex_buffer: 0.442900 +vertex_buffer: 0.080800 +vertex_buffer: 0.600999 +vertex_buffer: 2.743412 +vertex_buffer: 6.049767 +vertex_buffer: 0.442400 +vertex_buffer: 0.073800 +vertex_buffer: 0.872000 +vertex_buffer: 1.935933 +vertex_buffer: 6.014896 +vertex_buffer: 0.519600 +vertex_buffer: 0.080100 +vertex_buffer: 0.889000 +vertex_buffer: 1.937704 +vertex_buffer: 6.020942 +vertex_buffer: 0.519200 +vertex_buffer: 0.081200 +vertex_buffer: 0.797000 +vertex_buffer: 2.211378 +vertex_buffer: 6.028312 +vertex_buffer: 0.493200 +vertex_buffer: 0.078100 +vertex_buffer: 0.777999 +vertex_buffer: 2.209563 +vertex_buffer: 6.022314 +vertex_buffer: 0.493700 +vertex_buffer: 0.076500 +vertex_buffer: 0.915999 +vertex_buffer: 1.941734 +vertex_buffer: 6.021025 +vertex_buffer: 0.519000 +vertex_buffer: 0.083200 +vertex_buffer: 0.825999 +vertex_buffer: 2.213393 +vertex_buffer: 6.028286 +vertex_buffer: 0.493200 +vertex_buffer: 0.080600 +vertex_buffer: 0.994000 +vertex_buffer: 1.653878 +vertex_buffer: 6.013682 +vertex_buffer: 0.546000 +vertex_buffer: 0.086400 +vertex_buffer: 1.019000 +vertex_buffer: 1.656937 +vertex_buffer: 6.012816 +vertex_buffer: 0.546000 +vertex_buffer: 0.088000 +vertex_buffer: 0.978000 +vertex_buffer: 1.652161 +vertex_buffer: 6.007595 +vertex_buffer: 0.546300 +vertex_buffer: 0.085500 +vertex_buffer: 1.470000 +vertex_buffer: 0.609648 +vertex_buffer: 5.964523 +vertex_buffer: 0.642600 +vertex_buffer: 0.119900 +vertex_buffer: 1.273000 +vertex_buffer: 0.991726 +vertex_buffer: 5.987666 +vertex_buffer: 0.607500 +vertex_buffer: 0.104800 +vertex_buffer: 1.259000 +vertex_buffer: 0.989106 +vertex_buffer: 5.981474 +vertex_buffer: 0.607700 +vertex_buffer: 0.104000 +vertex_buffer: 1.457000 +vertex_buffer: 0.605091 +vertex_buffer: 5.958188 +vertex_buffer: 0.642900 +vertex_buffer: 0.119100 +vertex_buffer: 1.490000 +vertex_buffer: 0.618772 +vertex_buffer: 5.964130 +vertex_buffer: 0.642200 +vertex_buffer: 0.121200 +vertex_buffer: 1.296000 +vertex_buffer: 0.995807 +vertex_buffer: 5.986959 +vertex_buffer: 0.607500 +vertex_buffer: 0.106300 +vertex_buffer: 1.726000 +vertex_buffer: 0.268501 +vertex_buffer: 5.934266 +vertex_buffer: 0.674500 +vertex_buffer: 0.140600 +vertex_buffer: 1.708000 +vertex_buffer: 0.254355 +vertex_buffer: 5.934185 +vertex_buffer: 0.675200 +vertex_buffer: 0.139400 +vertex_buffer: 1.697000 +vertex_buffer: 0.246832 +vertex_buffer: 5.927583 +vertex_buffer: 0.675700 +vertex_buffer: 0.138700 +vertex_buffer: 1.990000 +vertex_buffer: -0.014744 +vertex_buffer: 5.901462 +vertex_buffer: 0.700200 +vertex_buffer: 0.163400 +vertex_buffer: 1.981000 +vertex_buffer: -0.024212 +vertex_buffer: 5.894596 +vertex_buffer: 0.700700 +vertex_buffer: 0.162700 +vertex_buffer: 2.005000 +vertex_buffer: 0.001400 +vertex_buffer: 5.901891 +vertex_buffer: 0.699300 +vertex_buffer: 0.164500 +vertex_buffer: 2.328000 +vertex_buffer: -0.193438 +vertex_buffer: 5.866342 +vertex_buffer: 0.718200 +vertex_buffer: 0.192400 +vertex_buffer: 2.316000 +vertex_buffer: -0.211562 +vertex_buffer: 5.865541 +vertex_buffer: 0.719200 +vertex_buffer: 0.191400 +vertex_buffer: 2.308000 +vertex_buffer: -0.221987 +vertex_buffer: 5.858471 +vertex_buffer: 0.719700 +vertex_buffer: 0.190800 +vertex_buffer: 2.686000 +vertex_buffer: -0.346309 +vertex_buffer: 5.827715 +vertex_buffer: 0.733700 +vertex_buffer: 0.223400 +vertex_buffer: 2.680000 +vertex_buffer: -0.359701 +vertex_buffer: 5.820293 +vertex_buffer: 0.734400 +vertex_buffer: 0.222800 +vertex_buffer: 2.695000 +vertex_buffer: -0.325289 +vertex_buffer: 5.829885 +vertex_buffer: 0.732400 +vertex_buffer: 0.224300 +vertex_buffer: 3.097000 +vertex_buffer: -0.408205 +vertex_buffer: 5.791085 +vertex_buffer: 0.742400 +vertex_buffer: 0.259800 +vertex_buffer: 3.091000 +vertex_buffer: -0.431304 +vertex_buffer: 5.789650 +vertex_buffer: 0.744000 +vertex_buffer: 0.258900 +vertex_buffer: 3.087000 +vertex_buffer: -0.445664 +vertex_buffer: 5.782089 +vertex_buffer: 0.744900 +vertex_buffer: 0.258300 +vertex_buffer: 3.520000 +vertex_buffer: -0.489680 +vertex_buffer: 5.740166 +vertex_buffer: 0.751200 +vertex_buffer: 0.296700 +vertex_buffer: 3.522000 +vertex_buffer: -0.475451 +vertex_buffer: 5.748737 +vertex_buffer: 0.750200 +vertex_buffer: 0.297200 +vertex_buffer: 3.525000 +vertex_buffer: -0.450484 +vertex_buffer: 5.751408 +vertex_buffer: 0.748300 +vertex_buffer: 0.297900 +vertex_buffer: 4.017000 +vertex_buffer: -0.437417 +vertex_buffer: 5.704529 +vertex_buffer: 0.749800 +vertex_buffer: 0.342100 +vertex_buffer: 4.018000 +vertex_buffer: -0.462352 +vertex_buffer: 5.701867 +vertex_buffer: 0.751900 +vertex_buffer: 0.341500 +vertex_buffer: 4.018000 +vertex_buffer: -0.477554 +vertex_buffer: 5.693193 +vertex_buffer: 0.753200 +vertex_buffer: 0.341100 +vertex_buffer: 5.564000 +vertex_buffer: 4.155161 +vertex_buffer: 5.702558 +vertex_buffer: 0.398100 +vertex_buffer: 0.581200 +vertex_buffer: 5.143000 +vertex_buffer: 4.212080 +vertex_buffer: 5.768786 +vertex_buffer: 0.389300 +vertex_buffer: 0.543200 +vertex_buffer: 5.141000 +vertex_buffer: 4.193074 +vertex_buffer: 5.774485 +vertex_buffer: 0.390900 +vertex_buffer: 0.542500 +vertex_buffer: 5.562000 +vertex_buffer: 4.136154 +vertex_buffer: 5.709178 +vertex_buffer: 0.399700 +vertex_buffer: 0.580600 +vertex_buffer: 5.138000 +vertex_buffer: 4.162073 +vertex_buffer: 5.774951 +vertex_buffer: 0.393500 +vertex_buffer: 0.541700 +vertex_buffer: 4.728000 +vertex_buffer: 4.230002 +vertex_buffer: 5.833516 +vertex_buffer: 0.383700 +vertex_buffer: 0.505100 +vertex_buffer: 4.727000 +vertex_buffer: 4.199002 +vertex_buffer: 5.833092 +vertex_buffer: 0.386300 +vertex_buffer: 0.504400 +vertex_buffer: 4.728000 +vertex_buffer: 4.249009 +vertex_buffer: 5.826763 +vertex_buffer: 0.382000 +vertex_buffer: 0.505700 +vertex_buffer: 4.274000 +vertex_buffer: 4.269942 +vertex_buffer: 5.883901 +vertex_buffer: 0.375400 +vertex_buffer: 0.464700 +vertex_buffer: 4.274000 +vertex_buffer: 4.250935 +vertex_buffer: 5.889763 +vertex_buffer: 0.377100 +vertex_buffer: 0.464000 +vertex_buffer: 4.274000 +vertex_buffer: 4.219934 +vertex_buffer: 5.889513 +vertex_buffer: 0.379800 +vertex_buffer: 0.463200 +vertex_buffer: 3.731000 +vertex_buffer: 4.250870 +vertex_buffer: 5.942575 +vertex_buffer: 0.370800 +vertex_buffer: 0.414800 +vertex_buffer: 3.731000 +vertex_buffer: 4.219869 +vertex_buffer: 5.942428 +vertex_buffer: 0.373500 +vertex_buffer: 0.414000 +vertex_buffer: 3.731000 +vertex_buffer: 4.268877 +vertex_buffer: 5.936660 +vertex_buffer: 0.369100 +vertex_buffer: 0.415600 +vertex_buffer: 3.050000 +vertex_buffer: 4.239822 +vertex_buffer: 5.981790 +vertex_buffer: 0.363300 +vertex_buffer: 0.354000 +vertex_buffer: 3.051000 +vertex_buffer: 4.221815 +vertex_buffer: 5.986576 +vertex_buffer: 0.365000 +vertex_buffer: 0.353200 +vertex_buffer: 3.050000 +vertex_buffer: 4.189816 +vertex_buffer: 5.986144 +vertex_buffer: 0.367800 +vertex_buffer: 0.352100 +vertex_buffer: 2.377000 +vertex_buffer: 4.135779 +vertex_buffer: 6.017364 +vertex_buffer: 0.363900 +vertex_buffer: 0.290700 +vertex_buffer: 2.376000 +vertex_buffer: 4.167778 +vertex_buffer: 6.017976 +vertex_buffer: 0.361000 +vertex_buffer: 0.291700 +vertex_buffer: 2.376000 +vertex_buffer: 4.185784 +vertex_buffer: 6.013332 +vertex_buffer: 0.359300 +vertex_buffer: 0.292700 +vertex_buffer: 1.854000 +vertex_buffer: 4.091757 +vertex_buffer: 6.035276 +vertex_buffer: 0.359300 +vertex_buffer: 0.243600 +vertex_buffer: 1.851000 +vertex_buffer: 4.110763 +vertex_buffer: 6.029667 +vertex_buffer: 0.357100 +vertex_buffer: 0.244500 +vertex_buffer: 1.858000 +vertex_buffer: 4.060758 +vertex_buffer: 6.033613 +vertex_buffer: 0.362400 +vertex_buffer: 0.242700 +vertex_buffer: 1.464000 +vertex_buffer: 3.979738 +vertex_buffer: 6.050185 +vertex_buffer: 0.361500 +vertex_buffer: 0.205700 +vertex_buffer: 1.454000 +vertex_buffer: 4.014737 +vertex_buffer: 6.051946 +vertex_buffer: 0.357500 +vertex_buffer: 0.206300 +vertex_buffer: 1.448000 +vertex_buffer: 4.033742 +vertex_buffer: 6.046346 +vertex_buffer: 0.354900 +vertex_buffer: 0.207000 +vertex_buffer: 5.538000 +vertex_buffer: 4.167421 +vertex_buffer: 5.488696 +vertex_buffer: 0.379500 +vertex_buffer: 0.586200 +vertex_buffer: 6.013000 +vertex_buffer: 4.086517 +vertex_buffer: 5.408722 +vertex_buffer: 0.390600 +vertex_buffer: 0.629300 +vertex_buffer: 6.022000 +vertex_buffer: 4.101534 +vertex_buffer: 5.394998 +vertex_buffer: 0.389000 +vertex_buffer: 0.630700 +vertex_buffer: 6.077000 +vertex_buffer: 4.173544 +vertex_buffer: 5.387243 +vertex_buffer: 0.383200 +vertex_buffer: 0.636700 +vertex_buffer: 6.396000 +vertex_buffer: 4.014595 +vertex_buffer: 5.344789 +vertex_buffer: 0.400200 +vertex_buffer: 0.663800 +vertex_buffer: 6.412000 +vertex_buffer: 4.027614 +vertex_buffer: 5.329050 +vertex_buffer: 0.398800 +vertex_buffer: 0.666000 +vertex_buffer: 6.648000 +vertex_buffer: 3.980372 +vertex_buffer: 5.528382 +vertex_buffer: 0.425200 +vertex_buffer: 0.680600 +vertex_buffer: 6.636000 +vertex_buffer: 3.990376 +vertex_buffer: 5.524715 +vertex_buffer: 0.423500 +vertex_buffer: 0.679800 +vertex_buffer: 6.603000 +vertex_buffer: 3.981370 +vertex_buffer: 5.529604 +vertex_buffer: 0.423400 +vertex_buffer: 0.676200 +vertex_buffer: 6.609000 +vertex_buffer: 3.966365 +vertex_buffer: 5.534145 +vertex_buffer: 0.425500 +vertex_buffer: 0.676500 +vertex_buffer: 6.709000 +vertex_buffer: 4.010384 +vertex_buffer: 5.519073 +vertex_buffer: 0.424100 +vertex_buffer: 0.686700 +vertex_buffer: 6.691000 +vertex_buffer: 4.014387 +vertex_buffer: 5.516231 +vertex_buffer: 0.423000 +vertex_buffer: 0.685400 +vertex_buffer: 6.694000 +vertex_buffer: 3.950383 +vertex_buffer: 5.519313 +vertex_buffer: 0.429300 +vertex_buffer: 0.684400 +vertex_buffer: 1.149000 +vertex_buffer: 3.955715 +vertex_buffer: 6.069484 +vertex_buffer: 0.354100 +vertex_buffer: 0.177900 +vertex_buffer: 1.141000 +vertex_buffer: 3.976721 +vertex_buffer: 6.063966 +vertex_buffer: 0.351300 +vertex_buffer: 0.178400 +vertex_buffer: 1.165000 +vertex_buffer: 3.907718 +vertex_buffer: 6.067353 +vertex_buffer: 0.359400 +vertex_buffer: 0.177300 +vertex_buffer: 0.929000 +vertex_buffer: 3.915698 +vertex_buffer: 6.082634 +vertex_buffer: 0.350200 +vertex_buffer: 0.157500 +vertex_buffer: 0.948999 +vertex_buffer: 3.854702 +vertex_buffer: 6.080110 +vertex_buffer: 0.356600 +vertex_buffer: 0.156800 +vertex_buffer: 0.921000 +vertex_buffer: 3.939706 +vertex_buffer: 6.077227 +vertex_buffer: 0.347300 +vertex_buffer: 0.158000 +vertex_buffer: 0.160167 +vertex_buffer: 3.903592 +vertex_buffer: 5.833806 +vertex_buffer: 0.302700 +vertex_buffer: 0.100100 +vertex_buffer: 0.160167 +vertex_buffer: 3.920615 +vertex_buffer: 5.816254 +vertex_buffer: 0.300600 +vertex_buffer: 0.100800 +vertex_buffer: -0.000000 +vertex_buffer: 3.918019 +vertex_buffer: 5.819515 +vertex_buffer: 0.295700 +vertex_buffer: 0.087300 +vertex_buffer: -0.000000 +vertex_buffer: 3.900996 +vertex_buffer: 5.837088 +vertex_buffer: 0.297800 +vertex_buffer: 0.086600 +vertex_buffer: 0.159648 +vertex_buffer: 4.000685 +vertex_buffer: 5.818195 +vertex_buffer: 0.293800 +vertex_buffer: 0.103200 +vertex_buffer: -0.000000 +vertex_buffer: 3.996017 +vertex_buffer: 5.821312 +vertex_buffer: 0.289200 +vertex_buffer: 0.089600 +vertex_buffer: 5.119000 +vertex_buffer: 4.343422 +vertex_buffer: 5.488109 +vertex_buffer: 0.355200 +vertex_buffer: 0.552300 +vertex_buffer: 4.698000 +vertex_buffer: 4.380351 +vertex_buffer: 5.546519 +vertex_buffer: 0.347500 +vertex_buffer: 0.513800 +vertex_buffer: 4.705000 +vertex_buffer: 4.390320 +vertex_buffer: 5.571572 +vertex_buffer: 0.350000 +vertex_buffer: 0.513500 +vertex_buffer: 5.127000 +vertex_buffer: 4.354390 +vertex_buffer: 5.513198 +vertex_buffer: 0.357600 +vertex_buffer: 0.551900 +vertex_buffer: 5.569000 +vertex_buffer: 4.291474 +vertex_buffer: 5.443092 +vertex_buffer: 0.367200 +vertex_buffer: 0.592200 +vertex_buffer: 5.562000 +vertex_buffer: 4.280505 +vertex_buffer: 5.417939 +vertex_buffer: 0.364800 +vertex_buffer: 0.592800 +vertex_buffer: 6.087000 +vertex_buffer: 4.193582 +vertex_buffer: 5.356695 +vertex_buffer: 0.380200 +vertex_buffer: 0.639300 +vertex_buffer: 6.080000 +vertex_buffer: 4.181612 +vertex_buffer: 5.331465 +vertex_buffer: 0.377800 +vertex_buffer: 0.640100 +vertex_buffer: 6.505000 +vertex_buffer: 4.091699 +vertex_buffer: 5.260408 +vertex_buffer: 0.390100 +vertex_buffer: 0.678900 +vertex_buffer: 6.513000 +vertex_buffer: 4.103667 +vertex_buffer: 5.285665 +vertex_buffer: 0.392400 +vertex_buffer: 0.678000 +vertex_buffer: 6.087000 +vertex_buffer: 4.188555 +vertex_buffer: 5.378542 +vertex_buffer: 0.382000 +vertex_buffer: 0.638200 +vertex_buffer: 6.511000 +vertex_buffer: 4.099640 +vertex_buffer: 5.307516 +vertex_buffer: 0.394000 +vertex_buffer: 0.676700 +vertex_buffer: 6.729000 +vertex_buffer: 4.042746 +vertex_buffer: 5.222074 +vertex_buffer: 0.399300 +vertex_buffer: 0.703000 +vertex_buffer: 6.705000 +vertex_buffer: 4.047737 +vertex_buffer: 5.227258 +vertex_buffer: 0.397800 +vertex_buffer: 0.699300 +vertex_buffer: 6.714000 +vertex_buffer: 4.059708 +vertex_buffer: 5.251531 +vertex_buffer: 0.400200 +vertex_buffer: 0.698200 +vertex_buffer: 6.739000 +vertex_buffer: 4.054713 +vertex_buffer: 5.247342 +vertex_buffer: 0.401700 +vertex_buffer: 0.702000 +vertex_buffer: 6.783000 +vertex_buffer: 4.044723 +vertex_buffer: 5.240010 +vertex_buffer: 0.403900 +vertex_buffer: 0.707400 +vertex_buffer: 6.775000 +vertex_buffer: 4.032753 +vertex_buffer: 5.214735 +vertex_buffer: 0.401700 +vertex_buffer: 0.708600 +vertex_buffer: 6.789000 +vertex_buffer: 4.044682 +vertex_buffer: 5.273914 +vertex_buffer: 0.406500 +vertex_buffer: 0.705900 +vertex_buffer: 6.744000 +vertex_buffer: 4.053670 +vertex_buffer: 5.282214 +vertex_buffer: 0.404400 +vertex_buffer: 0.700500 +vertex_buffer: 6.717000 +vertex_buffer: 4.056669 +vertex_buffer: 5.284348 +vertex_buffer: 0.402900 +vertex_buffer: 0.696400 +vertex_buffer: 7.399000 +vertex_buffer: 3.891082 +vertex_buffer: 4.944418 +vertex_buffer: 0.439200 +vertex_buffer: 0.772300 +vertex_buffer: 7.403000 +vertex_buffer: 3.869084 +vertex_buffer: 4.942898 +vertex_buffer: 0.441500 +vertex_buffer: 0.773500 +vertex_buffer: 7.386000 +vertex_buffer: 3.856103 +vertex_buffer: 4.927482 +vertex_buffer: 0.441600 +vertex_buffer: 0.775500 +vertex_buffer: 7.381000 +vertex_buffer: 3.878100 +vertex_buffer: 4.928988 +vertex_buffer: 0.438800 +vertex_buffer: 0.774100 +vertex_buffer: 7.384000 +vertex_buffer: 3.809105 +vertex_buffer: 4.926238 +vertex_buffer: 0.446700 +vertex_buffer: 0.777300 +vertex_buffer: 7.401000 +vertex_buffer: 3.821086 +vertex_buffer: 4.941622 +vertex_buffer: 0.446300 +vertex_buffer: 0.775100 +vertex_buffer: 7.409000 +vertex_buffer: 3.868048 +vertex_buffer: 4.971678 +vertex_buffer: 0.442300 +vertex_buffer: 0.771300 +vertex_buffer: 7.404000 +vertex_buffer: 3.891046 +vertex_buffer: 4.974203 +vertex_buffer: 0.439700 +vertex_buffer: 0.770200 +vertex_buffer: 7.370000 +vertex_buffer: 3.480112 +vertex_buffer: 4.919435 +vertex_buffer: 0.479700 +vertex_buffer: 0.779300 +vertex_buffer: 7.374000 +vertex_buffer: 3.562110 +vertex_buffer: 4.921218 +vertex_buffer: 0.471200 +vertex_buffer: 0.779400 +vertex_buffer: 7.391000 +vertex_buffer: 3.567091 +vertex_buffer: 4.936405 +vertex_buffer: 0.470800 +vertex_buffer: 0.777300 +vertex_buffer: 7.387000 +vertex_buffer: 3.475092 +vertex_buffer: 4.935404 +vertex_buffer: 0.480000 +vertex_buffer: 0.777000 +vertex_buffer: 7.396000 +vertex_buffer: 3.567056 +vertex_buffer: 4.965171 +vertex_buffer: 0.471000 +vertex_buffer: 0.774500 +vertex_buffer: 7.392000 +vertex_buffer: 3.476057 +vertex_buffer: 4.964184 +vertex_buffer: 0.479900 +vertex_buffer: 0.774300 +vertex_buffer: 7.300000 +vertex_buffer: 3.307002 +vertex_buffer: 4.947629 +vertex_buffer: 0.501900 +vertex_buffer: 0.772800 +vertex_buffer: 7.219000 +vertex_buffer: 3.261037 +vertex_buffer: 4.960480 +vertex_buffer: 0.510500 +vertex_buffer: 0.770100 +vertex_buffer: 7.200000 +vertex_buffer: 3.267001 +vertex_buffer: 4.942599 +vertex_buffer: 0.511600 +vertex_buffer: 0.772300 +vertex_buffer: 7.284000 +vertex_buffer: 3.314892 +vertex_buffer: 4.929779 +vertex_buffer: 0.502600 +vertex_buffer: 0.775000 +vertex_buffer: 7.140000 +vertex_buffer: 3.216015 +vertex_buffer: 4.973517 +vertex_buffer: 0.518700 +vertex_buffer: 0.767600 +vertex_buffer: 7.119000 +vertex_buffer: 3.219073 +vertex_buffer: 4.955586 +vertex_buffer: 0.520100 +vertex_buffer: 0.769600 +vertex_buffer: 7.226000 +vertex_buffer: 3.261802 +vertex_buffer: 4.996186 +vertex_buffer: 0.510100 +vertex_buffer: 0.766600 +vertex_buffer: 7.148000 +vertex_buffer: 3.216721 +vertex_buffer: 5.011203 +vertex_buffer: 0.518300 +vertex_buffer: 0.763900 +vertex_buffer: 7.306000 +vertex_buffer: 3.306853 +vertex_buffer: 4.979352 +vertex_buffer: 0.501700 +vertex_buffer: 0.769700 +vertex_buffer: 7.040000 +vertex_buffer: 2.917183 +vertex_buffer: 5.151618 +vertex_buffer: 0.547100 +vertex_buffer: 0.733700 +vertex_buffer: 7.082000 +vertex_buffer: 3.084179 +vertex_buffer: 5.147562 +vertex_buffer: 0.532900 +vertex_buffer: 0.743800 +vertex_buffer: 7.108000 +vertex_buffer: 3.089665 +vertex_buffer: 5.185693 +vertex_buffer: 0.529600 +vertex_buffer: 0.740700 +vertex_buffer: 7.057000 +vertex_buffer: 2.917507 +vertex_buffer: 5.194512 +vertex_buffer: 0.544200 +vertex_buffer: 0.730500 +vertex_buffer: 7.100000 +vertex_buffer: 3.160937 +vertex_buffer: 5.127523 +vertex_buffer: 0.526500 +vertex_buffer: 0.750500 +vertex_buffer: 7.164000 +vertex_buffer: 3.198917 +vertex_buffer: 5.165739 +vertex_buffer: 0.518500 +vertex_buffer: 0.748100 +vertex_buffer: 6.500000 +vertex_buffer: 1.098762 +vertex_buffer: 5.245932 +vertex_buffer: 0.679500 +vertex_buffer: 0.612400 +vertex_buffer: 6.488000 +vertex_buffer: 1.105705 +vertex_buffer: 5.200318 +vertex_buffer: 0.682600 +vertex_buffer: 0.614900 +vertex_buffer: 6.696000 +vertex_buffer: 1.657242 +vertex_buffer: 5.181634 +vertex_buffer: 0.644600 +vertex_buffer: 0.655700 +vertex_buffer: 6.709000 +vertex_buffer: 1.651988 +vertex_buffer: 5.227341 +vertex_buffer: 0.641700 +vertex_buffer: 0.653000 +vertex_buffer: 6.861000 +vertex_buffer: 2.196412 +vertex_buffer: 5.166074 +vertex_buffer: 0.604700 +vertex_buffer: 0.691300 +vertex_buffer: 6.874000 +vertex_buffer: 2.192830 +vertex_buffer: 5.211826 +vertex_buffer: 0.601900 +vertex_buffer: 0.688300 +vertex_buffer: 5.962000 +vertex_buffer: 0.282768 +vertex_buffer: 5.242886 +vertex_buffer: 0.734700 +vertex_buffer: 0.537600 +vertex_buffer: 6.248000 +vertex_buffer: 0.649427 +vertex_buffer: 5.219999 +vertex_buffer: 0.712100 +vertex_buffer: 0.575800 +vertex_buffer: 6.259000 +vertex_buffer: 0.640923 +vertex_buffer: 5.265498 +vertex_buffer: 0.708900 +vertex_buffer: 0.573700 +vertex_buffer: 5.972000 +vertex_buffer: 0.272725 +vertex_buffer: 5.289225 +vertex_buffer: 0.731300 +vertex_buffer: 0.535800 +vertex_buffer: 5.172000 +vertex_buffer: -0.212297 +vertex_buffer: 5.313697 +vertex_buffer: 0.764100 +vertex_buffer: 0.453200 +vertex_buffer: 5.616000 +vertex_buffer: -0.001235 +vertex_buffer: 5.273785 +vertex_buffer: 0.751500 +vertex_buffer: 0.498200 +vertex_buffer: 5.626000 +vertex_buffer: -0.011549 +vertex_buffer: 5.319041 +vertex_buffer: 0.747900 +vertex_buffer: 0.497000 +vertex_buffer: 5.180000 +vertex_buffer: -0.223953 +vertex_buffer: 5.359756 +vertex_buffer: 0.760300 +vertex_buffer: 0.452300 +vertex_buffer: 3.996000 +vertex_buffer: -0.458781 +vertex_buffer: 5.471938 +vertex_buffer: 0.771900 +vertex_buffer: 0.340400 +vertex_buffer: 3.991000 +vertex_buffer: -0.445829 +vertex_buffer: 5.426052 +vertex_buffer: 0.775800 +vertex_buffer: 0.340300 +vertex_buffer: 4.590000 +vertex_buffer: -0.361592 +vertex_buffer: 5.367642 +vertex_buffer: 0.772900 +vertex_buffer: 0.397200 +vertex_buffer: 4.597000 +vertex_buffer: -0.374536 +vertex_buffer: 5.414536 +vertex_buffer: 0.768800 +vertex_buffer: 0.396900 +vertex_buffer: 3.067000 +vertex_buffer: -0.415012 +vertex_buffer: 5.512823 +vertex_buffer: 0.766000 +vertex_buffer: 0.252200 +vertex_buffer: 3.496000 +vertex_buffer: -0.457892 +vertex_buffer: 5.473036 +vertex_buffer: 0.773200 +vertex_buffer: 0.293100 +vertex_buffer: 3.500000 +vertex_buffer: -0.470867 +vertex_buffer: 5.518908 +vertex_buffer: 0.769400 +vertex_buffer: 0.293800 +vertex_buffer: 3.068000 +vertex_buffer: -0.427044 +vertex_buffer: 5.559814 +vertex_buffer: 0.762300 +vertex_buffer: 0.253200 +vertex_buffer: 2.293000 +vertex_buffer: -0.193007 +vertex_buffer: 5.589015 +vertex_buffer: 0.737400 +vertex_buffer: 0.179300 +vertex_buffer: 2.662000 +vertex_buffer: -0.328805 +vertex_buffer: 5.552051 +vertex_buffer: 0.754000 +vertex_buffer: 0.213900 +vertex_buffer: 2.663000 +vertex_buffer: -0.340722 +vertex_buffer: 5.599068 +vertex_buffer: 0.750600 +vertex_buffer: 0.215500 +vertex_buffer: 2.293000 +vertex_buffer: -0.203762 +vertex_buffer: 5.636180 +vertex_buffer: 0.734400 +vertex_buffer: 0.181300 +vertex_buffer: 1.685000 +vertex_buffer: 0.275446 +vertex_buffer: 5.633972 +vertex_buffer: 0.690100 +vertex_buffer: 0.120500 +vertex_buffer: 1.968000 +vertex_buffer: 0.003313 +vertex_buffer: 5.624982 +vertex_buffer: 0.716200 +vertex_buffer: 0.148600 +vertex_buffer: 1.966000 +vertex_buffer: -0.007189 +vertex_buffer: 5.672222 +vertex_buffer: 0.713500 +vertex_buffer: 0.151100 +vertex_buffer: 1.683000 +vertex_buffer: 0.265122 +vertex_buffer: 5.683293 +vertex_buffer: 0.687700 +vertex_buffer: 0.123700 +vertex_buffer: 1.445000 +vertex_buffer: 0.637469 +vertex_buffer: 5.591790 +vertex_buffer: 0.658000 +vertex_buffer: 0.093300 +vertex_buffer: 1.442000 +vertex_buffer: 0.628247 +vertex_buffer: 5.646198 +vertex_buffer: 0.655700 +vertex_buffer: 0.097100 +vertex_buffer: 1.230000 +vertex_buffer: 1.052009 +vertex_buffer: 5.594151 +vertex_buffer: 0.617900 +vertex_buffer: 0.073000 +vertex_buffer: 1.233000 +vertex_buffer: 1.062901 +vertex_buffer: 5.534851 +vertex_buffer: 0.619700 +vertex_buffer: 0.068500 +vertex_buffer: 1.037000 +vertex_buffer: 1.530892 +vertex_buffer: 5.500604 +vertex_buffer: 0.576100 +vertex_buffer: 0.048400 +vertex_buffer: 1.036000 +vertex_buffer: 1.512598 +vertex_buffer: 5.563668 +vertex_buffer: 0.575200 +vertex_buffer: 0.053800 +vertex_buffer: 0.886000 +vertex_buffer: 1.907435 +vertex_buffer: 5.549905 +vertex_buffer: 0.537400 +vertex_buffer: 0.041500 +vertex_buffer: 0.886000 +vertex_buffer: 1.931060 +vertex_buffer: 5.484957 +vertex_buffer: 0.537500 +vertex_buffer: 0.035700 +vertex_buffer: 0.588999 +vertex_buffer: 2.757072 +vertex_buffer: 5.759195 +vertex_buffer: 0.449400 +vertex_buffer: 0.045700 +vertex_buffer: 0.595000 +vertex_buffer: 2.760144 +vertex_buffer: 5.703512 +vertex_buffer: 0.451200 +vertex_buffer: 0.040500 +vertex_buffer: 0.680000 +vertex_buffer: 2.541166 +vertex_buffer: 5.606604 +vertex_buffer: 0.474100 +vertex_buffer: 0.035000 +vertex_buffer: 0.672999 +vertex_buffer: 2.535648 +vertex_buffer: 5.667060 +vertex_buffer: 0.472600 +vertex_buffer: 0.040600 +vertex_buffer: 0.756000 +vertex_buffer: 2.322095 +vertex_buffer: 5.516086 +vertex_buffer: 0.497400 +vertex_buffer: 0.030800 +vertex_buffer: 0.750999 +vertex_buffer: 2.311127 +vertex_buffer: 5.580282 +vertex_buffer: 0.496400 +vertex_buffer: 0.036400 +vertex_buffer: 0.299000 +vertex_buffer: 3.077085 +vertex_buffer: 5.811524 +vertex_buffer: 0.408900 +vertex_buffer: 0.040000 +vertex_buffer: 0.173999 +vertex_buffer: 3.093057 +vertex_buffer: 5.814032 +vertex_buffer: 0.398700 +vertex_buffer: 0.035400 +vertex_buffer: 0.175000 +vertex_buffer: 3.099635 +vertex_buffer: 5.756340 +vertex_buffer: 0.400300 +vertex_buffer: 0.030400 +vertex_buffer: 0.301000 +vertex_buffer: 3.082687 +vertex_buffer: 5.753816 +vertex_buffer: 0.410600 +vertex_buffer: 0.034900 +vertex_buffer: 0.427000 +vertex_buffer: 3.032812 +vertex_buffer: 5.750162 +vertex_buffer: 0.421900 +vertex_buffer: 0.038700 +vertex_buffer: 0.423000 +vertex_buffer: 3.027142 +vertex_buffer: 5.806880 +vertex_buffer: 0.420200 +vertex_buffer: 0.043900 +vertex_buffer: -0.000000 +vertex_buffer: 4.017064 +vertex_buffer: 5.782928 +vertex_buffer: 0.285000 +vertex_buffer: 0.090900 +vertex_buffer: 0.159131 +vertex_buffer: 4.022250 +vertex_buffer: 5.780377 +vertex_buffer: 0.289600 +vertex_buffer: 0.104400 +vertex_buffer: 0.159648 +vertex_buffer: 4.010368 +vertex_buffer: 5.744772 +vertex_buffer: 0.286400 +vertex_buffer: 0.105400 +vertex_buffer: -0.000000 +vertex_buffer: 4.003109 +vertex_buffer: 5.745740 +vertex_buffer: 0.281600 +vertex_buffer: 0.091900 +vertex_buffer: 0.159131 +vertex_buffer: 4.016697 +vertex_buffer: 5.809144 +vertex_buffer: 0.292200 +vertex_buffer: 0.103600 +vertex_buffer: -0.000000 +vertex_buffer: 4.012029 +vertex_buffer: 5.811717 +vertex_buffer: 0.287600 +vertex_buffer: 0.090100 +vertex_buffer: 1.403000 +vertex_buffer: 4.176071 +vertex_buffer: 5.776840 +vertex_buffer: 0.318200 +vertex_buffer: 0.213700 +vertex_buffer: 1.818000 +vertex_buffer: 4.251075 +vertex_buffer: 5.773822 +vertex_buffer: 0.322500 +vertex_buffer: 0.251600 +vertex_buffer: 1.819000 +vertex_buffer: 4.239105 +vertex_buffer: 5.747630 +vertex_buffer: 0.319900 +vertex_buffer: 0.252000 +vertex_buffer: 1.404000 +vertex_buffer: 4.164105 +vertex_buffer: 5.748632 +vertex_buffer: 0.315500 +vertex_buffer: 0.214200 +vertex_buffer: 2.357000 +vertex_buffer: 4.326095 +vertex_buffer: 5.757109 +vertex_buffer: 0.326000 +vertex_buffer: 0.300700 +vertex_buffer: 2.358000 +vertex_buffer: 4.314126 +vertex_buffer: 5.730964 +vertex_buffer: 0.323500 +vertex_buffer: 0.301200 +vertex_buffer: 3.033000 +vertex_buffer: 4.380135 +vertex_buffer: 5.724594 +vertex_buffer: 0.330600 +vertex_buffer: 0.361900 +vertex_buffer: 3.034000 +vertex_buffer: 4.368166 +vertex_buffer: 5.698512 +vertex_buffer: 0.328100 +vertex_buffer: 0.362500 +vertex_buffer: 3.710000 +vertex_buffer: 4.409187 +vertex_buffer: 5.680248 +vertex_buffer: 0.336800 +vertex_buffer: 0.423200 +vertex_buffer: 3.709000 +vertex_buffer: 4.398221 +vertex_buffer: 5.654215 +vertex_buffer: 0.334300 +vertex_buffer: 0.423700 +vertex_buffer: 4.246000 +vertex_buffer: 4.400284 +vertex_buffer: 5.601825 +vertex_buffer: 0.340600 +vertex_buffer: 0.472600 +vertex_buffer: 4.250000 +vertex_buffer: 4.411252 +vertex_buffer: 5.627885 +vertex_buffer: 0.343200 +vertex_buffer: 0.472100 +vertex_buffer: 5.112000 +vertex_buffer: 3.972107 +vertex_buffer: 5.746829 +vertex_buffer: 0.410600 +vertex_buffer: 0.537000 +vertex_buffer: 5.079000 +vertex_buffer: 3.972429 +vertex_buffer: 5.482845 +vertex_buffer: 0.433800 +vertex_buffer: 0.531900 +vertex_buffer: 5.429000 +vertex_buffer: 3.924494 +vertex_buffer: 5.428460 +vertex_buffer: 0.440600 +vertex_buffer: 0.562900 +vertex_buffer: 5.465000 +vertex_buffer: 3.924174 +vertex_buffer: 5.692366 +vertex_buffer: 0.417700 +vertex_buffer: 0.569100 +vertex_buffer: 4.684000 +vertex_buffer: 4.010359 +vertex_buffer: 5.539529 +vertex_buffer: 0.427100 +vertex_buffer: 0.496500 +vertex_buffer: 4.715000 +vertex_buffer: 4.010037 +vertex_buffer: 5.804559 +vertex_buffer: 0.403600 +vertex_buffer: 0.500800 +vertex_buffer: 4.267000 +vertex_buffer: 4.031969 +vertex_buffer: 5.860978 +vertex_buffer: 0.397200 +vertex_buffer: 0.460000 +vertex_buffer: 4.239000 +vertex_buffer: 4.032291 +vertex_buffer: 5.595924 +vertex_buffer: 0.420800 +vertex_buffer: 0.456400 +vertex_buffer: 3.725000 +vertex_buffer: 4.032904 +vertex_buffer: 5.914433 +vertex_buffer: 0.390900 +vertex_buffer: 0.410500 +vertex_buffer: 3.700000 +vertex_buffer: 4.033226 +vertex_buffer: 5.649375 +vertex_buffer: 0.414600 +vertex_buffer: 0.407700 +vertex_buffer: 3.045000 +vertex_buffer: 4.003853 +vertex_buffer: 5.956707 +vertex_buffer: 0.385100 +vertex_buffer: 0.348500 +vertex_buffer: 3.025000 +vertex_buffer: 4.004175 +vertex_buffer: 5.691690 +vertex_buffer: 0.408800 +vertex_buffer: 0.346600 +vertex_buffer: 2.365000 +vertex_buffer: 3.950138 +vertex_buffer: 5.721011 +vertex_buffer: 0.405000 +vertex_buffer: 0.286800 +vertex_buffer: 2.381000 +vertex_buffer: 3.949815 +vertex_buffer: 5.986923 +vertex_buffer: 0.381200 +vertex_buffer: 0.287500 +vertex_buffer: 1.873000 +vertex_buffer: 3.874120 +vertex_buffer: 5.735144 +vertex_buffer: 0.404700 +vertex_buffer: 0.242300 +vertex_buffer: 1.885000 +vertex_buffer: 3.873796 +vertex_buffer: 6.001936 +vertex_buffer: 0.380900 +vertex_buffer: 0.240900 +vertex_buffer: 1.518000 +vertex_buffer: 3.764122 +vertex_buffer: 5.735279 +vertex_buffer: 0.408400 +vertex_buffer: 0.210300 +vertex_buffer: 1.528000 +vertex_buffer: 3.763783 +vertex_buffer: 6.013980 +vertex_buffer: 0.383900 +vertex_buffer: 0.205500 +vertex_buffer: 1.272000 +vertex_buffer: 3.607124 +vertex_buffer: 5.732809 +vertex_buffer: 0.414800 +vertex_buffer: 0.186800 +vertex_buffer: 1.280000 +vertex_buffer: 3.606770 +vertex_buffer: 6.023445 +vertex_buffer: 0.390500 +vertex_buffer: 0.177600 +vertex_buffer: 1.115000 +vertex_buffer: 3.426127 +vertex_buffer: 5.730206 +vertex_buffer: 0.422700 +vertex_buffer: 0.169700 +vertex_buffer: 1.122000 +vertex_buffer: 3.425767 +vertex_buffer: 6.026797 +vertex_buffer: 0.400200 +vertex_buffer: 0.155900 +vertex_buffer: 1.039000 +vertex_buffer: 3.238753 +vertex_buffer: 6.025306 +vertex_buffer: 0.412100 +vertex_buffer: 0.139500 +vertex_buffer: 1.032000 +vertex_buffer: 3.240570 +vertex_buffer: 5.729738 +vertex_buffer: 0.431400 +vertex_buffer: 0.157400 +vertex_buffer: 1.010000 +vertex_buffer: 3.046713 +vertex_buffer: 6.021124 +vertex_buffer: 0.426100 +vertex_buffer: 0.126900 +vertex_buffer: 1.003000 +vertex_buffer: 3.050018 +vertex_buffer: 5.729583 +vertex_buffer: 0.441400 +vertex_buffer: 0.147900 +vertex_buffer: 1.018000 +vertex_buffer: 2.850726 +vertex_buffer: 6.013214 +vertex_buffer: 0.442200 +vertex_buffer: 0.117900 +vertex_buffer: 1.012000 +vertex_buffer: 2.855426 +vertex_buffer: 5.730688 +vertex_buffer: 0.453200 +vertex_buffer: 0.140500 +vertex_buffer: 1.045000 +vertex_buffer: 2.650755 +vertex_buffer: 6.005554 +vertex_buffer: 0.459700 +vertex_buffer: 0.111800 +vertex_buffer: 1.038000 +vertex_buffer: 2.656807 +vertex_buffer: 5.731023 +vertex_buffer: 0.466800 +vertex_buffer: 0.135100 +vertex_buffer: 1.171000 +vertex_buffer: 1.989006 +vertex_buffer: 5.722197 +vertex_buffer: 0.518200 +vertex_buffer: 0.130800 +vertex_buffer: 1.105000 +vertex_buffer: 2.240546 +vertex_buffer: 5.727662 +vertex_buffer: 0.497800 +vertex_buffer: 0.130100 +vertex_buffer: 1.113000 +vertex_buffer: 2.231652 +vertex_buffer: 5.994177 +vertex_buffer: 0.497000 +vertex_buffer: 0.106300 +vertex_buffer: 1.181000 +vertex_buffer: 1.978282 +vertex_buffer: 5.988693 +vertex_buffer: 0.520100 +vertex_buffer: 0.107100 +vertex_buffer: 1.271000 +vertex_buffer: 1.692739 +vertex_buffer: 5.980989 +vertex_buffer: 0.546100 +vertex_buffer: 0.110600 +vertex_buffer: 1.260000 +vertex_buffer: 1.705466 +vertex_buffer: 5.715535 +vertex_buffer: 0.542000 +vertex_buffer: 0.133800 +vertex_buffer: 1.695000 +vertex_buffer: 0.704779 +vertex_buffer: 5.935099 +vertex_buffer: 0.636000 +vertex_buffer: 0.139800 +vertex_buffer: 1.683000 +vertex_buffer: 0.724615 +vertex_buffer: 5.669944 +vertex_buffer: 0.624600 +vertex_buffer: 0.160400 +vertex_buffer: 1.503000 +vertex_buffer: 1.055693 +vertex_buffer: 5.689961 +vertex_buffer: 0.596800 +vertex_buffer: 0.148200 +vertex_buffer: 1.519000 +vertex_buffer: 1.038253 +vertex_buffer: 5.955282 +vertex_buffer: 0.605500 +vertex_buffer: 0.126300 +vertex_buffer: 1.894000 +vertex_buffer: 0.425968 +vertex_buffer: 5.644423 +vertex_buffer: 0.648800 +vertex_buffer: 0.175900 +vertex_buffer: 1.907000 +vertex_buffer: 0.403973 +vertex_buffer: 5.909450 +vertex_buffer: 0.663600 +vertex_buffer: 0.157600 +vertex_buffer: 2.156000 +vertex_buffer: 0.166070 +vertex_buffer: 5.880907 +vertex_buffer: 0.685700 +vertex_buffer: 0.179200 +vertex_buffer: 2.142000 +vertex_buffer: 0.189787 +vertex_buffer: 5.615995 +vertex_buffer: 0.667600 +vertex_buffer: 0.194200 +vertex_buffer: 2.430000 +vertex_buffer: 0.020092 +vertex_buffer: 5.585466 +vertex_buffer: 0.681500 +vertex_buffer: 0.215700 +vertex_buffer: 2.447000 +vertex_buffer: -0.004859 +vertex_buffer: 5.850289 +vertex_buffer: 0.702400 +vertex_buffer: 0.204700 +vertex_buffer: 2.784000 +vertex_buffer: -0.106871 +vertex_buffer: 5.818572 +vertex_buffer: 0.714000 +vertex_buffer: 0.234300 +vertex_buffer: 2.766000 +vertex_buffer: -0.081173 +vertex_buffer: 5.553818 +vertex_buffer: 0.691500 +vertex_buffer: 0.241600 +vertex_buffer: 3.136000 +vertex_buffer: -0.136021 +vertex_buffer: 5.520313 +vertex_buffer: 0.698100 +vertex_buffer: 0.271600 +vertex_buffer: 3.157000 +vertex_buffer: -0.162147 +vertex_buffer: 5.785029 +vertex_buffer: 0.721300 +vertex_buffer: 0.267400 +vertex_buffer: 3.555000 +vertex_buffer: -0.192763 +vertex_buffer: 5.747826 +vertex_buffer: 0.725400 +vertex_buffer: 0.303100 +vertex_buffer: 3.531000 +vertex_buffer: -0.166494 +vertex_buffer: 5.484131 +vertex_buffer: 0.701800 +vertex_buffer: 0.304700 +vertex_buffer: 3.976000 +vertex_buffer: -0.148364 +vertex_buffer: 5.442722 +vertex_buffer: 0.702100 +vertex_buffer: 0.342800 +vertex_buffer: 4.003000 +vertex_buffer: -0.174541 +vertex_buffer: 5.706427 +vertex_buffer: 0.725800 +vertex_buffer: 0.343700 +vertex_buffer: 4.527000 +vertex_buffer: -0.084248 +vertex_buffer: 5.658007 +vertex_buffer: 0.721200 +vertex_buffer: 0.391700 +vertex_buffer: 4.497000 +vertex_buffer: -0.058778 +vertex_buffer: 5.395236 +vertex_buffer: 0.697700 +vertex_buffer: 0.388400 +vertex_buffer: 4.998000 +vertex_buffer: 0.089161 +vertex_buffer: 5.349538 +vertex_buffer: 0.689300 +vertex_buffer: 0.433000 +vertex_buffer: 5.031000 +vertex_buffer: 0.064621 +vertex_buffer: 5.613392 +vertex_buffer: 0.712400 +vertex_buffer: 0.438700 +vertex_buffer: 5.421000 +vertex_buffer: 0.257431 +vertex_buffer: 5.576402 +vertex_buffer: 0.701000 +vertex_buffer: 0.476900 +vertex_buffer: 5.385000 +vertex_buffer: 0.281523 +vertex_buffer: 5.313533 +vertex_buffer: 0.678700 +vertex_buffer: 0.468700 +vertex_buffer: 5.721000 +vertex_buffer: 0.496939 +vertex_buffer: 5.548265 +vertex_buffer: 0.687200 +vertex_buffer: 0.509400 +vertex_buffer: 5.683000 +vertex_buffer: 0.518260 +vertex_buffer: 5.286230 +vertex_buffer: 0.666000 +vertex_buffer: 0.498600 +vertex_buffer: 5.918000 +vertex_buffer: 0.804496 +vertex_buffer: 5.264621 +vertex_buffer: 0.650300 +vertex_buffer: 0.525800 +vertex_buffer: 5.957000 +vertex_buffer: 0.784151 +vertex_buffer: 5.527718 +vertex_buffer: 0.670200 +vertex_buffer: 0.538900 +vertex_buffer: 6.161000 +vertex_buffer: 1.167104 +vertex_buffer: 5.510539 +vertex_buffer: 0.646800 +vertex_buffer: 0.570600 +vertex_buffer: 6.120000 +vertex_buffer: 1.183657 +vertex_buffer: 5.248272 +vertex_buffer: 0.628500 +vertex_buffer: 0.555500 +vertex_buffer: 6.320000 +vertex_buffer: 1.704134 +vertex_buffer: 5.230291 +vertex_buffer: 0.596500 +vertex_buffer: 0.591700 +vertex_buffer: 6.362000 +vertex_buffer: 1.690342 +vertex_buffer: 5.492670 +vertex_buffer: 0.613200 +vertex_buffer: 0.608400 +vertex_buffer: 6.474000 +vertex_buffer: 2.198605 +vertex_buffer: 5.215522 +vertex_buffer: 0.564500 +vertex_buffer: 0.621700 +vertex_buffer: 6.517000 +vertex_buffer: 2.189372 +vertex_buffer: 5.478011 +vertex_buffer: 0.578900 +vertex_buffer: 0.640500 +vertex_buffer: 6.539000 +vertex_buffer: 2.504945 +vertex_buffer: 5.211481 +vertex_buffer: 0.544500 +vertex_buffer: 0.635600 +vertex_buffer: 6.582000 +vertex_buffer: 2.497934 +vertex_buffer: 5.474017 +vertex_buffer: 0.555500 +vertex_buffer: 0.656500 +vertex_buffer: 6.553000 +vertex_buffer: 2.725349 +vertex_buffer: 5.213535 +vertex_buffer: 0.530300 +vertex_buffer: 0.641900 +vertex_buffer: 6.596000 +vertex_buffer: 2.719937 +vertex_buffer: 5.476101 +vertex_buffer: 0.537300 +vertex_buffer: 0.664300 +vertex_buffer: 6.513000 +vertex_buffer: 3.409522 +vertex_buffer: 5.507394 +vertex_buffer: 0.474900 +vertex_buffer: 0.663500 +vertex_buffer: 6.470000 +vertex_buffer: 3.409966 +vertex_buffer: 5.244696 +vertex_buffer: 0.483800 +vertex_buffer: 0.641800 +vertex_buffer: 6.533000 +vertex_buffer: 3.199424 +vertex_buffer: 5.228640 +vertex_buffer: 0.497800 +vertex_buffer: 0.645600 +vertex_buffer: 6.576000 +vertex_buffer: 3.198442 +vertex_buffer: 5.491320 +vertex_buffer: 0.494500 +vertex_buffer: 0.668800 +vertex_buffer: 6.364000 +vertex_buffer: 3.585690 +vertex_buffer: 5.266664 +vertex_buffer: 0.472500 +vertex_buffer: 0.635000 +vertex_buffer: 6.406000 +vertex_buffer: 3.585370 +vertex_buffer: 5.529394 +vertex_buffer: 0.458400 +vertex_buffer: 0.653700 +vertex_buffer: 6.252000 +vertex_buffer: 3.712336 +vertex_buffer: 5.558482 +vertex_buffer: 0.445200 +vertex_buffer: 0.640100 +vertex_buffer: 6.211000 +vertex_buffer: 3.712655 +vertex_buffer: 5.295723 +vertex_buffer: 0.463500 +vertex_buffer: 0.625200 +vertex_buffer: 6.045000 +vertex_buffer: 3.803292 +vertex_buffer: 5.595116 +vertex_buffer: 0.434500 +vertex_buffer: 0.621600 +vertex_buffer: 6.005000 +vertex_buffer: 3.802610 +vertex_buffer: 5.332299 +vertex_buffer: 0.455400 +vertex_buffer: 0.610600 +vertex_buffer: 6.037000 +vertex_buffer: 4.056250 +vertex_buffer: 5.629091 +vertex_buffer: 0.411100 +vertex_buffer: 0.623400 +vertex_buffer: 6.039000 +vertex_buffer: 4.074257 +vertex_buffer: 5.623531 +vertex_buffer: 0.409400 +vertex_buffer: 0.623900 +vertex_buffer: 6.423000 +vertex_buffer: 3.986328 +vertex_buffer: 5.564086 +vertex_buffer: 0.421000 +vertex_buffer: 0.658400 +vertex_buffer: 6.423000 +vertex_buffer: 4.004336 +vertex_buffer: 5.558594 +vertex_buffer: 0.419200 +vertex_buffer: 0.658700 +vertex_buffer: 0.161204 +vertex_buffer: 3.872203 +vertex_buffer: 6.124216 +vertex_buffer: 0.328200 +vertex_buffer: 0.091200 +vertex_buffer: -0.000000 +vertex_buffer: 3.870641 +vertex_buffer: 6.129645 +vertex_buffer: 0.322400 +vertex_buffer: 0.078000 +vertex_buffer: -0.000000 +vertex_buffer: 3.889649 +vertex_buffer: 6.124037 +vertex_buffer: 0.321300 +vertex_buffer: 0.078500 +vertex_buffer: 0.161204 +vertex_buffer: 3.891212 +vertex_buffer: 6.117588 +vertex_buffer: 0.326700 +vertex_buffer: 0.091900 +vertex_buffer: 5.123000 +vertex_buffer: 4.039073 +vertex_buffer: 5.774945 +vertex_buffer: 0.404100 +vertex_buffer: 0.538900 +vertex_buffer: 4.721000 +vertex_buffer: 4.077003 +vertex_buffer: 5.831477 +vertex_buffer: 0.397000 +vertex_buffer: 0.502300 +vertex_buffer: 4.271000 +vertex_buffer: 4.098935 +vertex_buffer: 5.888552 +vertex_buffer: 0.390400 +vertex_buffer: 0.461300 +vertex_buffer: 3.729000 +vertex_buffer: 4.096870 +vertex_buffer: 5.941803 +vertex_buffer: 0.384400 +vertex_buffer: 0.412000 +vertex_buffer: 3.048000 +vertex_buffer: 4.063818 +vertex_buffer: 5.984507 +vertex_buffer: 0.378900 +vertex_buffer: 0.349800 +vertex_buffer: 2.381000 +vertex_buffer: 4.006780 +vertex_buffer: 6.014984 +vertex_buffer: 0.375400 +vertex_buffer: 0.288600 +vertex_buffer: 1.878000 +vertex_buffer: 3.931761 +vertex_buffer: 6.031074 +vertex_buffer: 0.374400 +vertex_buffer: 0.241400 +vertex_buffer: 1.511000 +vertex_buffer: 3.825745 +vertex_buffer: 6.044150 +vertex_buffer: 0.376500 +vertex_buffer: 0.205400 +vertex_buffer: 1.255000 +vertex_buffer: 3.678731 +vertex_buffer: 6.055741 +vertex_buffer: 0.382200 +vertex_buffer: 0.177200 +vertex_buffer: 1.089000 +vertex_buffer: 3.495725 +vertex_buffer: 6.060867 +vertex_buffer: 0.392000 +vertex_buffer: 0.154300 +vertex_buffer: 7.384000 +vertex_buffer: 3.421252 +vertex_buffer: 4.934308 +vertex_buffer: 0.485600 +vertex_buffer: 0.776500 +vertex_buffer: 7.368000 +vertex_buffer: 3.429113 +vertex_buffer: 4.918401 +vertex_buffer: 0.485300 +vertex_buffer: 0.778700 +vertex_buffer: 7.390000 +vertex_buffer: 3.421208 +vertex_buffer: 4.963075 +vertex_buffer: 0.485400 +vertex_buffer: 0.773800 +vertex_buffer: 6.682000 +vertex_buffer: 4.016409 +vertex_buffer: 5.498264 +vertex_buffer: 0.421100 +vertex_buffer: 0.685200 +vertex_buffer: 6.731000 +vertex_buffer: 4.042418 +vertex_buffer: 5.490926 +vertex_buffer: 0.421100 +vertex_buffer: 0.690200 +vertex_buffer: 6.705000 +vertex_buffer: 4.043604 +vertex_buffer: 5.335893 +vertex_buffer: 0.407500 +vertex_buffer: 0.692800 +vertex_buffer: 6.756000 +vertex_buffer: 4.052422 +vertex_buffer: 5.487188 +vertex_buffer: 0.421100 +vertex_buffer: 0.692600 +vertex_buffer: 6.730000 +vertex_buffer: 4.053610 +vertex_buffer: 5.332153 +vertex_buffer: 0.407600 +vertex_buffer: 0.696200 +vertex_buffer: 7.245000 +vertex_buffer: 3.945572 +vertex_buffer: 5.364015 +vertex_buffer: 0.439000 +vertex_buffer: 0.733300 +vertex_buffer: 7.324000 +vertex_buffer: 3.925648 +vertex_buffer: 5.302373 +vertex_buffer: 0.441600 +vertex_buffer: 0.741500 +vertex_buffer: 7.163000 +vertex_buffer: 3.956799 +vertex_buffer: 5.178050 +vertex_buffer: 0.423200 +vertex_buffer: 0.741400 +vertex_buffer: 7.332000 +vertex_buffer: 3.556638 +vertex_buffer: 5.309948 +vertex_buffer: 0.473200 +vertex_buffer: 0.741700 +vertex_buffer: 7.382000 +vertex_buffer: 3.563775 +vertex_buffer: 5.197168 +vertex_buffer: 0.472400 +vertex_buffer: 0.753000 +vertex_buffer: 7.388000 +vertex_buffer: 3.689770 +vertex_buffer: 5.200229 +vertex_buffer: 0.461200 +vertex_buffer: 0.753100 +vertex_buffer: 7.338000 +vertex_buffer: 3.693634 +vertex_buffer: 5.313308 +vertex_buffer: 0.461200 +vertex_buffer: 0.742000 +vertex_buffer: 7.394000 +vertex_buffer: 3.828768 +vertex_buffer: 5.202885 +vertex_buffer: 0.448900 +vertex_buffer: 0.752700 +vertex_buffer: 7.344000 +vertex_buffer: 3.841630 +vertex_buffer: 5.316260 +vertex_buffer: 0.448600 +vertex_buffer: 0.742100 +vertex_buffer: 7.404000 +vertex_buffer: 3.567912 +vertex_buffer: 5.083268 +vertex_buffer: 0.471600 +vertex_buffer: 0.763600 +vertex_buffer: 7.409000 +vertex_buffer: 3.688910 +vertex_buffer: 5.086159 +vertex_buffer: 0.460500 +vertex_buffer: 0.763400 +vertex_buffer: 7.378000 +vertex_buffer: 3.465778 +vertex_buffer: 5.194996 +vertex_buffer: 0.481200 +vertex_buffer: 0.752700 +vertex_buffer: 7.328000 +vertex_buffer: 3.449639 +vertex_buffer: 5.308569 +vertex_buffer: 0.482800 +vertex_buffer: 0.741300 +vertex_buffer: 7.400000 +vertex_buffer: 3.473913 +vertex_buffer: 5.082194 +vertex_buffer: 0.480200 +vertex_buffer: 0.763300 +vertex_buffer: 7.015000 +vertex_buffer: 2.609164 +vertex_buffer: 5.423767 +vertex_buffer: 0.557400 +vertex_buffer: 0.697000 +vertex_buffer: 6.905000 +vertex_buffer: 2.185023 +vertex_buffer: 5.432654 +vertex_buffer: 0.590000 +vertex_buffer: 0.673600 +vertex_buffer: 6.908000 +vertex_buffer: 2.184744 +vertex_buffer: 5.412607 +vertex_buffer: 0.590700 +vertex_buffer: 0.674900 +vertex_buffer: 7.020000 +vertex_buffer: 2.610649 +vertex_buffer: 5.402780 +vertex_buffer: 0.558100 +vertex_buffer: 0.698700 +vertex_buffer: 7.088000 +vertex_buffer: 2.910428 +vertex_buffer: 5.398292 +vertex_buffer: 0.533900 +vertex_buffer: 0.713500 +vertex_buffer: 7.084000 +vertex_buffer: 2.909114 +vertex_buffer: 5.419270 +vertex_buffer: 0.532900 +vertex_buffer: 0.711400 +vertex_buffer: 7.014000 +vertex_buffer: 2.612348 +vertex_buffer: 5.372723 +vertex_buffer: 0.559400 +vertex_buffer: 0.701000 +vertex_buffer: 7.083000 +vertex_buffer: 2.911894 +vertex_buffer: 5.367240 +vertex_buffer: 0.535500 +vertex_buffer: 0.716300 +vertex_buffer: 6.903000 +vertex_buffer: 2.185808 +vertex_buffer: 5.382556 +vertex_buffer: 0.592200 +vertex_buffer: 0.676700 +vertex_buffer: 6.739000 +vertex_buffer: 1.640851 +vertex_buffer: 5.449055 +vertex_buffer: 0.628600 +vertex_buffer: 0.639300 +vertex_buffer: 6.529000 +vertex_buffer: 1.085318 +vertex_buffer: 5.466516 +vertex_buffer: 0.665200 +vertex_buffer: 0.600100 +vertex_buffer: 6.533000 +vertex_buffer: 1.084648 +vertex_buffer: 5.446417 +vertex_buffer: 0.666100 +vertex_buffer: 0.601300 +vertex_buffer: 6.742000 +vertex_buffer: 1.640917 +vertex_buffer: 5.427999 +vertex_buffer: 0.629500 +vertex_buffer: 0.640600 +vertex_buffer: 6.737000 +vertex_buffer: 1.642377 +vertex_buffer: 5.398982 +vertex_buffer: 0.631000 +vertex_buffer: 0.642200 +vertex_buffer: 6.528000 +vertex_buffer: 1.086538 +vertex_buffer: 5.417442 +vertex_buffer: 0.667800 +vertex_buffer: 0.602700 +vertex_buffer: 6.288000 +vertex_buffer: 0.625632 +vertex_buffer: 5.486957 +vertex_buffer: 0.693500 +vertex_buffer: 0.563300 +vertex_buffer: 6.000000 +vertex_buffer: 0.257294 +vertex_buffer: 5.509676 +vertex_buffer: 0.715000 +vertex_buffer: 0.527700 +vertex_buffer: 6.003000 +vertex_buffer: 0.255079 +vertex_buffer: 5.489431 +vertex_buffer: 0.716100 +vertex_buffer: 0.528500 +vertex_buffer: 6.291000 +vertex_buffer: 0.625286 +vertex_buffer: 5.465850 +vertex_buffer: 0.694500 +vertex_buffer: 0.564300 +vertex_buffer: 6.286000 +vertex_buffer: 0.627545 +vertex_buffer: 5.436914 +vertex_buffer: 0.696300 +vertex_buffer: 0.565500 +vertex_buffer: 5.998000 +vertex_buffer: 0.257626 +vertex_buffer: 5.460527 +vertex_buffer: 0.717900 +vertex_buffer: 0.529200 +vertex_buffer: 5.654000 +vertex_buffer: -0.031813 +vertex_buffer: 5.520029 +vertex_buffer: 0.732100 +vertex_buffer: 0.491600 +vertex_buffer: 5.653000 +vertex_buffer: -0.027764 +vertex_buffer: 5.540468 +vertex_buffer: 0.730900 +vertex_buffer: 0.491200 +vertex_buffer: 5.206000 +vertex_buffer: -0.240425 +vertex_buffer: 5.581224 +vertex_buffer: 0.742200 +vertex_buffer: 0.448800 +vertex_buffer: 5.207000 +vertex_buffer: -0.244371 +vertex_buffer: 5.560722 +vertex_buffer: 0.743600 +vertex_buffer: 0.449000 +vertex_buffer: 5.650000 +vertex_buffer: -0.029051 +vertex_buffer: 5.491153 +vertex_buffer: 0.733900 +vertex_buffer: 0.492100 +vertex_buffer: 5.203000 +vertex_buffer: -0.241444 +vertex_buffer: 5.531871 +vertex_buffer: 0.745600 +vertex_buffer: 0.449300 +vertex_buffer: 4.621000 +vertex_buffer: -0.391864 +vertex_buffer: 5.635941 +vertex_buffer: 0.750000 +vertex_buffer: 0.395500 +vertex_buffer: 4.016000 +vertex_buffer: -0.480513 +vertex_buffer: 5.673766 +vertex_buffer: 0.754500 +vertex_buffer: 0.340800 +vertex_buffer: 4.620000 +vertex_buffer: -0.395742 +vertex_buffer: 5.615425 +vertex_buffer: 0.751500 +vertex_buffer: 0.395400 +vertex_buffer: 4.617000 +vertex_buffer: -0.392692 +vertex_buffer: 5.586582 +vertex_buffer: 0.753800 +vertex_buffer: 0.395400 +vertex_buffer: 4.013000 +vertex_buffer: -0.477298 +vertex_buffer: 5.643938 +vertex_buffer: 0.756800 +vertex_buffer: 0.340500 +vertex_buffer: 3.518000 +vertex_buffer: -0.492638 +vertex_buffer: 5.720739 +vertex_buffer: 0.752500 +vertex_buffer: 0.296200 +vertex_buffer: 3.084000 +vertex_buffer: -0.448549 +vertex_buffer: 5.761671 +vertex_buffer: 0.746100 +vertex_buffer: 0.257700 +vertex_buffer: 3.515000 +vertex_buffer: -0.489527 +vertex_buffer: 5.691905 +vertex_buffer: 0.754500 +vertex_buffer: 0.295700 +vertex_buffer: 3.082000 +vertex_buffer: -0.445479 +vertex_buffer: 5.732834 +vertex_buffer: 0.747900 +vertex_buffer: 0.257000 +vertex_buffer: 2.305000 +vertex_buffer: -0.223998 +vertex_buffer: 5.838167 +vertex_buffer: 0.720500 +vertex_buffer: 0.190100 +vertex_buffer: 2.677000 +vertex_buffer: -0.361736 +vertex_buffer: 5.800979 +vertex_buffer: 0.735300 +vertex_buffer: 0.222100 +vertex_buffer: 2.675000 +vertex_buffer: -0.358633 +vertex_buffer: 5.771140 +vertex_buffer: 0.737000 +vertex_buffer: 0.221200 +vertex_buffer: 2.303000 +vertex_buffer: -0.221111 +vertex_buffer: 5.809313 +vertex_buffer: 0.721900 +vertex_buffer: 0.189000 +vertex_buffer: 1.692000 +vertex_buffer: 0.245474 +vertex_buffer: 5.908408 +vertex_buffer: 0.676300 +vertex_buffer: 0.137900 +vertex_buffer: 1.976000 +vertex_buffer: -0.026330 +vertex_buffer: 5.874317 +vertex_buffer: 0.701400 +vertex_buffer: 0.161900 +vertex_buffer: 1.975000 +vertex_buffer: -0.023597 +vertex_buffer: 5.845441 +vertex_buffer: 0.702600 +vertex_buffer: 0.160700 +vertex_buffer: 1.691000 +vertex_buffer: 0.248176 +vertex_buffer: 5.877510 +vertex_buffer: 0.677500 +vertex_buffer: 0.136600 +vertex_buffer: 1.452000 +vertex_buffer: 0.604624 +vertex_buffer: 5.938093 +vertex_buffer: 0.643600 +vertex_buffer: 0.118300 +vertex_buffer: 1.254000 +vertex_buffer: 0.989443 +vertex_buffer: 5.961424 +vertex_buffer: 0.608300 +vertex_buffer: 0.103100 +vertex_buffer: 1.450000 +vertex_buffer: 0.607258 +vertex_buffer: 5.904162 +vertex_buffer: 0.644900 +vertex_buffer: 0.116600 +vertex_buffer: 1.252000 +vertex_buffer: 0.994063 +vertex_buffer: 5.922544 +vertex_buffer: 0.609600 +vertex_buffer: 0.100800 +vertex_buffer: 0.772000 +vertex_buffer: 2.209203 +vertex_buffer: 6.003275 +vertex_buffer: 0.494500 +vertex_buffer: 0.074900 +vertex_buffer: 0.865999 +vertex_buffer: 1.935713 +vertex_buffer: 5.995851 +vertex_buffer: 0.520400 +vertex_buffer: 0.078900 +vertex_buffer: 0.971999 +vertex_buffer: 1.652134 +vertex_buffer: 5.987543 +vertex_buffer: 0.547000 +vertex_buffer: 0.084400 +vertex_buffer: 0.863000 +vertex_buffer: 1.948596 +vertex_buffer: 5.952001 +vertex_buffer: 0.520800 +vertex_buffer: 0.075400 +vertex_buffer: 0.966999 +vertex_buffer: 1.668315 +vertex_buffer: 5.944821 +vertex_buffer: 0.547200 +vertex_buffer: 0.081100 +vertex_buffer: 0.769999 +vertex_buffer: 2.215653 +vertex_buffer: 5.961298 +vertex_buffer: 0.495500 +vertex_buffer: 0.071400 +vertex_buffer: 0.424999 +vertex_buffer: 3.024258 +vertex_buffer: 6.048843 +vertex_buffer: 0.412600 +vertex_buffer: 0.066600 +vertex_buffer: 0.514999 +vertex_buffer: 2.916695 +vertex_buffer: 6.040083 +vertex_buffer: 0.425600 +vertex_buffer: 0.069300 +vertex_buffer: 0.591999 +vertex_buffer: 2.742815 +vertex_buffer: 6.028760 +vertex_buffer: 0.443300 +vertex_buffer: 0.070900 +vertex_buffer: 0.513999 +vertex_buffer: 2.917200 +vertex_buffer: 6.005992 +vertex_buffer: 0.427100 +vertex_buffer: 0.065200 +vertex_buffer: 0.591999 +vertex_buffer: 2.744505 +vertex_buffer: 5.993680 +vertex_buffer: 0.444800 +vertex_buffer: 0.067000 +vertex_buffer: 0.424999 +vertex_buffer: 3.024675 +vertex_buffer: 6.013738 +vertex_buffer: 0.414200 +vertex_buffer: 0.062300 +vertex_buffer: -0.000000 +vertex_buffer: 3.098554 +vertex_buffer: 6.066861 +vertex_buffer: 0.377600 +vertex_buffer: 0.047600 +vertex_buffer: 0.175000 +vertex_buffer: 3.090547 +vertex_buffer: 6.062042 +vertex_buffer: 0.390800 +vertex_buffer: 0.056200 +vertex_buffer: 0.175999 +vertex_buffer: 3.101383 +vertex_buffer: 6.086278 +vertex_buffer: 0.389600 +vertex_buffer: 0.058200 +vertex_buffer: -0.000000 +vertex_buffer: 3.110404 +vertex_buffer: 6.091122 +vertex_buffer: 0.377400 +vertex_buffer: 0.048200 +vertex_buffer: -0.000000 +vertex_buffer: 3.098910 +vertex_buffer: 6.030756 +vertex_buffer: 0.378000 +vertex_buffer: 0.046100 +vertex_buffer: 0.175000 +vertex_buffer: 3.090911 +vertex_buffer: 6.025931 +vertex_buffer: 0.392000 +vertex_buffer: 0.053200 +vertex_buffer: 0.160685 +vertex_buffer: 3.897754 +vertex_buffer: 6.097155 +vertex_buffer: 0.325000 +vertex_buffer: 0.092400 +vertex_buffer: 0.160167 +vertex_buffer: 3.898008 +vertex_buffer: 5.887536 +vertex_buffer: 0.307400 +vertex_buffer: 0.098600 +vertex_buffer: -0.000000 +vertex_buffer: 3.895930 +vertex_buffer: 5.891875 +vertex_buffer: 0.302500 +vertex_buffer: 0.085200 +vertex_buffer: -0.000000 +vertex_buffer: 3.895673 +vertex_buffer: 6.104099 +vertex_buffer: 0.320000 +vertex_buffer: 0.078900 +vertex_buffer: 0.566999 +vertex_buffer: 3.911705 +vertex_buffer: 6.076673 +vertex_buffer: 0.336500 +vertex_buffer: 0.127500 +vertex_buffer: 0.564999 +vertex_buffer: 3.911948 +vertex_buffer: 5.877517 +vertex_buffer: 0.319300 +vertex_buffer: 0.132900 +vertex_buffer: 0.308999 +vertex_buffer: 3.899940 +vertex_buffer: 5.883926 +vertex_buffer: 0.311900 +vertex_buffer: 0.111200 +vertex_buffer: 0.309999 +vertex_buffer: 3.899688 +vertex_buffer: 6.091125 +vertex_buffer: 0.329600 +vertex_buffer: 0.105100 +vertex_buffer: 1.138000 +vertex_buffer: 3.983746 +vertex_buffer: 6.043078 +vertex_buffer: 0.348800 +vertex_buffer: 0.179100 +vertex_buffer: 1.134000 +vertex_buffer: 3.983963 +vertex_buffer: 5.865006 +vertex_buffer: 0.332700 +vertex_buffer: 0.182700 +vertex_buffer: 0.913999 +vertex_buffer: 3.946957 +vertex_buffer: 5.869241 +vertex_buffer: 0.328200 +vertex_buffer: 0.163100 +vertex_buffer: 0.917998 +vertex_buffer: 3.946730 +vertex_buffer: 6.055342 +vertex_buffer: 0.344700 +vertex_buffer: 0.158600 +vertex_buffer: 1.446000 +vertex_buffer: 4.040765 +vertex_buffer: 6.028466 +vertex_buffer: 0.352600 +vertex_buffer: 0.207800 +vertex_buffer: 1.440000 +vertex_buffer: 4.040969 +vertex_buffer: 5.860402 +vertex_buffer: 0.337200 +vertex_buffer: 0.210500 +vertex_buffer: 1.849000 +vertex_buffer: 4.116782 +vertex_buffer: 6.014755 +vertex_buffer: 0.355300 +vertex_buffer: 0.245400 +vertex_buffer: 1.842000 +vertex_buffer: 4.116976 +vertex_buffer: 5.854689 +vertex_buffer: 0.340800 +vertex_buffer: 0.247500 +vertex_buffer: 2.375000 +vertex_buffer: 4.191801 +vertex_buffer: 5.998422 +vertex_buffer: 0.357900 +vertex_buffer: 0.293700 +vertex_buffer: 2.365000 +vertex_buffer: 4.191994 +vertex_buffer: 5.839317 +vertex_buffer: 0.343600 +vertex_buffer: 0.295500 +vertex_buffer: 3.049000 +vertex_buffer: 4.245842 +vertex_buffer: 5.964849 +vertex_buffer: 0.361800 +vertex_buffer: 0.354900 +vertex_buffer: 3.037000 +vertex_buffer: 4.246034 +vertex_buffer: 5.806757 +vertex_buffer: 0.347700 +vertex_buffer: 0.356800 +vertex_buffer: 3.730000 +vertex_buffer: 4.274898 +vertex_buffer: 5.918684 +vertex_buffer: 0.367500 +vertex_buffer: 0.416400 +vertex_buffer: 3.715000 +vertex_buffer: 4.275089 +vertex_buffer: 5.761637 +vertex_buffer: 0.353500 +vertex_buffer: 0.418500 +vertex_buffer: 4.272000 +vertex_buffer: 4.275964 +vertex_buffer: 5.864934 +vertex_buffer: 0.373700 +vertex_buffer: 0.465300 +vertex_buffer: 4.256000 +vertex_buffer: 4.276154 +vertex_buffer: 5.708864 +vertex_buffer: 0.359900 +vertex_buffer: 0.467800 +vertex_buffer: 4.708000 +vertex_buffer: 4.255222 +vertex_buffer: 5.651724 +vertex_buffer: 0.366600 +vertex_buffer: 0.509100 +vertex_buffer: 4.727000 +vertex_buffer: 4.255031 +vertex_buffer: 5.808805 +vertex_buffer: 0.380400 +vertex_buffer: 0.506400 +vertex_buffer: 5.141000 +vertex_buffer: 4.218103 +vertex_buffer: 5.749862 +vertex_buffer: 0.387700 +vertex_buffer: 0.543700 +vertex_buffer: 5.121000 +vertex_buffer: 4.218292 +vertex_buffer: 5.593769 +vertex_buffer: 0.374100 +vertex_buffer: 0.546800 +vertex_buffer: 5.541000 +vertex_buffer: 4.161374 +vertex_buffer: 5.527558 +vertex_buffer: 0.382900 +vertex_buffer: 0.585100 +vertex_buffer: 5.563000 +vertex_buffer: 4.161185 +vertex_buffer: 5.683634 +vertex_buffer: 0.396500 +vertex_buffer: 0.581700 +vertex_buffer: 6.544000 +vertex_buffer: 3.985577 +vertex_buffer: 5.360784 +vertex_buffer: 0.406900 +vertex_buffer: 0.676000 +vertex_buffer: 6.397000 +vertex_buffer: 4.010548 +vertex_buffer: 5.384649 +vertex_buffer: 0.403600 +vertex_buffer: 0.662500 +vertex_buffer: 6.421000 +vertex_buffer: 4.010359 +vertex_buffer: 5.539717 +vertex_buffer: 0.417300 +vertex_buffer: 0.659100 +vertex_buffer: 6.569000 +vertex_buffer: 3.985388 +vertex_buffer: 5.515851 +vertex_buffer: 0.420800 +vertex_buffer: 0.673000 +vertex_buffer: 6.599000 +vertex_buffer: 3.985394 +vertex_buffer: 5.510681 +vertex_buffer: 0.421300 +vertex_buffer: 0.676400 +vertex_buffer: 6.573000 +vertex_buffer: 3.986582 +vertex_buffer: 5.355649 +vertex_buffer: 0.407300 +vertex_buffer: 0.679000 +vertex_buffer: 7.319000 +vertex_buffer: 3.288599 +vertex_buffer: 5.301133 +vertex_buffer: 0.498200 +vertex_buffer: 0.740900 +vertex_buffer: 7.366000 +vertex_buffer: 3.322574 +vertex_buffer: 5.191911 +vertex_buffer: 0.494900 +vertex_buffer: 0.751700 +vertex_buffer: 7.373000 +vertex_buffer: 3.354023 +vertex_buffer: 5.193658 +vertex_buffer: 0.491700 +vertex_buffer: 0.752000 +vertex_buffer: 7.324000 +vertex_buffer: 3.321116 +vertex_buffer: 5.305876 +vertex_buffer: 0.494900 +vertex_buffer: 0.740900 +vertex_buffer: 7.375000 +vertex_buffer: 3.401205 +vertex_buffer: 5.194645 +vertex_buffer: 0.487200 +vertex_buffer: 0.752300 +vertex_buffer: 7.325000 +vertex_buffer: 3.374361 +vertex_buffer: 5.306991 +vertex_buffer: 0.489800 +vertex_buffer: 0.741000 +vertex_buffer: 7.395000 +vertex_buffer: 3.373998 +vertex_buffer: 5.080125 +vertex_buffer: 0.489800 +vertex_buffer: 0.762500 +vertex_buffer: 7.397000 +vertex_buffer: 3.416131 +vertex_buffer: 5.080994 +vertex_buffer: 0.485600 +vertex_buffer: 0.762900 +vertex_buffer: 7.387000 +vertex_buffer: 3.343615 +vertex_buffer: 5.081372 +vertex_buffer: 0.492900 +vertex_buffer: 0.761800 +vertex_buffer: 7.029000 +vertex_buffer: 3.235427 +vertex_buffer: 5.442892 +vertex_buffer: 0.500000 +vertex_buffer: 0.709900 +vertex_buffer: 7.070000 +vertex_buffer: 3.091998 +vertex_buffer: 5.433068 +vertex_buffer: 0.514600 +vertex_buffer: 0.712700 +vertex_buffer: 7.022000 +vertex_buffer: 2.889068 +vertex_buffer: 5.435387 +vertex_buffer: 0.532600 +vertex_buffer: 0.704800 +vertex_buffer: 6.851000 +vertex_buffer: 2.185456 +vertex_buffer: 5.448593 +vertex_buffer: 0.589200 +vertex_buffer: 0.669000 +vertex_buffer: 6.686000 +vertex_buffer: 1.648025 +vertex_buffer: 5.464385 +vertex_buffer: 0.627300 +vertex_buffer: 0.634700 +vertex_buffer: 6.477000 +vertex_buffer: 1.096167 +vertex_buffer: 5.483227 +vertex_buffer: 0.663500 +vertex_buffer: 0.595600 +vertex_buffer: 6.241000 +vertex_buffer: 0.648369 +vertex_buffer: 5.502466 +vertex_buffer: 0.690900 +vertex_buffer: 0.559700 +vertex_buffer: 5.962000 +vertex_buffer: 0.290931 +vertex_buffer: 5.525226 +vertex_buffer: 0.711800 +vertex_buffer: 0.525300 +vertex_buffer: 5.621000 +vertex_buffer: 0.011939 +vertex_buffer: 5.554988 +vertex_buffer: 0.727300 +vertex_buffer: 0.489600 +vertex_buffer: 5.182000 +vertex_buffer: -0.198576 +vertex_buffer: 5.594482 +vertex_buffer: 0.738500 +vertex_buffer: 0.447900 +vertex_buffer: 4.608000 +vertex_buffer: -0.350880 +vertex_buffer: 5.648281 +vertex_buffer: 0.746300 +vertex_buffer: 0.395400 +vertex_buffer: 0.996000 +vertex_buffer: 3.282831 +vertex_buffer: 6.059953 +vertex_buffer: 0.406300 +vertex_buffer: 0.135300 +vertex_buffer: 1.026000 +vertex_buffer: 3.253676 +vertex_buffer: 6.053582 +vertex_buffer: 0.409500 +vertex_buffer: 0.137700 +vertex_buffer: 1.113000 +vertex_buffer: 3.449733 +vertex_buffer: 6.054213 +vertex_buffer: 0.397000 +vertex_buffer: 0.155000 +vertex_buffer: 0.995000 +vertex_buffer: 3.051447 +vertex_buffer: 6.047233 +vertex_buffer: 0.424700 +vertex_buffer: 0.124600 +vertex_buffer: 0.959000 +vertex_buffer: 3.060441 +vertex_buffer: 6.053281 +vertex_buffer: 0.423100 +vertex_buffer: 0.121200 +vertex_buffer: 1.002000 +vertex_buffer: 2.851300 +vertex_buffer: 6.039246 +vertex_buffer: 0.441300 +vertex_buffer: 0.115500 +vertex_buffer: 0.963999 +vertex_buffer: 2.854220 +vertex_buffer: 6.045182 +vertex_buffer: 0.440400 +vertex_buffer: 0.112300 +vertex_buffer: 1.029000 +vertex_buffer: 2.651189 +vertex_buffer: 6.031563 +vertex_buffer: 0.459000 +vertex_buffer: 0.109600 +vertex_buffer: 0.990999 +vertex_buffer: 2.653096 +vertex_buffer: 6.036448 +vertex_buffer: 0.458200 +vertex_buffer: 0.106700 +vertex_buffer: 1.128000 +vertex_buffer: 1.970127 +vertex_buffer: 6.016251 +vertex_buffer: 0.520000 +vertex_buffer: 0.101900 +vertex_buffer: 1.165000 +vertex_buffer: 1.975309 +vertex_buffer: 6.012578 +vertex_buffer: 0.520100 +vertex_buffer: 0.104800 +vertex_buffer: 1.097000 +vertex_buffer: 2.228836 +vertex_buffer: 6.018098 +vertex_buffer: 0.496900 +vertex_buffer: 0.104000 +vertex_buffer: 1.059000 +vertex_buffer: 2.224682 +vertex_buffer: 6.021839 +vertex_buffer: 0.496600 +vertex_buffer: 0.100900 +vertex_buffer: 1.220000 +vertex_buffer: 1.684315 +vertex_buffer: 6.009456 +vertex_buffer: 0.546200 +vertex_buffer: 0.105700 +vertex_buffer: 1.256000 +vertex_buffer: 1.689579 +vertex_buffer: 6.004839 +vertex_buffer: 0.546200 +vertex_buffer: 0.108400 +vertex_buffer: 1.682000 +vertex_buffer: 0.697967 +vertex_buffer: 5.958683 +vertex_buffer: 0.636900 +vertex_buffer: 0.137900 +vertex_buffer: 1.505000 +vertex_buffer: 1.033672 +vertex_buffer: 5.979010 +vertex_buffer: 0.606100 +vertex_buffer: 0.124200 +vertex_buffer: 1.473000 +vertex_buffer: 1.027319 +vertex_buffer: 5.983487 +vertex_buffer: 0.606200 +vertex_buffer: 0.121800 +vertex_buffer: 1.653000 +vertex_buffer: 0.685548 +vertex_buffer: 5.962807 +vertex_buffer: 0.637600 +vertex_buffer: 0.135700 +vertex_buffer: 1.897000 +vertex_buffer: 0.393956 +vertex_buffer: 5.932780 +vertex_buffer: 0.664800 +vertex_buffer: 0.155900 +vertex_buffer: 1.870000 +vertex_buffer: 0.373460 +vertex_buffer: 5.936254 +vertex_buffer: 0.666200 +vertex_buffer: 0.153700 +vertex_buffer: 2.126000 +vertex_buffer: 0.129370 +vertex_buffer: 5.906939 +vertex_buffer: 0.688900 +vertex_buffer: 0.175700 +vertex_buffer: 2.147000 +vertex_buffer: 0.153813 +vertex_buffer: 5.904973 +vertex_buffer: 0.687200 +vertex_buffer: 0.177600 +vertex_buffer: 2.423000 +vertex_buffer: -0.046668 +vertex_buffer: 5.875523 +vertex_buffer: 0.706000 +vertex_buffer: 0.201700 +vertex_buffer: 2.440000 +vertex_buffer: -0.020145 +vertex_buffer: 5.872978 +vertex_buffer: 0.704100 +vertex_buffer: 0.203300 +vertex_buffer: 2.780000 +vertex_buffer: -0.124213 +vertex_buffer: 5.840999 +vertex_buffer: 0.715900 +vertex_buffer: 0.233200 +vertex_buffer: 2.766000 +vertex_buffer: -0.156626 +vertex_buffer: 5.841841 +vertex_buffer: 0.718300 +vertex_buffer: 0.231700 +vertex_buffer: 3.155000 +vertex_buffer: -0.181509 +vertex_buffer: 5.807231 +vertex_buffer: 0.723500 +vertex_buffer: 0.266600 +vertex_buffer: 3.146000 +vertex_buffer: -0.218907 +vertex_buffer: 5.807522 +vertex_buffer: 0.726200 +vertex_buffer: 0.265400 +vertex_buffer: 3.555000 +vertex_buffer: -0.213121 +vertex_buffer: 5.769910 +vertex_buffer: 0.727900 +vertex_buffer: 0.302500 +vertex_buffer: 3.550000 +vertex_buffer: -0.253493 +vertex_buffer: 5.769868 +vertex_buffer: 0.731200 +vertex_buffer: 0.301500 +vertex_buffer: 6.275000 +vertex_buffer: 3.721311 +vertex_buffer: 5.579502 +vertex_buffer: 0.444000 +vertex_buffer: 0.642800 +vertex_buffer: 6.313000 +vertex_buffer: 3.740315 +vertex_buffer: 5.576495 +vertex_buffer: 0.442700 +vertex_buffer: 0.646700 +vertex_buffer: 6.066000 +vertex_buffer: 3.814266 +vertex_buffer: 5.616144 +vertex_buffer: 0.433000 +vertex_buffer: 0.624100 +vertex_buffer: 5.118000 +vertex_buffer: 3.995078 +vertex_buffer: 5.771229 +vertex_buffer: 0.407800 +vertex_buffer: 0.537900 +vertex_buffer: 5.474000 +vertex_buffer: 3.945145 +vertex_buffer: 5.715736 +vertex_buffer: 0.415300 +vertex_buffer: 0.570300 +vertex_buffer: 4.719000 +vertex_buffer: 4.033009 +vertex_buffer: 5.827888 +vertex_buffer: 0.400800 +vertex_buffer: 0.501500 +vertex_buffer: 4.270000 +vertex_buffer: 4.054939 +vertex_buffer: 5.885190 +vertex_buffer: 0.394300 +vertex_buffer: 0.460500 +vertex_buffer: 3.727000 +vertex_buffer: 4.054875 +vertex_buffer: 5.938567 +vertex_buffer: 0.388000 +vertex_buffer: 0.411000 +vertex_buffer: 3.047000 +vertex_buffer: 4.023822 +vertex_buffer: 5.980991 +vertex_buffer: 0.382400 +vertex_buffer: 0.349000 +vertex_buffer: 2.382000 +vertex_buffer: 3.968788 +vertex_buffer: 6.010306 +vertex_buffer: 0.378700 +vertex_buffer: 0.287800 +vertex_buffer: 1.883000 +vertex_buffer: 3.892768 +vertex_buffer: 6.026328 +vertex_buffer: 0.378100 +vertex_buffer: 0.240900 +vertex_buffer: 1.523000 +vertex_buffer: 3.784751 +vertex_buffer: 6.039411 +vertex_buffer: 0.380800 +vertex_buffer: 0.205200 +vertex_buffer: 1.273000 +vertex_buffer: 3.631739 +vertex_buffer: 6.049940 +vertex_buffer: 0.387200 +vertex_buffer: 0.177300 +vertex_buffer: 0.906999 +vertex_buffer: 3.973032 +vertex_buffer: 5.807086 +vertex_buffer: 0.321400 +vertex_buffer: 0.164600 +vertex_buffer: 0.562999 +vertex_buffer: 3.936031 +vertex_buffer: 5.810307 +vertex_buffer: 0.312400 +vertex_buffer: 0.134900 +vertex_buffer: 0.564000 +vertex_buffer: 3.918010 +vertex_buffer: 5.826788 +vertex_buffer: 0.314700 +vertex_buffer: 0.134200 +vertex_buffer: 0.912000 +vertex_buffer: 3.954015 +vertex_buffer: 5.822536 +vertex_buffer: 0.323900 +vertex_buffer: 0.164200 +vertex_buffer: 0.555999 +vertex_buffer: 4.021028 +vertex_buffer: 5.812591 +vertex_buffer: 0.305000 +vertex_buffer: 0.137100 +vertex_buffer: 7.065000 +vertex_buffer: 3.984468 +vertex_buffer: 5.449779 +vertex_buffer: 0.433200 +vertex_buffer: 0.717400 +vertex_buffer: 6.812000 +vertex_buffer: 4.040413 +vertex_buffer: 5.495811 +vertex_buffer: 0.423800 +vertex_buffer: 0.696400 +vertex_buffer: 6.796000 +vertex_buffer: 4.028399 +vertex_buffer: 5.505472 +vertex_buffer: 0.424700 +vertex_buffer: 0.694500 +vertex_buffer: 7.064000 +vertex_buffer: 3.965459 +vertex_buffer: 5.457219 +vertex_buffer: 0.434800 +vertex_buffer: 0.716900 +vertex_buffer: 0.571999 +vertex_buffer: 3.883672 +vertex_buffer: 6.106044 +vertex_buffer: 0.341000 +vertex_buffer: 0.126100 +vertex_buffer: 0.568999 +vertex_buffer: 3.904679 +vertex_buffer: 6.098559 +vertex_buffer: 0.338800 +vertex_buffer: 0.126800 +vertex_buffer: 7.066000 +vertex_buffer: 3.978794 +vertex_buffer: 5.181994 +vertex_buffer: 0.415200 +vertex_buffer: 0.733500 +vertex_buffer: 7.050000 +vertex_buffer: 3.967820 +vertex_buffer: 5.160675 +vertex_buffer: 0.412500 +vertex_buffer: 0.734100 +vertex_buffer: 7.077000 +vertex_buffer: 3.977756 +vertex_buffer: 5.212903 +vertex_buffer: 0.418000 +vertex_buffer: 0.731900 +vertex_buffer: 0.882000 +vertex_buffer: 4.087072 +vertex_buffer: 5.776321 +vertex_buffer: 0.308800 +vertex_buffer: 0.166800 +vertex_buffer: 1.095000 +vertex_buffer: 4.122072 +vertex_buffer: 5.775843 +vertex_buffer: 0.313200 +vertex_buffer: 0.185900 +vertex_buffer: 1.096000 +vertex_buffer: 4.111107 +vertex_buffer: 5.746662 +vertex_buffer: 0.310400 +vertex_buffer: 0.186400 +vertex_buffer: 0.882000 +vertex_buffer: 4.076110 +vertex_buffer: 5.745146 +vertex_buffer: 0.305900 +vertex_buffer: 0.167400 +vertex_buffer: 6.778000 +vertex_buffer: 4.053427 +vertex_buffer: 5.483189 +vertex_buffer: 0.421400 +vertex_buffer: 0.694400 +vertex_buffer: 6.752000 +vertex_buffer: 4.053615 +vertex_buffer: 5.328125 +vertex_buffer: 0.408300 +vertex_buffer: 0.699200 +vertex_buffer: 6.816000 +vertex_buffer: 4.044436 +vertex_buffer: 5.475887 +vertex_buffer: 0.422500 +vertex_buffer: 0.697700 +vertex_buffer: 6.795000 +vertex_buffer: 4.044626 +vertex_buffer: 5.319826 +vertex_buffer: 0.410000 +vertex_buffer: 0.704000 +vertex_buffer: 7.241000 +vertex_buffer: 3.424557 +vertex_buffer: 5.378862 +vertex_buffer: 0.484800 +vertex_buffer: 0.730900 +vertex_buffer: 7.246000 +vertex_buffer: 3.554552 +vertex_buffer: 5.380754 +vertex_buffer: 0.473000 +vertex_buffer: 0.731400 +vertex_buffer: 7.145000 +vertex_buffer: 3.551500 +vertex_buffer: 5.422663 +vertex_buffer: 0.472300 +vertex_buffer: 0.721300 +vertex_buffer: 7.139000 +vertex_buffer: 3.402742 +vertex_buffer: 5.420340 +vertex_buffer: 0.485800 +vertex_buffer: 0.720700 +vertex_buffer: 7.239000 +vertex_buffer: 3.333665 +vertex_buffer: 5.376942 +vertex_buffer: 0.493500 +vertex_buffer: 0.730900 +vertex_buffer: 7.129000 +vertex_buffer: 3.258313 +vertex_buffer: 5.422170 +vertex_buffer: 0.499800 +vertex_buffer: 0.719700 +vertex_buffer: 6.546000 +vertex_buffer: 3.924355 +vertex_buffer: 5.543285 +vertex_buffer: 0.428400 +vertex_buffer: 0.669600 +vertex_buffer: 6.495000 +vertex_buffer: 4.087629 +vertex_buffer: 5.317235 +vertex_buffer: 0.394700 +vertex_buffer: 0.674500 +vertex_buffer: 6.659000 +vertex_buffer: 4.052661 +vertex_buffer: 5.290369 +vertex_buffer: 0.400700 +vertex_buffer: 0.689600 +vertex_buffer: 6.678000 +vertex_buffer: 4.063673 +vertex_buffer: 5.280669 +vertex_buffer: 0.400200 +vertex_buffer: 0.692200 +vertex_buffer: 6.689000 +vertex_buffer: 4.045652 +vertex_buffer: 5.298048 +vertex_buffer: 0.403300 +vertex_buffer: 0.692300 +vertex_buffer: 6.564000 +vertex_buffer: 3.999645 +vertex_buffer: 5.304150 +vertex_buffer: 0.402800 +vertex_buffer: 0.679700 +vertex_buffer: 6.590000 +vertex_buffer: 3.995635 +vertex_buffer: 5.312876 +vertex_buffer: 0.404000 +vertex_buffer: 0.681800 +vertex_buffer: 6.680000 +vertex_buffer: 4.067701 +vertex_buffer: 5.257845 +vertex_buffer: 0.398500 +vertex_buffer: 0.693800 +vertex_buffer: 6.672000 +vertex_buffer: 4.055732 +vertex_buffer: 5.232574 +vertex_buffer: 0.396100 +vertex_buffer: 0.694900 +vertex_buffer: 5.742000 +vertex_buffer: 3.870557 +vertex_buffer: 5.377138 +vertex_buffer: 0.447700 +vertex_buffer: 0.589700 +vertex_buffer: 5.779000 +vertex_buffer: 3.871235 +vertex_buffer: 5.641031 +vertex_buffer: 0.425400 +vertex_buffer: 0.597600 +vertex_buffer: 6.574000 +vertex_buffer: 3.962357 +vertex_buffer: 5.540226 +vertex_buffer: 0.425000 +vertex_buffer: 0.672600 +vertex_buffer: 6.572000 +vertex_buffer: 3.979364 +vertex_buffer: 5.534718 +vertex_buffer: 0.422900 +vertex_buffer: 0.672700 +vertex_buffer: 6.014000 +vertex_buffer: 4.080470 +vertex_buffer: 5.448570 +vertex_buffer: 0.394000 +vertex_buffer: 0.627900 +vertex_buffer: 6.038000 +vertex_buffer: 4.080281 +vertex_buffer: 5.604630 +vertex_buffer: 0.407700 +vertex_buffer: 0.624400 +vertex_buffer: 5.795000 +vertex_buffer: 3.887209 +vertex_buffer: 5.663206 +vertex_buffer: 0.423500 +vertex_buffer: 0.599500 +vertex_buffer: 1.072000 +vertex_buffer: 2.449749 +vertex_buffer: 5.999982 +vertex_buffer: 0.477400 +vertex_buffer: 0.108000 +vertex_buffer: 1.056000 +vertex_buffer: 2.449090 +vertex_buffer: 6.023953 +vertex_buffer: 0.477000 +vertex_buffer: 0.105800 +vertex_buffer: 1.381000 +vertex_buffer: 1.372995 +vertex_buffer: 5.970079 +vertex_buffer: 0.575100 +vertex_buffer: 0.116800 +vertex_buffer: 1.366000 +vertex_buffer: 1.369585 +vertex_buffer: 5.994883 +vertex_buffer: 0.575400 +vertex_buffer: 0.114600 +vertex_buffer: 6.599000 +vertex_buffer: 2.960689 +vertex_buffer: 5.481006 +vertex_buffer: 0.516200 +vertex_buffer: 0.668900 +vertex_buffer: 6.604000 +vertex_buffer: 2.495419 +vertex_buffer: 5.493910 +vertex_buffer: 0.556300 +vertex_buffer: 0.658700 +vertex_buffer: 6.642000 +vertex_buffer: 2.492533 +vertex_buffer: 5.490612 +vertex_buffer: 0.557200 +vertex_buffer: 0.661600 +vertex_buffer: 6.971000 +vertex_buffer: 2.618430 +vertex_buffer: 5.157135 +vertex_buffer: 0.571400 +vertex_buffer: 0.716500 +vertex_buffer: 6.984000 +vertex_buffer: 2.616411 +vertex_buffer: 5.200926 +vertex_buffer: 0.568500 +vertex_buffer: 0.713600 +vertex_buffer: 6.555000 +vertex_buffer: 2.964368 +vertex_buffer: 5.218408 +vertex_buffer: 0.514000 +vertex_buffer: 0.645600 +vertex_buffer: 7.121000 +vertex_buffer: 3.076922 +vertex_buffer: 5.363109 +vertex_buffer: 0.521800 +vertex_buffer: 0.724300 +vertex_buffer: 7.113000 +vertex_buffer: 3.077379 +vertex_buffer: 5.321052 +vertex_buffer: 0.524200 +vertex_buffer: 0.728200 +vertex_buffer: 7.141000 +vertex_buffer: 3.158391 +vertex_buffer: 5.308101 +vertex_buffer: 0.517500 +vertex_buffer: 0.733100 +vertex_buffer: 7.155000 +vertex_buffer: 3.160980 +vertex_buffer: 5.351272 +vertex_buffer: 0.514700 +vertex_buffer: 0.729400 +vertex_buffer: 7.144000 +vertex_buffer: 3.167877 +vertex_buffer: 5.235524 +vertex_buffer: 0.519600 +vertex_buffer: 0.739900 +vertex_buffer: 7.109000 +vertex_buffer: 3.086271 +vertex_buffer: 5.227436 +vertex_buffer: 0.527800 +vertex_buffer: 0.736600 +vertex_buffer: 7.076000 +vertex_buffer: 2.912526 +vertex_buffer: 5.326190 +vertex_buffer: 0.537700 +vertex_buffer: 0.719800 +vertex_buffer: 7.063000 +vertex_buffer: 2.915911 +vertex_buffer: 5.234352 +vertex_buffer: 0.542200 +vertex_buffer: 0.727200 +vertex_buffer: 6.956000 +vertex_buffer: 2.592929 +vertex_buffer: 5.440157 +vertex_buffer: 0.557400 +vertex_buffer: 0.691300 +vertex_buffer: 6.994000 +vertex_buffer: 2.602989 +vertex_buffer: 5.433540 +vertex_buffer: 0.557400 +vertex_buffer: 0.694800 +vertex_buffer: 7.063000 +vertex_buffer: 2.904015 +vertex_buffer: 5.429003 +vertex_buffer: 0.532400 +vertex_buffer: 0.709000 +vertex_buffer: 6.885000 +vertex_buffer: 2.184675 +vertex_buffer: 5.442623 +vertex_buffer: 0.589700 +vertex_buffer: 0.671800 +vertex_buffer: 6.775000 +vertex_buffer: 4.049404 +vertex_buffer: 5.503119 +vertex_buffer: 0.422800 +vertex_buffer: 0.693500 +vertex_buffer: 6.757000 +vertex_buffer: 4.049406 +vertex_buffer: 5.501130 +vertex_buffer: 0.422200 +vertex_buffer: 0.692200 +vertex_buffer: 6.739000 +vertex_buffer: 4.041395 +vertex_buffer: 5.508930 +vertex_buffer: 0.422600 +vertex_buffer: 0.690400 +vertex_buffer: 6.756000 +vertex_buffer: 4.037393 +vertex_buffer: 5.511793 +vertex_buffer: 0.423300 +vertex_buffer: 0.691500 +vertex_buffer: 6.755000 +vertex_buffer: 3.997394 +vertex_buffer: 5.510575 +vertex_buffer: 0.426400 +vertex_buffer: 0.690400 +vertex_buffer: 7.407000 +vertex_buffer: 3.821051 +vertex_buffer: 4.970423 +vertex_buffer: 0.446900 +vertex_buffer: 0.772700 +vertex_buffer: 6.630000 +vertex_buffer: 3.993399 +vertex_buffer: 5.505770 +vertex_buffer: 0.421300 +vertex_buffer: 0.679800 +vertex_buffer: 6.604000 +vertex_buffer: 3.993588 +vertex_buffer: 5.350708 +vertex_buffer: 0.407300 +vertex_buffer: 0.682200 +vertex_buffer: 7.396000 +vertex_buffer: 3.877765 +vertex_buffer: 5.204231 +vertex_buffer: 0.444700 +vertex_buffer: 0.752200 +vertex_buffer: 7.390000 +vertex_buffer: 3.900766 +vertex_buffer: 5.203783 +vertex_buffer: 0.442700 +vertex_buffer: 0.751600 +vertex_buffer: 7.341000 +vertex_buffer: 3.915632 +vertex_buffer: 5.314274 +vertex_buffer: 0.443300 +vertex_buffer: 0.741700 +vertex_buffer: 7.346000 +vertex_buffer: 3.892628 +vertex_buffer: 5.317687 +vertex_buffer: 0.444800 +vertex_buffer: 0.741900 +vertex_buffer: 7.417000 +vertex_buffer: 3.870906 +vertex_buffer: 5.089935 +vertex_buffer: 0.443800 +vertex_buffer: 0.761900 +vertex_buffer: 7.411000 +vertex_buffer: 3.893903 +vertex_buffer: 5.092457 +vertex_buffer: 0.441400 +vertex_buffer: 0.760900 +vertex_buffer: 7.415000 +vertex_buffer: 3.822906 +vertex_buffer: 5.088636 +vertex_buffer: 0.448300 +vertex_buffer: 0.762600 +vertex_buffer: 0.307000 +vertex_buffer: 4.021034 +vertex_buffer: 5.807157 +vertex_buffer: 0.296400 +vertex_buffer: 0.116200 +vertex_buffer: 0.307999 +vertex_buffer: 4.005022 +vertex_buffer: 5.815707 +vertex_buffer: 0.298100 +vertex_buffer: 0.115800 +vertex_buffer: 0.555000 +vertex_buffer: 4.039038 +vertex_buffer: 5.804111 +vertex_buffer: 0.303200 +vertex_buffer: 0.137600 +vertex_buffer: 0.308999 +vertex_buffer: 3.923026 +vertex_buffer: 5.813643 +vertex_buffer: 0.305100 +vertex_buffer: 0.113300 +vertex_buffer: 7.259000 +vertex_buffer: 3.864542 +vertex_buffer: 5.387858 +vertex_buffer: 0.446100 +vertex_buffer: 0.732800 +vertex_buffer: 7.252000 +vertex_buffer: 3.700547 +vertex_buffer: 5.384385 +vertex_buffer: 0.460200 +vertex_buffer: 0.732000 +vertex_buffer: 7.261000 +vertex_buffer: 3.916541 +vertex_buffer: 5.389345 +vertex_buffer: 0.442100 +vertex_buffer: 0.733100 +vertex_buffer: 7.160000 +vertex_buffer: 3.943489 +vertex_buffer: 5.432212 +vertex_buffer: 0.438200 +vertex_buffer: 0.724600 +vertex_buffer: 7.158000 +vertex_buffer: 3.891491 +vertex_buffer: 5.430691 +vertex_buffer: 0.442500 +vertex_buffer: 0.724000 +vertex_buffer: 0.307000 +vertex_buffer: 4.027068 +vertex_buffer: 5.778411 +vertex_buffer: 0.293800 +vertex_buffer: 0.117000 +vertex_buffer: 0.553999 +vertex_buffer: 4.045070 +vertex_buffer: 5.776381 +vertex_buffer: 0.300600 +vertex_buffer: 0.138200 +vertex_buffer: 0.555000 +vertex_buffer: 4.034110 +vertex_buffer: 5.744215 +vertex_buffer: 0.297600 +vertex_buffer: 0.139000 +vertex_buffer: 0.307999 +vertex_buffer: 4.017110 +vertex_buffer: 5.744282 +vertex_buffer: 0.290800 +vertex_buffer: 0.117900 +vertex_buffer: 0.308999 +vertex_buffer: 3.906005 +vertex_buffer: 5.831179 +vertex_buffer: 0.307300 +vertex_buffer: 0.112600 +vertex_buffer: 7.258000 +vertex_buffer: 3.938548 +vertex_buffer: 5.383944 +vertex_buffer: 0.440600 +vertex_buffer: 0.733000 +vertex_buffer: 7.159000 +vertex_buffer: 3.963499 +vertex_buffer: 5.424780 +vertex_buffer: 0.436600 +vertex_buffer: 0.724900 +vertex_buffer: 0.311000 +vertex_buffer: 3.873654 +vertex_buffer: 6.119599 +vertex_buffer: 0.333600 +vertex_buffer: 0.103500 +vertex_buffer: 0.311000 +vertex_buffer: 3.892664 +vertex_buffer: 6.112020 +vertex_buffer: 0.331700 +vertex_buffer: 0.104400 +vertex_buffer: 7.393000 +vertex_buffer: 3.904894 +vertex_buffer: 5.098479 +vertex_buffer: 0.439300 +vertex_buffer: 0.759200 +vertex_buffer: 7.394000 +vertex_buffer: 3.902982 +vertex_buffer: 5.026949 +vertex_buffer: 0.438100 +vertex_buffer: 0.765000 +vertex_buffer: 7.174000 +vertex_buffer: 3.952909 +vertex_buffer: 5.086542 +vertex_buffer: 0.422100 +vertex_buffer: 0.749800 +vertex_buffer: 7.241000 +vertex_buffer: 3.274391 +vertex_buffer: 5.375715 +vertex_buffer: 0.499600 +vertex_buffer: 0.731200 +vertex_buffer: 7.242000 +vertex_buffer: 3.240843 +vertex_buffer: 5.369015 +vertex_buffer: 0.503300 +vertex_buffer: 0.731900 +vertex_buffer: 7.159000 +vertex_buffer: 3.201010 +vertex_buffer: 5.412225 +vertex_buffer: 0.506400 +vertex_buffer: 0.722900 +vertex_buffer: 7.166000 +vertex_buffer: 3.173387 +vertex_buffer: 5.403695 +vertex_buffer: 0.510000 +vertex_buffer: 0.724400 +vertex_buffer: 7.108000 +vertex_buffer: 3.090089 +vertex_buffer: 5.426351 +vertex_buffer: 0.516200 +vertex_buffer: 0.716700 +vertex_buffer: 7.124000 +vertex_buffer: 3.079314 +vertex_buffer: 5.416255 +vertex_buffer: 0.518200 +vertex_buffer: 0.718900 +vertex_buffer: 6.719000 +vertex_buffer: 1.643322 +vertex_buffer: 5.459179 +vertex_buffer: 0.628100 +vertex_buffer: 0.637500 +vertex_buffer: 6.510000 +vertex_buffer: 1.089627 +vertex_buffer: 5.476794 +vertex_buffer: 0.664600 +vertex_buffer: 0.598500 +vertex_buffer: 6.271000 +vertex_buffer: 0.633869 +vertex_buffer: 5.496512 +vertex_buffer: 0.692600 +vertex_buffer: 0.562000 +vertex_buffer: 5.986000 +vertex_buffer: 0.269421 +vertex_buffer: 5.519618 +vertex_buffer: 0.713900 +vertex_buffer: 0.526900 +vertex_buffer: 5.641000 +vertex_buffer: -0.012627 +vertex_buffer: 5.549834 +vertex_buffer: 0.729600 +vertex_buffer: 0.490600 +vertex_buffer: 5.197000 +vertex_buffer: -0.225226 +vertex_buffer: 5.589799 +vertex_buffer: 0.740900 +vertex_buffer: 0.448400 +vertex_buffer: 4.616000 +vertex_buffer: -0.376667 +vertex_buffer: 5.644580 +vertex_buffer: 0.748600 +vertex_buffer: 0.395400 +vertex_buffer: 7.151000 +vertex_buffer: 3.714496 +vertex_buffer: 5.425767 +vertex_buffer: 0.457900 +vertex_buffer: 0.722400 +vertex_buffer: 7.055000 +vertex_buffer: 3.734465 +vertex_buffer: 5.451614 +vertex_buffer: 0.454700 +vertex_buffer: 0.713600 +vertex_buffer: 7.062000 +vertex_buffer: 3.915460 +vertex_buffer: 5.455733 +vertex_buffer: 0.439000 +vertex_buffer: 0.716100 +vertex_buffer: 0.708000 +vertex_buffer: 2.492911 +vertex_buffer: 6.041574 +vertex_buffer: 0.466400 +vertex_buffer: 0.076800 +vertex_buffer: 0.741999 +vertex_buffer: 2.489950 +vertex_buffer: 6.039368 +vertex_buffer: 0.466900 +vertex_buffer: 0.079900 +vertex_buffer: 0.686999 +vertex_buffer: 2.492061 +vertex_buffer: 6.035655 +vertex_buffer: 0.466700 +vertex_buffer: 0.074600 +vertex_buffer: 0.517000 +vertex_buffer: 2.925090 +vertex_buffer: 5.743452 +vertex_buffer: 0.434200 +vertex_buffer: 0.041600 +vertex_buffer: 0.511999 +vertex_buffer: 2.920268 +vertex_buffer: 5.799177 +vertex_buffer: 0.432500 +vertex_buffer: 0.046600 +vertex_buffer: 1.065000 +vertex_buffer: 2.457159 +vertex_buffer: 5.730452 +vertex_buffer: 0.481200 +vertex_buffer: 0.131700 +vertex_buffer: 0.679000 +vertex_buffer: 2.492613 +vertex_buffer: 6.014641 +vertex_buffer: 0.467600 +vertex_buffer: 0.072300 +vertex_buffer: 0.679000 +vertex_buffer: 2.495623 +vertex_buffer: 5.976590 +vertex_buffer: 0.468900 +vertex_buffer: 0.068700 +vertex_buffer: 1.018000 +vertex_buffer: 2.447954 +vertex_buffer: 6.028774 +vertex_buffer: 0.476500 +vertex_buffer: 0.102800 +vertex_buffer: -0.000000 +vertex_buffer: 3.101020 +vertex_buffer: 5.817830 +vertex_buffer: 0.384400 +vertex_buffer: 0.029200 +vertex_buffer: -0.000000 +vertex_buffer: 3.110590 +vertex_buffer: 5.759189 +vertex_buffer: 0.386000 +vertex_buffer: 0.024200 +vertex_buffer: 0.301000 +vertex_buffer: 3.074498 +vertex_buffer: 6.056509 +vertex_buffer: 0.400800 +vertex_buffer: 0.062100 +vertex_buffer: 0.305000 +vertex_buffer: 3.083319 +vertex_buffer: 6.079671 +vertex_buffer: 0.399200 +vertex_buffer: 0.065200 +vertex_buffer: 0.301000 +vertex_buffer: 3.074878 +vertex_buffer: 6.020398 +vertex_buffer: 0.402500 +vertex_buffer: 0.058200 +vertex_buffer: 0.178999 +vertex_buffer: 3.134543 +vertex_buffer: 6.095752 +vertex_buffer: 0.387600 +vertex_buffer: 0.060600 +vertex_buffer: 0.170015 +vertex_buffer: 3.194879 +vertex_buffer: 6.097709 +vertex_buffer: 0.382600 +vertex_buffer: 0.063800 +vertex_buffer: -0.000000 +vertex_buffer: 3.212067 +vertex_buffer: 6.104634 +vertex_buffer: 0.373000 +vertex_buffer: 0.051600 +vertex_buffer: -0.000000 +vertex_buffer: 3.143560 +vertex_buffer: 6.101644 +vertex_buffer: 0.376400 +vertex_buffer: 0.049100 +vertex_buffer: 0.327999 +vertex_buffer: 3.178908 +vertex_buffer: 6.091790 +vertex_buffer: 0.391600 +vertex_buffer: 0.075000 +vertex_buffer: 0.317000 +vertex_buffer: 3.111432 +vertex_buffer: 6.088937 +vertex_buffer: 0.397000 +vertex_buffer: 0.068900 +vertex_buffer: 7.382000 +vertex_buffer: 3.380263 +vertex_buffer: 4.933475 +vertex_buffer: 0.490000 +vertex_buffer: 0.775600 +vertex_buffer: 7.367000 +vertex_buffer: 3.390060 +vertex_buffer: 4.917622 +vertex_buffer: 0.489800 +vertex_buffer: 0.777700 +vertex_buffer: 7.358000 +vertex_buffer: 3.360794 +vertex_buffer: 4.917903 +vertex_buffer: 0.493300 +vertex_buffer: 0.776800 +vertex_buffer: 7.373000 +vertex_buffer: 3.350981 +vertex_buffer: 4.934727 +vertex_buffer: 0.493200 +vertex_buffer: 0.774800 +vertex_buffer: 7.379000 +vertex_buffer: 3.350882 +vertex_buffer: 4.963497 +vertex_buffer: 0.493000 +vertex_buffer: 0.772300 +vertex_buffer: 7.388000 +vertex_buffer: 3.380187 +vertex_buffer: 4.962238 +vertex_buffer: 0.489700 +vertex_buffer: 0.773100 +vertex_buffer: 7.364000 +vertex_buffer: 3.323990 +vertex_buffer: 5.087562 +vertex_buffer: 0.496000 +vertex_buffer: 0.760600 +vertex_buffer: 7.321000 +vertex_buffer: 3.301386 +vertex_buffer: 5.100352 +vertex_buffer: 0.500700 +vertex_buffer: 0.758500 +vertex_buffer: 7.316000 +vertex_buffer: 3.306611 +vertex_buffer: 5.030970 +vertex_buffer: 0.501000 +vertex_buffer: 0.764900 +vertex_buffer: 7.363000 +vertex_buffer: 3.331136 +vertex_buffer: 5.016309 +vertex_buffer: 0.495800 +vertex_buffer: 0.767100 +vertex_buffer: 7.387000 +vertex_buffer: 3.350724 +vertex_buffer: 5.009150 +vertex_buffer: 0.492600 +vertex_buffer: 0.768300 +vertex_buffer: 7.354000 +vertex_buffer: 3.331322 +vertex_buffer: 4.969654 +vertex_buffer: 0.496400 +vertex_buffer: 0.771300 +vertex_buffer: 7.363000 +vertex_buffer: 3.890097 +vertex_buffer: 4.932051 +vertex_buffer: 0.436100 +vertex_buffer: 0.773200 +vertex_buffer: 7.381000 +vertex_buffer: 3.903078 +vertex_buffer: 4.948469 +vertex_buffer: 0.437000 +vertex_buffer: 0.771400 +vertex_buffer: 7.386000 +vertex_buffer: 3.903040 +vertex_buffer: 4.979247 +vertex_buffer: 0.437300 +vertex_buffer: 0.768800 +vertex_buffer: 7.171000 +vertex_buffer: 3.951033 +vertex_buffer: 4.984264 +vertex_buffer: 0.421000 +vertex_buffer: 0.759500 +vertex_buffer: 7.174000 +vertex_buffer: 3.951991 +vertex_buffer: 5.020010 +vertex_buffer: 0.421400 +vertex_buffer: 0.756000 +vertex_buffer: 7.371000 +vertex_buffer: 3.911768 +vertex_buffer: 5.201848 +vertex_buffer: 0.440800 +vertex_buffer: 0.750700 +vertex_buffer: 7.153000 +vertex_buffer: 3.968528 +vertex_buffer: 5.400862 +vertex_buffer: 0.435000 +vertex_buffer: 0.725700 +vertex_buffer: 7.066000 +vertex_buffer: 3.987499 +vertex_buffer: 5.424838 +vertex_buffer: 0.431700 +vertex_buffer: 0.718800 +vertex_buffer: 1.094000 +vertex_buffer: 1.348785 +vertex_buffer: 5.935443 +vertex_buffer: 0.576900 +vertex_buffer: 0.089300 +vertex_buffer: 7.126000 +vertex_buffer: 3.076574 +vertex_buffer: 5.395181 +vertex_buffer: 0.519800 +vertex_buffer: 0.721200 +vertex_buffer: 7.164000 +vertex_buffer: 3.162683 +vertex_buffer: 5.383419 +vertex_buffer: 0.512300 +vertex_buffer: 0.726400 +vertex_buffer: 7.097000 +vertex_buffer: 3.186858 +vertex_buffer: 5.076458 +vertex_buffer: 0.524600 +vertex_buffer: 0.756800 +vertex_buffer: 7.036000 +vertex_buffer: 3.179970 +vertex_buffer: 5.079792 +vertex_buffer: 0.530200 +vertex_buffer: 0.757700 +vertex_buffer: 7.026000 +vertex_buffer: 3.181370 +vertex_buffer: 5.028232 +vertex_buffer: 0.530100 +vertex_buffer: 0.762800 +vertex_buffer: 7.087000 +vertex_buffer: 3.187309 +vertex_buffer: 5.019910 +vertex_buffer: 0.524600 +vertex_buffer: 0.762800 +vertex_buffer: 7.040000 +vertex_buffer: 3.155063 +vertex_buffer: 5.125915 +vertex_buffer: 0.531800 +vertex_buffer: 0.752500 +vertex_buffer: 7.415000 +vertex_buffer: 3.820997 +vertex_buffer: 5.015137 +vertex_buffer: 0.447600 +vertex_buffer: 0.768900 +vertex_buffer: 7.409000 +vertex_buffer: 3.687998 +vertex_buffer: 5.012717 +vertex_buffer: 0.460000 +vertex_buffer: 0.770000 +vertex_buffer: 7.401000 +vertex_buffer: 3.688052 +vertex_buffer: 4.968018 +vertex_buffer: 0.459500 +vertex_buffer: 0.774100 +vertex_buffer: 7.417000 +vertex_buffer: 3.867994 +vertex_buffer: 5.016397 +vertex_buffer: 0.443000 +vertex_buffer: 0.767800 +vertex_buffer: 7.412000 +vertex_buffer: 3.890991 +vertex_buffer: 5.019919 +vertex_buffer: 0.440500 +vertex_buffer: 0.766700 +vertex_buffer: 7.404000 +vertex_buffer: 3.567002 +vertex_buffer: 5.009855 +vertex_buffer: 0.471300 +vertex_buffer: 0.770300 +vertex_buffer: 7.400000 +vertex_buffer: 3.476002 +vertex_buffer: 5.008861 +vertex_buffer: 0.479900 +vertex_buffer: 0.770000 +vertex_buffer: 7.161000 +vertex_buffer: 3.216266 +vertex_buffer: 5.074730 +vertex_buffer: 0.517800 +vertex_buffer: 0.757500 +vertex_buffer: 7.238000 +vertex_buffer: 3.261456 +vertex_buffer: 5.054759 +vertex_buffer: 0.509400 +vertex_buffer: 0.761000 +vertex_buffer: 7.251000 +vertex_buffer: 3.261063 +vertex_buffer: 5.121390 +vertex_buffer: 0.508300 +vertex_buffer: 0.754900 +vertex_buffer: 7.398000 +vertex_buffer: 3.421141 +vertex_buffer: 5.007745 +vertex_buffer: 0.485200 +vertex_buffer: 0.769600 +vertex_buffer: 7.396000 +vertex_buffer: 3.380068 +vertex_buffer: 5.006904 +vertex_buffer: 0.489400 +vertex_buffer: 0.769100 +vertex_buffer: 7.030000 +vertex_buffer: 3.190637 +vertex_buffer: 4.970094 +vertex_buffer: 0.528700 +vertex_buffer: 0.768800 +vertex_buffer: 7.069000 +vertex_buffer: 3.189697 +vertex_buffer: 4.965413 +vertex_buffer: 0.525300 +vertex_buffer: 0.768200 +vertex_buffer: 7.080000 +vertex_buffer: 3.187593 +vertex_buffer: 4.984242 +vertex_buffer: 0.524700 +vertex_buffer: 0.766300 +vertex_buffer: 7.020000 +vertex_buffer: 3.180675 +vertex_buffer: 4.993543 +vertex_buffer: 0.530100 +vertex_buffer: 0.766400 +vertex_buffer: 7.349000 +vertex_buffer: 3.331445 +vertex_buffer: 4.938923 +vertex_buffer: 0.496500 +vertex_buffer: 0.774100 +vertex_buffer: 7.333000 +vertex_buffer: 3.341269 +vertex_buffer: 4.922087 +vertex_buffer: 0.497000 +vertex_buffer: 0.776200 +vertex_buffer: 7.274000 +vertex_buffer: 3.257252 +vertex_buffer: 5.266911 +vertex_buffer: 0.504300 +vertex_buffer: 0.742300 +vertex_buffer: 7.312000 +vertex_buffer: 3.287216 +vertex_buffer: 5.186389 +vertex_buffer: 0.501400 +vertex_buffer: 0.750500 +vertex_buffer: 7.345000 +vertex_buffer: 3.303906 +vertex_buffer: 5.190210 +vertex_buffer: 0.497700 +vertex_buffer: 0.751100 +vertex_buffer: 7.303000 +vertex_buffer: 3.270918 +vertex_buffer: 5.289551 +vertex_buffer: 0.500700 +vertex_buffer: 0.741200 +vertex_buffer: 7.233000 +vertex_buffer: 3.226150 +vertex_buffer: 5.350587 +vertex_buffer: 0.505800 +vertex_buffer: 0.733100 +vertex_buffer: 7.214000 +vertex_buffer: 3.218464 +vertex_buffer: 5.320205 +vertex_buffer: 0.508900 +vertex_buffer: 0.735300 +vertex_buffer: 7.120000 +vertex_buffer: 3.964835 +vertex_buffer: 5.147107 +vertex_buffer: 0.417800 +vertex_buffer: 0.740900 +vertex_buffer: 7.097000 +vertex_buffer: 3.954853 +vertex_buffer: 5.132733 +vertex_buffer: 0.414800 +vertex_buffer: 0.741000 +vertex_buffer: 5.117000 +vertex_buffer: 4.224341 +vertex_buffer: 5.554891 +vertex_buffer: 0.370700 +vertex_buffer: 0.547800 +vertex_buffer: 4.704000 +vertex_buffer: 4.261270 +vertex_buffer: 5.612811 +vertex_buffer: 0.363200 +vertex_buffer: 0.510100 +vertex_buffer: 4.252000 +vertex_buffer: 4.282202 +vertex_buffer: 5.668910 +vertex_buffer: 0.356400 +vertex_buffer: 0.468800 +vertex_buffer: 3.712000 +vertex_buffer: 4.282137 +vertex_buffer: 5.721675 +vertex_buffer: 0.349900 +vertex_buffer: 0.419600 +vertex_buffer: 3.035000 +vertex_buffer: 4.252083 +vertex_buffer: 5.765869 +vertex_buffer: 0.344000 +vertex_buffer: 0.358000 +vertex_buffer: 2.363000 +vertex_buffer: 4.199045 +vertex_buffer: 5.797508 +vertex_buffer: 0.339700 +vertex_buffer: 0.296700 +vertex_buffer: 1.839000 +vertex_buffer: 4.123028 +vertex_buffer: 5.812879 +vertex_buffer: 0.336700 +vertex_buffer: 0.248500 +vertex_buffer: 1.437000 +vertex_buffer: 4.047021 +vertex_buffer: 5.817625 +vertex_buffer: 0.333000 +vertex_buffer: 0.211500 +vertex_buffer: 1.131000 +vertex_buffer: 3.991018 +vertex_buffer: 5.820283 +vertex_buffer: 0.328400 +vertex_buffer: 0.183700 +vertex_buffer: 7.379000 +vertex_buffer: 3.678107 +vertex_buffer: 4.922937 +vertex_buffer: 0.459600 +vertex_buffer: 0.778900 +vertex_buffer: 7.396000 +vertex_buffer: 3.688087 +vertex_buffer: 4.939241 +vertex_buffer: 0.459100 +vertex_buffer: 0.776700 +vertex_buffer: 6.544000 +vertex_buffer: 3.988624 +vertex_buffer: 5.320908 +vertex_buffer: 0.403700 +vertex_buffer: 0.677300 +vertex_buffer: 6.569000 +vertex_buffer: 3.989616 +vertex_buffer: 5.326786 +vertex_buffer: 0.404700 +vertex_buffer: 0.679400 +vertex_buffer: 4.686000 +vertex_buffer: 4.355355 +vertex_buffer: 5.543365 +vertex_buffer: 0.345100 +vertex_buffer: 0.513400 +vertex_buffer: 5.108000 +vertex_buffer: 4.317427 +vertex_buffer: 5.483809 +vertex_buffer: 0.352600 +vertex_buffer: 0.552200 +vertex_buffer: 5.554000 +vertex_buffer: 4.253511 +vertex_buffer: 5.414423 +vertex_buffer: 0.362300 +vertex_buffer: 0.593200 +vertex_buffer: 6.072000 +vertex_buffer: 4.154618 +vertex_buffer: 5.326802 +vertex_buffer: 0.375300 +vertex_buffer: 0.640700 +vertex_buffer: 6.496000 +vertex_buffer: 4.064704 +vertex_buffer: 5.255655 +vertex_buffer: 0.387600 +vertex_buffer: 0.679600 +vertex_buffer: 6.693000 +vertex_buffer: 4.022743 +vertex_buffer: 5.223533 +vertex_buffer: 0.395400 +vertex_buffer: 0.699800 +vertex_buffer: 6.718000 +vertex_buffer: 4.016747 +vertex_buffer: 5.219308 +vertex_buffer: 0.396900 +vertex_buffer: 0.703600 +vertex_buffer: 6.765000 +vertex_buffer: 4.006758 +vertex_buffer: 5.210963 +vertex_buffer: 0.399300 +vertex_buffer: 0.709400 +vertex_buffer: 7.031000 +vertex_buffer: 3.082283 +vertex_buffer: 5.141156 +vertex_buffer: 0.536800 +vertex_buffer: 0.746500 +vertex_buffer: 6.999000 +vertex_buffer: 2.919289 +vertex_buffer: 5.142432 +vertex_buffer: 0.549900 +vertex_buffer: 0.736300 +vertex_buffer: 6.668000 +vertex_buffer: 1.672600 +vertex_buffer: 5.170115 +vertex_buffer: 0.646300 +vertex_buffer: 0.658100 +vertex_buffer: 6.830000 +vertex_buffer: 2.206663 +vertex_buffer: 5.154284 +vertex_buffer: 0.606600 +vertex_buffer: 0.693700 +vertex_buffer: 6.462000 +vertex_buffer: 1.127224 +vertex_buffer: 5.188234 +vertex_buffer: 0.684400 +vertex_buffer: 0.617400 +vertex_buffer: 6.223000 +vertex_buffer: 0.676129 +vertex_buffer: 5.207506 +vertex_buffer: 0.714300 +vertex_buffer: 0.578200 +vertex_buffer: 5.940000 +vertex_buffer: 0.312489 +vertex_buffer: 5.231991 +vertex_buffer: 0.737300 +vertex_buffer: 0.539500 +vertex_buffer: 5.597000 +vertex_buffer: 0.033719 +vertex_buffer: 5.261748 +vertex_buffer: 0.754700 +vertex_buffer: 0.499600 +vertex_buffer: 5.158000 +vertex_buffer: -0.173292 +vertex_buffer: 5.302549 +vertex_buffer: 0.767700 +vertex_buffer: 0.454100 +vertex_buffer: 4.582000 +vertex_buffer: -0.319409 +vertex_buffer: 5.355970 +vertex_buffer: 0.776700 +vertex_buffer: 0.397800 +vertex_buffer: 3.990000 +vertex_buffer: -0.400474 +vertex_buffer: 5.413808 +vertex_buffer: 0.779800 +vertex_buffer: 0.340600 +vertex_buffer: 3.501000 +vertex_buffer: -0.414360 +vertex_buffer: 5.459591 +vertex_buffer: 0.777100 +vertex_buffer: 0.293000 +vertex_buffer: 3.075000 +vertex_buffer: -0.373539 +vertex_buffer: 5.500115 +vertex_buffer: 0.769700 +vertex_buffer: 0.251500 +vertex_buffer: 2.674000 +vertex_buffer: -0.292200 +vertex_buffer: 5.537738 +vertex_buffer: 0.757200 +vertex_buffer: 0.212800 +vertex_buffer: 2.308000 +vertex_buffer: -0.159513 +vertex_buffer: 5.575268 +vertex_buffer: 0.740100 +vertex_buffer: 0.177600 +vertex_buffer: 1.986000 +vertex_buffer: 0.034865 +vertex_buffer: 5.609689 +vertex_buffer: 0.718400 +vertex_buffer: 0.146300 +vertex_buffer: 1.707000 +vertex_buffer: 0.305890 +vertex_buffer: 5.618190 +vertex_buffer: 0.691800 +vertex_buffer: 0.117600 +vertex_buffer: 1.471000 +vertex_buffer: 0.665717 +vertex_buffer: 5.575468 +vertex_buffer: 0.659200 +vertex_buffer: 0.090100 +vertex_buffer: 1.264000 +vertex_buffer: 1.088916 +vertex_buffer: 5.518081 +vertex_buffer: 0.620700 +vertex_buffer: 0.065000 +vertex_buffer: 0.847000 +vertex_buffer: 2.170980 +vertex_buffer: 5.465208 +vertex_buffer: 0.515400 +vertex_buffer: 0.027100 +vertex_buffer: 0.922999 +vertex_buffer: 1.947676 +vertex_buffer: 5.467464 +vertex_buffer: 0.538400 +vertex_buffer: 0.032000 +vertex_buffer: 0.807999 +vertex_buffer: 2.157453 +vertex_buffer: 5.482841 +vertex_buffer: 0.514700 +vertex_buffer: 0.030900 +vertex_buffer: 0.796000 +vertex_buffer: 2.333566 +vertex_buffer: 5.498341 +vertex_buffer: 0.497900 +vertex_buffer: 0.026800 +vertex_buffer: 0.719000 +vertex_buffer: 2.548583 +vertex_buffer: 5.588669 +vertex_buffer: 0.474800 +vertex_buffer: 0.031000 +vertex_buffer: 0.631000 +vertex_buffer: 2.767489 +vertex_buffer: 5.684450 +vertex_buffer: 0.452100 +vertex_buffer: 0.036800 +vertex_buffer: 0.313999 +vertex_buffer: 3.115831 +vertex_buffer: 5.733213 +vertex_buffer: 0.412000 +vertex_buffer: 0.031500 +vertex_buffer: 0.450000 +vertex_buffer: 3.063987 +vertex_buffer: 5.729444 +vertex_buffer: 0.423000 +vertex_buffer: 0.035000 +vertex_buffer: 0.182000 +vertex_buffer: 3.129776 +vertex_buffer: 5.735759 +vertex_buffer: 0.401700 +vertex_buffer: 0.027400 +vertex_buffer: 0.160685 +vertex_buffer: 3.986409 +vertex_buffer: 5.740629 +vertex_buffer: 0.284300 +vertex_buffer: 0.106000 +vertex_buffer: -0.000000 +vertex_buffer: 3.978112 +vertex_buffer: 5.743165 +vertex_buffer: 0.279500 +vertex_buffer: 0.092500 +vertex_buffer: 0.557000 +vertex_buffer: 4.010119 +vertex_buffer: 5.737586 +vertex_buffer: 0.295500 +vertex_buffer: 0.139600 +vertex_buffer: 0.309999 +vertex_buffer: 3.994118 +vertex_buffer: 5.738694 +vertex_buffer: 0.288800 +vertex_buffer: 0.118600 +vertex_buffer: 0.884999 +vertex_buffer: 4.051117 +vertex_buffer: 5.738481 +vertex_buffer: 0.303600 +vertex_buffer: 0.168000 +vertex_buffer: 1.100000 +vertex_buffer: 4.085115 +vertex_buffer: 5.740980 +vertex_buffer: 0.308100 +vertex_buffer: 0.186900 +vertex_buffer: 1.408000 +vertex_buffer: 4.138110 +vertex_buffer: 5.742989 +vertex_buffer: 0.313100 +vertex_buffer: 0.214600 +vertex_buffer: 1.825000 +vertex_buffer: 4.212113 +vertex_buffer: 5.742072 +vertex_buffer: 0.317400 +vertex_buffer: 0.252500 +vertex_buffer: 2.364000 +vertex_buffer: 4.287131 +vertex_buffer: 5.725549 +vertex_buffer: 0.321000 +vertex_buffer: 0.301800 +vertex_buffer: 3.039000 +vertex_buffer: 4.343173 +vertex_buffer: 5.693288 +vertex_buffer: 0.325800 +vertex_buffer: 0.363200 +vertex_buffer: 3.712000 +vertex_buffer: 4.374225 +vertex_buffer: 5.649136 +vertex_buffer: 0.332200 +vertex_buffer: 0.424300 +vertex_buffer: 4.241000 +vertex_buffer: 4.376288 +vertex_buffer: 5.597692 +vertex_buffer: 0.338400 +vertex_buffer: 0.472600 +vertex_buffer: 7.047000 +vertex_buffer: 3.937823 +vertex_buffer: 5.156792 +vertex_buffer: 0.410100 +vertex_buffer: 0.735500 +vertex_buffer: 6.661000 +vertex_buffer: 4.029736 +vertex_buffer: 5.228822 +vertex_buffer: 0.393600 +vertex_buffer: 0.695500 +vertex_buffer: 6.937000 +vertex_buffer: 2.624609 +vertex_buffer: 5.145157 +vertex_buffer: 0.573600 +vertex_buffer: 0.719000 +vertex_buffer: 0.549000 +vertex_buffer: 2.943340 +vertex_buffer: 5.723495 +vertex_buffer: 0.435100 +vertex_buffer: 0.038000 +vertex_buffer: -0.000000 +vertex_buffer: 3.141714 +vertex_buffer: 5.739735 +vertex_buffer: 0.386900 +vertex_buffer: 0.021100 +vertex_buffer: 7.111000 +vertex_buffer: 3.918920 +vertex_buffer: 5.078127 +vertex_buffer: 0.412900 +vertex_buffer: 0.748000 +vertex_buffer: 7.092000 +vertex_buffer: 3.924858 +vertex_buffer: 5.128843 +vertex_buffer: 0.412000 +vertex_buffer: 0.741800 +vertex_buffer: 7.115000 +vertex_buffer: 3.949918 +vertex_buffer: 5.079048 +vertex_buffer: 0.415800 +vertex_buffer: 0.747800 +vertex_buffer: 7.113000 +vertex_buffer: 3.917983 +vertex_buffer: 5.025514 +vertex_buffer: 0.413300 +vertex_buffer: 0.753900 +vertex_buffer: 7.118000 +vertex_buffer: 3.948984 +vertex_buffer: 5.024453 +vertex_buffer: 0.416100 +vertex_buffer: 0.753900 +vertex_buffer: 7.355000 +vertex_buffer: 3.828099 +vertex_buffer: 4.930316 +vertex_buffer: 0.442100 +vertex_buffer: 0.779000 +vertex_buffer: 7.349000 +vertex_buffer: 3.848097 +vertex_buffer: 4.931756 +vertex_buffer: 0.437800 +vertex_buffer: 0.777500 +vertex_buffer: 7.351000 +vertex_buffer: 3.790099 +vertex_buffer: 4.929286 +vertex_buffer: 0.447600 +vertex_buffer: 0.780600 +vertex_buffer: 7.307000 +vertex_buffer: 3.363702 +vertex_buffer: 4.924161 +vertex_buffer: 0.498000 +vertex_buffer: 0.779100 +vertex_buffer: 7.330000 +vertex_buffer: 3.384200 +vertex_buffer: 4.920932 +vertex_buffer: 0.493500 +vertex_buffer: 0.779900 +vertex_buffer: 7.257000 +vertex_buffer: 3.334402 +vertex_buffer: 4.931817 +vertex_buffer: 0.504300 +vertex_buffer: 0.777500 +vertex_buffer: 7.342000 +vertex_buffer: 3.491108 +vertex_buffer: 4.922235 +vertex_buffer: 0.479000 +vertex_buffer: 0.781900 +vertex_buffer: 7.344000 +vertex_buffer: 3.549107 +vertex_buffer: 4.923484 +vertex_buffer: 0.472400 +vertex_buffer: 0.782100 +vertex_buffer: 7.116000 +vertex_buffer: 3.915038 +vertex_buffer: 4.979849 +vertex_buffer: 0.414600 +vertex_buffer: 0.760100 +vertex_buffer: 7.120000 +vertex_buffer: 3.945038 +vertex_buffer: 4.979739 +vertex_buffer: 0.416700 +vertex_buffer: 0.758700 +vertex_buffer: 7.137000 +vertex_buffer: 3.943048 +vertex_buffer: 4.972868 +vertex_buffer: 0.418000 +vertex_buffer: 0.760000 +vertex_buffer: 7.136000 +vertex_buffer: 3.910048 +vertex_buffer: 4.971928 +vertex_buffer: 0.416500 +vertex_buffer: 0.762500 +vertex_buffer: 7.168000 +vertex_buffer: 3.936054 +vertex_buffer: 4.966967 +vertex_buffer: 0.420700 +vertex_buffer: 0.762000 +vertex_buffer: 7.167000 +vertex_buffer: 3.903056 +vertex_buffer: 4.966033 +vertex_buffer: 0.419600 +vertex_buffer: 0.764900 +vertex_buffer: 7.339000 +vertex_buffer: 3.410543 +vertex_buffer: 4.919605 +vertex_buffer: 0.489200 +vertex_buffer: 0.780700 +vertex_buffer: 7.340000 +vertex_buffer: 3.445111 +vertex_buffer: 4.921282 +vertex_buffer: 0.484500 +vertex_buffer: 0.781500 +vertex_buffer: 7.081000 +vertex_buffer: 3.225890 +vertex_buffer: 4.958372 +vertex_buffer: 0.523200 +vertex_buffer: 0.771200 +vertex_buffer: 7.329000 +vertex_buffer: 3.862093 +vertex_buffer: 4.935845 +vertex_buffer: 0.433300 +vertex_buffer: 0.775300 +vertex_buffer: 7.348000 +vertex_buffer: 3.655105 +vertex_buffer: 4.925934 +vertex_buffer: 0.461400 +vertex_buffer: 0.781700 +vertex_buffer: 7.226000 +vertex_buffer: 3.234846 +vertex_buffer: 5.228929 +vertex_buffer: 0.510100 +vertex_buffer: 0.744300 +vertex_buffer: 7.266000 +vertex_buffer: 3.262676 +vertex_buffer: 5.181256 +vertex_buffer: 0.506400 +vertex_buffer: 0.749800 +vertex_buffer: 7.182000 +vertex_buffer: 3.205980 +vertex_buffer: 5.273643 +vertex_buffer: 0.513500 +vertex_buffer: 0.738500 +vertex_buffer: 1.118000 +vertex_buffer: 1.338903 +vertex_buffer: 6.002359 +vertex_buffer: 0.575400 +vertex_buffer: 0.093900 +vertex_buffer: 1.142000 +vertex_buffer: 1.341919 +vertex_buffer: 6.002557 +vertex_buffer: 0.575400 +vertex_buffer: 0.095400 +vertex_buffer: 1.103000 +vertex_buffer: 1.337232 +vertex_buffer: 5.996234 +vertex_buffer: 0.575600 +vertex_buffer: 0.093100 +vertex_buffer: 0.806000 +vertex_buffer: 2.138176 +vertex_buffer: 5.548845 +vertex_buffer: 0.514500 +vertex_buffer: 0.036600 +vertex_buffer: 1.367000 +vertex_buffer: 1.388032 +vertex_buffer: 5.704676 +vertex_buffer: 0.568800 +vertex_buffer: 0.139600 +vertex_buffer: 1.098000 +vertex_buffer: 1.337325 +vertex_buffer: 5.977184 +vertex_buffer: 0.576200 +vertex_buffer: 0.092200 +vertex_buffer: 1.332000 +vertex_buffer: 1.365340 +vertex_buffer: 5.998475 +vertex_buffer: 0.575300 +vertex_buffer: 0.112000 +vertex_buffer: 1.071000 +vertex_buffer: 1.551685 +vertex_buffer: 5.483383 +vertex_buffer: 0.577000 +vertex_buffer: 0.044800 +vertex_buffer: 7.168000 +vertex_buffer: 3.279676 +vertex_buffer: 4.945478 +vertex_buffer: 0.514000 +vertex_buffer: 0.774200 +vertex_buffer: 7.141000 +vertex_buffer: 3.958912 +vertex_buffer: 5.084465 +vertex_buffer: 0.418600 +vertex_buffer: 0.748300 +vertex_buffer: 7.142000 +vertex_buffer: 3.957986 +vertex_buffer: 5.022904 +vertex_buffer: 0.418500 +vertex_buffer: 0.754600 +vertex_buffer: 7.112000 +vertex_buffer: 3.917019 +vertex_buffer: 4.995733 +vertex_buffer: 0.413700 +vertex_buffer: 0.757700 +vertex_buffer: 7.116000 +vertex_buffer: 3.949022 +vertex_buffer: 4.993701 +vertex_buffer: 0.416400 +vertex_buffer: 0.757200 +vertex_buffer: 7.141000 +vertex_buffer: 3.958028 +vertex_buffer: 4.989184 +vertex_buffer: 0.418500 +vertex_buffer: 0.758000 +vertex_buffer: 0.323866 +vertex_buffer: 3.364760 +vertex_buffer: 6.099101 +vertex_buffer: 0.376200 +vertex_buffer: 0.082600 +vertex_buffer: 0.573225 +vertex_buffer: 3.334350 +vertex_buffer: 6.083103 +vertex_buffer: 0.387400 +vertex_buffer: 0.102200 +vertex_buffer: 0.167873 +vertex_buffer: 3.366989 +vertex_buffer: 6.104354 +vertex_buffer: 0.368800 +vertex_buffer: 0.070800 +vertex_buffer: -0.000000 +vertex_buffer: 3.369389 +vertex_buffer: 6.110551 +vertex_buffer: 0.360900 +vertex_buffer: 0.058000 +vertex_buffer: -5.567000 +vertex_buffer: 4.268441 +vertex_buffer: 5.472582 +vertex_buffer: 0.370600 +vertex_buffer: 0.590500 +vertex_buffer: -5.128000 +vertex_buffer: 4.330357 +vertex_buffer: 5.541740 +vertex_buffer: 0.361200 +vertex_buffer: 0.550600 +vertex_buffer: -5.129000 +vertex_buffer: 4.348364 +vertex_buffer: 5.535068 +vertex_buffer: 0.359600 +vertex_buffer: 0.551300 +vertex_buffer: -5.571000 +vertex_buffer: 4.286449 +vertex_buffer: 5.464946 +vertex_buffer: 0.369000 +vertex_buffer: 0.591400 +vertex_buffer: -5.541000 +vertex_buffer: 4.185438 +vertex_buffer: 5.475054 +vertex_buffer: 0.377700 +vertex_buffer: 0.587200 +vertex_buffer: -5.118000 +vertex_buffer: 4.243356 +vertex_buffer: 5.541220 +vertex_buffer: 0.368700 +vertex_buffer: 0.548600 +vertex_buffer: -4.708000 +vertex_buffer: 4.367285 +vertex_buffer: 5.600235 +vertex_buffer: 0.353600 +vertex_buffer: 0.512400 +vertex_buffer: -4.708000 +vertex_buffer: 4.384293 +vertex_buffer: 5.593466 +vertex_buffer: 0.352000 +vertex_buffer: 0.513000 +vertex_buffer: -4.253000 +vertex_buffer: 4.387217 +vertex_buffer: 5.656703 +vertex_buffer: 0.346800 +vertex_buffer: 0.471000 +vertex_buffer: -4.253000 +vertex_buffer: 4.405225 +vertex_buffer: 5.649831 +vertex_buffer: 0.345200 +vertex_buffer: 0.471700 +vertex_buffer: -4.704000 +vertex_buffer: 4.280284 +vertex_buffer: 5.600062 +vertex_buffer: 0.361200 +vertex_buffer: 0.510800 +vertex_buffer: -4.251000 +vertex_buffer: 4.301218 +vertex_buffer: 5.656061 +vertex_buffer: 0.354400 +vertex_buffer: 0.469500 +vertex_buffer: -3.713000 +vertex_buffer: 4.386153 +vertex_buffer: 5.709153 +vertex_buffer: 0.340400 +vertex_buffer: 0.422100 +vertex_buffer: -3.712000 +vertex_buffer: 4.403163 +vertex_buffer: 5.701223 +vertex_buffer: 0.338700 +vertex_buffer: 0.422600 +vertex_buffer: -3.035000 +vertex_buffer: 4.357099 +vertex_buffer: 5.754267 +vertex_buffer: 0.334300 +vertex_buffer: 0.360700 +vertex_buffer: -3.035000 +vertex_buffer: 4.374107 +vertex_buffer: 5.746506 +vertex_buffer: 0.332700 +vertex_buffer: 0.361400 +vertex_buffer: -3.711000 +vertex_buffer: 4.300154 +vertex_buffer: 5.708760 +vertex_buffer: 0.348000 +vertex_buffer: 0.420400 +vertex_buffer: -3.034000 +vertex_buffer: 4.271099 +vertex_buffer: 5.753122 +vertex_buffer: 0.341900 +vertex_buffer: 0.358900 +vertex_buffer: -2.359000 +vertex_buffer: 4.303060 +vertex_buffer: 5.785590 +vertex_buffer: 0.329900 +vertex_buffer: 0.299400 +vertex_buffer: -2.358000 +vertex_buffer: 4.321068 +vertex_buffer: 5.778964 +vertex_buffer: 0.328100 +vertex_buffer: 0.300100 +vertex_buffer: -1.823000 +vertex_buffer: 4.228040 +vertex_buffer: 5.802235 +vertex_buffer: 0.326400 +vertex_buffer: 0.250600 +vertex_buffer: -1.820000 +vertex_buffer: 4.245048 +vertex_buffer: 5.795635 +vertex_buffer: 0.324600 +vertex_buffer: 0.251100 +vertex_buffer: -2.362000 +vertex_buffer: 4.217062 +vertex_buffer: 5.783886 +vertex_buffer: 0.337600 +vertex_buffer: 0.297700 +vertex_buffer: -1.836000 +vertex_buffer: 4.142041 +vertex_buffer: 5.800324 +vertex_buffer: 0.334400 +vertex_buffer: 0.249400 +vertex_buffer: -1.410000 +vertex_buffer: 4.152036 +vertex_buffer: 5.806158 +vertex_buffer: 0.322400 +vertex_buffer: 0.212900 +vertex_buffer: -1.405000 +vertex_buffer: 4.170044 +vertex_buffer: 5.799617 +vertex_buffer: 0.320500 +vertex_buffer: 0.213200 +vertex_buffer: -5.819000 +vertex_buffer: 3.920209 +vertex_buffer: 5.663535 +vertex_buffer: 0.421100 +vertex_buffer: 0.602200 +vertex_buffer: -5.486000 +vertex_buffer: 3.986141 +vertex_buffer: 5.718381 +vertex_buffer: 0.412000 +vertex_buffer: 0.572000 +vertex_buffer: -5.551000 +vertex_buffer: 4.106152 +vertex_buffer: 5.709693 +vertex_buffer: 0.402100 +vertex_buffer: 0.579100 +vertex_buffer: -6.010000 +vertex_buffer: 4.027245 +vertex_buffer: 5.632739 +vertex_buffer: 0.413400 +vertex_buffer: 0.620600 +vertex_buffer: -6.101000 +vertex_buffer: 3.839266 +vertex_buffer: 5.615214 +vertex_buffer: 0.431300 +vertex_buffer: 0.627700 +vertex_buffer: -6.386000 +vertex_buffer: 3.956323 +vertex_buffer: 5.569576 +vertex_buffer: 0.423500 +vertex_buffer: 0.654600 +vertex_buffer: -6.533000 +vertex_buffer: 3.412464 +vertex_buffer: 5.527380 +vertex_buffer: 0.474800 +vertex_buffer: 0.665700 +vertex_buffer: -6.428000 +vertex_buffer: 3.592345 +vertex_buffer: 5.550429 +vertex_buffer: 0.457600 +vertex_buffer: 0.656300 +vertex_buffer: -6.627000 +vertex_buffer: 3.198302 +vertex_buffer: 5.510076 +vertex_buffer: 0.495800 +vertex_buffer: 0.673400 +vertex_buffer: -6.595000 +vertex_buffer: 3.198286 +vertex_buffer: 5.512281 +vertex_buffer: 0.494800 +vertex_buffer: 0.670900 +vertex_buffer: -6.619000 +vertex_buffer: 2.959405 +vertex_buffer: 5.501948 +vertex_buffer: 0.516700 +vertex_buffer: 0.670900 +vertex_buffer: -6.652000 +vertex_buffer: 2.957454 +vertex_buffer: 5.499708 +vertex_buffer: 0.517700 +vertex_buffer: 0.673200 +vertex_buffer: -6.653000 +vertex_buffer: 2.716597 +vertex_buffer: 5.493766 +vertex_buffer: 0.538700 +vertex_buffer: 0.668700 +vertex_buffer: -6.617000 +vertex_buffer: 2.717522 +vertex_buffer: 5.497011 +vertex_buffer: 0.537900 +vertex_buffer: 0.666200 +vertex_buffer: -6.420000 +vertex_buffer: 1.682484 +vertex_buffer: 5.510983 +vertex_buffer: 0.615100 +vertex_buffer: 0.613800 +vertex_buffer: -6.383000 +vertex_buffer: 1.687333 +vertex_buffer: 5.513467 +vertex_buffer: 0.614200 +vertex_buffer: 0.610700 +vertex_buffer: -6.539000 +vertex_buffer: 2.186655 +vertex_buffer: 5.498873 +vertex_buffer: 0.579700 +vertex_buffer: 0.642800 +vertex_buffer: -6.578000 +vertex_buffer: 2.182802 +vertex_buffer: 5.495497 +vertex_buffer: 0.580600 +vertex_buffer: 0.645900 +vertex_buffer: -6.214000 +vertex_buffer: 1.153944 +vertex_buffer: 5.529571 +vertex_buffer: 0.649300 +vertex_buffer: 0.575600 +vertex_buffer: -6.180000 +vertex_buffer: 1.161807 +vertex_buffer: 5.531222 +vertex_buffer: 0.648100 +vertex_buffer: 0.572700 +vertex_buffer: -6.006000 +vertex_buffer: 0.759837 +vertex_buffer: 5.546113 +vertex_buffer: 0.674000 +vertex_buffer: 0.543200 +vertex_buffer: -5.976000 +vertex_buffer: 0.774659 +vertex_buffer: 5.548143 +vertex_buffer: 0.672000 +vertex_buffer: 0.540800 +vertex_buffer: -5.738000 +vertex_buffer: 0.483219 +vertex_buffer: 5.569363 +vertex_buffer: 0.689400 +vertex_buffer: 0.510800 +vertex_buffer: -5.765000 +vertex_buffer: 0.459438 +vertex_buffer: 5.566656 +vertex_buffer: 0.692000 +vertex_buffer: 0.512700 +vertex_buffer: -5.435000 +vertex_buffer: 0.241572 +vertex_buffer: 5.597222 +vertex_buffer: 0.703400 +vertex_buffer: 0.477900 +vertex_buffer: -5.459000 +vertex_buffer: 0.213714 +vertex_buffer: 5.594969 +vertex_buffer: 0.706300 +vertex_buffer: 0.479400 +vertex_buffer: -5.043000 +vertex_buffer: 0.047655 +vertex_buffer: 5.633954 +vertex_buffer: 0.714700 +vertex_buffer: 0.439400 +vertex_buffer: -5.060000 +vertex_buffer: 0.015697 +vertex_buffer: 5.632053 +vertex_buffer: 0.717800 +vertex_buffer: 0.440200 +vertex_buffer: -4.534000 +vertex_buffer: -0.103409 +vertex_buffer: 5.679254 +vertex_buffer: 0.723700 +vertex_buffer: 0.391800 +vertex_buffer: -4.543000 +vertex_buffer: -0.140581 +vertex_buffer: 5.678630 +vertex_buffer: 0.726900 +vertex_buffer: 0.391800 +vertex_buffer: -4.005000 +vertex_buffer: -0.195870 +vertex_buffer: 5.728422 +vertex_buffer: 0.728400 +vertex_buffer: 0.343300 +vertex_buffer: -4.007000 +vertex_buffer: -0.236085 +vertex_buffer: 5.727403 +vertex_buffer: 0.731900 +vertex_buffer: 0.342800 +vertex_buffer: -1.098000 +vertex_buffer: 4.116043 +vertex_buffer: 5.800600 +vertex_buffer: 0.315600 +vertex_buffer: 0.185500 +vertex_buffer: -1.103000 +vertex_buffer: 4.098034 +vertex_buffer: 5.808094 +vertex_buffer: 0.317600 +vertex_buffer: 0.185200 +vertex_buffer: -1.432000 +vertex_buffer: 4.066038 +vertex_buffer: 5.804105 +vertex_buffer: 0.330600 +vertex_buffer: 0.212100 +vertex_buffer: -1.126000 +vertex_buffer: 4.010036 +vertex_buffer: 5.805807 +vertex_buffer: 0.325900 +vertex_buffer: 0.184200 +vertex_buffer: -0.883999 +vertex_buffer: 4.081041 +vertex_buffer: 5.802060 +vertex_buffer: 0.311200 +vertex_buffer: 0.166300 +vertex_buffer: -0.887998 +vertex_buffer: 4.062030 +vertex_buffer: 5.809504 +vertex_buffer: 0.313200 +vertex_buffer: 0.166000 +vertex_buffer: -0.162758 +vertex_buffer: 3.804688 +vertex_buffer: 6.122684 +vertex_buffer: 0.333600 +vertex_buffer: 0.088700 +vertex_buffer: -0.165816 +vertex_buffer: 3.544578 +vertex_buffer: 6.111334 +vertex_buffer: 0.354600 +vertex_buffer: 0.078000 +vertex_buffer: -0.584504 +vertex_buffer: 3.526286 +vertex_buffer: 6.088815 +vertex_buffer: 0.371900 +vertex_buffer: 0.112100 +vertex_buffer: -0.319898 +vertex_buffer: 3.542312 +vertex_buffer: 6.106232 +vertex_buffer: 0.361400 +vertex_buffer: 0.090000 +vertex_buffer: -0.313999 +vertex_buffer: 3.805656 +vertex_buffer: 6.117985 +vertex_buffer: 0.339400 +vertex_buffer: 0.100800 +vertex_buffer: -0.582000 +vertex_buffer: 3.814673 +vertex_buffer: 6.103284 +vertex_buffer: 0.347300 +vertex_buffer: 0.124400 +vertex_buffer: -0.547999 +vertex_buffer: 2.930367 +vertex_buffer: 6.069046 +vertex_buffer: 0.423500 +vertex_buffer: 0.076700 +vertex_buffer: -0.522999 +vertex_buffer: 2.920398 +vertex_buffer: 6.062136 +vertex_buffer: 0.424300 +vertex_buffer: 0.072800 +vertex_buffer: -0.432000 +vertex_buffer: 3.031033 +vertex_buffer: 6.071945 +vertex_buffer: 0.411000 +vertex_buffer: 0.070300 +vertex_buffer: -0.452999 +vertex_buffer: 3.052091 +vertex_buffer: 6.080023 +vertex_buffer: 0.409300 +vertex_buffer: 0.074700 +vertex_buffer: -0.591999 +vertex_buffer: 2.935434 +vertex_buffer: 6.066682 +vertex_buffer: 0.423800 +vertex_buffer: 0.082000 +vertex_buffer: -0.500000 +vertex_buffer: 3.112521 +vertex_buffer: 6.080370 +vertex_buffer: 0.405500 +vertex_buffer: 0.082900 +vertex_buffer: -0.664999 +vertex_buffer: 2.741312 +vertex_buffer: 6.054260 +vertex_buffer: 0.442900 +vertex_buffer: 0.080800 +vertex_buffer: -0.625000 +vertex_buffer: 2.745313 +vertex_buffer: 6.055617 +vertex_buffer: 0.442100 +vertex_buffer: 0.076800 +vertex_buffer: -0.600999 +vertex_buffer: 2.743412 +vertex_buffer: 6.049767 +vertex_buffer: 0.442400 +vertex_buffer: 0.073800 +vertex_buffer: -0.797000 +vertex_buffer: 2.211378 +vertex_buffer: 6.028312 +vertex_buffer: 0.493200 +vertex_buffer: 0.078100 +vertex_buffer: -0.889000 +vertex_buffer: 1.937704 +vertex_buffer: 6.020942 +vertex_buffer: 0.519200 +vertex_buffer: 0.081200 +vertex_buffer: -0.872000 +vertex_buffer: 1.935933 +vertex_buffer: 6.014896 +vertex_buffer: 0.519600 +vertex_buffer: 0.080100 +vertex_buffer: -0.777999 +vertex_buffer: 2.209563 +vertex_buffer: 6.022314 +vertex_buffer: 0.493700 +vertex_buffer: 0.076500 +vertex_buffer: -0.825999 +vertex_buffer: 2.213393 +vertex_buffer: 6.028286 +vertex_buffer: 0.493200 +vertex_buffer: 0.080600 +vertex_buffer: -0.915999 +vertex_buffer: 1.941734 +vertex_buffer: 6.021025 +vertex_buffer: 0.519000 +vertex_buffer: 0.083200 +vertex_buffer: -1.019000 +vertex_buffer: 1.656937 +vertex_buffer: 6.012816 +vertex_buffer: 0.546000 +vertex_buffer: 0.088000 +vertex_buffer: -0.994000 +vertex_buffer: 1.653878 +vertex_buffer: 6.013682 +vertex_buffer: 0.546000 +vertex_buffer: 0.086400 +vertex_buffer: -0.978000 +vertex_buffer: 1.652161 +vertex_buffer: 6.007595 +vertex_buffer: 0.546300 +vertex_buffer: 0.085500 +vertex_buffer: -1.259000 +vertex_buffer: 0.989106 +vertex_buffer: 5.981474 +vertex_buffer: 0.607700 +vertex_buffer: 0.104000 +vertex_buffer: -1.273000 +vertex_buffer: 0.991726 +vertex_buffer: 5.987666 +vertex_buffer: 0.607500 +vertex_buffer: 0.104800 +vertex_buffer: -1.470000 +vertex_buffer: 0.609648 +vertex_buffer: 5.964523 +vertex_buffer: 0.642600 +vertex_buffer: 0.119900 +vertex_buffer: -1.457000 +vertex_buffer: 0.605091 +vertex_buffer: 5.958188 +vertex_buffer: 0.642900 +vertex_buffer: 0.119100 +vertex_buffer: -1.296000 +vertex_buffer: 0.995807 +vertex_buffer: 5.986959 +vertex_buffer: 0.607500 +vertex_buffer: 0.106300 +vertex_buffer: -1.490000 +vertex_buffer: 0.618772 +vertex_buffer: 5.964130 +vertex_buffer: 0.642200 +vertex_buffer: 0.121200 +vertex_buffer: -1.726000 +vertex_buffer: 0.268501 +vertex_buffer: 5.934266 +vertex_buffer: 0.674500 +vertex_buffer: 0.140600 +vertex_buffer: -1.708000 +vertex_buffer: 0.254355 +vertex_buffer: 5.934185 +vertex_buffer: 0.675200 +vertex_buffer: 0.139400 +vertex_buffer: -1.697000 +vertex_buffer: 0.246832 +vertex_buffer: 5.927583 +vertex_buffer: 0.675700 +vertex_buffer: 0.138700 +vertex_buffer: -1.990000 +vertex_buffer: -0.014744 +vertex_buffer: 5.901462 +vertex_buffer: 0.700200 +vertex_buffer: 0.163400 +vertex_buffer: -1.981000 +vertex_buffer: -0.024212 +vertex_buffer: 5.894596 +vertex_buffer: 0.700700 +vertex_buffer: 0.162700 +vertex_buffer: -2.005000 +vertex_buffer: 0.001400 +vertex_buffer: 5.901891 +vertex_buffer: 0.699300 +vertex_buffer: 0.164500 +vertex_buffer: -2.328000 +vertex_buffer: -0.193438 +vertex_buffer: 5.866342 +vertex_buffer: 0.718200 +vertex_buffer: 0.192400 +vertex_buffer: -2.316000 +vertex_buffer: -0.211562 +vertex_buffer: 5.865541 +vertex_buffer: 0.719200 +vertex_buffer: 0.191400 +vertex_buffer: -2.308000 +vertex_buffer: -0.221987 +vertex_buffer: 5.858471 +vertex_buffer: 0.719700 +vertex_buffer: 0.190800 +vertex_buffer: -2.686000 +vertex_buffer: -0.346309 +vertex_buffer: 5.827715 +vertex_buffer: 0.733700 +vertex_buffer: 0.223400 +vertex_buffer: -2.680000 +vertex_buffer: -0.359701 +vertex_buffer: 5.820293 +vertex_buffer: 0.734400 +vertex_buffer: 0.222800 +vertex_buffer: -2.695000 +vertex_buffer: -0.325289 +vertex_buffer: 5.829885 +vertex_buffer: 0.732400 +vertex_buffer: 0.224300 +vertex_buffer: -3.097000 +vertex_buffer: -0.408205 +vertex_buffer: 5.791085 +vertex_buffer: 0.742400 +vertex_buffer: 0.259800 +vertex_buffer: -3.091000 +vertex_buffer: -0.431304 +vertex_buffer: 5.789650 +vertex_buffer: 0.744000 +vertex_buffer: 0.258900 +vertex_buffer: -3.087000 +vertex_buffer: -0.445664 +vertex_buffer: 5.782089 +vertex_buffer: 0.744900 +vertex_buffer: 0.258300 +vertex_buffer: -3.522000 +vertex_buffer: -0.475451 +vertex_buffer: 5.748738 +vertex_buffer: 0.750200 +vertex_buffer: 0.297200 +vertex_buffer: -3.520000 +vertex_buffer: -0.489680 +vertex_buffer: 5.740166 +vertex_buffer: 0.751200 +vertex_buffer: 0.296700 +vertex_buffer: -3.525000 +vertex_buffer: -0.450484 +vertex_buffer: 5.751408 +vertex_buffer: 0.748300 +vertex_buffer: 0.297900 +vertex_buffer: -4.017000 +vertex_buffer: -0.437417 +vertex_buffer: 5.704529 +vertex_buffer: 0.749800 +vertex_buffer: 0.342100 +vertex_buffer: -4.018000 +vertex_buffer: -0.462352 +vertex_buffer: 5.701867 +vertex_buffer: 0.751900 +vertex_buffer: 0.341500 +vertex_buffer: -4.018000 +vertex_buffer: -0.477554 +vertex_buffer: 5.693193 +vertex_buffer: 0.753200 +vertex_buffer: 0.341100 +vertex_buffer: -5.141000 +vertex_buffer: 4.193074 +vertex_buffer: 5.774485 +vertex_buffer: 0.390900 +vertex_buffer: 0.542500 +vertex_buffer: -5.143000 +vertex_buffer: 4.212080 +vertex_buffer: 5.768786 +vertex_buffer: 0.389300 +vertex_buffer: 0.543200 +vertex_buffer: -5.564000 +vertex_buffer: 4.155161 +vertex_buffer: 5.702558 +vertex_buffer: 0.398100 +vertex_buffer: 0.581200 +vertex_buffer: -5.562000 +vertex_buffer: 4.136154 +vertex_buffer: 5.709178 +vertex_buffer: 0.399700 +vertex_buffer: 0.580600 +vertex_buffer: -5.138000 +vertex_buffer: 4.162073 +vertex_buffer: 5.774951 +vertex_buffer: 0.393500 +vertex_buffer: 0.541700 +vertex_buffer: -4.727000 +vertex_buffer: 4.199002 +vertex_buffer: 5.833092 +vertex_buffer: 0.386300 +vertex_buffer: 0.504400 +vertex_buffer: -4.728000 +vertex_buffer: 4.230002 +vertex_buffer: 5.833516 +vertex_buffer: 0.383700 +vertex_buffer: 0.505100 +vertex_buffer: -4.728000 +vertex_buffer: 4.249009 +vertex_buffer: 5.826763 +vertex_buffer: 0.382000 +vertex_buffer: 0.505700 +vertex_buffer: -4.274000 +vertex_buffer: 4.250935 +vertex_buffer: 5.889763 +vertex_buffer: 0.377100 +vertex_buffer: 0.464000 +vertex_buffer: -4.274000 +vertex_buffer: 4.269942 +vertex_buffer: 5.883901 +vertex_buffer: 0.375400 +vertex_buffer: 0.464700 +vertex_buffer: -4.274000 +vertex_buffer: 4.219934 +vertex_buffer: 5.889513 +vertex_buffer: 0.379800 +vertex_buffer: 0.463200 +vertex_buffer: -3.731000 +vertex_buffer: 4.250870 +vertex_buffer: 5.942575 +vertex_buffer: 0.370800 +vertex_buffer: 0.414800 +vertex_buffer: -3.731000 +vertex_buffer: 4.219869 +vertex_buffer: 5.942428 +vertex_buffer: 0.373500 +vertex_buffer: 0.414000 +vertex_buffer: -3.731000 +vertex_buffer: 4.268877 +vertex_buffer: 5.936660 +vertex_buffer: 0.369100 +vertex_buffer: 0.415600 +vertex_buffer: -3.051000 +vertex_buffer: 4.221815 +vertex_buffer: 5.986576 +vertex_buffer: 0.365000 +vertex_buffer: 0.353200 +vertex_buffer: -3.050000 +vertex_buffer: 4.239822 +vertex_buffer: 5.981790 +vertex_buffer: 0.363300 +vertex_buffer: 0.354000 +vertex_buffer: -3.050000 +vertex_buffer: 4.189816 +vertex_buffer: 5.986144 +vertex_buffer: 0.367800 +vertex_buffer: 0.352100 +vertex_buffer: -2.377000 +vertex_buffer: 4.135779 +vertex_buffer: 6.017364 +vertex_buffer: 0.363900 +vertex_buffer: 0.290700 +vertex_buffer: -2.376000 +vertex_buffer: 4.167778 +vertex_buffer: 6.017976 +vertex_buffer: 0.361000 +vertex_buffer: 0.291700 +vertex_buffer: -2.376000 +vertex_buffer: 4.185784 +vertex_buffer: 6.013332 +vertex_buffer: 0.359300 +vertex_buffer: 0.292700 +vertex_buffer: -1.854000 +vertex_buffer: 4.091757 +vertex_buffer: 6.035276 +vertex_buffer: 0.359300 +vertex_buffer: 0.243600 +vertex_buffer: -1.851000 +vertex_buffer: 4.110763 +vertex_buffer: 6.029667 +vertex_buffer: 0.357100 +vertex_buffer: 0.244500 +vertex_buffer: -1.858000 +vertex_buffer: 4.060758 +vertex_buffer: 6.033613 +vertex_buffer: 0.362400 +vertex_buffer: 0.242700 +vertex_buffer: -1.464000 +vertex_buffer: 3.979738 +vertex_buffer: 6.050185 +vertex_buffer: 0.361500 +vertex_buffer: 0.205700 +vertex_buffer: -1.454000 +vertex_buffer: 4.014737 +vertex_buffer: 6.051946 +vertex_buffer: 0.357500 +vertex_buffer: 0.206300 +vertex_buffer: -1.448000 +vertex_buffer: 4.033742 +vertex_buffer: 6.046346 +vertex_buffer: 0.354900 +vertex_buffer: 0.207000 +vertex_buffer: -6.022000 +vertex_buffer: 4.101534 +vertex_buffer: 5.394998 +vertex_buffer: 0.389000 +vertex_buffer: 0.630700 +vertex_buffer: -6.013000 +vertex_buffer: 4.086517 +vertex_buffer: 5.408722 +vertex_buffer: 0.390600 +vertex_buffer: 0.629300 +vertex_buffer: -5.538000 +vertex_buffer: 4.167421 +vertex_buffer: 5.488696 +vertex_buffer: 0.379500 +vertex_buffer: 0.586200 +vertex_buffer: -6.077000 +vertex_buffer: 4.173544 +vertex_buffer: 5.387243 +vertex_buffer: 0.383200 +vertex_buffer: 0.636700 +vertex_buffer: -6.412000 +vertex_buffer: 4.027614 +vertex_buffer: 5.329050 +vertex_buffer: 0.398800 +vertex_buffer: 0.666000 +vertex_buffer: -6.396000 +vertex_buffer: 4.014595 +vertex_buffer: 5.344789 +vertex_buffer: 0.400200 +vertex_buffer: 0.663800 +vertex_buffer: -6.603000 +vertex_buffer: 3.981370 +vertex_buffer: 5.529604 +vertex_buffer: 0.423400 +vertex_buffer: 0.676200 +vertex_buffer: -6.636000 +vertex_buffer: 3.990376 +vertex_buffer: 5.524715 +vertex_buffer: 0.423500 +vertex_buffer: 0.679800 +vertex_buffer: -6.648000 +vertex_buffer: 3.980372 +vertex_buffer: 5.528382 +vertex_buffer: 0.425200 +vertex_buffer: 0.680600 +vertex_buffer: -6.609000 +vertex_buffer: 3.966365 +vertex_buffer: 5.534145 +vertex_buffer: 0.425500 +vertex_buffer: 0.676500 +vertex_buffer: -6.691000 +vertex_buffer: 4.014387 +vertex_buffer: 5.516231 +vertex_buffer: 0.423000 +vertex_buffer: 0.685400 +vertex_buffer: -6.709000 +vertex_buffer: 4.010384 +vertex_buffer: 5.519073 +vertex_buffer: 0.424100 +vertex_buffer: 0.686700 +vertex_buffer: -6.694000 +vertex_buffer: 3.950383 +vertex_buffer: 5.519313 +vertex_buffer: 0.429300 +vertex_buffer: 0.684400 +vertex_buffer: -1.149000 +vertex_buffer: 3.955715 +vertex_buffer: 6.069484 +vertex_buffer: 0.354100 +vertex_buffer: 0.177900 +vertex_buffer: -1.141000 +vertex_buffer: 3.976721 +vertex_buffer: 6.063966 +vertex_buffer: 0.351300 +vertex_buffer: 0.178400 +vertex_buffer: -1.165000 +vertex_buffer: 3.907718 +vertex_buffer: 6.067353 +vertex_buffer: 0.359400 +vertex_buffer: 0.177300 +vertex_buffer: -0.929000 +vertex_buffer: 3.915698 +vertex_buffer: 6.082634 +vertex_buffer: 0.350200 +vertex_buffer: 0.157500 +vertex_buffer: -0.948999 +vertex_buffer: 3.854702 +vertex_buffer: 6.080110 +vertex_buffer: 0.356600 +vertex_buffer: 0.156800 +vertex_buffer: -0.921000 +vertex_buffer: 3.939706 +vertex_buffer: 6.077227 +vertex_buffer: 0.347300 +vertex_buffer: 0.158000 +vertex_buffer: -0.160167 +vertex_buffer: 3.920615 +vertex_buffer: 5.816254 +vertex_buffer: 0.300600 +vertex_buffer: 0.100800 +vertex_buffer: -0.160167 +vertex_buffer: 3.903592 +vertex_buffer: 5.833806 +vertex_buffer: 0.302700 +vertex_buffer: 0.100100 +vertex_buffer: -0.159648 +vertex_buffer: 4.000685 +vertex_buffer: 5.818195 +vertex_buffer: 0.293800 +vertex_buffer: 0.103200 +vertex_buffer: -4.705000 +vertex_buffer: 4.390320 +vertex_buffer: 5.571572 +vertex_buffer: 0.350000 +vertex_buffer: 0.513500 +vertex_buffer: -4.698000 +vertex_buffer: 4.380351 +vertex_buffer: 5.546519 +vertex_buffer: 0.347500 +vertex_buffer: 0.513800 +vertex_buffer: -5.119000 +vertex_buffer: 4.343422 +vertex_buffer: 5.488109 +vertex_buffer: 0.355200 +vertex_buffer: 0.552300 +vertex_buffer: -5.127000 +vertex_buffer: 4.354390 +vertex_buffer: 5.513198 +vertex_buffer: 0.357600 +vertex_buffer: 0.551900 +vertex_buffer: -5.562000 +vertex_buffer: 4.280505 +vertex_buffer: 5.417939 +vertex_buffer: 0.364800 +vertex_buffer: 0.592800 +vertex_buffer: -5.569000 +vertex_buffer: 4.291474 +vertex_buffer: 5.443092 +vertex_buffer: 0.367200 +vertex_buffer: 0.592200 +vertex_buffer: -6.087000 +vertex_buffer: 4.193582 +vertex_buffer: 5.356695 +vertex_buffer: 0.380200 +vertex_buffer: 0.639300 +vertex_buffer: -6.080000 +vertex_buffer: 4.181612 +vertex_buffer: 5.331465 +vertex_buffer: 0.377800 +vertex_buffer: 0.640100 +vertex_buffer: -6.505000 +vertex_buffer: 4.091699 +vertex_buffer: 5.260408 +vertex_buffer: 0.390100 +vertex_buffer: 0.678900 +vertex_buffer: -6.513000 +vertex_buffer: 4.103667 +vertex_buffer: 5.285665 +vertex_buffer: 0.392400 +vertex_buffer: 0.678000 +vertex_buffer: -6.511000 +vertex_buffer: 4.099640 +vertex_buffer: 5.307516 +vertex_buffer: 0.394000 +vertex_buffer: 0.676700 +vertex_buffer: -6.087000 +vertex_buffer: 4.188555 +vertex_buffer: 5.378542 +vertex_buffer: 0.382000 +vertex_buffer: 0.638200 +vertex_buffer: -6.714000 +vertex_buffer: 4.059708 +vertex_buffer: 5.251531 +vertex_buffer: 0.400200 +vertex_buffer: 0.698200 +vertex_buffer: -6.705000 +vertex_buffer: 4.047737 +vertex_buffer: 5.227258 +vertex_buffer: 0.397800 +vertex_buffer: 0.699300 +vertex_buffer: -6.729000 +vertex_buffer: 4.042746 +vertex_buffer: 5.222074 +vertex_buffer: 0.399300 +vertex_buffer: 0.703000 +vertex_buffer: -6.739000 +vertex_buffer: 4.054713 +vertex_buffer: 5.247342 +vertex_buffer: 0.401700 +vertex_buffer: 0.702000 +vertex_buffer: -6.775000 +vertex_buffer: 4.032753 +vertex_buffer: 5.214735 +vertex_buffer: 0.401700 +vertex_buffer: 0.708600 +vertex_buffer: -6.783000 +vertex_buffer: 4.044723 +vertex_buffer: 5.240010 +vertex_buffer: 0.403900 +vertex_buffer: 0.707400 +vertex_buffer: -6.789000 +vertex_buffer: 4.044682 +vertex_buffer: 5.273914 +vertex_buffer: 0.406500 +vertex_buffer: 0.705900 +vertex_buffer: -6.744000 +vertex_buffer: 4.053670 +vertex_buffer: 5.282214 +vertex_buffer: 0.404400 +vertex_buffer: 0.700500 +vertex_buffer: -6.717000 +vertex_buffer: 4.056669 +vertex_buffer: 5.284348 +vertex_buffer: 0.402900 +vertex_buffer: 0.696400 +vertex_buffer: -7.386000 +vertex_buffer: 3.856103 +vertex_buffer: 4.927482 +vertex_buffer: 0.441600 +vertex_buffer: 0.775500 +vertex_buffer: -7.403000 +vertex_buffer: 3.869084 +vertex_buffer: 4.942898 +vertex_buffer: 0.441500 +vertex_buffer: 0.773500 +vertex_buffer: -7.399000 +vertex_buffer: 3.891082 +vertex_buffer: 4.944418 +vertex_buffer: 0.439200 +vertex_buffer: 0.772300 +vertex_buffer: -7.381000 +vertex_buffer: 3.878100 +vertex_buffer: 4.928988 +vertex_buffer: 0.438800 +vertex_buffer: 0.774100 +vertex_buffer: -7.384000 +vertex_buffer: 3.809105 +vertex_buffer: 4.926238 +vertex_buffer: 0.446700 +vertex_buffer: 0.777300 +vertex_buffer: -7.401000 +vertex_buffer: 3.821086 +vertex_buffer: 4.941622 +vertex_buffer: 0.446300 +vertex_buffer: 0.775100 +vertex_buffer: -7.409000 +vertex_buffer: 3.868048 +vertex_buffer: 4.971678 +vertex_buffer: 0.442300 +vertex_buffer: 0.771300 +vertex_buffer: -7.404000 +vertex_buffer: 3.891046 +vertex_buffer: 4.974203 +vertex_buffer: 0.439700 +vertex_buffer: 0.770200 +vertex_buffer: -7.391000 +vertex_buffer: 3.567091 +vertex_buffer: 4.936405 +vertex_buffer: 0.470800 +vertex_buffer: 0.777300 +vertex_buffer: -7.374000 +vertex_buffer: 3.562110 +vertex_buffer: 4.921218 +vertex_buffer: 0.471200 +vertex_buffer: 0.779400 +vertex_buffer: -7.370000 +vertex_buffer: 3.480112 +vertex_buffer: 4.919435 +vertex_buffer: 0.479700 +vertex_buffer: 0.779300 +vertex_buffer: -7.387000 +vertex_buffer: 3.475092 +vertex_buffer: 4.935404 +vertex_buffer: 0.480000 +vertex_buffer: 0.777000 +vertex_buffer: -7.392000 +vertex_buffer: 3.476057 +vertex_buffer: 4.964184 +vertex_buffer: 0.479900 +vertex_buffer: 0.774300 +vertex_buffer: -7.396000 +vertex_buffer: 3.567056 +vertex_buffer: 4.965171 +vertex_buffer: 0.471000 +vertex_buffer: 0.774500 +vertex_buffer: -7.200000 +vertex_buffer: 3.267001 +vertex_buffer: 4.942599 +vertex_buffer: 0.511600 +vertex_buffer: 0.772300 +vertex_buffer: -7.219000 +vertex_buffer: 3.261037 +vertex_buffer: 4.960480 +vertex_buffer: 0.510500 +vertex_buffer: 0.770100 +vertex_buffer: -7.300000 +vertex_buffer: 3.307002 +vertex_buffer: 4.947629 +vertex_buffer: 0.501900 +vertex_buffer: 0.772800 +vertex_buffer: -7.284000 +vertex_buffer: 3.314892 +vertex_buffer: 4.929779 +vertex_buffer: 0.502600 +vertex_buffer: 0.775000 +vertex_buffer: -7.140000 +vertex_buffer: 3.216015 +vertex_buffer: 4.973517 +vertex_buffer: 0.518700 +vertex_buffer: 0.767600 +vertex_buffer: -7.119000 +vertex_buffer: 3.219073 +vertex_buffer: 4.955586 +vertex_buffer: 0.520100 +vertex_buffer: 0.769600 +vertex_buffer: -7.148000 +vertex_buffer: 3.216721 +vertex_buffer: 5.011203 +vertex_buffer: 0.518300 +vertex_buffer: 0.763900 +vertex_buffer: -7.226000 +vertex_buffer: 3.261802 +vertex_buffer: 4.996186 +vertex_buffer: 0.510100 +vertex_buffer: 0.766600 +vertex_buffer: -7.306000 +vertex_buffer: 3.306853 +vertex_buffer: 4.979352 +vertex_buffer: 0.501700 +vertex_buffer: 0.769700 +vertex_buffer: -7.108000 +vertex_buffer: 3.089665 +vertex_buffer: 5.185693 +vertex_buffer: 0.529600 +vertex_buffer: 0.740700 +vertex_buffer: -7.082000 +vertex_buffer: 3.084179 +vertex_buffer: 5.147562 +vertex_buffer: 0.532900 +vertex_buffer: 0.743800 +vertex_buffer: -7.040000 +vertex_buffer: 2.917183 +vertex_buffer: 5.151618 +vertex_buffer: 0.547100 +vertex_buffer: 0.733700 +vertex_buffer: -7.057000 +vertex_buffer: 2.917507 +vertex_buffer: 5.194512 +vertex_buffer: 0.544200 +vertex_buffer: 0.730500 +vertex_buffer: -7.100000 +vertex_buffer: 3.160937 +vertex_buffer: 5.127523 +vertex_buffer: 0.526500 +vertex_buffer: 0.750500 +vertex_buffer: -7.164000 +vertex_buffer: 3.198917 +vertex_buffer: 5.165739 +vertex_buffer: 0.518500 +vertex_buffer: 0.748100 +vertex_buffer: -6.696000 +vertex_buffer: 1.657242 +vertex_buffer: 5.181634 +vertex_buffer: 0.644600 +vertex_buffer: 0.655700 +vertex_buffer: -6.488000 +vertex_buffer: 1.105705 +vertex_buffer: 5.200318 +vertex_buffer: 0.682600 +vertex_buffer: 0.614900 +vertex_buffer: -6.500000 +vertex_buffer: 1.098762 +vertex_buffer: 5.245932 +vertex_buffer: 0.679500 +vertex_buffer: 0.612400 +vertex_buffer: -6.709000 +vertex_buffer: 1.651988 +vertex_buffer: 5.227341 +vertex_buffer: 0.641700 +vertex_buffer: 0.653000 +vertex_buffer: -6.861000 +vertex_buffer: 2.196412 +vertex_buffer: 5.166074 +vertex_buffer: 0.604700 +vertex_buffer: 0.691300 +vertex_buffer: -6.874000 +vertex_buffer: 2.192830 +vertex_buffer: 5.211826 +vertex_buffer: 0.601900 +vertex_buffer: 0.688300 +vertex_buffer: -6.259000 +vertex_buffer: 0.640923 +vertex_buffer: 5.265498 +vertex_buffer: 0.708900 +vertex_buffer: 0.573700 +vertex_buffer: -6.248000 +vertex_buffer: 0.649427 +vertex_buffer: 5.219999 +vertex_buffer: 0.712100 +vertex_buffer: 0.575800 +vertex_buffer: -5.962000 +vertex_buffer: 0.282768 +vertex_buffer: 5.242886 +vertex_buffer: 0.734700 +vertex_buffer: 0.537600 +vertex_buffer: -5.972000 +vertex_buffer: 0.272725 +vertex_buffer: 5.289225 +vertex_buffer: 0.731300 +vertex_buffer: 0.535800 +vertex_buffer: -5.626000 +vertex_buffer: -0.011549 +vertex_buffer: 5.319041 +vertex_buffer: 0.747900 +vertex_buffer: 0.497000 +vertex_buffer: -5.616000 +vertex_buffer: -0.001235 +vertex_buffer: 5.273785 +vertex_buffer: 0.751500 +vertex_buffer: 0.498200 +vertex_buffer: -5.172000 +vertex_buffer: -0.212297 +vertex_buffer: 5.313697 +vertex_buffer: 0.764100 +vertex_buffer: 0.453200 +vertex_buffer: -5.180000 +vertex_buffer: -0.223953 +vertex_buffer: 5.359756 +vertex_buffer: 0.760300 +vertex_buffer: 0.452300 +vertex_buffer: -4.590000 +vertex_buffer: -0.361592 +vertex_buffer: 5.367642 +vertex_buffer: 0.772900 +vertex_buffer: 0.397200 +vertex_buffer: -3.991000 +vertex_buffer: -0.445829 +vertex_buffer: 5.426052 +vertex_buffer: 0.775800 +vertex_buffer: 0.340300 +vertex_buffer: -3.996000 +vertex_buffer: -0.458781 +vertex_buffer: 5.471938 +vertex_buffer: 0.771900 +vertex_buffer: 0.340400 +vertex_buffer: -4.597000 +vertex_buffer: -0.374536 +vertex_buffer: 5.414536 +vertex_buffer: 0.768800 +vertex_buffer: 0.396900 +vertex_buffer: -3.500000 +vertex_buffer: -0.470867 +vertex_buffer: 5.518908 +vertex_buffer: 0.769400 +vertex_buffer: 0.293800 +vertex_buffer: -3.496000 +vertex_buffer: -0.457892 +vertex_buffer: 5.473036 +vertex_buffer: 0.773200 +vertex_buffer: 0.293100 +vertex_buffer: -3.067000 +vertex_buffer: -0.415012 +vertex_buffer: 5.512823 +vertex_buffer: 0.766000 +vertex_buffer: 0.252200 +vertex_buffer: -3.068000 +vertex_buffer: -0.427044 +vertex_buffer: 5.559814 +vertex_buffer: 0.762300 +vertex_buffer: 0.253200 +vertex_buffer: -2.663000 +vertex_buffer: -0.340722 +vertex_buffer: 5.599068 +vertex_buffer: 0.750600 +vertex_buffer: 0.215500 +vertex_buffer: -2.662000 +vertex_buffer: -0.328805 +vertex_buffer: 5.552051 +vertex_buffer: 0.754000 +vertex_buffer: 0.213900 +vertex_buffer: -2.293000 +vertex_buffer: -0.193007 +vertex_buffer: 5.589015 +vertex_buffer: 0.737400 +vertex_buffer: 0.179300 +vertex_buffer: -2.293000 +vertex_buffer: -0.203762 +vertex_buffer: 5.636180 +vertex_buffer: 0.734400 +vertex_buffer: 0.181300 +vertex_buffer: -1.966000 +vertex_buffer: -0.007189 +vertex_buffer: 5.672222 +vertex_buffer: 0.713500 +vertex_buffer: 0.151100 +vertex_buffer: -1.968000 +vertex_buffer: 0.003313 +vertex_buffer: 5.624982 +vertex_buffer: 0.716200 +vertex_buffer: 0.148600 +vertex_buffer: -1.685000 +vertex_buffer: 0.275446 +vertex_buffer: 5.633972 +vertex_buffer: 0.690100 +vertex_buffer: 0.120500 +vertex_buffer: -1.683000 +vertex_buffer: 0.265122 +vertex_buffer: 5.683293 +vertex_buffer: 0.687700 +vertex_buffer: 0.123700 +vertex_buffer: -1.230000 +vertex_buffer: 1.052009 +vertex_buffer: 5.594151 +vertex_buffer: 0.617900 +vertex_buffer: 0.073000 +vertex_buffer: -1.442000 +vertex_buffer: 0.628247 +vertex_buffer: 5.646198 +vertex_buffer: 0.655700 +vertex_buffer: 0.097100 +vertex_buffer: -1.445000 +vertex_buffer: 0.637469 +vertex_buffer: 5.591790 +vertex_buffer: 0.658000 +vertex_buffer: 0.093300 +vertex_buffer: -1.233000 +vertex_buffer: 1.062901 +vertex_buffer: 5.534851 +vertex_buffer: 0.619700 +vertex_buffer: 0.068500 +vertex_buffer: -0.886000 +vertex_buffer: 1.907435 +vertex_buffer: 5.549905 +vertex_buffer: 0.537400 +vertex_buffer: 0.041500 +vertex_buffer: -1.036000 +vertex_buffer: 1.512598 +vertex_buffer: 5.563668 +vertex_buffer: 0.575200 +vertex_buffer: 0.053800 +vertex_buffer: -1.037000 +vertex_buffer: 1.530892 +vertex_buffer: 5.500604 +vertex_buffer: 0.576100 +vertex_buffer: 0.048400 +vertex_buffer: -0.886000 +vertex_buffer: 1.931060 +vertex_buffer: 5.484957 +vertex_buffer: 0.537500 +vertex_buffer: 0.035700 +vertex_buffer: -0.680000 +vertex_buffer: 2.541166 +vertex_buffer: 5.606604 +vertex_buffer: 0.474100 +vertex_buffer: 0.035000 +vertex_buffer: -0.595000 +vertex_buffer: 2.760144 +vertex_buffer: 5.703512 +vertex_buffer: 0.451200 +vertex_buffer: 0.040500 +vertex_buffer: -0.588999 +vertex_buffer: 2.757072 +vertex_buffer: 5.759195 +vertex_buffer: 0.449400 +vertex_buffer: 0.045700 +vertex_buffer: -0.672999 +vertex_buffer: 2.535648 +vertex_buffer: 5.667060 +vertex_buffer: 0.472600 +vertex_buffer: 0.040600 +vertex_buffer: -0.756000 +vertex_buffer: 2.322095 +vertex_buffer: 5.516086 +vertex_buffer: 0.497400 +vertex_buffer: 0.030800 +vertex_buffer: -0.750999 +vertex_buffer: 2.311127 +vertex_buffer: 5.580282 +vertex_buffer: 0.496400 +vertex_buffer: 0.036400 +vertex_buffer: -0.175000 +vertex_buffer: 3.099635 +vertex_buffer: 5.756340 +vertex_buffer: 0.400300 +vertex_buffer: 0.030400 +vertex_buffer: -0.173999 +vertex_buffer: 3.093057 +vertex_buffer: 5.814032 +vertex_buffer: 0.398700 +vertex_buffer: 0.035400 +vertex_buffer: -0.299000 +vertex_buffer: 3.077085 +vertex_buffer: 5.811524 +vertex_buffer: 0.408900 +vertex_buffer: 0.040000 +vertex_buffer: -0.301000 +vertex_buffer: 3.082687 +vertex_buffer: 5.753816 +vertex_buffer: 0.410600 +vertex_buffer: 0.034900 +vertex_buffer: -0.423000 +vertex_buffer: 3.027142 +vertex_buffer: 5.806880 +vertex_buffer: 0.420200 +vertex_buffer: 0.043900 +vertex_buffer: -0.427000 +vertex_buffer: 3.032812 +vertex_buffer: 5.750162 +vertex_buffer: 0.421900 +vertex_buffer: 0.038700 +vertex_buffer: -0.159648 +vertex_buffer: 4.010368 +vertex_buffer: 5.744772 +vertex_buffer: 0.286400 +vertex_buffer: 0.105400 +vertex_buffer: -0.159131 +vertex_buffer: 4.022250 +vertex_buffer: 5.780377 +vertex_buffer: 0.289600 +vertex_buffer: 0.104400 +vertex_buffer: -0.159131 +vertex_buffer: 4.016697 +vertex_buffer: 5.809144 +vertex_buffer: 0.292200 +vertex_buffer: 0.103600 +vertex_buffer: -1.819000 +vertex_buffer: 4.239105 +vertex_buffer: 5.747630 +vertex_buffer: 0.319900 +vertex_buffer: 0.252000 +vertex_buffer: -1.818000 +vertex_buffer: 4.251075 +vertex_buffer: 5.773822 +vertex_buffer: 0.322500 +vertex_buffer: 0.251600 +vertex_buffer: -1.403000 +vertex_buffer: 4.176071 +vertex_buffer: 5.776840 +vertex_buffer: 0.318200 +vertex_buffer: 0.213700 +vertex_buffer: -1.404000 +vertex_buffer: 4.164105 +vertex_buffer: 5.748632 +vertex_buffer: 0.315500 +vertex_buffer: 0.214200 +vertex_buffer: -2.358000 +vertex_buffer: 4.314126 +vertex_buffer: 5.730964 +vertex_buffer: 0.323500 +vertex_buffer: 0.301200 +vertex_buffer: -2.357000 +vertex_buffer: 4.326095 +vertex_buffer: 5.757109 +vertex_buffer: 0.326000 +vertex_buffer: 0.300700 +vertex_buffer: -3.034000 +vertex_buffer: 4.368166 +vertex_buffer: 5.698512 +vertex_buffer: 0.328100 +vertex_buffer: 0.362500 +vertex_buffer: -3.033000 +vertex_buffer: 4.380135 +vertex_buffer: 5.724594 +vertex_buffer: 0.330600 +vertex_buffer: 0.361900 +vertex_buffer: -3.709000 +vertex_buffer: 4.398221 +vertex_buffer: 5.654215 +vertex_buffer: 0.334300 +vertex_buffer: 0.423700 +vertex_buffer: -3.710000 +vertex_buffer: 4.409187 +vertex_buffer: 5.680248 +vertex_buffer: 0.336800 +vertex_buffer: 0.423200 +vertex_buffer: -4.246000 +vertex_buffer: 4.400284 +vertex_buffer: 5.601825 +vertex_buffer: 0.340600 +vertex_buffer: 0.472600 +vertex_buffer: -4.250000 +vertex_buffer: 4.411252 +vertex_buffer: 5.627885 +vertex_buffer: 0.343200 +vertex_buffer: 0.472100 +vertex_buffer: -5.429000 +vertex_buffer: 3.924494 +vertex_buffer: 5.428460 +vertex_buffer: 0.440600 +vertex_buffer: 0.562900 +vertex_buffer: -5.079000 +vertex_buffer: 3.972429 +vertex_buffer: 5.482845 +vertex_buffer: 0.433800 +vertex_buffer: 0.531900 +vertex_buffer: -5.112000 +vertex_buffer: 3.972107 +vertex_buffer: 5.746829 +vertex_buffer: 0.410600 +vertex_buffer: 0.537000 +vertex_buffer: -5.465000 +vertex_buffer: 3.924174 +vertex_buffer: 5.692366 +vertex_buffer: 0.417700 +vertex_buffer: 0.569100 +vertex_buffer: -4.684000 +vertex_buffer: 4.010359 +vertex_buffer: 5.539529 +vertex_buffer: 0.427100 +vertex_buffer: 0.496500 +vertex_buffer: -4.715000 +vertex_buffer: 4.010037 +vertex_buffer: 5.804559 +vertex_buffer: 0.403600 +vertex_buffer: 0.500800 +vertex_buffer: -4.239000 +vertex_buffer: 4.032291 +vertex_buffer: 5.595924 +vertex_buffer: 0.420800 +vertex_buffer: 0.456400 +vertex_buffer: -4.267000 +vertex_buffer: 4.031969 +vertex_buffer: 5.860978 +vertex_buffer: 0.397200 +vertex_buffer: 0.460000 +vertex_buffer: -3.700000 +vertex_buffer: 4.033226 +vertex_buffer: 5.649375 +vertex_buffer: 0.414600 +vertex_buffer: 0.407700 +vertex_buffer: -3.725000 +vertex_buffer: 4.032904 +vertex_buffer: 5.914433 +vertex_buffer: 0.390900 +vertex_buffer: 0.410500 +vertex_buffer: -3.025000 +vertex_buffer: 4.004175 +vertex_buffer: 5.691690 +vertex_buffer: 0.408800 +vertex_buffer: 0.346600 +vertex_buffer: -3.045000 +vertex_buffer: 4.003853 +vertex_buffer: 5.956707 +vertex_buffer: 0.385100 +vertex_buffer: 0.348500 +vertex_buffer: -2.365000 +vertex_buffer: 3.950138 +vertex_buffer: 5.721011 +vertex_buffer: 0.405000 +vertex_buffer: 0.286800 +vertex_buffer: -2.381000 +vertex_buffer: 3.949815 +vertex_buffer: 5.986923 +vertex_buffer: 0.381200 +vertex_buffer: 0.287500 +vertex_buffer: -1.873000 +vertex_buffer: 3.874120 +vertex_buffer: 5.735144 +vertex_buffer: 0.404700 +vertex_buffer: 0.242300 +vertex_buffer: -1.885000 +vertex_buffer: 3.873796 +vertex_buffer: 6.001936 +vertex_buffer: 0.380900 +vertex_buffer: 0.240900 +vertex_buffer: -1.518000 +vertex_buffer: 3.764122 +vertex_buffer: 5.735279 +vertex_buffer: 0.408400 +vertex_buffer: 0.210300 +vertex_buffer: -1.528000 +vertex_buffer: 3.763783 +vertex_buffer: 6.013980 +vertex_buffer: 0.383900 +vertex_buffer: 0.205500 +vertex_buffer: -1.272000 +vertex_buffer: 3.607124 +vertex_buffer: 5.732809 +vertex_buffer: 0.414800 +vertex_buffer: 0.186800 +vertex_buffer: -1.280000 +vertex_buffer: 3.606770 +vertex_buffer: 6.023445 +vertex_buffer: 0.390500 +vertex_buffer: 0.177600 +vertex_buffer: -1.115000 +vertex_buffer: 3.426127 +vertex_buffer: 5.730206 +vertex_buffer: 0.422700 +vertex_buffer: 0.169700 +vertex_buffer: -1.122000 +vertex_buffer: 3.425767 +vertex_buffer: 6.026797 +vertex_buffer: 0.400200 +vertex_buffer: 0.155900 +vertex_buffer: -1.032000 +vertex_buffer: 3.240570 +vertex_buffer: 5.729738 +vertex_buffer: 0.431400 +vertex_buffer: 0.157400 +vertex_buffer: -1.039000 +vertex_buffer: 3.238753 +vertex_buffer: 6.025306 +vertex_buffer: 0.412100 +vertex_buffer: 0.139500 +vertex_buffer: -1.003000 +vertex_buffer: 3.050018 +vertex_buffer: 5.729583 +vertex_buffer: 0.441400 +vertex_buffer: 0.147900 +vertex_buffer: -1.010000 +vertex_buffer: 3.046713 +vertex_buffer: 6.021124 +vertex_buffer: 0.426100 +vertex_buffer: 0.126900 +vertex_buffer: -1.012000 +vertex_buffer: 2.855426 +vertex_buffer: 5.730688 +vertex_buffer: 0.453200 +vertex_buffer: 0.140500 +vertex_buffer: -1.018000 +vertex_buffer: 2.850726 +vertex_buffer: 6.013214 +vertex_buffer: 0.442200 +vertex_buffer: 0.117900 +vertex_buffer: -1.038000 +vertex_buffer: 2.656807 +vertex_buffer: 5.731023 +vertex_buffer: 0.466800 +vertex_buffer: 0.135100 +vertex_buffer: -1.045000 +vertex_buffer: 2.650755 +vertex_buffer: 6.005554 +vertex_buffer: 0.459700 +vertex_buffer: 0.111800 +vertex_buffer: -1.113000 +vertex_buffer: 2.231652 +vertex_buffer: 5.994177 +vertex_buffer: 0.497000 +vertex_buffer: 0.106300 +vertex_buffer: -1.105000 +vertex_buffer: 2.240546 +vertex_buffer: 5.727662 +vertex_buffer: 0.497800 +vertex_buffer: 0.130100 +vertex_buffer: -1.171000 +vertex_buffer: 1.989006 +vertex_buffer: 5.722197 +vertex_buffer: 0.518200 +vertex_buffer: 0.130800 +vertex_buffer: -1.181000 +vertex_buffer: 1.978282 +vertex_buffer: 5.988693 +vertex_buffer: 0.520100 +vertex_buffer: 0.107100 +vertex_buffer: -1.260000 +vertex_buffer: 1.705466 +vertex_buffer: 5.715535 +vertex_buffer: 0.542000 +vertex_buffer: 0.133800 +vertex_buffer: -1.271000 +vertex_buffer: 1.692739 +vertex_buffer: 5.980989 +vertex_buffer: 0.546100 +vertex_buffer: 0.110600 +vertex_buffer: -1.503000 +vertex_buffer: 1.055693 +vertex_buffer: 5.689961 +vertex_buffer: 0.596800 +vertex_buffer: 0.148200 +vertex_buffer: -1.683000 +vertex_buffer: 0.724615 +vertex_buffer: 5.669944 +vertex_buffer: 0.624600 +vertex_buffer: 0.160400 +vertex_buffer: -1.695000 +vertex_buffer: 0.704779 +vertex_buffer: 5.935099 +vertex_buffer: 0.636000 +vertex_buffer: 0.139800 +vertex_buffer: -1.519000 +vertex_buffer: 1.038253 +vertex_buffer: 5.955282 +vertex_buffer: 0.605500 +vertex_buffer: 0.126300 +vertex_buffer: -1.894000 +vertex_buffer: 0.425968 +vertex_buffer: 5.644423 +vertex_buffer: 0.648800 +vertex_buffer: 0.175900 +vertex_buffer: -1.907000 +vertex_buffer: 0.403973 +vertex_buffer: 5.909450 +vertex_buffer: 0.663600 +vertex_buffer: 0.157600 +vertex_buffer: -2.142000 +vertex_buffer: 0.189787 +vertex_buffer: 5.615995 +vertex_buffer: 0.667600 +vertex_buffer: 0.194200 +vertex_buffer: -2.156000 +vertex_buffer: 0.166070 +vertex_buffer: 5.880907 +vertex_buffer: 0.685700 +vertex_buffer: 0.179200 +vertex_buffer: -2.430000 +vertex_buffer: 0.020092 +vertex_buffer: 5.585466 +vertex_buffer: 0.681500 +vertex_buffer: 0.215700 +vertex_buffer: -2.447000 +vertex_buffer: -0.004859 +vertex_buffer: 5.850289 +vertex_buffer: 0.702400 +vertex_buffer: 0.204700 +vertex_buffer: -2.766000 +vertex_buffer: -0.081173 +vertex_buffer: 5.553818 +vertex_buffer: 0.691500 +vertex_buffer: 0.241600 +vertex_buffer: -2.784000 +vertex_buffer: -0.106871 +vertex_buffer: 5.818572 +vertex_buffer: 0.714000 +vertex_buffer: 0.234300 +vertex_buffer: -3.136000 +vertex_buffer: -0.136021 +vertex_buffer: 5.520313 +vertex_buffer: 0.698100 +vertex_buffer: 0.271600 +vertex_buffer: -3.157000 +vertex_buffer: -0.162147 +vertex_buffer: 5.785029 +vertex_buffer: 0.721300 +vertex_buffer: 0.267400 +vertex_buffer: -3.531000 +vertex_buffer: -0.166494 +vertex_buffer: 5.484131 +vertex_buffer: 0.701800 +vertex_buffer: 0.304700 +vertex_buffer: -3.555000 +vertex_buffer: -0.192763 +vertex_buffer: 5.747826 +vertex_buffer: 0.725400 +vertex_buffer: 0.303100 +vertex_buffer: -3.976000 +vertex_buffer: -0.148364 +vertex_buffer: 5.442722 +vertex_buffer: 0.702100 +vertex_buffer: 0.342800 +vertex_buffer: -4.003000 +vertex_buffer: -0.174541 +vertex_buffer: 5.706427 +vertex_buffer: 0.725800 +vertex_buffer: 0.343700 +vertex_buffer: -4.497000 +vertex_buffer: -0.058778 +vertex_buffer: 5.395236 +vertex_buffer: 0.697700 +vertex_buffer: 0.388400 +vertex_buffer: -4.527000 +vertex_buffer: -0.084248 +vertex_buffer: 5.658007 +vertex_buffer: 0.721200 +vertex_buffer: 0.391700 +vertex_buffer: -4.998000 +vertex_buffer: 0.089161 +vertex_buffer: 5.349538 +vertex_buffer: 0.689300 +vertex_buffer: 0.433000 +vertex_buffer: -5.031000 +vertex_buffer: 0.064621 +vertex_buffer: 5.613392 +vertex_buffer: 0.712400 +vertex_buffer: 0.438700 +vertex_buffer: -5.385000 +vertex_buffer: 0.281523 +vertex_buffer: 5.313533 +vertex_buffer: 0.678700 +vertex_buffer: 0.468700 +vertex_buffer: -5.421000 +vertex_buffer: 0.257431 +vertex_buffer: 5.576402 +vertex_buffer: 0.701000 +vertex_buffer: 0.476900 +vertex_buffer: -5.683000 +vertex_buffer: 0.518260 +vertex_buffer: 5.286230 +vertex_buffer: 0.666000 +vertex_buffer: 0.498600 +vertex_buffer: -5.721000 +vertex_buffer: 0.496939 +vertex_buffer: 5.548265 +vertex_buffer: 0.687200 +vertex_buffer: 0.509400 +vertex_buffer: -5.918000 +vertex_buffer: 0.804496 +vertex_buffer: 5.264621 +vertex_buffer: 0.650300 +vertex_buffer: 0.525800 +vertex_buffer: -5.957000 +vertex_buffer: 0.784151 +vertex_buffer: 5.527718 +vertex_buffer: 0.670200 +vertex_buffer: 0.538900 +vertex_buffer: -6.120000 +vertex_buffer: 1.183657 +vertex_buffer: 5.248272 +vertex_buffer: 0.628500 +vertex_buffer: 0.555500 +vertex_buffer: -6.161000 +vertex_buffer: 1.167104 +vertex_buffer: 5.510539 +vertex_buffer: 0.646800 +vertex_buffer: 0.570600 +vertex_buffer: -6.320000 +vertex_buffer: 1.704134 +vertex_buffer: 5.230291 +vertex_buffer: 0.596500 +vertex_buffer: 0.591700 +vertex_buffer: -6.362000 +vertex_buffer: 1.690342 +vertex_buffer: 5.492670 +vertex_buffer: 0.613200 +vertex_buffer: 0.608400 +vertex_buffer: -6.474000 +vertex_buffer: 2.198605 +vertex_buffer: 5.215522 +vertex_buffer: 0.564500 +vertex_buffer: 0.621700 +vertex_buffer: -6.517000 +vertex_buffer: 2.189372 +vertex_buffer: 5.478011 +vertex_buffer: 0.578900 +vertex_buffer: 0.640500 +vertex_buffer: -6.539000 +vertex_buffer: 2.504945 +vertex_buffer: 5.211481 +vertex_buffer: 0.544500 +vertex_buffer: 0.635600 +vertex_buffer: -6.582000 +vertex_buffer: 2.497934 +vertex_buffer: 5.474017 +vertex_buffer: 0.555500 +vertex_buffer: 0.656500 +vertex_buffer: -6.553000 +vertex_buffer: 2.725349 +vertex_buffer: 5.213535 +vertex_buffer: 0.530300 +vertex_buffer: 0.641900 +vertex_buffer: -6.596000 +vertex_buffer: 2.719937 +vertex_buffer: 5.476101 +vertex_buffer: 0.537300 +vertex_buffer: 0.664300 +vertex_buffer: -6.533000 +vertex_buffer: 3.199424 +vertex_buffer: 5.228640 +vertex_buffer: 0.497800 +vertex_buffer: 0.645600 +vertex_buffer: -6.470000 +vertex_buffer: 3.409966 +vertex_buffer: 5.244696 +vertex_buffer: 0.483800 +vertex_buffer: 0.641800 +vertex_buffer: -6.513000 +vertex_buffer: 3.409522 +vertex_buffer: 5.507394 +vertex_buffer: 0.474900 +vertex_buffer: 0.663500 +vertex_buffer: -6.576000 +vertex_buffer: 3.198442 +vertex_buffer: 5.491320 +vertex_buffer: 0.494500 +vertex_buffer: 0.668800 +vertex_buffer: -6.364000 +vertex_buffer: 3.585690 +vertex_buffer: 5.266664 +vertex_buffer: 0.472500 +vertex_buffer: 0.635000 +vertex_buffer: -6.406000 +vertex_buffer: 3.585370 +vertex_buffer: 5.529394 +vertex_buffer: 0.458400 +vertex_buffer: 0.653700 +vertex_buffer: -6.211000 +vertex_buffer: 3.712655 +vertex_buffer: 5.295723 +vertex_buffer: 0.463500 +vertex_buffer: 0.625200 +vertex_buffer: -6.252000 +vertex_buffer: 3.712336 +vertex_buffer: 5.558482 +vertex_buffer: 0.445200 +vertex_buffer: 0.640100 +vertex_buffer: -6.005000 +vertex_buffer: 3.802610 +vertex_buffer: 5.332299 +vertex_buffer: 0.455400 +vertex_buffer: 0.610600 +vertex_buffer: -6.045000 +vertex_buffer: 3.803292 +vertex_buffer: 5.595116 +vertex_buffer: 0.434500 +vertex_buffer: 0.621600 +vertex_buffer: -6.037000 +vertex_buffer: 4.056250 +vertex_buffer: 5.629091 +vertex_buffer: 0.411100 +vertex_buffer: 0.623400 +vertex_buffer: -6.039000 +vertex_buffer: 4.074257 +vertex_buffer: 5.623531 +vertex_buffer: 0.409400 +vertex_buffer: 0.623900 +vertex_buffer: -6.423000 +vertex_buffer: 4.004336 +vertex_buffer: 5.558594 +vertex_buffer: 0.419200 +vertex_buffer: 0.658700 +vertex_buffer: -6.423000 +vertex_buffer: 3.986328 +vertex_buffer: 5.564086 +vertex_buffer: 0.421000 +vertex_buffer: 0.658400 +vertex_buffer: -0.161204 +vertex_buffer: 3.872203 +vertex_buffer: 6.124216 +vertex_buffer: 0.328200 +vertex_buffer: 0.091200 +vertex_buffer: -0.161204 +vertex_buffer: 3.891212 +vertex_buffer: 6.117588 +vertex_buffer: 0.326700 +vertex_buffer: 0.091900 +vertex_buffer: -5.123000 +vertex_buffer: 4.039073 +vertex_buffer: 5.774945 +vertex_buffer: 0.404100 +vertex_buffer: 0.538900 +vertex_buffer: -4.721000 +vertex_buffer: 4.077003 +vertex_buffer: 5.831477 +vertex_buffer: 0.397000 +vertex_buffer: 0.502300 +vertex_buffer: -4.271000 +vertex_buffer: 4.098935 +vertex_buffer: 5.888552 +vertex_buffer: 0.390400 +vertex_buffer: 0.461300 +vertex_buffer: -3.729000 +vertex_buffer: 4.096870 +vertex_buffer: 5.941803 +vertex_buffer: 0.384400 +vertex_buffer: 0.412000 +vertex_buffer: -3.048000 +vertex_buffer: 4.063818 +vertex_buffer: 5.984507 +vertex_buffer: 0.378900 +vertex_buffer: 0.349800 +vertex_buffer: -2.381000 +vertex_buffer: 4.006780 +vertex_buffer: 6.014984 +vertex_buffer: 0.375400 +vertex_buffer: 0.288600 +vertex_buffer: -1.878000 +vertex_buffer: 3.931761 +vertex_buffer: 6.031074 +vertex_buffer: 0.374400 +vertex_buffer: 0.241400 +vertex_buffer: -1.511000 +vertex_buffer: 3.825745 +vertex_buffer: 6.044150 +vertex_buffer: 0.376500 +vertex_buffer: 0.205400 +vertex_buffer: -1.255000 +vertex_buffer: 3.678731 +vertex_buffer: 6.055741 +vertex_buffer: 0.382200 +vertex_buffer: 0.177200 +vertex_buffer: -1.089000 +vertex_buffer: 3.495725 +vertex_buffer: 6.060867 +vertex_buffer: 0.392000 +vertex_buffer: 0.154300 +vertex_buffer: -7.368000 +vertex_buffer: 3.429113 +vertex_buffer: 4.918401 +vertex_buffer: 0.485300 +vertex_buffer: 0.778700 +vertex_buffer: -7.384000 +vertex_buffer: 3.421252 +vertex_buffer: 4.934308 +vertex_buffer: 0.485600 +vertex_buffer: 0.776500 +vertex_buffer: -7.390000 +vertex_buffer: 3.421208 +vertex_buffer: 4.963075 +vertex_buffer: 0.485400 +vertex_buffer: 0.773800 +vertex_buffer: -6.731000 +vertex_buffer: 4.042418 +vertex_buffer: 5.490926 +vertex_buffer: 0.421100 +vertex_buffer: 0.690200 +vertex_buffer: -6.682000 +vertex_buffer: 4.016409 +vertex_buffer: 5.498264 +vertex_buffer: 0.421100 +vertex_buffer: 0.685200 +vertex_buffer: -6.705000 +vertex_buffer: 4.043604 +vertex_buffer: 5.335893 +vertex_buffer: 0.407500 +vertex_buffer: 0.692800 +vertex_buffer: -6.756000 +vertex_buffer: 4.052422 +vertex_buffer: 5.487188 +vertex_buffer: 0.421100 +vertex_buffer: 0.692600 +vertex_buffer: -6.730000 +vertex_buffer: 4.053610 +vertex_buffer: 5.332153 +vertex_buffer: 0.407600 +vertex_buffer: 0.696200 +vertex_buffer: -7.324000 +vertex_buffer: 3.925648 +vertex_buffer: 5.302373 +vertex_buffer: 0.441600 +vertex_buffer: 0.741500 +vertex_buffer: -7.245000 +vertex_buffer: 3.945572 +vertex_buffer: 5.364015 +vertex_buffer: 0.439000 +vertex_buffer: 0.733300 +vertex_buffer: -7.163000 +vertex_buffer: 3.956799 +vertex_buffer: 5.178050 +vertex_buffer: 0.423200 +vertex_buffer: 0.741400 +vertex_buffer: -7.388000 +vertex_buffer: 3.689770 +vertex_buffer: 5.200229 +vertex_buffer: 0.461200 +vertex_buffer: 0.753100 +vertex_buffer: -7.382000 +vertex_buffer: 3.563775 +vertex_buffer: 5.197168 +vertex_buffer: 0.472400 +vertex_buffer: 0.753000 +vertex_buffer: -7.332000 +vertex_buffer: 3.556638 +vertex_buffer: 5.309948 +vertex_buffer: 0.473200 +vertex_buffer: 0.741700 +vertex_buffer: -7.338000 +vertex_buffer: 3.693634 +vertex_buffer: 5.313308 +vertex_buffer: 0.461200 +vertex_buffer: 0.742000 +vertex_buffer: -7.394000 +vertex_buffer: 3.828768 +vertex_buffer: 5.202885 +vertex_buffer: 0.448900 +vertex_buffer: 0.752700 +vertex_buffer: -7.344000 +vertex_buffer: 3.841630 +vertex_buffer: 5.316260 +vertex_buffer: 0.448600 +vertex_buffer: 0.742100 +vertex_buffer: -7.409000 +vertex_buffer: 3.688910 +vertex_buffer: 5.086159 +vertex_buffer: 0.460500 +vertex_buffer: 0.763400 +vertex_buffer: -7.404000 +vertex_buffer: 3.567912 +vertex_buffer: 5.083268 +vertex_buffer: 0.471600 +vertex_buffer: 0.763600 +vertex_buffer: -7.378000 +vertex_buffer: 3.465778 +vertex_buffer: 5.194996 +vertex_buffer: 0.481200 +vertex_buffer: 0.752700 +vertex_buffer: -7.328000 +vertex_buffer: 3.449639 +vertex_buffer: 5.308569 +vertex_buffer: 0.482800 +vertex_buffer: 0.741300 +vertex_buffer: -7.400000 +vertex_buffer: 3.473913 +vertex_buffer: 5.082194 +vertex_buffer: 0.480200 +vertex_buffer: 0.763300 +vertex_buffer: -6.908000 +vertex_buffer: 2.184744 +vertex_buffer: 5.412607 +vertex_buffer: 0.590700 +vertex_buffer: 0.674900 +vertex_buffer: -6.905000 +vertex_buffer: 2.185023 +vertex_buffer: 5.432654 +vertex_buffer: 0.590000 +vertex_buffer: 0.673600 +vertex_buffer: -7.015000 +vertex_buffer: 2.609164 +vertex_buffer: 5.423767 +vertex_buffer: 0.557400 +vertex_buffer: 0.697000 +vertex_buffer: -7.020000 +vertex_buffer: 2.610649 +vertex_buffer: 5.402780 +vertex_buffer: 0.558100 +vertex_buffer: 0.698700 +vertex_buffer: -7.084000 +vertex_buffer: 2.909114 +vertex_buffer: 5.419270 +vertex_buffer: 0.532900 +vertex_buffer: 0.711400 +vertex_buffer: -7.088000 +vertex_buffer: 2.910428 +vertex_buffer: 5.398292 +vertex_buffer: 0.533900 +vertex_buffer: 0.713500 +vertex_buffer: -7.083000 +vertex_buffer: 2.911894 +vertex_buffer: 5.367240 +vertex_buffer: 0.535500 +vertex_buffer: 0.716300 +vertex_buffer: -7.014000 +vertex_buffer: 2.612348 +vertex_buffer: 5.372723 +vertex_buffer: 0.559400 +vertex_buffer: 0.701000 +vertex_buffer: -6.903000 +vertex_buffer: 2.185808 +vertex_buffer: 5.382556 +vertex_buffer: 0.592200 +vertex_buffer: 0.676700 +vertex_buffer: -6.533000 +vertex_buffer: 1.084648 +vertex_buffer: 5.446417 +vertex_buffer: 0.666100 +vertex_buffer: 0.601300 +vertex_buffer: -6.529000 +vertex_buffer: 1.085318 +vertex_buffer: 5.466516 +vertex_buffer: 0.665200 +vertex_buffer: 0.600100 +vertex_buffer: -6.739000 +vertex_buffer: 1.640851 +vertex_buffer: 5.449055 +vertex_buffer: 0.628600 +vertex_buffer: 0.639300 +vertex_buffer: -6.742000 +vertex_buffer: 1.640917 +vertex_buffer: 5.427999 +vertex_buffer: 0.629500 +vertex_buffer: 0.640600 +vertex_buffer: -6.737000 +vertex_buffer: 1.642377 +vertex_buffer: 5.398982 +vertex_buffer: 0.631000 +vertex_buffer: 0.642200 +vertex_buffer: -6.528000 +vertex_buffer: 1.086538 +vertex_buffer: 5.417442 +vertex_buffer: 0.667800 +vertex_buffer: 0.602700 +vertex_buffer: -6.003000 +vertex_buffer: 0.255079 +vertex_buffer: 5.489431 +vertex_buffer: 0.716100 +vertex_buffer: 0.528500 +vertex_buffer: -6.000000 +vertex_buffer: 0.257294 +vertex_buffer: 5.509676 +vertex_buffer: 0.715000 +vertex_buffer: 0.527700 +vertex_buffer: -6.288000 +vertex_buffer: 0.625632 +vertex_buffer: 5.486957 +vertex_buffer: 0.693500 +vertex_buffer: 0.563300 +vertex_buffer: -6.291000 +vertex_buffer: 0.625286 +vertex_buffer: 5.465851 +vertex_buffer: 0.694500 +vertex_buffer: 0.564300 +vertex_buffer: -6.286000 +vertex_buffer: 0.627545 +vertex_buffer: 5.436914 +vertex_buffer: 0.696300 +vertex_buffer: 0.565500 +vertex_buffer: -5.998000 +vertex_buffer: 0.257626 +vertex_buffer: 5.460527 +vertex_buffer: 0.717900 +vertex_buffer: 0.529200 +vertex_buffer: -5.206000 +vertex_buffer: -0.240425 +vertex_buffer: 5.581224 +vertex_buffer: 0.742200 +vertex_buffer: 0.448800 +vertex_buffer: -5.653000 +vertex_buffer: -0.027764 +vertex_buffer: 5.540468 +vertex_buffer: 0.730900 +vertex_buffer: 0.491200 +vertex_buffer: -5.654000 +vertex_buffer: -0.031813 +vertex_buffer: 5.520029 +vertex_buffer: 0.732100 +vertex_buffer: 0.491600 +vertex_buffer: -5.207000 +vertex_buffer: -0.244371 +vertex_buffer: 5.560722 +vertex_buffer: 0.743600 +vertex_buffer: 0.449000 +vertex_buffer: -5.650000 +vertex_buffer: -0.029051 +vertex_buffer: 5.491153 +vertex_buffer: 0.733900 +vertex_buffer: 0.492100 +vertex_buffer: -5.203000 +vertex_buffer: -0.241444 +vertex_buffer: 5.531871 +vertex_buffer: 0.745600 +vertex_buffer: 0.449300 +vertex_buffer: -4.016000 +vertex_buffer: -0.480513 +vertex_buffer: 5.673766 +vertex_buffer: 0.754500 +vertex_buffer: 0.340800 +vertex_buffer: -4.621000 +vertex_buffer: -0.391864 +vertex_buffer: 5.635941 +vertex_buffer: 0.750000 +vertex_buffer: 0.395500 +vertex_buffer: -4.620000 +vertex_buffer: -0.395742 +vertex_buffer: 5.615424 +vertex_buffer: 0.751500 +vertex_buffer: 0.395400 +vertex_buffer: -4.617000 +vertex_buffer: -0.392702 +vertex_buffer: 5.586584 +vertex_buffer: 0.753800 +vertex_buffer: 0.395400 +vertex_buffer: -4.013000 +vertex_buffer: -0.477298 +vertex_buffer: 5.643938 +vertex_buffer: 0.756800 +vertex_buffer: 0.340500 +vertex_buffer: -3.518000 +vertex_buffer: -0.492638 +vertex_buffer: 5.720739 +vertex_buffer: 0.752500 +vertex_buffer: 0.296200 +vertex_buffer: -3.084000 +vertex_buffer: -0.448549 +vertex_buffer: 5.761671 +vertex_buffer: 0.746100 +vertex_buffer: 0.257700 +vertex_buffer: -3.515000 +vertex_buffer: -0.489527 +vertex_buffer: 5.691905 +vertex_buffer: 0.754500 +vertex_buffer: 0.295700 +vertex_buffer: -3.082000 +vertex_buffer: -0.445479 +vertex_buffer: 5.732834 +vertex_buffer: 0.747900 +vertex_buffer: 0.257000 +vertex_buffer: -2.677000 +vertex_buffer: -0.361736 +vertex_buffer: 5.800979 +vertex_buffer: 0.735300 +vertex_buffer: 0.222100 +vertex_buffer: -2.305000 +vertex_buffer: -0.223998 +vertex_buffer: 5.838167 +vertex_buffer: 0.720500 +vertex_buffer: 0.190100 +vertex_buffer: -2.675000 +vertex_buffer: -0.358633 +vertex_buffer: 5.771141 +vertex_buffer: 0.737000 +vertex_buffer: 0.221200 +vertex_buffer: -2.303000 +vertex_buffer: -0.221111 +vertex_buffer: 5.809313 +vertex_buffer: 0.721900 +vertex_buffer: 0.189000 +vertex_buffer: -1.692000 +vertex_buffer: 0.245474 +vertex_buffer: 5.908408 +vertex_buffer: 0.676300 +vertex_buffer: 0.137900 +vertex_buffer: -1.976000 +vertex_buffer: -0.026330 +vertex_buffer: 5.874317 +vertex_buffer: 0.701400 +vertex_buffer: 0.161900 +vertex_buffer: -1.975000 +vertex_buffer: -0.023597 +vertex_buffer: 5.845441 +vertex_buffer: 0.702600 +vertex_buffer: 0.160700 +vertex_buffer: -1.691000 +vertex_buffer: 0.248176 +vertex_buffer: 5.877510 +vertex_buffer: 0.677500 +vertex_buffer: 0.136600 +vertex_buffer: -1.452000 +vertex_buffer: 0.604624 +vertex_buffer: 5.938093 +vertex_buffer: 0.643600 +vertex_buffer: 0.118300 +vertex_buffer: -1.254000 +vertex_buffer: 0.989443 +vertex_buffer: 5.961424 +vertex_buffer: 0.608300 +vertex_buffer: 0.103100 +vertex_buffer: -1.450000 +vertex_buffer: 0.607258 +vertex_buffer: 5.904162 +vertex_buffer: 0.644900 +vertex_buffer: 0.116600 +vertex_buffer: -1.252000 +vertex_buffer: 0.994063 +vertex_buffer: 5.922544 +vertex_buffer: 0.609600 +vertex_buffer: 0.100800 +vertex_buffer: -0.865999 +vertex_buffer: 1.935713 +vertex_buffer: 5.995851 +vertex_buffer: 0.520400 +vertex_buffer: 0.078900 +vertex_buffer: -0.772000 +vertex_buffer: 2.209203 +vertex_buffer: 6.003275 +vertex_buffer: 0.494500 +vertex_buffer: 0.074900 +vertex_buffer: -0.971999 +vertex_buffer: 1.652134 +vertex_buffer: 5.987543 +vertex_buffer: 0.547000 +vertex_buffer: 0.084400 +vertex_buffer: -0.966999 +vertex_buffer: 1.668315 +vertex_buffer: 5.944821 +vertex_buffer: 0.547200 +vertex_buffer: 0.081100 +vertex_buffer: -0.863000 +vertex_buffer: 1.948596 +vertex_buffer: 5.952001 +vertex_buffer: 0.520800 +vertex_buffer: 0.075400 +vertex_buffer: -0.769999 +vertex_buffer: 2.215653 +vertex_buffer: 5.961298 +vertex_buffer: 0.495500 +vertex_buffer: 0.071400 +vertex_buffer: -0.514999 +vertex_buffer: 2.916695 +vertex_buffer: 6.040083 +vertex_buffer: 0.425600 +vertex_buffer: 0.069300 +vertex_buffer: -0.424999 +vertex_buffer: 3.024258 +vertex_buffer: 6.048843 +vertex_buffer: 0.412600 +vertex_buffer: 0.066600 +vertex_buffer: -0.591999 +vertex_buffer: 2.742815 +vertex_buffer: 6.028760 +vertex_buffer: 0.443300 +vertex_buffer: 0.070900 +vertex_buffer: -0.591999 +vertex_buffer: 2.744505 +vertex_buffer: 5.993680 +vertex_buffer: 0.444800 +vertex_buffer: 0.067000 +vertex_buffer: -0.513999 +vertex_buffer: 2.917200 +vertex_buffer: 6.005992 +vertex_buffer: 0.427100 +vertex_buffer: 0.065200 +vertex_buffer: -0.424999 +vertex_buffer: 3.024675 +vertex_buffer: 6.013738 +vertex_buffer: 0.414200 +vertex_buffer: 0.062300 +vertex_buffer: -0.175999 +vertex_buffer: 3.101383 +vertex_buffer: 6.086278 +vertex_buffer: 0.389600 +vertex_buffer: 0.058200 +vertex_buffer: -0.175000 +vertex_buffer: 3.090547 +vertex_buffer: 6.062042 +vertex_buffer: 0.390800 +vertex_buffer: 0.056200 +vertex_buffer: -0.175000 +vertex_buffer: 3.090911 +vertex_buffer: 6.025931 +vertex_buffer: 0.392000 +vertex_buffer: 0.053200 +vertex_buffer: -0.160167 +vertex_buffer: 3.898008 +vertex_buffer: 5.887536 +vertex_buffer: 0.307400 +vertex_buffer: 0.098600 +vertex_buffer: -0.160685 +vertex_buffer: 3.897754 +vertex_buffer: 6.097155 +vertex_buffer: 0.325000 +vertex_buffer: 0.092400 +vertex_buffer: -0.308999 +vertex_buffer: 3.899940 +vertex_buffer: 5.883926 +vertex_buffer: 0.311900 +vertex_buffer: 0.111200 +vertex_buffer: -0.564999 +vertex_buffer: 3.911948 +vertex_buffer: 5.877517 +vertex_buffer: 0.319300 +vertex_buffer: 0.132900 +vertex_buffer: -0.566999 +vertex_buffer: 3.911705 +vertex_buffer: 6.076673 +vertex_buffer: 0.336500 +vertex_buffer: 0.127500 +vertex_buffer: -0.309999 +vertex_buffer: 3.899688 +vertex_buffer: 6.091125 +vertex_buffer: 0.329600 +vertex_buffer: 0.105100 +vertex_buffer: -0.913999 +vertex_buffer: 3.946957 +vertex_buffer: 5.869241 +vertex_buffer: 0.328200 +vertex_buffer: 0.163100 +vertex_buffer: -1.134000 +vertex_buffer: 3.983963 +vertex_buffer: 5.865006 +vertex_buffer: 0.332700 +vertex_buffer: 0.182700 +vertex_buffer: -1.138000 +vertex_buffer: 3.983746 +vertex_buffer: 6.043078 +vertex_buffer: 0.348800 +vertex_buffer: 0.179100 +vertex_buffer: -0.917998 +vertex_buffer: 3.946730 +vertex_buffer: 6.055342 +vertex_buffer: 0.344700 +vertex_buffer: 0.158600 +vertex_buffer: -1.440000 +vertex_buffer: 4.040969 +vertex_buffer: 5.860402 +vertex_buffer: 0.337200 +vertex_buffer: 0.210500 +vertex_buffer: -1.446000 +vertex_buffer: 4.040765 +vertex_buffer: 6.028466 +vertex_buffer: 0.352600 +vertex_buffer: 0.207800 +vertex_buffer: -1.842000 +vertex_buffer: 4.116976 +vertex_buffer: 5.854689 +vertex_buffer: 0.340800 +vertex_buffer: 0.247500 +vertex_buffer: -1.849000 +vertex_buffer: 4.116782 +vertex_buffer: 6.014755 +vertex_buffer: 0.355300 +vertex_buffer: 0.245400 +vertex_buffer: -2.365000 +vertex_buffer: 4.191994 +vertex_buffer: 5.839317 +vertex_buffer: 0.343600 +vertex_buffer: 0.295500 +vertex_buffer: -2.375000 +vertex_buffer: 4.191801 +vertex_buffer: 5.998422 +vertex_buffer: 0.357900 +vertex_buffer: 0.293700 +vertex_buffer: -3.037000 +vertex_buffer: 4.246034 +vertex_buffer: 5.806757 +vertex_buffer: 0.347700 +vertex_buffer: 0.356800 +vertex_buffer: -3.049000 +vertex_buffer: 4.245842 +vertex_buffer: 5.964849 +vertex_buffer: 0.361800 +vertex_buffer: 0.354900 +vertex_buffer: -3.715000 +vertex_buffer: 4.275089 +vertex_buffer: 5.761637 +vertex_buffer: 0.353500 +vertex_buffer: 0.418500 +vertex_buffer: -3.730000 +vertex_buffer: 4.274898 +vertex_buffer: 5.918684 +vertex_buffer: 0.367500 +vertex_buffer: 0.416400 +vertex_buffer: -4.256000 +vertex_buffer: 4.276154 +vertex_buffer: 5.708864 +vertex_buffer: 0.359900 +vertex_buffer: 0.467800 +vertex_buffer: -4.272000 +vertex_buffer: 4.275964 +vertex_buffer: 5.864934 +vertex_buffer: 0.373700 +vertex_buffer: 0.465300 +vertex_buffer: -4.708000 +vertex_buffer: 4.255222 +vertex_buffer: 5.651724 +vertex_buffer: 0.366600 +vertex_buffer: 0.509100 +vertex_buffer: -4.727000 +vertex_buffer: 4.255031 +vertex_buffer: 5.808805 +vertex_buffer: 0.380400 +vertex_buffer: 0.506400 +vertex_buffer: -5.121000 +vertex_buffer: 4.218292 +vertex_buffer: 5.593769 +vertex_buffer: 0.374100 +vertex_buffer: 0.546800 +vertex_buffer: -5.141000 +vertex_buffer: 4.218103 +vertex_buffer: 5.749862 +vertex_buffer: 0.387700 +vertex_buffer: 0.543700 +vertex_buffer: -5.541000 +vertex_buffer: 4.161374 +vertex_buffer: 5.527558 +vertex_buffer: 0.382900 +vertex_buffer: 0.585100 +vertex_buffer: -5.563000 +vertex_buffer: 4.161185 +vertex_buffer: 5.683634 +vertex_buffer: 0.396500 +vertex_buffer: 0.581700 +vertex_buffer: -6.421000 +vertex_buffer: 4.010359 +vertex_buffer: 5.539717 +vertex_buffer: 0.417300 +vertex_buffer: 0.659100 +vertex_buffer: -6.397000 +vertex_buffer: 4.010548 +vertex_buffer: 5.384649 +vertex_buffer: 0.403600 +vertex_buffer: 0.662500 +vertex_buffer: -6.544000 +vertex_buffer: 3.985577 +vertex_buffer: 5.360784 +vertex_buffer: 0.406900 +vertex_buffer: 0.676000 +vertex_buffer: -6.569000 +vertex_buffer: 3.985388 +vertex_buffer: 5.515851 +vertex_buffer: 0.420800 +vertex_buffer: 0.673000 +vertex_buffer: -6.573000 +vertex_buffer: 3.986582 +vertex_buffer: 5.355649 +vertex_buffer: 0.407300 +vertex_buffer: 0.679000 +vertex_buffer: -6.599000 +vertex_buffer: 3.985394 +vertex_buffer: 5.510681 +vertex_buffer: 0.421300 +vertex_buffer: 0.676400 +vertex_buffer: -7.373000 +vertex_buffer: 3.354023 +vertex_buffer: 5.193658 +vertex_buffer: 0.491700 +vertex_buffer: 0.752000 +vertex_buffer: -7.366000 +vertex_buffer: 3.322574 +vertex_buffer: 5.191911 +vertex_buffer: 0.494900 +vertex_buffer: 0.751700 +vertex_buffer: -7.319000 +vertex_buffer: 3.288599 +vertex_buffer: 5.301133 +vertex_buffer: 0.498200 +vertex_buffer: 0.740900 +vertex_buffer: -7.324000 +vertex_buffer: 3.321116 +vertex_buffer: 5.305876 +vertex_buffer: 0.494900 +vertex_buffer: 0.740900 +vertex_buffer: -7.375000 +vertex_buffer: 3.401205 +vertex_buffer: 5.194645 +vertex_buffer: 0.487200 +vertex_buffer: 0.752300 +vertex_buffer: -7.325000 +vertex_buffer: 3.374361 +vertex_buffer: 5.306991 +vertex_buffer: 0.489800 +vertex_buffer: 0.741000 +vertex_buffer: -7.397000 +vertex_buffer: 3.416131 +vertex_buffer: 5.080994 +vertex_buffer: 0.485600 +vertex_buffer: 0.762900 +vertex_buffer: -7.395000 +vertex_buffer: 3.373998 +vertex_buffer: 5.080125 +vertex_buffer: 0.489800 +vertex_buffer: 0.762500 +vertex_buffer: -7.387000 +vertex_buffer: 3.343615 +vertex_buffer: 5.081372 +vertex_buffer: 0.492900 +vertex_buffer: 0.761800 +vertex_buffer: -7.029000 +vertex_buffer: 3.235427 +vertex_buffer: 5.442892 +vertex_buffer: 0.500000 +vertex_buffer: 0.709900 +vertex_buffer: -7.070000 +vertex_buffer: 3.091998 +vertex_buffer: 5.433068 +vertex_buffer: 0.514600 +vertex_buffer: 0.712700 +vertex_buffer: -7.022000 +vertex_buffer: 2.889068 +vertex_buffer: 5.435387 +vertex_buffer: 0.532600 +vertex_buffer: 0.704800 +vertex_buffer: -6.851000 +vertex_buffer: 2.185456 +vertex_buffer: 5.448593 +vertex_buffer: 0.589200 +vertex_buffer: 0.669000 +vertex_buffer: -6.686000 +vertex_buffer: 1.648025 +vertex_buffer: 5.464385 +vertex_buffer: 0.627300 +vertex_buffer: 0.634700 +vertex_buffer: -6.477000 +vertex_buffer: 1.096167 +vertex_buffer: 5.483227 +vertex_buffer: 0.663500 +vertex_buffer: 0.595600 +vertex_buffer: -6.241000 +vertex_buffer: 0.648369 +vertex_buffer: 5.502466 +vertex_buffer: 0.690900 +vertex_buffer: 0.559700 +vertex_buffer: -5.962000 +vertex_buffer: 0.290931 +vertex_buffer: 5.525226 +vertex_buffer: 0.711800 +vertex_buffer: 0.525300 +vertex_buffer: -5.621000 +vertex_buffer: 0.011939 +vertex_buffer: 5.554988 +vertex_buffer: 0.727300 +vertex_buffer: 0.489600 +vertex_buffer: -5.182000 +vertex_buffer: -0.198576 +vertex_buffer: 5.594482 +vertex_buffer: 0.738500 +vertex_buffer: 0.447900 +vertex_buffer: -4.608000 +vertex_buffer: -0.350880 +vertex_buffer: 5.648281 +vertex_buffer: 0.746300 +vertex_buffer: 0.395400 +vertex_buffer: -1.113000 +vertex_buffer: 3.449733 +vertex_buffer: 6.054213 +vertex_buffer: 0.397000 +vertex_buffer: 0.155000 +vertex_buffer: -1.026000 +vertex_buffer: 3.253676 +vertex_buffer: 6.053582 +vertex_buffer: 0.409500 +vertex_buffer: 0.137700 +vertex_buffer: -0.996000 +vertex_buffer: 3.282831 +vertex_buffer: 6.059953 +vertex_buffer: 0.406300 +vertex_buffer: 0.135300 +vertex_buffer: -0.995000 +vertex_buffer: 3.051447 +vertex_buffer: 6.047233 +vertex_buffer: 0.424700 +vertex_buffer: 0.124600 +vertex_buffer: -0.959000 +vertex_buffer: 3.060441 +vertex_buffer: 6.053281 +vertex_buffer: 0.423100 +vertex_buffer: 0.121200 +vertex_buffer: -1.002000 +vertex_buffer: 2.851300 +vertex_buffer: 6.039246 +vertex_buffer: 0.441300 +vertex_buffer: 0.115500 +vertex_buffer: -0.963999 +vertex_buffer: 2.854220 +vertex_buffer: 6.045182 +vertex_buffer: 0.440400 +vertex_buffer: 0.112300 +vertex_buffer: -1.029000 +vertex_buffer: 2.651189 +vertex_buffer: 6.031563 +vertex_buffer: 0.459000 +vertex_buffer: 0.109600 +vertex_buffer: -0.990999 +vertex_buffer: 2.653096 +vertex_buffer: 6.036448 +vertex_buffer: 0.458200 +vertex_buffer: 0.106700 +vertex_buffer: -1.097000 +vertex_buffer: 2.228836 +vertex_buffer: 6.018098 +vertex_buffer: 0.496900 +vertex_buffer: 0.104000 +vertex_buffer: -1.165000 +vertex_buffer: 1.975309 +vertex_buffer: 6.012578 +vertex_buffer: 0.520100 +vertex_buffer: 0.104800 +vertex_buffer: -1.128000 +vertex_buffer: 1.970127 +vertex_buffer: 6.016251 +vertex_buffer: 0.520000 +vertex_buffer: 0.101900 +vertex_buffer: -1.059000 +vertex_buffer: 2.224682 +vertex_buffer: 6.021839 +vertex_buffer: 0.496600 +vertex_buffer: 0.100900 +vertex_buffer: -1.256000 +vertex_buffer: 1.689579 +vertex_buffer: 6.004839 +vertex_buffer: 0.546200 +vertex_buffer: 0.108400 +vertex_buffer: -1.220000 +vertex_buffer: 1.684315 +vertex_buffer: 6.009456 +vertex_buffer: 0.546200 +vertex_buffer: 0.105700 +vertex_buffer: -1.473000 +vertex_buffer: 1.027319 +vertex_buffer: 5.983487 +vertex_buffer: 0.606200 +vertex_buffer: 0.121800 +vertex_buffer: -1.505000 +vertex_buffer: 1.033672 +vertex_buffer: 5.979010 +vertex_buffer: 0.606100 +vertex_buffer: 0.124200 +vertex_buffer: -1.682000 +vertex_buffer: 0.697967 +vertex_buffer: 5.958683 +vertex_buffer: 0.636900 +vertex_buffer: 0.137900 +vertex_buffer: -1.653000 +vertex_buffer: 0.685548 +vertex_buffer: 5.962807 +vertex_buffer: 0.637600 +vertex_buffer: 0.135700 +vertex_buffer: -1.897000 +vertex_buffer: 0.393956 +vertex_buffer: 5.932780 +vertex_buffer: 0.664800 +vertex_buffer: 0.155900 +vertex_buffer: -1.870000 +vertex_buffer: 0.373460 +vertex_buffer: 5.936254 +vertex_buffer: 0.666200 +vertex_buffer: 0.153700 +vertex_buffer: -2.147000 +vertex_buffer: 0.153813 +vertex_buffer: 5.904973 +vertex_buffer: 0.687200 +vertex_buffer: 0.177600 +vertex_buffer: -2.126000 +vertex_buffer: 0.129370 +vertex_buffer: 5.906939 +vertex_buffer: 0.688900 +vertex_buffer: 0.175700 +vertex_buffer: -2.440000 +vertex_buffer: -0.020145 +vertex_buffer: 5.872978 +vertex_buffer: 0.704100 +vertex_buffer: 0.203300 +vertex_buffer: -2.423000 +vertex_buffer: -0.046668 +vertex_buffer: 5.875523 +vertex_buffer: 0.706000 +vertex_buffer: 0.201700 +vertex_buffer: -2.780000 +vertex_buffer: -0.124213 +vertex_buffer: 5.840999 +vertex_buffer: 0.715900 +vertex_buffer: 0.233200 +vertex_buffer: -2.766000 +vertex_buffer: -0.156626 +vertex_buffer: 5.841841 +vertex_buffer: 0.718300 +vertex_buffer: 0.231700 +vertex_buffer: -3.155000 +vertex_buffer: -0.181509 +vertex_buffer: 5.807231 +vertex_buffer: 0.723500 +vertex_buffer: 0.266600 +vertex_buffer: -3.146000 +vertex_buffer: -0.218907 +vertex_buffer: 5.807522 +vertex_buffer: 0.726200 +vertex_buffer: 0.265400 +vertex_buffer: -3.555000 +vertex_buffer: -0.213121 +vertex_buffer: 5.769910 +vertex_buffer: 0.727900 +vertex_buffer: 0.302500 +vertex_buffer: -3.550000 +vertex_buffer: -0.253493 +vertex_buffer: 5.769868 +vertex_buffer: 0.731200 +vertex_buffer: 0.301500 +vertex_buffer: -6.275000 +vertex_buffer: 3.721311 +vertex_buffer: 5.579502 +vertex_buffer: 0.444000 +vertex_buffer: 0.642800 +vertex_buffer: -6.313000 +vertex_buffer: 3.740315 +vertex_buffer: 5.576495 +vertex_buffer: 0.442700 +vertex_buffer: 0.646700 +vertex_buffer: -6.066000 +vertex_buffer: 3.814266 +vertex_buffer: 5.616144 +vertex_buffer: 0.433000 +vertex_buffer: 0.624100 +vertex_buffer: -5.474000 +vertex_buffer: 3.945145 +vertex_buffer: 5.715736 +vertex_buffer: 0.415300 +vertex_buffer: 0.570300 +vertex_buffer: -5.118000 +vertex_buffer: 3.995078 +vertex_buffer: 5.771229 +vertex_buffer: 0.407800 +vertex_buffer: 0.537900 +vertex_buffer: -4.719000 +vertex_buffer: 4.033009 +vertex_buffer: 5.827888 +vertex_buffer: 0.400800 +vertex_buffer: 0.501500 +vertex_buffer: -4.270000 +vertex_buffer: 4.054939 +vertex_buffer: 5.885190 +vertex_buffer: 0.394300 +vertex_buffer: 0.460500 +vertex_buffer: -3.727000 +vertex_buffer: 4.054875 +vertex_buffer: 5.938567 +vertex_buffer: 0.388000 +vertex_buffer: 0.411000 +vertex_buffer: -3.047000 +vertex_buffer: 4.023822 +vertex_buffer: 5.980991 +vertex_buffer: 0.382400 +vertex_buffer: 0.349000 +vertex_buffer: -2.382000 +vertex_buffer: 3.968788 +vertex_buffer: 6.010306 +vertex_buffer: 0.378700 +vertex_buffer: 0.287800 +vertex_buffer: -1.883000 +vertex_buffer: 3.892768 +vertex_buffer: 6.026328 +vertex_buffer: 0.378100 +vertex_buffer: 0.240900 +vertex_buffer: -1.523000 +vertex_buffer: 3.784751 +vertex_buffer: 6.039411 +vertex_buffer: 0.380800 +vertex_buffer: 0.205200 +vertex_buffer: -1.273000 +vertex_buffer: 3.631739 +vertex_buffer: 6.049940 +vertex_buffer: 0.387200 +vertex_buffer: 0.177300 +vertex_buffer: -0.564000 +vertex_buffer: 3.918010 +vertex_buffer: 5.826788 +vertex_buffer: 0.314700 +vertex_buffer: 0.134200 +vertex_buffer: -0.562999 +vertex_buffer: 3.936031 +vertex_buffer: 5.810307 +vertex_buffer: 0.312400 +vertex_buffer: 0.134900 +vertex_buffer: -0.906999 +vertex_buffer: 3.973032 +vertex_buffer: 5.807086 +vertex_buffer: 0.321400 +vertex_buffer: 0.164600 +vertex_buffer: -0.912000 +vertex_buffer: 3.954015 +vertex_buffer: 5.822536 +vertex_buffer: 0.323900 +vertex_buffer: 0.164200 +vertex_buffer: -0.555999 +vertex_buffer: 4.021028 +vertex_buffer: 5.812591 +vertex_buffer: 0.305000 +vertex_buffer: 0.137100 +vertex_buffer: -6.796000 +vertex_buffer: 4.028399 +vertex_buffer: 5.505472 +vertex_buffer: 0.424700 +vertex_buffer: 0.694500 +vertex_buffer: -6.812000 +vertex_buffer: 4.040413 +vertex_buffer: 5.495811 +vertex_buffer: 0.423800 +vertex_buffer: 0.696400 +vertex_buffer: -7.065000 +vertex_buffer: 3.984468 +vertex_buffer: 5.449779 +vertex_buffer: 0.433200 +vertex_buffer: 0.717400 +vertex_buffer: -7.064000 +vertex_buffer: 3.965459 +vertex_buffer: 5.457219 +vertex_buffer: 0.434800 +vertex_buffer: 0.716900 +vertex_buffer: -0.571999 +vertex_buffer: 3.883672 +vertex_buffer: 6.106044 +vertex_buffer: 0.341000 +vertex_buffer: 0.126100 +vertex_buffer: -0.568999 +vertex_buffer: 3.904679 +vertex_buffer: 6.098559 +vertex_buffer: 0.338800 +vertex_buffer: 0.126800 +vertex_buffer: -7.050000 +vertex_buffer: 3.967820 +vertex_buffer: 5.160675 +vertex_buffer: 0.412500 +vertex_buffer: 0.734100 +vertex_buffer: -7.066000 +vertex_buffer: 3.978794 +vertex_buffer: 5.181994 +vertex_buffer: 0.415200 +vertex_buffer: 0.733500 +vertex_buffer: -7.077000 +vertex_buffer: 3.977756 +vertex_buffer: 5.212903 +vertex_buffer: 0.418000 +vertex_buffer: 0.731900 +vertex_buffer: -1.096000 +vertex_buffer: 4.111107 +vertex_buffer: 5.746662 +vertex_buffer: 0.310400 +vertex_buffer: 0.186400 +vertex_buffer: -1.095000 +vertex_buffer: 4.122072 +vertex_buffer: 5.775843 +vertex_buffer: 0.313200 +vertex_buffer: 0.185900 +vertex_buffer: -0.882000 +vertex_buffer: 4.087072 +vertex_buffer: 5.776321 +vertex_buffer: 0.308800 +vertex_buffer: 0.166800 +vertex_buffer: -0.882000 +vertex_buffer: 4.076110 +vertex_buffer: 5.745146 +vertex_buffer: 0.305900 +vertex_buffer: 0.167400 +vertex_buffer: -6.778000 +vertex_buffer: 4.053427 +vertex_buffer: 5.483189 +vertex_buffer: 0.421400 +vertex_buffer: 0.694400 +vertex_buffer: -6.752000 +vertex_buffer: 4.053615 +vertex_buffer: 5.328125 +vertex_buffer: 0.408300 +vertex_buffer: 0.699200 +vertex_buffer: -6.795000 +vertex_buffer: 4.044626 +vertex_buffer: 5.319826 +vertex_buffer: 0.410000 +vertex_buffer: 0.704000 +vertex_buffer: -6.816000 +vertex_buffer: 4.044436 +vertex_buffer: 5.475887 +vertex_buffer: 0.422500 +vertex_buffer: 0.697700 +vertex_buffer: -7.145000 +vertex_buffer: 3.551500 +vertex_buffer: 5.422663 +vertex_buffer: 0.472300 +vertex_buffer: 0.721300 +vertex_buffer: -7.246000 +vertex_buffer: 3.554552 +vertex_buffer: 5.380754 +vertex_buffer: 0.473000 +vertex_buffer: 0.731400 +vertex_buffer: -7.241000 +vertex_buffer: 3.424557 +vertex_buffer: 5.378862 +vertex_buffer: 0.484800 +vertex_buffer: 0.730900 +vertex_buffer: -7.139000 +vertex_buffer: 3.402742 +vertex_buffer: 5.420340 +vertex_buffer: 0.485800 +vertex_buffer: 0.720700 +vertex_buffer: -7.239000 +vertex_buffer: 3.333665 +vertex_buffer: 5.376942 +vertex_buffer: 0.493500 +vertex_buffer: 0.730900 +vertex_buffer: -7.129000 +vertex_buffer: 3.258313 +vertex_buffer: 5.422170 +vertex_buffer: 0.499800 +vertex_buffer: 0.719700 +vertex_buffer: -6.546000 +vertex_buffer: 3.924355 +vertex_buffer: 5.543285 +vertex_buffer: 0.428400 +vertex_buffer: 0.669600 +vertex_buffer: -6.678000 +vertex_buffer: 4.063673 +vertex_buffer: 5.280669 +vertex_buffer: 0.400200 +vertex_buffer: 0.692200 +vertex_buffer: -6.659000 +vertex_buffer: 4.052661 +vertex_buffer: 5.290369 +vertex_buffer: 0.400700 +vertex_buffer: 0.689600 +vertex_buffer: -6.495000 +vertex_buffer: 4.087629 +vertex_buffer: 5.317235 +vertex_buffer: 0.394700 +vertex_buffer: 0.674500 +vertex_buffer: -6.689000 +vertex_buffer: 4.045652 +vertex_buffer: 5.298048 +vertex_buffer: 0.403300 +vertex_buffer: 0.692300 +vertex_buffer: -6.590000 +vertex_buffer: 3.995635 +vertex_buffer: 5.312876 +vertex_buffer: 0.404000 +vertex_buffer: 0.681800 +vertex_buffer: -6.564000 +vertex_buffer: 3.999645 +vertex_buffer: 5.304150 +vertex_buffer: 0.402800 +vertex_buffer: 0.679700 +vertex_buffer: -6.680000 +vertex_buffer: 4.067701 +vertex_buffer: 5.257845 +vertex_buffer: 0.398500 +vertex_buffer: 0.693800 +vertex_buffer: -6.672000 +vertex_buffer: 4.055732 +vertex_buffer: 5.232574 +vertex_buffer: 0.396100 +vertex_buffer: 0.694900 +vertex_buffer: -5.742000 +vertex_buffer: 3.870557 +vertex_buffer: 5.377138 +vertex_buffer: 0.447700 +vertex_buffer: 0.589700 +vertex_buffer: -5.779000 +vertex_buffer: 3.871235 +vertex_buffer: 5.641031 +vertex_buffer: 0.425400 +vertex_buffer: 0.597600 +vertex_buffer: -6.572000 +vertex_buffer: 3.979364 +vertex_buffer: 5.534718 +vertex_buffer: 0.422900 +vertex_buffer: 0.672700 +vertex_buffer: -6.574000 +vertex_buffer: 3.962357 +vertex_buffer: 5.540226 +vertex_buffer: 0.425000 +vertex_buffer: 0.672600 +vertex_buffer: -6.014000 +vertex_buffer: 4.080470 +vertex_buffer: 5.448570 +vertex_buffer: 0.394000 +vertex_buffer: 0.627900 +vertex_buffer: -6.038000 +vertex_buffer: 4.080281 +vertex_buffer: 5.604630 +vertex_buffer: 0.407700 +vertex_buffer: 0.624400 +vertex_buffer: -5.795000 +vertex_buffer: 3.887209 +vertex_buffer: 5.663206 +vertex_buffer: 0.423500 +vertex_buffer: 0.599500 +vertex_buffer: -1.056000 +vertex_buffer: 2.449090 +vertex_buffer: 6.023953 +vertex_buffer: 0.477000 +vertex_buffer: 0.105800 +vertex_buffer: -1.072000 +vertex_buffer: 2.449749 +vertex_buffer: 5.999982 +vertex_buffer: 0.477400 +vertex_buffer: 0.108000 +vertex_buffer: -1.381000 +vertex_buffer: 1.372995 +vertex_buffer: 5.970079 +vertex_buffer: 0.575100 +vertex_buffer: 0.116800 +vertex_buffer: -1.366000 +vertex_buffer: 1.369585 +vertex_buffer: 5.994883 +vertex_buffer: 0.575400 +vertex_buffer: 0.114600 +vertex_buffer: -6.599000 +vertex_buffer: 2.960689 +vertex_buffer: 5.481006 +vertex_buffer: 0.516200 +vertex_buffer: 0.668900 +vertex_buffer: -6.604000 +vertex_buffer: 2.495419 +vertex_buffer: 5.493910 +vertex_buffer: 0.556300 +vertex_buffer: 0.658700 +vertex_buffer: -6.642000 +vertex_buffer: 2.492533 +vertex_buffer: 5.490612 +vertex_buffer: 0.557200 +vertex_buffer: 0.661600 +vertex_buffer: -6.984000 +vertex_buffer: 2.616411 +vertex_buffer: 5.200926 +vertex_buffer: 0.568500 +vertex_buffer: 0.713600 +vertex_buffer: -6.971000 +vertex_buffer: 2.618430 +vertex_buffer: 5.157135 +vertex_buffer: 0.571400 +vertex_buffer: 0.716500 +vertex_buffer: -6.555000 +vertex_buffer: 2.964368 +vertex_buffer: 5.218408 +vertex_buffer: 0.514000 +vertex_buffer: 0.645600 +vertex_buffer: -7.141000 +vertex_buffer: 3.158391 +vertex_buffer: 5.308101 +vertex_buffer: 0.517500 +vertex_buffer: 0.733100 +vertex_buffer: -7.113000 +vertex_buffer: 3.077379 +vertex_buffer: 5.321052 +vertex_buffer: 0.524200 +vertex_buffer: 0.728200 +vertex_buffer: -7.121000 +vertex_buffer: 3.076922 +vertex_buffer: 5.363109 +vertex_buffer: 0.521800 +vertex_buffer: 0.724300 +vertex_buffer: -7.155000 +vertex_buffer: 3.160980 +vertex_buffer: 5.351272 +vertex_buffer: 0.514700 +vertex_buffer: 0.729400 +vertex_buffer: -7.144000 +vertex_buffer: 3.167877 +vertex_buffer: 5.235524 +vertex_buffer: 0.519600 +vertex_buffer: 0.739900 +vertex_buffer: -7.109000 +vertex_buffer: 3.086271 +vertex_buffer: 5.227436 +vertex_buffer: 0.527800 +vertex_buffer: 0.736600 +vertex_buffer: -7.063000 +vertex_buffer: 2.915911 +vertex_buffer: 5.234352 +vertex_buffer: 0.542200 +vertex_buffer: 0.727200 +vertex_buffer: -7.076000 +vertex_buffer: 2.912526 +vertex_buffer: 5.326190 +vertex_buffer: 0.537700 +vertex_buffer: 0.719800 +vertex_buffer: -6.956000 +vertex_buffer: 2.592929 +vertex_buffer: 5.440157 +vertex_buffer: 0.557400 +vertex_buffer: 0.691300 +vertex_buffer: -6.994000 +vertex_buffer: 2.602989 +vertex_buffer: 5.433540 +vertex_buffer: 0.557400 +vertex_buffer: 0.694800 +vertex_buffer: -7.063000 +vertex_buffer: 2.904015 +vertex_buffer: 5.429003 +vertex_buffer: 0.532400 +vertex_buffer: 0.709000 +vertex_buffer: -6.885000 +vertex_buffer: 2.184675 +vertex_buffer: 5.442623 +vertex_buffer: 0.589700 +vertex_buffer: 0.671800 +vertex_buffer: -6.739000 +vertex_buffer: 4.041395 +vertex_buffer: 5.508930 +vertex_buffer: 0.422600 +vertex_buffer: 0.690400 +vertex_buffer: -6.757000 +vertex_buffer: 4.049406 +vertex_buffer: 5.501130 +vertex_buffer: 0.422200 +vertex_buffer: 0.692200 +vertex_buffer: -6.775000 +vertex_buffer: 4.049404 +vertex_buffer: 5.503119 +vertex_buffer: 0.422800 +vertex_buffer: 0.693500 +vertex_buffer: -6.756000 +vertex_buffer: 4.037393 +vertex_buffer: 5.511793 +vertex_buffer: 0.423300 +vertex_buffer: 0.691500 +vertex_buffer: -6.755000 +vertex_buffer: 3.997394 +vertex_buffer: 5.510575 +vertex_buffer: 0.426400 +vertex_buffer: 0.690400 +vertex_buffer: -7.407000 +vertex_buffer: 3.821051 +vertex_buffer: 4.970423 +vertex_buffer: 0.446900 +vertex_buffer: 0.772700 +vertex_buffer: -6.630000 +vertex_buffer: 3.993399 +vertex_buffer: 5.505770 +vertex_buffer: 0.421300 +vertex_buffer: 0.679800 +vertex_buffer: -6.604000 +vertex_buffer: 3.993588 +vertex_buffer: 5.350708 +vertex_buffer: 0.407300 +vertex_buffer: 0.682200 +vertex_buffer: -7.341000 +vertex_buffer: 3.915632 +vertex_buffer: 5.314274 +vertex_buffer: 0.443300 +vertex_buffer: 0.741700 +vertex_buffer: -7.390000 +vertex_buffer: 3.900766 +vertex_buffer: 5.203783 +vertex_buffer: 0.442700 +vertex_buffer: 0.751600 +vertex_buffer: -7.396000 +vertex_buffer: 3.877765 +vertex_buffer: 5.204231 +vertex_buffer: 0.444700 +vertex_buffer: 0.752200 +vertex_buffer: -7.346000 +vertex_buffer: 3.892628 +vertex_buffer: 5.317687 +vertex_buffer: 0.444800 +vertex_buffer: 0.741900 +vertex_buffer: -7.411000 +vertex_buffer: 3.893903 +vertex_buffer: 5.092457 +vertex_buffer: 0.441400 +vertex_buffer: 0.760900 +vertex_buffer: -7.417000 +vertex_buffer: 3.870906 +vertex_buffer: 5.089935 +vertex_buffer: 0.443800 +vertex_buffer: 0.761900 +vertex_buffer: -7.415000 +vertex_buffer: 3.822906 +vertex_buffer: 5.088636 +vertex_buffer: 0.448300 +vertex_buffer: 0.762600 +vertex_buffer: -0.307999 +vertex_buffer: 4.005022 +vertex_buffer: 5.815707 +vertex_buffer: 0.298100 +vertex_buffer: 0.115800 +vertex_buffer: -0.307000 +vertex_buffer: 4.021034 +vertex_buffer: 5.807157 +vertex_buffer: 0.296400 +vertex_buffer: 0.116200 +vertex_buffer: -0.555000 +vertex_buffer: 4.039038 +vertex_buffer: 5.804111 +vertex_buffer: 0.303200 +vertex_buffer: 0.137600 +vertex_buffer: -0.308999 +vertex_buffer: 3.923026 +vertex_buffer: 5.813643 +vertex_buffer: 0.305100 +vertex_buffer: 0.113300 +vertex_buffer: -7.259000 +vertex_buffer: 3.864542 +vertex_buffer: 5.387858 +vertex_buffer: 0.446100 +vertex_buffer: 0.732800 +vertex_buffer: -7.252000 +vertex_buffer: 3.700547 +vertex_buffer: 5.384385 +vertex_buffer: 0.460200 +vertex_buffer: 0.732000 +vertex_buffer: -7.158000 +vertex_buffer: 3.891491 +vertex_buffer: 5.430691 +vertex_buffer: 0.442500 +vertex_buffer: 0.724000 +vertex_buffer: -7.160000 +vertex_buffer: 3.943489 +vertex_buffer: 5.432212 +vertex_buffer: 0.438200 +vertex_buffer: 0.724600 +vertex_buffer: -7.261000 +vertex_buffer: 3.916541 +vertex_buffer: 5.389345 +vertex_buffer: 0.442100 +vertex_buffer: 0.733100 +vertex_buffer: -0.555000 +vertex_buffer: 4.034110 +vertex_buffer: 5.744215 +vertex_buffer: 0.297600 +vertex_buffer: 0.139000 +vertex_buffer: -0.553999 +vertex_buffer: 4.045070 +vertex_buffer: 5.776381 +vertex_buffer: 0.300600 +vertex_buffer: 0.138200 +vertex_buffer: -0.307000 +vertex_buffer: 4.027068 +vertex_buffer: 5.778411 +vertex_buffer: 0.293800 +vertex_buffer: 0.117000 +vertex_buffer: -0.307999 +vertex_buffer: 4.017110 +vertex_buffer: 5.744282 +vertex_buffer: 0.290800 +vertex_buffer: 0.117900 +vertex_buffer: -0.308999 +vertex_buffer: 3.906005 +vertex_buffer: 5.831179 +vertex_buffer: 0.307300 +vertex_buffer: 0.112600 +vertex_buffer: -7.258000 +vertex_buffer: 3.938548 +vertex_buffer: 5.383944 +vertex_buffer: 0.440600 +vertex_buffer: 0.733000 +vertex_buffer: -7.159000 +vertex_buffer: 3.963499 +vertex_buffer: 5.424780 +vertex_buffer: 0.436600 +vertex_buffer: 0.724900 +vertex_buffer: -0.311000 +vertex_buffer: 3.873654 +vertex_buffer: 6.119599 +vertex_buffer: 0.333600 +vertex_buffer: 0.103500 +vertex_buffer: -0.311000 +vertex_buffer: 3.892664 +vertex_buffer: 6.112020 +vertex_buffer: 0.331700 +vertex_buffer: 0.104400 +vertex_buffer: -7.174000 +vertex_buffer: 3.952909 +vertex_buffer: 5.086542 +vertex_buffer: 0.422100 +vertex_buffer: 0.749800 +vertex_buffer: -7.394000 +vertex_buffer: 3.902982 +vertex_buffer: 5.026949 +vertex_buffer: 0.438100 +vertex_buffer: 0.765000 +vertex_buffer: -7.393000 +vertex_buffer: 3.904894 +vertex_buffer: 5.098479 +vertex_buffer: 0.439300 +vertex_buffer: 0.759200 +vertex_buffer: -7.241000 +vertex_buffer: 3.274391 +vertex_buffer: 5.375715 +vertex_buffer: 0.499600 +vertex_buffer: 0.731200 +vertex_buffer: -7.242000 +vertex_buffer: 3.240843 +vertex_buffer: 5.369015 +vertex_buffer: 0.503300 +vertex_buffer: 0.731900 +vertex_buffer: -7.166000 +vertex_buffer: 3.173387 +vertex_buffer: 5.403695 +vertex_buffer: 0.510000 +vertex_buffer: 0.724400 +vertex_buffer: -7.159000 +vertex_buffer: 3.201010 +vertex_buffer: 5.412225 +vertex_buffer: 0.506400 +vertex_buffer: 0.722900 +vertex_buffer: -7.108000 +vertex_buffer: 3.090089 +vertex_buffer: 5.426351 +vertex_buffer: 0.516200 +vertex_buffer: 0.716700 +vertex_buffer: -7.124000 +vertex_buffer: 3.079314 +vertex_buffer: 5.416255 +vertex_buffer: 0.518200 +vertex_buffer: 0.718900 +vertex_buffer: -6.719000 +vertex_buffer: 1.643322 +vertex_buffer: 5.459179 +vertex_buffer: 0.628100 +vertex_buffer: 0.637500 +vertex_buffer: -6.510000 +vertex_buffer: 1.089627 +vertex_buffer: 5.476794 +vertex_buffer: 0.664600 +vertex_buffer: 0.598500 +vertex_buffer: -6.271000 +vertex_buffer: 0.633869 +vertex_buffer: 5.496512 +vertex_buffer: 0.692600 +vertex_buffer: 0.562000 +vertex_buffer: -5.986000 +vertex_buffer: 0.269421 +vertex_buffer: 5.519618 +vertex_buffer: 0.713900 +vertex_buffer: 0.526900 +vertex_buffer: -5.641000 +vertex_buffer: -0.012627 +vertex_buffer: 5.549834 +vertex_buffer: 0.729600 +vertex_buffer: 0.490600 +vertex_buffer: -5.197000 +vertex_buffer: -0.225226 +vertex_buffer: 5.589799 +vertex_buffer: 0.740900 +vertex_buffer: 0.448400 +vertex_buffer: -4.616000 +vertex_buffer: -0.376667 +vertex_buffer: 5.644580 +vertex_buffer: 0.748600 +vertex_buffer: 0.395400 +vertex_buffer: -7.055000 +vertex_buffer: 3.734465 +vertex_buffer: 5.451614 +vertex_buffer: 0.454700 +vertex_buffer: 0.713600 +vertex_buffer: -7.151000 +vertex_buffer: 3.714496 +vertex_buffer: 5.425767 +vertex_buffer: 0.457900 +vertex_buffer: 0.722400 +vertex_buffer: -7.062000 +vertex_buffer: 3.915460 +vertex_buffer: 5.455733 +vertex_buffer: 0.439000 +vertex_buffer: 0.716100 +vertex_buffer: -0.741999 +vertex_buffer: 2.489950 +vertex_buffer: 6.039368 +vertex_buffer: 0.466900 +vertex_buffer: 0.079900 +vertex_buffer: -0.708000 +vertex_buffer: 2.492911 +vertex_buffer: 6.041574 +vertex_buffer: 0.466400 +vertex_buffer: 0.076800 +vertex_buffer: -0.686999 +vertex_buffer: 2.492061 +vertex_buffer: 6.035655 +vertex_buffer: 0.466700 +vertex_buffer: 0.074600 +vertex_buffer: -0.511999 +vertex_buffer: 2.920268 +vertex_buffer: 5.799177 +vertex_buffer: 0.432500 +vertex_buffer: 0.046600 +vertex_buffer: -0.517000 +vertex_buffer: 2.925090 +vertex_buffer: 5.743452 +vertex_buffer: 0.434200 +vertex_buffer: 0.041600 +vertex_buffer: -1.065000 +vertex_buffer: 2.457159 +vertex_buffer: 5.730452 +vertex_buffer: 0.481200 +vertex_buffer: 0.131700 +vertex_buffer: -0.679000 +vertex_buffer: 2.492613 +vertex_buffer: 6.014641 +vertex_buffer: 0.467600 +vertex_buffer: 0.072300 +vertex_buffer: -0.679000 +vertex_buffer: 2.495623 +vertex_buffer: 5.976590 +vertex_buffer: 0.468900 +vertex_buffer: 0.068700 +vertex_buffer: -1.018000 +vertex_buffer: 2.447954 +vertex_buffer: 6.028774 +vertex_buffer: 0.476500 +vertex_buffer: 0.102800 +vertex_buffer: -0.305000 +vertex_buffer: 3.083319 +vertex_buffer: 6.079671 +vertex_buffer: 0.399200 +vertex_buffer: 0.065200 +vertex_buffer: -0.301000 +vertex_buffer: 3.074498 +vertex_buffer: 6.056509 +vertex_buffer: 0.400800 +vertex_buffer: 0.062100 +vertex_buffer: -0.301000 +vertex_buffer: 3.074878 +vertex_buffer: 6.020398 +vertex_buffer: 0.402500 +vertex_buffer: 0.058200 +vertex_buffer: -0.170015 +vertex_buffer: 3.194879 +vertex_buffer: 6.097709 +vertex_buffer: 0.382600 +vertex_buffer: 0.063800 +vertex_buffer: -0.178999 +vertex_buffer: 3.134543 +vertex_buffer: 6.095752 +vertex_buffer: 0.387600 +vertex_buffer: 0.060600 +vertex_buffer: -0.317000 +vertex_buffer: 3.111432 +vertex_buffer: 6.088937 +vertex_buffer: 0.397000 +vertex_buffer: 0.068900 +vertex_buffer: -0.327999 +vertex_buffer: 3.178908 +vertex_buffer: 6.091790 +vertex_buffer: 0.391600 +vertex_buffer: 0.075000 +vertex_buffer: -7.367000 +vertex_buffer: 3.390060 +vertex_buffer: 4.917622 +vertex_buffer: 0.489800 +vertex_buffer: 0.777700 +vertex_buffer: -7.382000 +vertex_buffer: 3.380263 +vertex_buffer: 4.933475 +vertex_buffer: 0.490000 +vertex_buffer: 0.775600 +vertex_buffer: -7.358000 +vertex_buffer: 3.360794 +vertex_buffer: 4.917903 +vertex_buffer: 0.493300 +vertex_buffer: 0.776800 +vertex_buffer: -7.373000 +vertex_buffer: 3.350981 +vertex_buffer: 4.934727 +vertex_buffer: 0.493200 +vertex_buffer: 0.774800 +vertex_buffer: -7.379000 +vertex_buffer: 3.350882 +vertex_buffer: 4.963497 +vertex_buffer: 0.493000 +vertex_buffer: 0.772300 +vertex_buffer: -7.388000 +vertex_buffer: 3.380187 +vertex_buffer: 4.962238 +vertex_buffer: 0.489700 +vertex_buffer: 0.773100 +vertex_buffer: -7.316000 +vertex_buffer: 3.306611 +vertex_buffer: 5.030970 +vertex_buffer: 0.501000 +vertex_buffer: 0.764900 +vertex_buffer: -7.321000 +vertex_buffer: 3.301386 +vertex_buffer: 5.100352 +vertex_buffer: 0.500700 +vertex_buffer: 0.758500 +vertex_buffer: -7.364000 +vertex_buffer: 3.323990 +vertex_buffer: 5.087562 +vertex_buffer: 0.496000 +vertex_buffer: 0.760600 +vertex_buffer: -7.363000 +vertex_buffer: 3.331136 +vertex_buffer: 5.016309 +vertex_buffer: 0.495800 +vertex_buffer: 0.767100 +vertex_buffer: -7.387000 +vertex_buffer: 3.350724 +vertex_buffer: 5.009150 +vertex_buffer: 0.492600 +vertex_buffer: 0.768300 +vertex_buffer: -7.354000 +vertex_buffer: 3.331322 +vertex_buffer: 4.969654 +vertex_buffer: 0.496400 +vertex_buffer: 0.771300 +vertex_buffer: -7.381000 +vertex_buffer: 3.903078 +vertex_buffer: 4.948469 +vertex_buffer: 0.437000 +vertex_buffer: 0.771400 +vertex_buffer: -7.363000 +vertex_buffer: 3.890097 +vertex_buffer: 4.932051 +vertex_buffer: 0.436100 +vertex_buffer: 0.773200 +vertex_buffer: -7.386000 +vertex_buffer: 3.903040 +vertex_buffer: 4.979247 +vertex_buffer: 0.437300 +vertex_buffer: 0.768800 +vertex_buffer: -7.171000 +vertex_buffer: 3.951033 +vertex_buffer: 4.984264 +vertex_buffer: 0.421000 +vertex_buffer: 0.759500 +vertex_buffer: -7.174000 +vertex_buffer: 3.951991 +vertex_buffer: 5.020010 +vertex_buffer: 0.421400 +vertex_buffer: 0.756000 +vertex_buffer: -7.371000 +vertex_buffer: 3.911768 +vertex_buffer: 5.201848 +vertex_buffer: 0.440800 +vertex_buffer: 0.750700 +vertex_buffer: -7.153000 +vertex_buffer: 3.968528 +vertex_buffer: 5.400862 +vertex_buffer: 0.435000 +vertex_buffer: 0.725700 +vertex_buffer: -7.066000 +vertex_buffer: 3.987499 +vertex_buffer: 5.424838 +vertex_buffer: 0.431700 +vertex_buffer: 0.718800 +vertex_buffer: -1.094000 +vertex_buffer: 1.348785 +vertex_buffer: 5.935443 +vertex_buffer: 0.576900 +vertex_buffer: 0.089300 +vertex_buffer: -7.126000 +vertex_buffer: 3.076574 +vertex_buffer: 5.395181 +vertex_buffer: 0.519800 +vertex_buffer: 0.721200 +vertex_buffer: -7.164000 +vertex_buffer: 3.162683 +vertex_buffer: 5.383419 +vertex_buffer: 0.512300 +vertex_buffer: 0.726400 +vertex_buffer: -7.026000 +vertex_buffer: 3.181370 +vertex_buffer: 5.028232 +vertex_buffer: 0.530100 +vertex_buffer: 0.762800 +vertex_buffer: -7.036000 +vertex_buffer: 3.179970 +vertex_buffer: 5.079792 +vertex_buffer: 0.530200 +vertex_buffer: 0.757700 +vertex_buffer: -7.097000 +vertex_buffer: 3.186858 +vertex_buffer: 5.076458 +vertex_buffer: 0.524600 +vertex_buffer: 0.756800 +vertex_buffer: -7.087000 +vertex_buffer: 3.187309 +vertex_buffer: 5.019910 +vertex_buffer: 0.524600 +vertex_buffer: 0.762800 +vertex_buffer: -7.040000 +vertex_buffer: 3.155063 +vertex_buffer: 5.125915 +vertex_buffer: 0.531800 +vertex_buffer: 0.752500 +vertex_buffer: -7.401000 +vertex_buffer: 3.688052 +vertex_buffer: 4.968018 +vertex_buffer: 0.459500 +vertex_buffer: 0.774100 +vertex_buffer: -7.409000 +vertex_buffer: 3.687998 +vertex_buffer: 5.012717 +vertex_buffer: 0.460000 +vertex_buffer: 0.770000 +vertex_buffer: -7.415000 +vertex_buffer: 3.820997 +vertex_buffer: 5.015137 +vertex_buffer: 0.447600 +vertex_buffer: 0.768900 +vertex_buffer: -7.412000 +vertex_buffer: 3.890991 +vertex_buffer: 5.019919 +vertex_buffer: 0.440500 +vertex_buffer: 0.766700 +vertex_buffer: -7.417000 +vertex_buffer: 3.867994 +vertex_buffer: 5.016397 +vertex_buffer: 0.443000 +vertex_buffer: 0.767800 +vertex_buffer: -7.400000 +vertex_buffer: 3.476002 +vertex_buffer: 5.008861 +vertex_buffer: 0.479900 +vertex_buffer: 0.770000 +vertex_buffer: -7.404000 +vertex_buffer: 3.567002 +vertex_buffer: 5.009855 +vertex_buffer: 0.471300 +vertex_buffer: 0.770300 +vertex_buffer: -7.251000 +vertex_buffer: 3.261063 +vertex_buffer: 5.121390 +vertex_buffer: 0.508300 +vertex_buffer: 0.754900 +vertex_buffer: -7.238000 +vertex_buffer: 3.261456 +vertex_buffer: 5.054759 +vertex_buffer: 0.509400 +vertex_buffer: 0.761000 +vertex_buffer: -7.161000 +vertex_buffer: 3.216266 +vertex_buffer: 5.074730 +vertex_buffer: 0.517800 +vertex_buffer: 0.757500 +vertex_buffer: -7.398000 +vertex_buffer: 3.421141 +vertex_buffer: 5.007745 +vertex_buffer: 0.485200 +vertex_buffer: 0.769600 +vertex_buffer: -7.396000 +vertex_buffer: 3.380068 +vertex_buffer: 5.006904 +vertex_buffer: 0.489400 +vertex_buffer: 0.769100 +vertex_buffer: -7.080000 +vertex_buffer: 3.187593 +vertex_buffer: 4.984242 +vertex_buffer: 0.524700 +vertex_buffer: 0.766300 +vertex_buffer: -7.069000 +vertex_buffer: 3.189697 +vertex_buffer: 4.965413 +vertex_buffer: 0.525300 +vertex_buffer: 0.768200 +vertex_buffer: -7.030000 +vertex_buffer: 3.190637 +vertex_buffer: 4.970094 +vertex_buffer: 0.528700 +vertex_buffer: 0.768800 +vertex_buffer: -7.020000 +vertex_buffer: 3.180675 +vertex_buffer: 4.993543 +vertex_buffer: 0.530100 +vertex_buffer: 0.766400 +vertex_buffer: -7.349000 +vertex_buffer: 3.331445 +vertex_buffer: 4.938923 +vertex_buffer: 0.496500 +vertex_buffer: 0.774100 +vertex_buffer: -7.333000 +vertex_buffer: 3.341269 +vertex_buffer: 4.922087 +vertex_buffer: 0.497000 +vertex_buffer: 0.776200 +vertex_buffer: -7.345000 +vertex_buffer: 3.303906 +vertex_buffer: 5.190210 +vertex_buffer: 0.497700 +vertex_buffer: 0.751100 +vertex_buffer: -7.312000 +vertex_buffer: 3.287216 +vertex_buffer: 5.186389 +vertex_buffer: 0.501400 +vertex_buffer: 0.750500 +vertex_buffer: -7.274000 +vertex_buffer: 3.257252 +vertex_buffer: 5.266911 +vertex_buffer: 0.504300 +vertex_buffer: 0.742300 +vertex_buffer: -7.303000 +vertex_buffer: 3.270918 +vertex_buffer: 5.289551 +vertex_buffer: 0.500700 +vertex_buffer: 0.741200 +vertex_buffer: -7.214000 +vertex_buffer: 3.218464 +vertex_buffer: 5.320205 +vertex_buffer: 0.508900 +vertex_buffer: 0.735300 +vertex_buffer: -7.233000 +vertex_buffer: 3.226150 +vertex_buffer: 5.350587 +vertex_buffer: 0.505800 +vertex_buffer: 0.733100 +vertex_buffer: -7.097000 +vertex_buffer: 3.954853 +vertex_buffer: 5.132733 +vertex_buffer: 0.414800 +vertex_buffer: 0.741000 +vertex_buffer: -7.120000 +vertex_buffer: 3.964835 +vertex_buffer: 5.147107 +vertex_buffer: 0.417800 +vertex_buffer: 0.740900 +vertex_buffer: -5.117000 +vertex_buffer: 4.224341 +vertex_buffer: 5.554891 +vertex_buffer: 0.370700 +vertex_buffer: 0.547800 +vertex_buffer: -4.704000 +vertex_buffer: 4.261270 +vertex_buffer: 5.612811 +vertex_buffer: 0.363200 +vertex_buffer: 0.510100 +vertex_buffer: -4.252000 +vertex_buffer: 4.282202 +vertex_buffer: 5.668910 +vertex_buffer: 0.356400 +vertex_buffer: 0.468800 +vertex_buffer: -3.712000 +vertex_buffer: 4.282137 +vertex_buffer: 5.721675 +vertex_buffer: 0.349900 +vertex_buffer: 0.419600 +vertex_buffer: -3.035000 +vertex_buffer: 4.252083 +vertex_buffer: 5.765869 +vertex_buffer: 0.344000 +vertex_buffer: 0.358000 +vertex_buffer: -2.363000 +vertex_buffer: 4.199045 +vertex_buffer: 5.797508 +vertex_buffer: 0.339700 +vertex_buffer: 0.296700 +vertex_buffer: -1.839000 +vertex_buffer: 4.123028 +vertex_buffer: 5.812879 +vertex_buffer: 0.336700 +vertex_buffer: 0.248500 +vertex_buffer: -1.437000 +vertex_buffer: 4.047021 +vertex_buffer: 5.817625 +vertex_buffer: 0.333000 +vertex_buffer: 0.211500 +vertex_buffer: -1.131000 +vertex_buffer: 3.991018 +vertex_buffer: 5.820283 +vertex_buffer: 0.328400 +vertex_buffer: 0.183700 +vertex_buffer: -7.396000 +vertex_buffer: 3.688087 +vertex_buffer: 4.939241 +vertex_buffer: 0.459100 +vertex_buffer: 0.776700 +vertex_buffer: -7.379000 +vertex_buffer: 3.678107 +vertex_buffer: 4.922937 +vertex_buffer: 0.459600 +vertex_buffer: 0.778900 +vertex_buffer: -6.569000 +vertex_buffer: 3.989616 +vertex_buffer: 5.326786 +vertex_buffer: 0.404700 +vertex_buffer: 0.679400 +vertex_buffer: -6.544000 +vertex_buffer: 3.988624 +vertex_buffer: 5.320908 +vertex_buffer: 0.403700 +vertex_buffer: 0.677300 +vertex_buffer: -4.686000 +vertex_buffer: 4.355355 +vertex_buffer: 5.543365 +vertex_buffer: 0.345100 +vertex_buffer: 0.513400 +vertex_buffer: -5.108000 +vertex_buffer: 4.317427 +vertex_buffer: 5.483809 +vertex_buffer: 0.352600 +vertex_buffer: 0.552200 +vertex_buffer: -5.554000 +vertex_buffer: 4.253511 +vertex_buffer: 5.414423 +vertex_buffer: 0.362300 +vertex_buffer: 0.593200 +vertex_buffer: -6.072000 +vertex_buffer: 4.154618 +vertex_buffer: 5.326802 +vertex_buffer: 0.375300 +vertex_buffer: 0.640700 +vertex_buffer: -6.496000 +vertex_buffer: 4.064704 +vertex_buffer: 5.255655 +vertex_buffer: 0.387600 +vertex_buffer: 0.679600 +vertex_buffer: -6.693000 +vertex_buffer: 4.022743 +vertex_buffer: 5.223533 +vertex_buffer: 0.395400 +vertex_buffer: 0.699800 +vertex_buffer: -6.718000 +vertex_buffer: 4.016747 +vertex_buffer: 5.219308 +vertex_buffer: 0.396900 +vertex_buffer: 0.703600 +vertex_buffer: -6.765000 +vertex_buffer: 4.006758 +vertex_buffer: 5.210963 +vertex_buffer: 0.399300 +vertex_buffer: 0.709400 +vertex_buffer: -7.031000 +vertex_buffer: 3.082283 +vertex_buffer: 5.141156 +vertex_buffer: 0.536800 +vertex_buffer: 0.746500 +vertex_buffer: -6.999000 +vertex_buffer: 2.919289 +vertex_buffer: 5.142432 +vertex_buffer: 0.549900 +vertex_buffer: 0.736300 +vertex_buffer: -6.830000 +vertex_buffer: 2.206663 +vertex_buffer: 5.154284 +vertex_buffer: 0.606600 +vertex_buffer: 0.693700 +vertex_buffer: -6.668000 +vertex_buffer: 1.672600 +vertex_buffer: 5.170115 +vertex_buffer: 0.646300 +vertex_buffer: 0.658100 +vertex_buffer: -6.462000 +vertex_buffer: 1.127224 +vertex_buffer: 5.188234 +vertex_buffer: 0.684400 +vertex_buffer: 0.617400 +vertex_buffer: -6.223000 +vertex_buffer: 0.676129 +vertex_buffer: 5.207506 +vertex_buffer: 0.714300 +vertex_buffer: 0.578200 +vertex_buffer: -5.940000 +vertex_buffer: 0.312489 +vertex_buffer: 5.231991 +vertex_buffer: 0.737300 +vertex_buffer: 0.539500 +vertex_buffer: -5.597000 +vertex_buffer: 0.033719 +vertex_buffer: 5.261748 +vertex_buffer: 0.754700 +vertex_buffer: 0.499600 +vertex_buffer: -5.158000 +vertex_buffer: -0.173292 +vertex_buffer: 5.302549 +vertex_buffer: 0.767700 +vertex_buffer: 0.454100 +vertex_buffer: -4.582000 +vertex_buffer: -0.319409 +vertex_buffer: 5.355970 +vertex_buffer: 0.776700 +vertex_buffer: 0.397800 +vertex_buffer: -3.990000 +vertex_buffer: -0.400474 +vertex_buffer: 5.413808 +vertex_buffer: 0.779800 +vertex_buffer: 0.340600 +vertex_buffer: -3.501000 +vertex_buffer: -0.414360 +vertex_buffer: 5.459591 +vertex_buffer: 0.777100 +vertex_buffer: 0.293000 +vertex_buffer: -3.075000 +vertex_buffer: -0.373539 +vertex_buffer: 5.500115 +vertex_buffer: 0.769700 +vertex_buffer: 0.251500 +vertex_buffer: -2.674000 +vertex_buffer: -0.292200 +vertex_buffer: 5.537738 +vertex_buffer: 0.757200 +vertex_buffer: 0.212800 +vertex_buffer: -2.308000 +vertex_buffer: -0.159513 +vertex_buffer: 5.575268 +vertex_buffer: 0.740100 +vertex_buffer: 0.177600 +vertex_buffer: -1.986000 +vertex_buffer: 0.034865 +vertex_buffer: 5.609689 +vertex_buffer: 0.718400 +vertex_buffer: 0.146300 +vertex_buffer: -1.707000 +vertex_buffer: 0.305900 +vertex_buffer: 5.618189 +vertex_buffer: 0.691800 +vertex_buffer: 0.117600 +vertex_buffer: -1.471000 +vertex_buffer: 0.665717 +vertex_buffer: 5.575468 +vertex_buffer: 0.659200 +vertex_buffer: 0.090100 +vertex_buffer: -1.264000 +vertex_buffer: 1.088916 +vertex_buffer: 5.518081 +vertex_buffer: 0.620700 +vertex_buffer: 0.065000 +vertex_buffer: -0.922999 +vertex_buffer: 1.947676 +vertex_buffer: 5.467464 +vertex_buffer: 0.538400 +vertex_buffer: 0.032000 +vertex_buffer: -0.847000 +vertex_buffer: 2.170980 +vertex_buffer: 5.465208 +vertex_buffer: 0.515400 +vertex_buffer: 0.027100 +vertex_buffer: -0.807999 +vertex_buffer: 2.157453 +vertex_buffer: 5.482841 +vertex_buffer: 0.514700 +vertex_buffer: 0.030900 +vertex_buffer: -0.796000 +vertex_buffer: 2.333566 +vertex_buffer: 5.498341 +vertex_buffer: 0.497900 +vertex_buffer: 0.026800 +vertex_buffer: -0.719000 +vertex_buffer: 2.548583 +vertex_buffer: 5.588669 +vertex_buffer: 0.474800 +vertex_buffer: 0.031000 +vertex_buffer: -0.631000 +vertex_buffer: 2.767489 +vertex_buffer: 5.684450 +vertex_buffer: 0.452100 +vertex_buffer: 0.036800 +vertex_buffer: -0.313999 +vertex_buffer: 3.115831 +vertex_buffer: 5.733213 +vertex_buffer: 0.412000 +vertex_buffer: 0.031500 +vertex_buffer: -0.450000 +vertex_buffer: 3.063987 +vertex_buffer: 5.729444 +vertex_buffer: 0.423000 +vertex_buffer: 0.035000 +vertex_buffer: -0.182000 +vertex_buffer: 3.129776 +vertex_buffer: 5.735759 +vertex_buffer: 0.401700 +vertex_buffer: 0.027400 +vertex_buffer: -0.160685 +vertex_buffer: 3.986409 +vertex_buffer: 5.740629 +vertex_buffer: 0.284300 +vertex_buffer: 0.106000 +vertex_buffer: -0.309999 +vertex_buffer: 3.994118 +vertex_buffer: 5.738694 +vertex_buffer: 0.288800 +vertex_buffer: 0.118600 +vertex_buffer: -0.557000 +vertex_buffer: 4.010119 +vertex_buffer: 5.737586 +vertex_buffer: 0.295500 +vertex_buffer: 0.139600 +vertex_buffer: -0.884999 +vertex_buffer: 4.051117 +vertex_buffer: 5.738481 +vertex_buffer: 0.303600 +vertex_buffer: 0.168000 +vertex_buffer: -1.100000 +vertex_buffer: 4.085115 +vertex_buffer: 5.740980 +vertex_buffer: 0.308100 +vertex_buffer: 0.186900 +vertex_buffer: -1.408000 +vertex_buffer: 4.138110 +vertex_buffer: 5.742989 +vertex_buffer: 0.313100 +vertex_buffer: 0.214600 +vertex_buffer: -1.825000 +vertex_buffer: 4.212113 +vertex_buffer: 5.742072 +vertex_buffer: 0.317400 +vertex_buffer: 0.252500 +vertex_buffer: -2.364000 +vertex_buffer: 4.287131 +vertex_buffer: 5.725549 +vertex_buffer: 0.321000 +vertex_buffer: 0.301800 +vertex_buffer: -3.039000 +vertex_buffer: 4.343173 +vertex_buffer: 5.693288 +vertex_buffer: 0.325800 +vertex_buffer: 0.363200 +vertex_buffer: -3.712000 +vertex_buffer: 4.374225 +vertex_buffer: 5.649136 +vertex_buffer: 0.332200 +vertex_buffer: 0.424300 +vertex_buffer: -4.241000 +vertex_buffer: 4.376288 +vertex_buffer: 5.597692 +vertex_buffer: 0.338400 +vertex_buffer: 0.472600 +vertex_buffer: -7.047000 +vertex_buffer: 3.937823 +vertex_buffer: 5.156792 +vertex_buffer: 0.410100 +vertex_buffer: 0.735500 +vertex_buffer: -6.661000 +vertex_buffer: 4.029736 +vertex_buffer: 5.228822 +vertex_buffer: 0.393600 +vertex_buffer: 0.695500 +vertex_buffer: -6.937000 +vertex_buffer: 2.624609 +vertex_buffer: 5.145157 +vertex_buffer: 0.573600 +vertex_buffer: 0.719000 +vertex_buffer: -0.549000 +vertex_buffer: 2.943340 +vertex_buffer: 5.723495 +vertex_buffer: 0.435100 +vertex_buffer: 0.038000 +vertex_buffer: -7.092000 +vertex_buffer: 3.924858 +vertex_buffer: 5.128843 +vertex_buffer: 0.412000 +vertex_buffer: 0.741800 +vertex_buffer: -7.111000 +vertex_buffer: 3.918920 +vertex_buffer: 5.078127 +vertex_buffer: 0.412900 +vertex_buffer: 0.748000 +vertex_buffer: -7.115000 +vertex_buffer: 3.949918 +vertex_buffer: 5.079048 +vertex_buffer: 0.415800 +vertex_buffer: 0.747800 +vertex_buffer: -7.113000 +vertex_buffer: 3.917983 +vertex_buffer: 5.025514 +vertex_buffer: 0.413300 +vertex_buffer: 0.753900 +vertex_buffer: -7.118000 +vertex_buffer: 3.948984 +vertex_buffer: 5.024453 +vertex_buffer: 0.416100 +vertex_buffer: 0.753900 +vertex_buffer: -7.349000 +vertex_buffer: 3.848097 +vertex_buffer: 4.931756 +vertex_buffer: 0.437800 +vertex_buffer: 0.777500 +vertex_buffer: -7.355000 +vertex_buffer: 3.828099 +vertex_buffer: 4.930316 +vertex_buffer: 0.442100 +vertex_buffer: 0.779000 +vertex_buffer: -7.351000 +vertex_buffer: 3.790099 +vertex_buffer: 4.929286 +vertex_buffer: 0.447600 +vertex_buffer: 0.780600 +vertex_buffer: -7.330000 +vertex_buffer: 3.384200 +vertex_buffer: 4.920932 +vertex_buffer: 0.493500 +vertex_buffer: 0.779900 +vertex_buffer: -7.307000 +vertex_buffer: 3.363702 +vertex_buffer: 4.924161 +vertex_buffer: 0.498000 +vertex_buffer: 0.779100 +vertex_buffer: -7.257000 +vertex_buffer: 3.334402 +vertex_buffer: 4.931817 +vertex_buffer: 0.504300 +vertex_buffer: 0.777500 +vertex_buffer: -7.344000 +vertex_buffer: 3.549107 +vertex_buffer: 4.923484 +vertex_buffer: 0.472400 +vertex_buffer: 0.782100 +vertex_buffer: -7.342000 +vertex_buffer: 3.491108 +vertex_buffer: 4.922235 +vertex_buffer: 0.479000 +vertex_buffer: 0.781900 +vertex_buffer: -7.137000 +vertex_buffer: 3.943048 +vertex_buffer: 4.972868 +vertex_buffer: 0.418000 +vertex_buffer: 0.760000 +vertex_buffer: -7.120000 +vertex_buffer: 3.945038 +vertex_buffer: 4.979739 +vertex_buffer: 0.416700 +vertex_buffer: 0.758700 +vertex_buffer: -7.116000 +vertex_buffer: 3.915038 +vertex_buffer: 4.979849 +vertex_buffer: 0.414600 +vertex_buffer: 0.760100 +vertex_buffer: -7.136000 +vertex_buffer: 3.910048 +vertex_buffer: 4.971928 +vertex_buffer: 0.416500 +vertex_buffer: 0.762500 +vertex_buffer: -7.167000 +vertex_buffer: 3.903056 +vertex_buffer: 4.966033 +vertex_buffer: 0.419600 +vertex_buffer: 0.764900 +vertex_buffer: -7.168000 +vertex_buffer: 3.936054 +vertex_buffer: 4.966967 +vertex_buffer: 0.420700 +vertex_buffer: 0.762000 +vertex_buffer: -7.340000 +vertex_buffer: 3.445111 +vertex_buffer: 4.921282 +vertex_buffer: 0.484500 +vertex_buffer: 0.781500 +vertex_buffer: -7.339000 +vertex_buffer: 3.410543 +vertex_buffer: 4.919605 +vertex_buffer: 0.489200 +vertex_buffer: 0.780700 +vertex_buffer: -7.081000 +vertex_buffer: 3.225890 +vertex_buffer: 4.958372 +vertex_buffer: 0.523200 +vertex_buffer: 0.771200 +vertex_buffer: -7.329000 +vertex_buffer: 3.862093 +vertex_buffer: 4.935845 +vertex_buffer: 0.433300 +vertex_buffer: 0.775300 +vertex_buffer: -7.348000 +vertex_buffer: 3.655105 +vertex_buffer: 4.925934 +vertex_buffer: 0.461400 +vertex_buffer: 0.781700 +vertex_buffer: -7.266000 +vertex_buffer: 3.262676 +vertex_buffer: 5.181256 +vertex_buffer: 0.506400 +vertex_buffer: 0.749800 +vertex_buffer: -7.226000 +vertex_buffer: 3.234846 +vertex_buffer: 5.228929 +vertex_buffer: 0.510100 +vertex_buffer: 0.744300 +vertex_buffer: -7.182000 +vertex_buffer: 3.205980 +vertex_buffer: 5.273643 +vertex_buffer: 0.513500 +vertex_buffer: 0.738500 +vertex_buffer: -1.142000 +vertex_buffer: 1.341919 +vertex_buffer: 6.002557 +vertex_buffer: 0.575400 +vertex_buffer: 0.095400 +vertex_buffer: -1.118000 +vertex_buffer: 1.338903 +vertex_buffer: 6.002359 +vertex_buffer: 0.575400 +vertex_buffer: 0.093900 +vertex_buffer: -1.103000 +vertex_buffer: 1.337232 +vertex_buffer: 5.996234 +vertex_buffer: 0.575600 +vertex_buffer: 0.093100 +vertex_buffer: -0.806000 +vertex_buffer: 2.138176 +vertex_buffer: 5.548845 +vertex_buffer: 0.514500 +vertex_buffer: 0.036600 +vertex_buffer: -1.367000 +vertex_buffer: 1.388032 +vertex_buffer: 5.704676 +vertex_buffer: 0.568800 +vertex_buffer: 0.139600 +vertex_buffer: -1.098000 +vertex_buffer: 1.337325 +vertex_buffer: 5.977184 +vertex_buffer: 0.576200 +vertex_buffer: 0.092200 +vertex_buffer: -1.332000 +vertex_buffer: 1.365340 +vertex_buffer: 5.998475 +vertex_buffer: 0.575300 +vertex_buffer: 0.112000 +vertex_buffer: -1.071000 +vertex_buffer: 1.551685 +vertex_buffer: 5.483383 +vertex_buffer: 0.577000 +vertex_buffer: 0.044800 +vertex_buffer: -7.168000 +vertex_buffer: 3.279676 +vertex_buffer: 4.945478 +vertex_buffer: 0.514000 +vertex_buffer: 0.774200 +vertex_buffer: -7.141000 +vertex_buffer: 3.958912 +vertex_buffer: 5.084465 +vertex_buffer: 0.418600 +vertex_buffer: 0.748300 +vertex_buffer: -7.142000 +vertex_buffer: 3.957986 +vertex_buffer: 5.022904 +vertex_buffer: 0.418500 +vertex_buffer: 0.754600 +vertex_buffer: -7.112000 +vertex_buffer: 3.917019 +vertex_buffer: 4.995733 +vertex_buffer: 0.413700 +vertex_buffer: 0.757700 +vertex_buffer: -7.116000 +vertex_buffer: 3.949022 +vertex_buffer: 4.993701 +vertex_buffer: 0.416400 +vertex_buffer: 0.757200 +vertex_buffer: -7.141000 +vertex_buffer: 3.958028 +vertex_buffer: 4.989184 +vertex_buffer: 0.418500 +vertex_buffer: 0.758000 +vertex_buffer: -0.573225 +vertex_buffer: 3.334350 +vertex_buffer: 6.083103 +vertex_buffer: 0.387400 +vertex_buffer: 0.102200 +vertex_buffer: -0.323866 +vertex_buffer: 3.364760 +vertex_buffer: 6.099101 +vertex_buffer: 0.376200 +vertex_buffer: 0.082600 +vertex_buffer: -0.167873 +vertex_buffer: 3.366989 +vertex_buffer: 6.104354 +vertex_buffer: 0.368800 +vertex_buffer: 0.070800 +vertex_buffer: 0.317000 +vertex_buffer: 4.024064 +vertex_buffer: 5.899689 +vertex_buffer: 0.113300 +vertex_buffer: 0.743500 +vertex_buffer: 0.317000 +vertex_buffer: 4.026103 +vertex_buffer: 5.867753 +vertex_buffer: 0.115200 +vertex_buffer: 0.743500 +vertex_buffer: -0.000000 +vertex_buffer: 4.013804 +vertex_buffer: 5.874567 +vertex_buffer: 0.115200 +vertex_buffer: 0.764900 +vertex_buffer: -0.000000 +vertex_buffer: 4.010763 +vertex_buffer: 5.907621 +vertex_buffer: 0.113300 +vertex_buffer: 0.764900 +vertex_buffer: 0.317000 +vertex_buffer: 4.024140 +vertex_buffer: 5.836836 +vertex_buffer: 0.117100 +vertex_buffer: 0.743500 +vertex_buffer: -0.000000 +vertex_buffer: 4.010841 +vertex_buffer: 5.842498 +vertex_buffer: 0.117100 +vertex_buffer: 0.764900 +vertex_buffer: 1.083000 +vertex_buffer: 4.115381 +vertex_buffer: 5.880229 +vertex_buffer: 0.113300 +vertex_buffer: 0.693300 +vertex_buffer: 1.083000 +vertex_buffer: 4.118413 +vertex_buffer: 5.852974 +vertex_buffer: 0.115200 +vertex_buffer: 0.693300 +vertex_buffer: 0.670000 +vertex_buffer: 4.054759 +vertex_buffer: 5.859921 +vertex_buffer: 0.115200 +vertex_buffer: 0.720700 +vertex_buffer: 0.670000 +vertex_buffer: 4.051723 +vertex_buffer: 5.889535 +vertex_buffer: 0.113300 +vertex_buffer: 0.720700 +vertex_buffer: 1.082000 +vertex_buffer: 4.115445 +vertex_buffer: 5.826654 +vertex_buffer: 0.117100 +vertex_buffer: 0.693300 +vertex_buffer: 0.669000 +vertex_buffer: 4.051794 +vertex_buffer: 5.831267 +vertex_buffer: 0.117100 +vertex_buffer: 0.720700 +vertex_buffer: 1.465000 +vertex_buffer: 4.182078 +vertex_buffer: 5.872258 +vertex_buffer: 0.113300 +vertex_buffer: 0.667700 +vertex_buffer: 1.464000 +vertex_buffer: 4.185110 +vertex_buffer: 5.847359 +vertex_buffer: 0.115200 +vertex_buffer: 0.667700 +vertex_buffer: 1.464000 +vertex_buffer: 4.182139 +vertex_buffer: 5.822321 +vertex_buffer: 0.117100 +vertex_buffer: 0.667700 +vertex_buffer: 1.843000 +vertex_buffer: 4.247624 +vertex_buffer: 5.863575 +vertex_buffer: 0.113300 +vertex_buffer: 0.642000 +vertex_buffer: 1.842000 +vertex_buffer: 4.250652 +vertex_buffer: 5.839960 +vertex_buffer: 0.115200 +vertex_buffer: 0.642000 +vertex_buffer: 1.841000 +vertex_buffer: 4.247682 +vertex_buffer: 5.816204 +vertex_buffer: 0.117100 +vertex_buffer: 0.642000 +vertex_buffer: 2.366000 +vertex_buffer: 4.322475 +vertex_buffer: 5.821735 +vertex_buffer: 0.115200 +vertex_buffer: 0.606500 +vertex_buffer: 2.364000 +vertex_buffer: 4.319502 +vertex_buffer: 5.798289 +vertex_buffer: 0.117100 +vertex_buffer: 0.606500 +vertex_buffer: 2.367000 +vertex_buffer: 4.319444 +vertex_buffer: 5.846098 +vertex_buffer: 0.113300 +vertex_buffer: 0.606500 +vertex_buffer: 3.039000 +vertex_buffer: 4.372745 +vertex_buffer: 5.811448 +vertex_buffer: 0.113300 +vertex_buffer: 0.561200 +vertex_buffer: 3.038000 +vertex_buffer: 4.375773 +vertex_buffer: 5.788562 +vertex_buffer: 0.115200 +vertex_buffer: 0.561200 +vertex_buffer: 3.036000 +vertex_buffer: 4.372801 +vertex_buffer: 5.765585 +vertex_buffer: 0.117100 +vertex_buffer: 0.561200 +vertex_buffer: 3.716000 +vertex_buffer: 4.406310 +vertex_buffer: 5.744192 +vertex_buffer: 0.115200 +vertex_buffer: 0.515600 +vertex_buffer: 3.714000 +vertex_buffer: 4.403336 +vertex_buffer: 5.721646 +vertex_buffer: 0.117100 +vertex_buffer: 0.515600 +vertex_buffer: 3.718000 +vertex_buffer: 4.403282 +vertex_buffer: 5.765681 +vertex_buffer: 0.113300 +vertex_buffer: 0.515600 +vertex_buffer: 4.259000 +vertex_buffer: 4.404346 +vertex_buffer: 5.714486 +vertex_buffer: 0.113300 +vertex_buffer: 0.479100 +vertex_buffer: 4.257000 +vertex_buffer: 4.407372 +vertex_buffer: 5.693258 +vertex_buffer: 0.115200 +vertex_buffer: 0.479100 +vertex_buffer: 4.254000 +vertex_buffer: 4.404398 +vertex_buffer: 5.671983 +vertex_buffer: 0.117100 +vertex_buffer: 0.479100 +vertex_buffer: 4.709000 +vertex_buffer: 4.387179 +vertex_buffer: 5.639311 +vertex_buffer: 0.115200 +vertex_buffer: 0.448800 +vertex_buffer: 4.706000 +vertex_buffer: 4.384205 +vertex_buffer: 5.617180 +vertex_buffer: 0.117100 +vertex_buffer: 0.448800 +vertex_buffer: 4.711000 +vertex_buffer: 4.384153 +vertex_buffer: 5.660390 +vertex_buffer: 0.113300 +vertex_buffer: 0.448800 +vertex_buffer: 5.122000 +vertex_buffer: 4.352591 +vertex_buffer: 5.582086 +vertex_buffer: 0.115200 +vertex_buffer: 0.421000 +vertex_buffer: 5.125000 +vertex_buffer: 4.349563 +vertex_buffer: 5.603030 +vertex_buffer: 0.113300 +vertex_buffer: 0.421000 +vertex_buffer: 5.119000 +vertex_buffer: 4.349615 +vertex_buffer: 5.561021 +vertex_buffer: 0.117100 +vertex_buffer: 0.421000 +vertex_buffer: 5.542000 +vertex_buffer: 4.293632 +vertex_buffer: 5.516748 +vertex_buffer: 0.115200 +vertex_buffer: 0.392600 +vertex_buffer: 5.539000 +vertex_buffer: 4.291658 +vertex_buffer: 5.495723 +vertex_buffer: 0.117100 +vertex_buffer: 0.392600 +vertex_buffer: 5.545000 +vertex_buffer: 4.290609 +vertex_buffer: 5.537658 +vertex_buffer: 0.113300 +vertex_buffer: 0.392600 +vertex_buffer: 6.018000 +vertex_buffer: 4.203568 +vertex_buffer: 5.459014 +vertex_buffer: 0.113300 +vertex_buffer: 0.360400 +vertex_buffer: 6.015000 +vertex_buffer: 4.205595 +vertex_buffer: 5.438093 +vertex_buffer: 0.115200 +vertex_buffer: 0.360400 +vertex_buffer: 6.012000 +vertex_buffer: 4.203619 +vertex_buffer: 5.417067 +vertex_buffer: 0.117100 +vertex_buffer: 0.360400 +vertex_buffer: 6.398000 +vertex_buffer: 4.123437 +vertex_buffer: 5.353050 +vertex_buffer: 0.117100 +vertex_buffer: 0.333900 +vertex_buffer: 6.402000 +vertex_buffer: 4.126411 +vertex_buffer: 5.374100 +vertex_buffer: 0.115200 +vertex_buffer: 0.333900 +vertex_buffer: 6.405000 +vertex_buffer: 4.123386 +vertex_buffer: 5.394981 +vertex_buffer: 0.113300 +vertex_buffer: 0.333900 +vertex_buffer: 0.317000 +vertex_buffer: 4.016156 +vertex_buffer: 5.825611 +vertex_buffer: 0.117800 +vertex_buffer: 0.743500 +vertex_buffer: -0.000000 +vertex_buffer: 4.002857 +vertex_buffer: 5.831279 +vertex_buffer: 0.117800 +vertex_buffer: 0.764900 +vertex_buffer: -0.000000 +vertex_buffer: 3.981855 +vertex_buffer: 5.830786 +vertex_buffer: 0.119200 +vertex_buffer: 0.764900 +vertex_buffer: 0.318000 +vertex_buffer: 3.995154 +vertex_buffer: 5.825060 +vertex_buffer: 0.119200 +vertex_buffer: 0.743500 +vertex_buffer: 0.317000 +vertex_buffer: 4.016054 +vertex_buffer: 5.909416 +vertex_buffer: 0.112500 +vertex_buffer: 0.743500 +vertex_buffer: -0.000000 +vertex_buffer: 4.002751 +vertex_buffer: 5.918476 +vertex_buffer: 0.112500 +vertex_buffer: 0.764900 +vertex_buffer: -0.000000 +vertex_buffer: 3.981750 +vertex_buffer: 5.917982 +vertex_buffer: 0.111100 +vertex_buffer: 0.764900 +vertex_buffer: 0.318999 +vertex_buffer: 3.995053 +vertex_buffer: 5.908851 +vertex_buffer: 0.111100 +vertex_buffer: 0.743500 +vertex_buffer: 1.082000 +vertex_buffer: 4.107457 +vertex_buffer: 5.816597 +vertex_buffer: 0.117800 +vertex_buffer: 0.693300 +vertex_buffer: 0.669000 +vertex_buffer: 4.043805 +vertex_buffer: 5.821159 +vertex_buffer: 0.117800 +vertex_buffer: 0.720700 +vertex_buffer: 1.082000 +vertex_buffer: 4.086458 +vertex_buffer: 5.816010 +vertex_buffer: 0.119200 +vertex_buffer: 0.693300 +vertex_buffer: 0.669000 +vertex_buffer: 4.022807 +vertex_buffer: 5.820588 +vertex_buffer: 0.119200 +vertex_buffer: 0.720700 +vertex_buffer: 1.083000 +vertex_buffer: 4.107370 +vertex_buffer: 5.888755 +vertex_buffer: 0.112500 +vertex_buffer: 0.693300 +vertex_buffer: 0.670000 +vertex_buffer: 4.043711 +vertex_buffer: 5.899221 +vertex_buffer: 0.112500 +vertex_buffer: 0.720700 +vertex_buffer: 1.083000 +vertex_buffer: 4.086370 +vertex_buffer: 5.888166 +vertex_buffer: 0.111100 +vertex_buffer: 0.693300 +vertex_buffer: 0.670000 +vertex_buffer: 4.022712 +vertex_buffer: 5.898648 +vertex_buffer: 0.111100 +vertex_buffer: 0.720700 +vertex_buffer: 1.463000 +vertex_buffer: 4.174151 +vertex_buffer: 5.813412 +vertex_buffer: 0.117800 +vertex_buffer: 0.667700 +vertex_buffer: 1.463000 +vertex_buffer: 4.153151 +vertex_buffer: 5.812834 +vertex_buffer: 0.119200 +vertex_buffer: 0.667700 +vertex_buffer: 1.465000 +vertex_buffer: 4.174070 +vertex_buffer: 5.879640 +vertex_buffer: 0.112500 +vertex_buffer: 0.667700 +vertex_buffer: 1.465000 +vertex_buffer: 4.153070 +vertex_buffer: 5.879068 +vertex_buffer: 0.111100 +vertex_buffer: 0.667700 +vertex_buffer: 2.364000 +vertex_buffer: 4.311512 +vertex_buffer: 5.790699 +vertex_buffer: 0.117800 +vertex_buffer: 0.606500 +vertex_buffer: 1.841000 +vertex_buffer: 4.239691 +vertex_buffer: 5.807399 +vertex_buffer: 0.117800 +vertex_buffer: 0.642000 +vertex_buffer: 1.840000 +vertex_buffer: 4.218691 +vertex_buffer: 5.806841 +vertex_buffer: 0.119200 +vertex_buffer: 0.642000 +vertex_buffer: 2.363000 +vertex_buffer: 4.291511 +vertex_buffer: 5.790249 +vertex_buffer: 0.119200 +vertex_buffer: 0.606500 +vertex_buffer: 1.843000 +vertex_buffer: 4.239612 +vertex_buffer: 5.871983 +vertex_buffer: 0.112500 +vertex_buffer: 0.642000 +vertex_buffer: 2.367000 +vertex_buffer: 4.311437 +vertex_buffer: 5.853360 +vertex_buffer: 0.112500 +vertex_buffer: 0.606500 +vertex_buffer: 2.367000 +vertex_buffer: 4.291435 +vertex_buffer: 5.852943 +vertex_buffer: 0.111100 +vertex_buffer: 0.606500 +vertex_buffer: 1.843000 +vertex_buffer: 4.218612 +vertex_buffer: 5.871453 +vertex_buffer: 0.111100 +vertex_buffer: 0.642000 +vertex_buffer: 3.713000 +vertex_buffer: 4.395346 +vertex_buffer: 5.714444 +vertex_buffer: 0.117800 +vertex_buffer: 0.515600 +vertex_buffer: 3.035000 +vertex_buffer: 4.364810 +vertex_buffer: 5.758161 +vertex_buffer: 0.117800 +vertex_buffer: 0.561200 +vertex_buffer: 3.035000 +vertex_buffer: 4.344810 +vertex_buffer: 5.757899 +vertex_buffer: 0.119200 +vertex_buffer: 0.561200 +vertex_buffer: 3.713000 +vertex_buffer: 4.375346 +vertex_buffer: 5.714359 +vertex_buffer: 0.119200 +vertex_buffer: 0.515600 +vertex_buffer: 3.040000 +vertex_buffer: 4.364735 +vertex_buffer: 5.819693 +vertex_buffer: 0.112500 +vertex_buffer: 0.561200 +vertex_buffer: 3.718000 +vertex_buffer: 4.395276 +vertex_buffer: 5.772814 +vertex_buffer: 0.112500 +vertex_buffer: 0.515600 +vertex_buffer: 3.039000 +vertex_buffer: 4.344735 +vertex_buffer: 5.819412 +vertex_buffer: 0.111100 +vertex_buffer: 0.561200 +vertex_buffer: 3.718000 +vertex_buffer: 4.375276 +vertex_buffer: 5.772729 +vertex_buffer: 0.111100 +vertex_buffer: 0.515600 +vertex_buffer: 4.705000 +vertex_buffer: 4.376215 +vertex_buffer: 5.610039 +vertex_buffer: 0.117800 +vertex_buffer: 0.448800 +vertex_buffer: 4.253000 +vertex_buffer: 4.396406 +vertex_buffer: 5.664846 +vertex_buffer: 0.117800 +vertex_buffer: 0.479100 +vertex_buffer: 4.253000 +vertex_buffer: 4.375406 +vertex_buffer: 5.664687 +vertex_buffer: 0.119200 +vertex_buffer: 0.479100 +vertex_buffer: 4.705000 +vertex_buffer: 4.355214 +vertex_buffer: 5.609741 +vertex_buffer: 0.119200 +vertex_buffer: 0.448800 +vertex_buffer: 4.259000 +vertex_buffer: 4.396337 +vertex_buffer: 5.721516 +vertex_buffer: 0.112500 +vertex_buffer: 0.479100 +vertex_buffer: 4.712000 +vertex_buffer: 4.376145 +vertex_buffer: 5.667303 +vertex_buffer: 0.112500 +vertex_buffer: 0.448800 +vertex_buffer: 4.259000 +vertex_buffer: 4.375338 +vertex_buffer: 5.721359 +vertex_buffer: 0.111100 +vertex_buffer: 0.479100 +vertex_buffer: 4.711000 +vertex_buffer: 4.355145 +vertex_buffer: 5.667006 +vertex_buffer: 0.111100 +vertex_buffer: 0.448800 +vertex_buffer: 5.118000 +vertex_buffer: 4.341623 +vertex_buffer: 5.553867 +vertex_buffer: 0.117800 +vertex_buffer: 0.421000 +vertex_buffer: 5.538000 +vertex_buffer: 4.282668 +vertex_buffer: 5.488510 +vertex_buffer: 0.117800 +vertex_buffer: 0.392600 +vertex_buffer: 5.118000 +vertex_buffer: 4.320625 +vertex_buffer: 5.553451 +vertex_buffer: 0.119200 +vertex_buffer: 0.421000 +vertex_buffer: 5.537000 +vertex_buffer: 4.262668 +vertex_buffer: 5.488038 +vertex_buffer: 0.119200 +vertex_buffer: 0.392600 +vertex_buffer: 5.125000 +vertex_buffer: 4.341555 +vertex_buffer: 5.609896 +vertex_buffer: 0.112500 +vertex_buffer: 0.421000 +vertex_buffer: 5.546000 +vertex_buffer: 4.282600 +vertex_buffer: 5.544456 +vertex_buffer: 0.112500 +vertex_buffer: 0.392600 +vertex_buffer: 5.125000 +vertex_buffer: 4.320557 +vertex_buffer: 5.609480 +vertex_buffer: 0.111100 +vertex_buffer: 0.421000 +vertex_buffer: 5.545000 +vertex_buffer: 4.262599 +vertex_buffer: 5.544984 +vertex_buffer: 0.111100 +vertex_buffer: 0.392600 +vertex_buffer: 6.011000 +vertex_buffer: 4.195629 +vertex_buffer: 5.409849 +vertex_buffer: 0.117800 +vertex_buffer: 0.360400 +vertex_buffer: 6.397000 +vertex_buffer: 4.115445 +vertex_buffer: 5.345820 +vertex_buffer: 0.117800 +vertex_buffer: 0.333900 +vertex_buffer: 6.010000 +vertex_buffer: 4.174628 +vertex_buffer: 5.409264 +vertex_buffer: 0.119200 +vertex_buffer: 0.360400 +vertex_buffer: 6.396000 +vertex_buffer: 4.094446 +vertex_buffer: 5.345189 +vertex_buffer: 0.119200 +vertex_buffer: 0.333900 +vertex_buffer: 6.019000 +vertex_buffer: 4.194561 +vertex_buffer: 5.465749 +vertex_buffer: 0.112500 +vertex_buffer: 0.360400 +vertex_buffer: 6.406000 +vertex_buffer: 4.115377 +vertex_buffer: 5.401730 +vertex_buffer: 0.112500 +vertex_buffer: 0.333900 +vertex_buffer: 6.018000 +vertex_buffer: 4.174561 +vertex_buffer: 5.465191 +vertex_buffer: 0.111100 +vertex_buffer: 0.360400 +vertex_buffer: 6.405000 +vertex_buffer: 4.094377 +vertex_buffer: 5.401098 +vertex_buffer: 0.111100 +vertex_buffer: 0.333900 +vertex_buffer: 6.663430 +vertex_buffer: 4.069083 +vertex_buffer: 5.334795 +vertex_buffer: 0.115200 +vertex_buffer: 0.318300 +vertex_buffer: 6.667440 +vertex_buffer: 4.066058 +vertex_buffer: 5.355673 +vertex_buffer: 0.113300 +vertex_buffer: 0.318300 +vertex_buffer: 6.660440 +vertex_buffer: 4.066109 +vertex_buffer: 5.313739 +vertex_buffer: 0.117100 +vertex_buffer: 0.318300 +vertex_buffer: 6.658440 +vertex_buffer: 4.058116 +vertex_buffer: 5.306510 +vertex_buffer: 0.117800 +vertex_buffer: 0.318300 +vertex_buffer: 6.657430 +vertex_buffer: 4.038118 +vertex_buffer: 5.305898 +vertex_buffer: 0.119200 +vertex_buffer: 0.318300 +vertex_buffer: 6.402000 +vertex_buffer: 4.002382 +vertex_buffer: 5.398364 +vertex_buffer: 0.104900 +vertex_buffer: 0.333900 +vertex_buffer: 6.663430 +vertex_buffer: 3.946052 +vertex_buffer: 5.360036 +vertex_buffer: 0.104900 +vertex_buffer: 0.318300 +vertex_buffer: 6.667440 +vertex_buffer: 4.037049 +vertex_buffer: 5.361777 +vertex_buffer: 0.111100 +vertex_buffer: 0.318300 +vertex_buffer: 6.683440 +vertex_buffer: 4.032087 +vertex_buffer: 5.330598 +vertex_buffer: 0.115200 +vertex_buffer: 0.315300 +vertex_buffer: 6.682430 +vertex_buffer: 4.033060 +vertex_buffer: 5.352612 +vertex_buffer: 0.113300 +vertex_buffer: 0.315300 +vertex_buffer: 6.678430 +vertex_buffer: 3.942064 +vertex_buffer: 5.349873 +vertex_buffer: 0.113300 +vertex_buffer: 0.309200 +vertex_buffer: 6.680430 +vertex_buffer: 3.940090 +vertex_buffer: 5.327828 +vertex_buffer: 0.115200 +vertex_buffer: 0.309200 +vertex_buffer: 6.671430 +vertex_buffer: 3.942115 +vertex_buffer: 5.307944 +vertex_buffer: 0.117100 +vertex_buffer: 0.309200 +vertex_buffer: 6.675430 +vertex_buffer: 4.034112 +vertex_buffer: 5.310711 +vertex_buffer: 0.117100 +vertex_buffer: 0.315300 +vertex_buffer: -0.000000 +vertex_buffer: 3.889860 +vertex_buffer: 5.828691 +vertex_buffer: 0.125300 +vertex_buffer: 0.764900 +vertex_buffer: 0.323999 +vertex_buffer: 3.891866 +vertex_buffer: 5.822424 +vertex_buffer: 0.125300 +vertex_buffer: 0.743500 +vertex_buffer: -0.000000 +vertex_buffer: 3.889754 +vertex_buffer: 5.915883 +vertex_buffer: 0.104900 +vertex_buffer: 0.764900 +vertex_buffer: 0.327999 +vertex_buffer: 3.891764 +vertex_buffer: 5.906166 +vertex_buffer: 0.104900 +vertex_buffer: 0.743500 +vertex_buffer: 1.081000 +vertex_buffer: 3.967878 +vertex_buffer: 5.812775 +vertex_buffer: 0.125300 +vertex_buffer: 0.693300 +vertex_buffer: 0.669000 +vertex_buffer: 3.913872 +vertex_buffer: 5.817708 +vertex_buffer: 0.125300 +vertex_buffer: 0.720700 +vertex_buffer: 0.672999 +vertex_buffer: 3.913777 +vertex_buffer: 5.895747 +vertex_buffer: 0.104900 +vertex_buffer: 0.720700 +vertex_buffer: 1.083000 +vertex_buffer: 3.967790 +vertex_buffer: 5.884938 +vertex_buffer: 0.104900 +vertex_buffer: 0.693300 +vertex_buffer: 1.462000 +vertex_buffer: 4.038882 +vertex_buffer: 5.809780 +vertex_buffer: 0.125300 +vertex_buffer: 0.667700 +vertex_buffer: 1.464000 +vertex_buffer: 4.038802 +vertex_buffer: 5.876020 +vertex_buffer: 0.104900 +vertex_buffer: 0.667700 +vertex_buffer: 1.840000 +vertex_buffer: 4.110889 +vertex_buffer: 5.804165 +vertex_buffer: 0.125300 +vertex_buffer: 0.642000 +vertex_buffer: 2.362000 +vertex_buffer: 4.186910 +vertex_buffer: 5.788058 +vertex_buffer: 0.125300 +vertex_buffer: 0.606500 +vertex_buffer: 1.842000 +vertex_buffer: 4.110811 +vertex_buffer: 5.868769 +vertex_buffer: 0.104900 +vertex_buffer: 0.642000 +vertex_buffer: 2.366000 +vertex_buffer: 4.186833 +vertex_buffer: 5.850768 +vertex_buffer: 0.104900 +vertex_buffer: 0.606500 +vertex_buffer: 3.034000 +vertex_buffer: 4.240947 +vertex_buffer: 5.756465 +vertex_buffer: 0.125300 +vertex_buffer: 0.561200 +vertex_buffer: 3.711000 +vertex_buffer: 4.269999 +vertex_buffer: 5.713801 +vertex_buffer: 0.125300 +vertex_buffer: 0.515600 +vertex_buffer: 3.038000 +vertex_buffer: 4.240872 +vertex_buffer: 5.817998 +vertex_buffer: 0.104900 +vertex_buffer: 0.561200 +vertex_buffer: 3.716000 +vertex_buffer: 4.269928 +vertex_buffer: 5.772200 +vertex_buffer: 0.104900 +vertex_buffer: 0.515600 +vertex_buffer: 4.251000 +vertex_buffer: 4.271059 +vertex_buffer: 5.663842 +vertex_buffer: 0.125300 +vertex_buffer: 0.479100 +vertex_buffer: 4.702000 +vertex_buffer: 4.250126 +vertex_buffer: 5.608262 +vertex_buffer: 0.125300 +vertex_buffer: 0.448800 +vertex_buffer: 4.257000 +vertex_buffer: 4.270990 +vertex_buffer: 5.720535 +vertex_buffer: 0.104900 +vertex_buffer: 0.479100 +vertex_buffer: 4.709000 +vertex_buffer: 4.249059 +vertex_buffer: 5.665525 +vertex_buffer: 0.104900 +vertex_buffer: 0.448800 +vertex_buffer: 5.115000 +vertex_buffer: 4.213196 +vertex_buffer: 5.551396 +vertex_buffer: 0.125300 +vertex_buffer: 0.421000 +vertex_buffer: 5.534000 +vertex_buffer: 4.156276 +vertex_buffer: 5.485503 +vertex_buffer: 0.125300 +vertex_buffer: 0.392600 +vertex_buffer: 5.122000 +vertex_buffer: 4.213128 +vertex_buffer: 5.607423 +vertex_buffer: 0.104900 +vertex_buffer: 0.421000 +vertex_buffer: 5.542000 +vertex_buffer: 4.156207 +vertex_buffer: 5.542446 +vertex_buffer: 0.104900 +vertex_buffer: 0.392600 +vertex_buffer: 6.007000 +vertex_buffer: 4.075372 +vertex_buffer: 5.406505 +vertex_buffer: 0.125300 +vertex_buffer: 0.360400 +vertex_buffer: 6.393000 +vertex_buffer: 4.002450 +vertex_buffer: 5.342460 +vertex_buffer: 0.125300 +vertex_buffer: 0.333900 +vertex_buffer: 6.015000 +vertex_buffer: 4.075303 +vertex_buffer: 5.463432 +vertex_buffer: 0.104900 +vertex_buffer: 0.360400 +vertex_buffer: 6.654430 +vertex_buffer: 3.946120 +vertex_buffer: 5.304128 +vertex_buffer: 0.125300 +vertex_buffer: 0.318300 +vertex_buffer: 6.667440 +vertex_buffer: 4.058049 +vertex_buffer: 5.362424 +vertex_buffer: 0.112500 +vertex_buffer: 0.318300 +vertex_buffer: 6.682430 +vertex_buffer: 4.054059 +vertex_buffer: 5.353259 +vertex_buffer: 0.113300 +vertex_buffer: 0.316700 +vertex_buffer: 6.684430 +vertex_buffer: 4.053086 +vertex_buffer: 5.331241 +vertex_buffer: 0.115200 +vertex_buffer: 0.316700 +vertex_buffer: 6.679430 +vertex_buffer: 4.062085 +vertex_buffer: 5.332533 +vertex_buffer: 0.115200 +vertex_buffer: 0.317300 +vertex_buffer: 6.677440 +vertex_buffer: 4.061067 +vertex_buffer: 5.348493 +vertex_buffer: 0.113300 +vertex_buffer: 0.317300 +vertex_buffer: 6.675430 +vertex_buffer: 4.054110 +vertex_buffer: 5.311325 +vertex_buffer: 0.117100 +vertex_buffer: 0.316700 +vertex_buffer: 6.672430 +vertex_buffer: 4.061104 +vertex_buffer: 5.317541 +vertex_buffer: 0.117100 +vertex_buffer: 0.317300 +vertex_buffer: 6.675430 +vertex_buffer: 4.054110 +vertex_buffer: 5.311325 +vertex_buffer: 0.117800 +vertex_buffer: 0.317300 +vertex_buffer: 6.675430 +vertex_buffer: 4.034112 +vertex_buffer: 5.310711 +vertex_buffer: 0.119200 +vertex_buffer: 0.317300 +vertex_buffer: 6.678430 +vertex_buffer: 3.942064 +vertex_buffer: 5.349873 +vertex_buffer: 0.104900 +vertex_buffer: 0.317300 +vertex_buffer: 6.682430 +vertex_buffer: 4.033060 +vertex_buffer: 5.352612 +vertex_buffer: 0.111100 +vertex_buffer: 0.317300 +vertex_buffer: 6.671430 +vertex_buffer: 3.942115 +vertex_buffer: 5.307944 +vertex_buffer: 0.125300 +vertex_buffer: 0.317300 +vertex_buffer: 6.682430 +vertex_buffer: 4.054059 +vertex_buffer: 5.353259 +vertex_buffer: 0.112500 +vertex_buffer: 0.317300 +vertex_buffer: 7.965990 +vertex_buffer: 3.860461 +vertex_buffer: -1.788585 +vertex_buffer: 0.203100 +vertex_buffer: 0.507000 +vertex_buffer: 8.052990 +vertex_buffer: 3.796094 +vertex_buffer: -3.073513 +vertex_buffer: 0.198000 +vertex_buffer: 0.592300 +vertex_buffer: 8.034990 +vertex_buffer: 3.803094 +vertex_buffer: -3.073276 +vertex_buffer: 0.196600 +vertex_buffer: 0.592000 +vertex_buffer: 7.945990 +vertex_buffer: 3.868422 +vertex_buffer: -1.787321 +vertex_buffer: 0.201700 +vertex_buffer: 0.506700 +vertex_buffer: 7.874000 +vertex_buffer: 3.893830 +vertex_buffer: -0.680814 +vertex_buffer: 0.205900 +vertex_buffer: 0.433200 +vertex_buffer: 7.896000 +vertex_buffer: 3.885868 +vertex_buffer: -0.682088 +vertex_buffer: 0.207400 +vertex_buffer: 0.433600 +vertex_buffer: 7.380990 +vertex_buffer: 3.877836 +vertex_buffer: 4.914070 +vertex_buffer: 0.222500 +vertex_buffer: 0.055900 +vertex_buffer: 7.371990 +vertex_buffer: 3.872185 +vertex_buffer: 4.929768 +vertex_buffer: 0.222400 +vertex_buffer: 0.054500 +vertex_buffer: 7.379990 +vertex_buffer: 3.852270 +vertex_buffer: 4.933774 +vertex_buffer: 0.224200 +vertex_buffer: 0.054600 +vertex_buffer: 7.391990 +vertex_buffer: 3.851786 +vertex_buffer: 4.912165 +vertex_buffer: 0.224200 +vertex_buffer: 0.056300 +vertex_buffer: 7.394990 +vertex_buffer: 3.848810 +vertex_buffer: 4.868700 +vertex_buffer: 0.224100 +vertex_buffer: 0.059300 +vertex_buffer: 7.383990 +vertex_buffer: 3.875837 +vertex_buffer: 4.869610 +vertex_buffer: 0.222300 +vertex_buffer: 0.059000 +vertex_buffer: 7.391990 +vertex_buffer: 3.778765 +vertex_buffer: 4.912025 +vertex_buffer: 0.229100 +vertex_buffer: 0.056900 +vertex_buffer: 7.394990 +vertex_buffer: 3.776789 +vertex_buffer: 4.868576 +vertex_buffer: 0.228900 +vertex_buffer: 0.059900 +vertex_buffer: 7.379990 +vertex_buffer: 3.780249 +vertex_buffer: 4.933623 +vertex_buffer: 0.229100 +vertex_buffer: 0.055200 +vertex_buffer: 7.934000 +vertex_buffer: 2.768480 +vertex_buffer: -7.441971 +vertex_buffer: 0.176600 +vertex_buffer: 0.898900 +vertex_buffer: 7.925000 +vertex_buffer: 2.694416 +vertex_buffer: -7.491223 +vertex_buffer: 0.182100 +vertex_buffer: 0.905500 +vertex_buffer: 7.887990 +vertex_buffer: 2.644913 +vertex_buffer: -7.592765 +vertex_buffer: 0.183300 +vertex_buffer: 0.914400 +vertex_buffer: 7.904990 +vertex_buffer: 2.747339 +vertex_buffer: -7.532923 +vertex_buffer: 0.173800 +vertex_buffer: 0.905600 +vertex_buffer: 7.934000 +vertex_buffer: 2.598799 +vertex_buffer: -7.395112 +vertex_buffer: 0.194600 +vertex_buffer: 0.904500 +vertex_buffer: 7.897000 +vertex_buffer: 2.545880 +vertex_buffer: -7.491230 +vertex_buffer: 0.196300 +vertex_buffer: 0.913300 +vertex_buffer: 7.831990 +vertex_buffer: 3.860223 +vertex_buffer: -1.781595 +vertex_buffer: 0.194100 +vertex_buffer: 0.505600 +vertex_buffer: 7.933000 +vertex_buffer: 3.796029 +vertex_buffer: -3.071515 +vertex_buffer: 0.189600 +vertex_buffer: 0.591400 +vertex_buffer: 7.928990 +vertex_buffer: 3.775072 +vertex_buffer: -3.073229 +vertex_buffer: 0.188100 +vertex_buffer: 0.591800 +vertex_buffer: 7.828000 +vertex_buffer: 3.836231 +vertex_buffer: -1.782412 +vertex_buffer: 0.192400 +vertex_buffer: 0.505900 +vertex_buffer: 7.747990 +vertex_buffer: 3.885458 +vertex_buffer: -0.670096 +vertex_buffer: 0.197600 +vertex_buffer: 0.431600 +vertex_buffer: 7.742000 +vertex_buffer: 3.858442 +vertex_buffer: -0.670008 +vertex_buffer: 0.195700 +vertex_buffer: 0.431800 +vertex_buffer: 7.828000 +vertex_buffer: 3.775273 +vertex_buffer: -1.784482 +vertex_buffer: 0.188400 +vertex_buffer: 0.506300 +vertex_buffer: 7.742000 +vertex_buffer: 3.787447 +vertex_buffer: -0.671427 +vertex_buffer: 0.191000 +vertex_buffer: 0.432000 +vertex_buffer: 7.928990 +vertex_buffer: 3.721103 +vertex_buffer: -3.075061 +vertex_buffer: 0.184400 +vertex_buffer: 0.592400 +vertex_buffer: 7.191990 +vertex_buffer: 3.879943 +vertex_buffer: 4.963490 +vertex_buffer: 0.210400 +vertex_buffer: 0.050900 +vertex_buffer: 7.175000 +vertex_buffer: 3.872894 +vertex_buffer: 4.961334 +vertex_buffer: 0.209100 +vertex_buffer: 0.050600 +vertex_buffer: 7.168990 +vertex_buffer: 3.853018 +vertex_buffer: 4.967149 +vertex_buffer: 0.209200 +vertex_buffer: 0.048900 +vertex_buffer: 7.191000 +vertex_buffer: 3.854091 +vertex_buffer: 4.970313 +vertex_buffer: 0.210700 +vertex_buffer: 0.049300 +vertex_buffer: 7.347990 +vertex_buffer: 3.853528 +vertex_buffer: 4.945253 +vertex_buffer: 0.221000 +vertex_buffer: 0.052200 +vertex_buffer: 7.348990 +vertex_buffer: 3.879403 +vertex_buffer: 4.939404 +vertex_buffer: 0.220600 +vertex_buffer: 0.053900 +vertex_buffer: 7.191000 +vertex_buffer: 3.781066 +vertex_buffer: 4.970089 +vertex_buffer: 0.212100 +vertex_buffer: 0.044600 +vertex_buffer: 7.347990 +vertex_buffer: 3.780506 +vertex_buffer: 4.945084 +vertex_buffer: 0.222300 +vertex_buffer: 0.047500 +vertex_buffer: 7.168990 +vertex_buffer: 3.780995 +vertex_buffer: 4.966921 +vertex_buffer: 0.210600 +vertex_buffer: 0.044200 +vertex_buffer: 8.105990 +vertex_buffer: 3.673678 +vertex_buffer: -4.093265 +vertex_buffer: 0.193400 +vertex_buffer: 0.660000 +vertex_buffer: 8.088990 +vertex_buffer: 3.680678 +vertex_buffer: -4.093029 +vertex_buffer: 0.192100 +vertex_buffer: 0.659800 +vertex_buffer: 8.120990 +vertex_buffer: 3.479514 +vertex_buffer: -4.987499 +vertex_buffer: 0.189100 +vertex_buffer: 0.720200 +vertex_buffer: 8.104000 +vertex_buffer: 3.485179 +vertex_buffer: -4.988288 +vertex_buffer: 0.187800 +vertex_buffer: 0.720000 +vertex_buffer: 7.987990 +vertex_buffer: 3.650700 +vertex_buffer: -4.094052 +vertex_buffer: 0.183500 +vertex_buffer: 0.659800 +vertex_buffer: 7.992000 +vertex_buffer: 3.673678 +vertex_buffer: -4.093265 +vertex_buffer: 0.185200 +vertex_buffer: 0.659400 +vertex_buffer: 7.987990 +vertex_buffer: 3.596764 +vertex_buffer: -4.096878 +vertex_buffer: 0.179800 +vertex_buffer: 0.660700 +vertex_buffer: 8.002990 +vertex_buffer: 3.461763 +vertex_buffer: -4.984319 +vertex_buffer: 0.179100 +vertex_buffer: 0.719900 +vertex_buffer: 8.002990 +vertex_buffer: 3.417072 +vertex_buffer: -4.978396 +vertex_buffer: 0.174700 +vertex_buffer: 0.720500 +vertex_buffer: 8.006990 +vertex_buffer: 3.479514 +vertex_buffer: -4.987499 +vertex_buffer: 0.180900 +vertex_buffer: 0.719700 +vertex_buffer: 7.934000 +vertex_buffer: 3.447359 +vertex_buffer: -3.089672 +vertex_buffer: 0.044900 +vertex_buffer: 0.617400 +vertex_buffer: 7.992000 +vertex_buffer: 3.357943 +vertex_buffer: -4.109610 +vertex_buffer: 0.041500 +vertex_buffer: 0.685800 +vertex_buffer: 8.003990 +vertex_buffer: 3.352830 +vertex_buffer: -4.109857 +vertex_buffer: 0.040600 +vertex_buffer: 0.685900 +vertex_buffer: 7.947990 +vertex_buffer: 3.442067 +vertex_buffer: -3.089904 +vertex_buffer: 0.043900 +vertex_buffer: 0.617400 +vertex_buffer: 8.088990 +vertex_buffer: 3.352830 +vertex_buffer: -4.109857 +vertex_buffer: 0.034900 +vertex_buffer: 0.685900 +vertex_buffer: 8.036000 +vertex_buffer: 3.442122 +vertex_buffer: -3.091901 +vertex_buffer: 0.038000 +vertex_buffer: 0.617500 +vertex_buffer: 8.107000 +vertex_buffer: 3.171661 +vertex_buffer: -4.940374 +vertex_buffer: 0.033700 +vertex_buffer: 0.743900 +vertex_buffer: 8.021990 +vertex_buffer: 3.171661 +vertex_buffer: -4.940374 +vertex_buffer: 0.039400 +vertex_buffer: 0.744000 +vertex_buffer: 8.008990 +vertex_buffer: 3.177350 +vertex_buffer: -4.941065 +vertex_buffer: 0.040400 +vertex_buffer: 0.743800 +vertex_buffer: 8.058990 +vertex_buffer: 3.464813 +vertex_buffer: -3.089913 +vertex_buffer: 0.220100 +vertex_buffer: 0.598100 +vertex_buffer: 8.052990 +vertex_buffer: 3.447424 +vertex_buffer: -3.091670 +vertex_buffer: 0.221700 +vertex_buffer: 0.598600 +vertex_buffer: 8.107000 +vertex_buffer: 3.357943 +vertex_buffer: -4.109610 +vertex_buffer: 0.217200 +vertex_buffer: 0.668000 +vertex_buffer: 8.111990 +vertex_buffer: 3.375448 +vertex_buffer: -4.108757 +vertex_buffer: 0.215600 +vertex_buffer: 0.667500 +vertex_buffer: 8.111990 +vertex_buffer: 3.415553 +vertex_buffer: -4.105852 +vertex_buffer: 0.212000 +vertex_buffer: 0.666200 +vertex_buffer: 8.058990 +vertex_buffer: 3.514396 +vertex_buffer: -3.087097 +vertex_buffer: 0.216600 +vertex_buffer: 0.597100 +vertex_buffer: 8.129000 +vertex_buffer: 3.196587 +vertex_buffer: -4.943947 +vertex_buffer: 0.215600 +vertex_buffer: 0.726900 +vertex_buffer: 8.129000 +vertex_buffer: 3.242119 +vertex_buffer: -4.950491 +vertex_buffer: 0.211300 +vertex_buffer: 0.725700 +vertex_buffer: 8.123990 +vertex_buffer: 3.177350 +vertex_buffer: -4.941065 +vertex_buffer: 0.217500 +vertex_buffer: 0.727300 +vertex_buffer: 8.102000 +vertex_buffer: 3.285218 +vertex_buffer: -5.896081 +vertex_buffer: 0.183700 +vertex_buffer: 0.782700 +vertex_buffer: 8.084990 +vertex_buffer: 3.292145 +vertex_buffer: -5.899772 +vertex_buffer: 0.182700 +vertex_buffer: 0.782700 +vertex_buffer: 8.054990 +vertex_buffer: 3.078037 +vertex_buffer: -6.686757 +vertex_buffer: 0.178700 +vertex_buffer: 0.838700 +vertex_buffer: 8.037990 +vertex_buffer: 3.086942 +vertex_buffer: -6.694157 +vertex_buffer: 0.178000 +vertex_buffer: 0.838900 +vertex_buffer: 7.984000 +vertex_buffer: 3.265013 +vertex_buffer: -5.884281 +vertex_buffer: 0.174900 +vertex_buffer: 0.782200 +vertex_buffer: 7.986990 +vertex_buffer: 3.285218 +vertex_buffer: -5.896081 +vertex_buffer: 0.176600 +vertex_buffer: 0.782500 +vertex_buffer: 7.984990 +vertex_buffer: 3.209211 +vertex_buffer: -5.851367 +vertex_buffer: 0.169400 +vertex_buffer: 0.781500 +vertex_buffer: 7.940990 +vertex_buffer: 2.980811 +vertex_buffer: -6.599105 +vertex_buffer: 0.163500 +vertex_buffer: 0.836100 +vertex_buffer: 7.937990 +vertex_buffer: 3.050556 +vertex_buffer: -6.662535 +vertex_buffer: 0.170600 +vertex_buffer: 0.838100 +vertex_buffer: 7.940990 +vertex_buffer: 3.078037 +vertex_buffer: -6.686757 +vertex_buffer: 0.172700 +vertex_buffer: 0.838800 +vertex_buffer: 7.995990 +vertex_buffer: 2.901561 +vertex_buffer: -5.669784 +vertex_buffer: 0.040100 +vertex_buffer: 0.799500 +vertex_buffer: 8.008990 +vertex_buffer: 2.894458 +vertex_buffer: -5.665260 +vertex_buffer: 0.039000 +vertex_buffer: 0.799600 +vertex_buffer: 8.093990 +vertex_buffer: 2.894458 +vertex_buffer: -5.665260 +vertex_buffer: 0.033300 +vertex_buffer: 0.799400 +vertex_buffer: 8.059990 +vertex_buffer: 2.609329 +vertex_buffer: -6.232546 +vertex_buffer: 0.033500 +vertex_buffer: 0.847100 +vertex_buffer: 7.974990 +vertex_buffer: 2.609329 +vertex_buffer: -6.232546 +vertex_buffer: 0.039200 +vertex_buffer: 0.847400 +vertex_buffer: 7.962000 +vertex_buffer: 2.617312 +vertex_buffer: -6.241937 +vertex_buffer: 0.040500 +vertex_buffer: 0.847400 +vertex_buffer: 8.111000 +vertex_buffer: 2.901561 +vertex_buffer: -5.669784 +vertex_buffer: 0.222900 +vertex_buffer: 0.784000 +vertex_buffer: 8.116000 +vertex_buffer: 2.923470 +vertex_buffer: -5.681317 +vertex_buffer: 0.220600 +vertex_buffer: 0.783800 +vertex_buffer: 8.114990 +vertex_buffer: 2.981445 +vertex_buffer: -5.714432 +vertex_buffer: 0.214600 +vertex_buffer: 0.783700 +vertex_buffer: 8.080990 +vertex_buffer: 2.639407 +vertex_buffer: -6.273185 +vertex_buffer: 0.227500 +vertex_buffer: 0.833300 +vertex_buffer: 8.077990 +vertex_buffer: 2.705994 +vertex_buffer: -6.343040 +vertex_buffer: 0.219700 +vertex_buffer: 0.834800 +vertex_buffer: 8.077000 +vertex_buffer: 2.617312 +vertex_buffer: -6.241937 +vertex_buffer: 0.230400 +vertex_buffer: 0.832400 +vertex_buffer: 7.984000 +vertex_buffer: 2.886415 +vertex_buffer: -7.224260 +vertex_buffer: 0.176300 +vertex_buffer: 0.879600 +vertex_buffer: 7.965990 +vertex_buffer: 2.899952 +vertex_buffer: -7.236242 +vertex_buffer: 0.174900 +vertex_buffer: 0.879800 +vertex_buffer: 7.869990 +vertex_buffer: 2.886415 +vertex_buffer: -7.224260 +vertex_buffer: 0.168700 +vertex_buffer: 0.879800 +vertex_buffer: 7.868000 +vertex_buffer: 2.845190 +vertex_buffer: -7.190347 +vertex_buffer: 0.164500 +vertex_buffer: 0.879000 +vertex_buffer: 7.873990 +vertex_buffer: 2.760812 +vertex_buffer: -7.105696 +vertex_buffer: 0.154900 +vertex_buffer: 0.876400 +vertex_buffer: 7.819000 +vertex_buffer: 2.598799 +vertex_buffer: -7.395112 +vertex_buffer: 0.146400 +vertex_buffer: 0.901300 +vertex_buffer: 7.810990 +vertex_buffer: 2.694416 +vertex_buffer: -7.491223 +vertex_buffer: 0.158600 +vertex_buffer: 0.904300 +vertex_buffer: 7.828000 +vertex_buffer: 2.768480 +vertex_buffer: -7.441971 +vertex_buffer: 0.165100 +vertex_buffer: 0.898700 +vertex_buffer: 7.922990 +vertex_buffer: 2.392508 +vertex_buffer: -6.583891 +vertex_buffer: 0.040800 +vertex_buffer: 0.880000 +vertex_buffer: 7.909990 +vertex_buffer: 2.398531 +vertex_buffer: -6.603409 +vertex_buffer: 0.042400 +vertex_buffer: 0.880600 +vertex_buffer: 8.008000 +vertex_buffer: 2.392508 +vertex_buffer: -6.583891 +vertex_buffer: 0.035100 +vertex_buffer: 0.879700 +vertex_buffer: 7.875990 +vertex_buffer: 2.257022 +vertex_buffer: -6.797844 +vertex_buffer: 0.042500 +vertex_buffer: 0.900300 +vertex_buffer: 7.960990 +vertex_buffer: 2.257022 +vertex_buffer: -6.797844 +vertex_buffer: 0.036900 +vertex_buffer: 0.899900 +vertex_buffer: 7.878000 +vertex_buffer: 2.296595 +vertex_buffer: -6.770846 +vertex_buffer: 0.044500 +vertex_buffer: 0.896400 +vertex_buffer: 8.023990 +vertex_buffer: 2.398531 +vertex_buffer: -6.603409 +vertex_buffer: 0.237500 +vertex_buffer: 0.865700 +vertex_buffer: 8.027000 +vertex_buffer: 2.416037 +vertex_buffer: -6.664004 +vertex_buffer: 0.234100 +vertex_buffer: 0.868500 +vertex_buffer: 8.020990 +vertex_buffer: 2.477773 +vertex_buffer: -6.773771 +vertex_buffer: 0.225400 +vertex_buffer: 0.872400 +vertex_buffer: 7.973990 +vertex_buffer: 2.270065 +vertex_buffer: -6.882959 +vertex_buffer: 0.239800 +vertex_buffer: 0.889500 +vertex_buffer: 7.965990 +vertex_buffer: 2.324553 +vertex_buffer: -7.024226 +vertex_buffer: 0.230700 +vertex_buffer: 0.895400 +vertex_buffer: 7.984000 +vertex_buffer: 2.296595 +vertex_buffer: -6.770846 +vertex_buffer: 0.241100 +vertex_buffer: 0.881300 +vertex_buffer: 7.870000 +vertex_buffer: 3.893466 +vertex_buffer: -0.199551 +vertex_buffer: 0.209300 +vertex_buffer: 0.401700 +vertex_buffer: 7.847000 +vertex_buffer: 3.902400 +vertex_buffer: -0.197242 +vertex_buffer: 0.207700 +vertex_buffer: 0.401200 +vertex_buffer: 7.805000 +vertex_buffer: 3.890782 +vertex_buffer: 0.526775 +vertex_buffer: 0.211700 +vertex_buffer: 0.353300 +vertex_buffer: 7.781000 +vertex_buffer: 3.899673 +vertex_buffer: 0.530080 +vertex_buffer: 0.210000 +vertex_buffer: 0.352800 +vertex_buffer: 7.903000 +vertex_buffer: 3.858915 +vertex_buffer: -0.684007 +vertex_buffer: 0.209200 +vertex_buffer: 0.434100 +vertex_buffer: 7.973000 +vertex_buffer: 3.836469 +vertex_buffer: -1.789402 +vertex_buffer: 0.204700 +vertex_buffer: 0.507500 +vertex_buffer: 8.058990 +vertex_buffer: 3.775104 +vertex_buffer: -3.074234 +vertex_buffer: 0.199500 +vertex_buffer: 0.592800 +vertex_buffer: 8.058990 +vertex_buffer: 3.721167 +vertex_buffer: -3.077068 +vertex_buffer: 0.203000 +vertex_buffer: 0.593900 +vertex_buffer: 7.973000 +vertex_buffer: 3.775509 +vertex_buffer: -1.791481 +vertex_buffer: 0.208700 +vertex_buffer: 0.508400 +vertex_buffer: 7.903000 +vertex_buffer: 3.787890 +vertex_buffer: -0.684412 +vertex_buffer: 0.213800 +vertex_buffer: 0.434700 +vertex_buffer: 7.710000 +vertex_buffer: 3.865942 +vertex_buffer: -0.184480 +vertex_buffer: 0.197100 +vertex_buffer: 0.399400 +vertex_buffer: 7.714990 +vertex_buffer: 3.892960 +vertex_buffer: -0.184558 +vertex_buffer: 0.198900 +vertex_buffer: 0.399400 +vertex_buffer: 7.642990 +vertex_buffer: 3.890169 +vertex_buffer: 0.544772 +vertex_buffer: 0.200700 +vertex_buffer: 0.350700 +vertex_buffer: 7.638000 +vertex_buffer: 3.863151 +vertex_buffer: 0.544850 +vertex_buffer: 0.198800 +vertex_buffer: 0.350700 +vertex_buffer: 7.638000 +vertex_buffer: 3.790158 +vertex_buffer: 0.543367 +vertex_buffer: 0.193800 +vertex_buffer: 0.350800 +vertex_buffer: 7.710000 +vertex_buffer: 3.791945 +vertex_buffer: -0.185995 +vertex_buffer: 0.192200 +vertex_buffer: 0.399600 +vertex_buffer: 7.650000 +vertex_buffer: 3.858467 +vertex_buffer: 2.359713 +vertex_buffer: 0.218500 +vertex_buffer: 0.231100 +vertex_buffer: 7.640990 +vertex_buffer: 3.885418 +vertex_buffer: 2.361643 +vertex_buffer: 0.216600 +vertex_buffer: 0.230800 +vertex_buffer: 7.650000 +vertex_buffer: 3.785477 +vertex_buffer: 2.358199 +vertex_buffer: 0.223300 +vertex_buffer: 0.231600 +vertex_buffer: 7.352990 +vertex_buffer: 3.884966 +vertex_buffer: 4.875182 +vertex_buffer: 0.220300 +vertex_buffer: 0.058300 +vertex_buffer: 7.349990 +vertex_buffer: 3.886940 +vertex_buffer: 4.918657 +vertex_buffer: 0.220500 +vertex_buffer: 0.055400 +vertex_buffer: 7.161990 +vertex_buffer: 3.852596 +vertex_buffer: 4.948286 +vertex_buffer: 0.207200 +vertex_buffer: 0.051600 +vertex_buffer: 7.169990 +vertex_buffer: 3.878585 +vertex_buffer: 4.947458 +vertex_buffer: 0.208900 +vertex_buffer: 0.051700 +vertex_buffer: 7.172990 +vertex_buffer: 3.876585 +vertex_buffer: 4.902970 +vertex_buffer: 0.208700 +vertex_buffer: 0.054700 +vertex_buffer: 7.166000 +vertex_buffer: 3.849597 +vertex_buffer: 4.903809 +vertex_buffer: 0.207000 +vertex_buffer: 0.054600 +vertex_buffer: 7.168990 +vertex_buffer: 3.853018 +vertex_buffer: 4.967149 +vertex_buffer: 0.207300 +vertex_buffer: 0.050200 +vertex_buffer: 7.161990 +vertex_buffer: 3.779573 +vertex_buffer: 4.948061 +vertex_buffer: 0.202300 +vertex_buffer: 0.051600 +vertex_buffer: 7.168990 +vertex_buffer: 3.780995 +vertex_buffer: 4.966921 +vertex_buffer: 0.202400 +vertex_buffer: 0.050300 +vertex_buffer: 7.166000 +vertex_buffer: 3.777573 +vertex_buffer: 4.903604 +vertex_buffer: 0.202200 +vertex_buffer: 0.054700 +vertex_buffer: 7.847000 +vertex_buffer: 3.868250 +vertex_buffer: -1.782319 +vertex_buffer: 0.195200 +vertex_buffer: 0.505600 +vertex_buffer: 7.764000 +vertex_buffer: 3.893528 +vertex_buffer: -0.671817 +vertex_buffer: 0.198700 +vertex_buffer: 0.431800 +vertex_buffer: 7.946990 +vertex_buffer: 3.803019 +vertex_buffer: -3.071277 +vertex_buffer: 0.190800 +vertex_buffer: 0.591300 +vertex_buffer: 7.887990 +vertex_buffer: 2.644913 +vertex_buffer: -7.592765 +vertex_buffer: 0.172000 +vertex_buffer: 0.917200 +vertex_buffer: 7.803000 +vertex_buffer: 2.644913 +vertex_buffer: -7.592765 +vertex_buffer: 0.166300 +vertex_buffer: 0.917200 +vertex_buffer: 7.819990 +vertex_buffer: 2.747339 +vertex_buffer: -7.532923 +vertex_buffer: 0.166600 +vertex_buffer: 0.905600 +vertex_buffer: 7.803000 +vertex_buffer: 2.644913 +vertex_buffer: -7.592765 +vertex_buffer: 0.155700 +vertex_buffer: 0.912500 +vertex_buffer: 7.812000 +vertex_buffer: 2.545880 +vertex_buffer: -7.491230 +vertex_buffer: 0.143300 +vertex_buffer: 0.909300 +vertex_buffer: 7.897000 +vertex_buffer: 2.545880 +vertex_buffer: -7.491230 +vertex_buffer: 0.172300 +vertex_buffer: 0.929500 +vertex_buffer: 7.812000 +vertex_buffer: 2.545880 +vertex_buffer: -7.491230 +vertex_buffer: 0.166600 +vertex_buffer: 0.929200 +vertex_buffer: 8.003990 +vertex_buffer: 3.680678 +vertex_buffer: -4.093029 +vertex_buffer: 0.186300 +vertex_buffer: 0.659300 +vertex_buffer: 8.018990 +vertex_buffer: 3.485179 +vertex_buffer: -4.988288 +vertex_buffer: 0.182000 +vertex_buffer: 0.719600 +vertex_buffer: 7.999990 +vertex_buffer: 3.292145 +vertex_buffer: -5.899772 +vertex_buffer: 0.177400 +vertex_buffer: 0.782500 +vertex_buffer: 7.952990 +vertex_buffer: 3.086942 +vertex_buffer: -6.694157 +vertex_buffer: 0.173300 +vertex_buffer: 0.839000 +vertex_buffer: 7.881000 +vertex_buffer: 2.899952 +vertex_buffer: -7.236242 +vertex_buffer: 0.169900 +vertex_buffer: 0.880000 +vertex_buffer: 7.613990 +vertex_buffer: 3.894277 +vertex_buffer: 2.365932 +vertex_buffer: 0.214700 +vertex_buffer: 0.230200 +vertex_buffer: 7.478990 +vertex_buffer: 3.893669 +vertex_buffer: 2.383827 +vertex_buffer: 0.205900 +vertex_buffer: 0.227800 +vertex_buffer: 7.197000 +vertex_buffer: 3.885507 +vertex_buffer: 4.899256 +vertex_buffer: 0.210300 +vertex_buffer: 0.055200 +vertex_buffer: 7.458990 +vertex_buffer: 3.884573 +vertex_buffer: 2.386487 +vertex_buffer: 0.204400 +vertex_buffer: 0.227500 +vertex_buffer: 7.192990 +vertex_buffer: 3.887502 +vertex_buffer: 4.943732 +vertex_buffer: 0.210400 +vertex_buffer: 0.052200 +vertex_buffer: 7.379990 +vertex_buffer: 3.852270 +vertex_buffer: 4.933774 +vertex_buffer: 0.223200 +vertex_buffer: 0.052900 +vertex_buffer: 7.379990 +vertex_buffer: 3.780249 +vertex_buffer: 4.933623 +vertex_buffer: 0.224500 +vertex_buffer: 0.048100 +vertex_buffer: 8.052990 +vertex_buffer: 3.447424 +vertex_buffer: -3.091670 +vertex_buffer: 0.036800 +vertex_buffer: 0.617500 +vertex_buffer: 8.107000 +vertex_buffer: 3.357943 +vertex_buffer: -4.109610 +vertex_buffer: 0.033700 +vertex_buffer: 0.685800 +vertex_buffer: 8.123990 +vertex_buffer: 3.177350 +vertex_buffer: -4.941065 +vertex_buffer: 0.032500 +vertex_buffer: 0.743700 +vertex_buffer: 8.111000 +vertex_buffer: 2.901561 +vertex_buffer: -5.669784 +vertex_buffer: 0.032000 +vertex_buffer: 0.799200 +vertex_buffer: 8.077000 +vertex_buffer: 2.617312 +vertex_buffer: -6.241937 +vertex_buffer: 0.032000 +vertex_buffer: 0.847000 +vertex_buffer: 8.023990 +vertex_buffer: 2.398531 +vertex_buffer: -6.603409 +vertex_buffer: 0.033400 +vertex_buffer: 0.880300 +vertex_buffer: 7.984000 +vertex_buffer: 2.296595 +vertex_buffer: -6.770846 +vertex_buffer: 0.034200 +vertex_buffer: 0.896200 +vertex_buffer: 7.391990 +vertex_buffer: 3.380723 +vertex_buffer: 4.912532 +vertex_buffer: 0.253500 +vertex_buffer: 0.059000 +vertex_buffer: 7.394990 +vertex_buffer: 3.377893 +vertex_buffer: 4.869167 +vertex_buffer: 0.253400 +vertex_buffer: 0.062000 +vertex_buffer: 7.394990 +vertex_buffer: 3.450573 +vertex_buffer: 4.868867 +vertex_buffer: 0.248500 +vertex_buffer: 0.061500 +vertex_buffer: 7.391990 +vertex_buffer: 3.453545 +vertex_buffer: 4.912242 +vertex_buffer: 0.248600 +vertex_buffer: 0.058500 +vertex_buffer: 7.383990 +vertex_buffer: 3.350628 +vertex_buffer: 4.870098 +vertex_buffer: 0.255400 +vertex_buffer: 0.062000 +vertex_buffer: 7.380990 +vertex_buffer: 3.353447 +vertex_buffer: 4.914453 +vertex_buffer: 0.255500 +vertex_buffer: 0.058900 +vertex_buffer: 7.379990 +vertex_buffer: 3.381164 +vertex_buffer: 4.934087 +vertex_buffer: 0.253700 +vertex_buffer: 0.057400 +vertex_buffer: 7.371990 +vertex_buffer: 3.361561 +vertex_buffer: 4.930083 +vertex_buffer: 0.255200 +vertex_buffer: 0.057600 +vertex_buffer: 7.379990 +vertex_buffer: 3.454030 +vertex_buffer: 4.933803 +vertex_buffer: 0.248700 +vertex_buffer: 0.056800 +vertex_buffer: 7.940990 +vertex_buffer: 2.221734 +vertex_buffer: -6.955181 +vertex_buffer: 0.037400 +vertex_buffer: 0.911100 +vertex_buffer: 7.973990 +vertex_buffer: 2.270065 +vertex_buffer: -6.882959 +vertex_buffer: 0.034000 +vertex_buffer: 0.904500 +vertex_buffer: 7.940990 +vertex_buffer: 2.221734 +vertex_buffer: -6.955181 +vertex_buffer: 0.241900 +vertex_buffer: 0.896700 +vertex_buffer: 7.931990 +vertex_buffer: 2.274002 +vertex_buffer: -7.107549 +vertex_buffer: 0.232600 +vertex_buffer: 0.903300 +vertex_buffer: 7.742000 +vertex_buffer: 3.409784 +vertex_buffer: -0.678609 +vertex_buffer: 0.167200 +vertex_buffer: 0.432400 +vertex_buffer: 7.742000 +vertex_buffer: 3.470328 +vertex_buffer: -0.677179 +vertex_buffer: 0.172000 +vertex_buffer: 0.432200 +vertex_buffer: 7.828000 +vertex_buffer: 3.530379 +vertex_buffer: -1.791814 +vertex_buffer: 0.172000 +vertex_buffer: 0.507000 +vertex_buffer: 7.828000 +vertex_buffer: 3.467998 +vertex_buffer: -1.793948 +vertex_buffer: 0.167800 +vertex_buffer: 0.507400 +vertex_buffer: 7.834000 +vertex_buffer: 3.449010 +vertex_buffer: -1.795735 +vertex_buffer: 0.166200 +vertex_buffer: 0.507700 +vertex_buffer: 7.749000 +vertex_buffer: 3.386746 +vertex_buffer: -0.679570 +vertex_buffer: 0.165300 +vertex_buffer: 0.432600 +vertex_buffer: 7.928990 +vertex_buffer: 3.464759 +vertex_buffer: -3.087906 +vertex_buffer: 0.166900 +vertex_buffer: 0.594600 +vertex_buffer: 7.934000 +vertex_buffer: 3.447359 +vertex_buffer: -3.089672 +vertex_buffer: 0.165300 +vertex_buffer: 0.594900 +vertex_buffer: 7.928990 +vertex_buffer: 3.514363 +vertex_buffer: -3.086102 +vertex_buffer: 0.170500 +vertex_buffer: 0.594000 +vertex_buffer: 7.347990 +vertex_buffer: 3.382373 +vertex_buffer: 4.945468 +vertex_buffer: 0.228900 +vertex_buffer: 0.023800 +vertex_buffer: 7.347990 +vertex_buffer: 3.455285 +vertex_buffer: 4.945201 +vertex_buffer: 0.227600 +vertex_buffer: 0.028600 +vertex_buffer: 7.190990 +vertex_buffer: 3.455841 +vertex_buffer: 4.969986 +vertex_buffer: 0.217300 +vertex_buffer: 0.025700 +vertex_buffer: 7.190990 +vertex_buffer: 3.382879 +vertex_buffer: 4.970204 +vertex_buffer: 0.218700 +vertex_buffer: 0.021000 +vertex_buffer: 7.191990 +vertex_buffer: 3.355385 +vertex_buffer: 4.963379 +vertex_buffer: 0.219300 +vertex_buffer: 0.019200 +vertex_buffer: 7.348990 +vertex_buffer: 3.354917 +vertex_buffer: 4.939651 +vertex_buffer: 0.229500 +vertex_buffer: 0.022000 +vertex_buffer: 7.168990 +vertex_buffer: 3.381837 +vertex_buffer: 4.967017 +vertex_buffer: 0.217300 +vertex_buffer: 0.020500 +vertex_buffer: 7.174990 +vertex_buffer: 3.362181 +vertex_buffer: 4.961206 +vertex_buffer: 0.218100 +vertex_buffer: 0.019200 +vertex_buffer: 7.168990 +vertex_buffer: 3.454769 +vertex_buffer: 4.966805 +vertex_buffer: 0.215900 +vertex_buffer: 0.025300 +vertex_buffer: 7.987990 +vertex_buffer: 3.415553 +vertex_buffer: -4.105852 +vertex_buffer: 0.166000 +vertex_buffer: 0.663100 +vertex_buffer: 7.987990 +vertex_buffer: 3.375448 +vertex_buffer: -4.108757 +vertex_buffer: 0.162200 +vertex_buffer: 0.663900 +vertex_buffer: 7.992000 +vertex_buffer: 3.357943 +vertex_buffer: -4.109610 +vertex_buffer: 0.160600 +vertex_buffer: 0.664300 +vertex_buffer: 8.008990 +vertex_buffer: 3.177350 +vertex_buffer: -4.941065 +vertex_buffer: 0.151800 +vertex_buffer: 0.722800 +vertex_buffer: 8.004990 +vertex_buffer: 3.196587 +vertex_buffer: -4.943947 +vertex_buffer: 0.153700 +vertex_buffer: 0.722600 +vertex_buffer: 8.003990 +vertex_buffer: 3.242119 +vertex_buffer: -4.950491 +vertex_buffer: 0.158100 +vertex_buffer: 0.722100 +vertex_buffer: 8.111990 +vertex_buffer: 3.596764 +vertex_buffer: -4.096878 +vertex_buffer: 0.198600 +vertex_buffer: 0.661900 +vertex_buffer: 8.127990 +vertex_buffer: 3.417072 +vertex_buffer: -4.978396 +vertex_buffer: 0.195100 +vertex_buffer: 0.721700 +vertex_buffer: 7.990990 +vertex_buffer: 2.923470 +vertex_buffer: -5.681317 +vertex_buffer: 0.140000 +vertex_buffer: 0.778100 +vertex_buffer: 7.990000 +vertex_buffer: 2.981445 +vertex_buffer: -5.714432 +vertex_buffer: 0.145900 +vertex_buffer: 0.778800 +vertex_buffer: 7.995990 +vertex_buffer: 2.901561 +vertex_buffer: -5.669784 +vertex_buffer: 0.137700 +vertex_buffer: 0.777900 +vertex_buffer: 7.962000 +vertex_buffer: 2.617312 +vertex_buffer: -6.241937 +vertex_buffer: 0.122700 +vertex_buffer: 0.824400 +vertex_buffer: 7.956000 +vertex_buffer: 2.639407 +vertex_buffer: -6.273185 +vertex_buffer: 0.125400 +vertex_buffer: 0.825900 +vertex_buffer: 7.952990 +vertex_buffer: 2.705994 +vertex_buffer: -6.343040 +vertex_buffer: 0.132900 +vertex_buffer: 0.828500 +vertex_buffer: 8.108990 +vertex_buffer: 3.209211 +vertex_buffer: -5.851367 +vertex_buffer: 0.191000 +vertex_buffer: 0.782700 +vertex_buffer: 8.065990 +vertex_buffer: 2.980811 +vertex_buffer: -6.599105 +vertex_buffer: 0.188300 +vertex_buffer: 0.837500 +vertex_buffer: 7.903000 +vertex_buffer: 2.416037 +vertex_buffer: -6.664004 +vertex_buffer: 0.113300 +vertex_buffer: 0.859500 +vertex_buffer: 7.897000 +vertex_buffer: 2.477773 +vertex_buffer: -6.773771 +vertex_buffer: 0.121200 +vertex_buffer: 0.864700 +vertex_buffer: 7.909990 +vertex_buffer: 2.398531 +vertex_buffer: -6.603409 +vertex_buffer: 0.110400 +vertex_buffer: 0.856100 +vertex_buffer: 7.859990 +vertex_buffer: 2.270065 +vertex_buffer: -6.882959 +vertex_buffer: 0.104200 +vertex_buffer: 0.879200 +vertex_buffer: 7.878000 +vertex_buffer: 2.296595 +vertex_buffer: -6.770846 +vertex_buffer: 0.104400 +vertex_buffer: 0.870800 +vertex_buffer: 7.850990 +vertex_buffer: 2.324553 +vertex_buffer: -7.024226 +vertex_buffer: 0.112200 +vertex_buffer: 0.886500 +vertex_buffer: 7.997990 +vertex_buffer: 2.760812 +vertex_buffer: -7.105696 +vertex_buffer: 0.190300 +vertex_buffer: 0.878600 +vertex_buffer: 7.973000 +vertex_buffer: 3.530650 +vertex_buffer: -1.799798 +vertex_buffer: 0.224900 +vertex_buffer: 0.510900 +vertex_buffer: 7.973000 +vertex_buffer: 3.468228 +vertex_buffer: -1.801936 +vertex_buffer: 0.229000 +vertex_buffer: 0.511800 +vertex_buffer: 7.967000 +vertex_buffer: 3.449207 +vertex_buffer: -1.802729 +vertex_buffer: 0.230600 +vertex_buffer: 0.512100 +vertex_buffer: 7.903000 +vertex_buffer: 3.410185 +vertex_buffer: -0.691599 +vertex_buffer: 0.237500 +vertex_buffer: 0.437500 +vertex_buffer: 7.897000 +vertex_buffer: 3.387125 +vertex_buffer: -0.691567 +vertex_buffer: 0.239400 +vertex_buffer: 0.437700 +vertex_buffer: 7.903000 +vertex_buffer: 3.470770 +vertex_buffer: -0.690174 +vertex_buffer: 0.232800 +vertex_buffer: 0.436900 +vertex_buffer: 7.165990 +vertex_buffer: 3.451351 +vertex_buffer: 4.903571 +vertex_buffer: 0.182600 +vertex_buffer: 0.054900 +vertex_buffer: 7.452990 +vertex_buffer: 3.456503 +vertex_buffer: 2.377381 +vertex_buffer: 0.177800 +vertex_buffer: 0.227400 +vertex_buffer: 7.452990 +vertex_buffer: 3.387348 +vertex_buffer: 2.375706 +vertex_buffer: 0.172800 +vertex_buffer: 0.227400 +vertex_buffer: 7.165990 +vertex_buffer: 3.378596 +vertex_buffer: 4.903802 +vertex_buffer: 0.177700 +vertex_buffer: 0.055000 +vertex_buffer: 7.459990 +vertex_buffer: 3.362018 +vertex_buffer: 2.373692 +vertex_buffer: 0.170900 +vertex_buffer: 0.227600 +vertex_buffer: 7.172990 +vertex_buffer: 3.351269 +vertex_buffer: 4.902964 +vertex_buffer: 0.175700 +vertex_buffer: 0.055100 +vertex_buffer: 7.877000 +vertex_buffer: 3.461315 +vertex_buffer: -0.206221 +vertex_buffer: 0.235800 +vertex_buffer: 0.404400 +vertex_buffer: 7.877000 +vertex_buffer: 3.398390 +vertex_buffer: -0.206755 +vertex_buffer: 0.240800 +vertex_buffer: 0.404900 +vertex_buffer: 7.872000 +vertex_buffer: 3.374127 +vertex_buffer: -0.206767 +vertex_buffer: 0.242700 +vertex_buffer: 0.405000 +vertex_buffer: 7.813000 +vertex_buffer: 3.394890 +vertex_buffer: 0.517606 +vertex_buffer: 0.243500 +vertex_buffer: 0.356200 +vertex_buffer: 7.806990 +vertex_buffer: 3.370908 +vertex_buffer: 0.517625 +vertex_buffer: 0.245400 +vertex_buffer: 0.356300 +vertex_buffer: 7.813000 +vertex_buffer: 3.459661 +vertex_buffer: 0.519144 +vertex_buffer: 0.238500 +vertex_buffer: 0.355700 +vertex_buffer: 7.161990 +vertex_buffer: 3.454347 +vertex_buffer: 4.947961 +vertex_buffer: 0.182700 +vertex_buffer: 0.051900 +vertex_buffer: 7.161990 +vertex_buffer: 3.381451 +vertex_buffer: 4.948177 +vertex_buffer: 0.177800 +vertex_buffer: 0.052000 +vertex_buffer: 7.168990 +vertex_buffer: 3.381837 +vertex_buffer: 4.967017 +vertex_buffer: 0.177700 +vertex_buffer: 0.050600 +vertex_buffer: 7.168990 +vertex_buffer: 3.454769 +vertex_buffer: 4.966805 +vertex_buffer: 0.182700 +vertex_buffer: 0.050500 +vertex_buffer: 7.169990 +vertex_buffer: 3.354093 +vertex_buffer: 4.947350 +vertex_buffer: 0.175900 +vertex_buffer: 0.052100 +vertex_buffer: 7.174990 +vertex_buffer: 3.362181 +vertex_buffer: 4.961206 +vertex_buffer: 0.176300 +vertex_buffer: 0.051000 +vertex_buffer: 7.856990 +vertex_buffer: 2.221734 +vertex_buffer: -6.955181 +vertex_buffer: 0.101100 +vertex_buffer: 0.885600 +vertex_buffer: 7.847000 +vertex_buffer: 2.274002 +vertex_buffer: -7.107549 +vertex_buffer: 0.109100 +vertex_buffer: 0.893600 +vertex_buffer: 7.859990 +vertex_buffer: 2.270065 +vertex_buffer: -6.882959 +vertex_buffer: 0.045600 +vertex_buffer: 0.904800 +vertex_buffer: 7.856990 +vertex_buffer: 2.221734 +vertex_buffer: -6.955181 +vertex_buffer: 0.043100 +vertex_buffer: 0.911500 +vertex_buffer: 7.940990 +vertex_buffer: 2.221734 +vertex_buffer: -6.955181 +vertex_buffer: 0.172700 +vertex_buffer: 0.978000 +vertex_buffer: 7.856990 +vertex_buffer: 2.221734 +vertex_buffer: -6.955181 +vertex_buffer: 0.167100 +vertex_buffer: 0.977700 +vertex_buffer: 7.847000 +vertex_buffer: 2.274002 +vertex_buffer: -7.107549 +vertex_buffer: 0.167000 +vertex_buffer: 0.966400 +vertex_buffer: 7.931990 +vertex_buffer: 2.274002 +vertex_buffer: -7.107549 +vertex_buffer: 0.172700 +vertex_buffer: 0.966700 +vertex_buffer: 7.379990 +vertex_buffer: 3.381164 +vertex_buffer: 4.934087 +vertex_buffer: 0.231100 +vertex_buffer: 0.024400 +vertex_buffer: 7.379990 +vertex_buffer: 3.454030 +vertex_buffer: 4.933803 +vertex_buffer: 0.229800 +vertex_buffer: 0.029200 +vertex_buffer: 7.371990 +vertex_buffer: 3.361561 +vertex_buffer: 4.930083 +vertex_buffer: 0.231000 +vertex_buffer: 0.022900 +vertex_buffer: 7.452990 +vertex_buffer: 3.784569 +vertex_buffer: 2.384960 +vertex_buffer: 0.197600 +vertex_buffer: 0.227500 +vertex_buffer: 7.877000 +vertex_buffer: 3.792463 +vertex_buffer: -0.200980 +vertex_buffer: 0.215900 +vertex_buffer: 0.402600 +vertex_buffer: 7.813000 +vertex_buffer: 3.790804 +vertex_buffer: 0.524376 +vertex_buffer: 0.218500 +vertex_buffer: 0.354200 +vertex_buffer: 8.111990 +vertex_buffer: 3.650700 +vertex_buffer: -4.094052 +vertex_buffer: 0.195100 +vertex_buffer: 0.660600 +vertex_buffer: 8.127000 +vertex_buffer: 3.461763 +vertex_buffer: -4.984319 +vertex_buffer: 0.190900 +vertex_buffer: 0.720600 +vertex_buffer: 8.108000 +vertex_buffer: 3.265013 +vertex_buffer: -5.884281 +vertex_buffer: 0.185500 +vertex_buffer: 0.782600 +vertex_buffer: 8.061990 +vertex_buffer: 3.050556 +vertex_buffer: -6.662535 +vertex_buffer: 0.181000 +vertex_buffer: 0.838300 +vertex_buffer: 7.991990 +vertex_buffer: 2.845190 +vertex_buffer: -7.190347 +vertex_buffer: 0.180500 +vertex_buffer: 0.879500 +vertex_buffer: 7.452990 +vertex_buffer: 3.857557 +vertex_buffer: 2.386535 +vertex_buffer: 0.202500 +vertex_buffer: 0.227400 +vertex_buffer: 7.813000 +vertex_buffer: 3.863797 +vertex_buffer: 0.525859 +vertex_buffer: 0.213600 +vertex_buffer: 0.353600 +vertex_buffer: 7.661000 +vertex_buffer: 3.899231 +vertex_buffer: 0.543075 +vertex_buffer: 0.202100 +vertex_buffer: 0.350900 +vertex_buffer: 7.638000 +vertex_buffer: 3.394282 +vertex_buffer: 0.536591 +vertex_buffer: 0.168800 +vertex_buffer: 0.350700 +vertex_buffer: 7.645000 +vertex_buffer: 3.370319 +vertex_buffer: 0.535608 +vertex_buffer: 0.166900 +vertex_buffer: 0.350800 +vertex_buffer: 7.638000 +vertex_buffer: 3.459016 +vertex_buffer: 0.538134 +vertex_buffer: 0.173800 +vertex_buffer: 0.350600 +vertex_buffer: 7.641990 +vertex_buffer: 3.362851 +vertex_buffer: 2.349142 +vertex_buffer: 0.250000 +vertex_buffer: 0.233600 +vertex_buffer: 7.649990 +vertex_buffer: 3.388225 +vertex_buffer: 2.349171 +vertex_buffer: 0.248100 +vertex_buffer: 0.233500 +vertex_buffer: 7.649990 +vertex_buffer: 3.457406 +vertex_buffer: 2.350812 +vertex_buffer: 0.243100 +vertex_buffer: 0.233000 +vertex_buffer: 7.877000 +vertex_buffer: 3.866491 +vertex_buffer: -0.200468 +vertex_buffer: 0.211100 +vertex_buffer: 0.402000 +vertex_buffer: 7.732000 +vertex_buffer: 3.902022 +vertex_buffer: -0.186255 +vertex_buffer: 0.200200 +vertex_buffer: 0.399600 +vertex_buffer: 7.710000 +vertex_buffer: 3.397887 +vertex_buffer: -0.190762 +vertex_buffer: 0.167200 +vertex_buffer: 0.399500 +vertex_buffer: 7.716990 +vertex_buffer: 3.373675 +vertex_buffer: -0.192771 +vertex_buffer: 0.165200 +vertex_buffer: 0.399700 +vertex_buffer: 7.710000 +vertex_buffer: 3.460772 +vertex_buffer: -0.190223 +vertex_buffer: 0.172200 +vertex_buffer: 0.399500 +vertex_buffer: 7.967000 +vertex_buffer: 3.449207 +vertex_buffer: -1.802729 +vertex_buffer: 0.041100 +vertex_buffer: 0.531500 +vertex_buffer: 7.949990 +vertex_buffer: 3.442044 +vertex_buffer: -1.802035 +vertex_buffer: 0.042300 +vertex_buffer: 0.531400 +vertex_buffer: 7.850990 +vertex_buffer: 3.441902 +vertex_buffer: -1.797037 +vertex_buffer: 0.048900 +vertex_buffer: 0.531200 +vertex_buffer: 7.879990 +vertex_buffer: 3.379659 +vertex_buffer: -0.689881 +vertex_buffer: 0.049200 +vertex_buffer: 0.457400 +vertex_buffer: 7.770990 +vertex_buffer: 3.379373 +vertex_buffer: -0.680886 +vertex_buffer: 0.056500 +vertex_buffer: 0.457100 +vertex_buffer: 7.897000 +vertex_buffer: 3.387125 +vertex_buffer: -0.691567 +vertex_buffer: 0.047900 +vertex_buffer: 0.457400 +vertex_buffer: 7.749000 +vertex_buffer: 3.386746 +vertex_buffer: -0.679570 +vertex_buffer: 0.058100 +vertex_buffer: 0.457100 +vertex_buffer: 7.740000 +vertex_buffer: 3.366214 +vertex_buffer: -0.195094 +vertex_buffer: 0.060500 +vertex_buffer: 0.425000 +vertex_buffer: 7.716990 +vertex_buffer: 3.373675 +vertex_buffer: -0.192771 +vertex_buffer: 0.062200 +vertex_buffer: 0.425000 +vertex_buffer: 7.667990 +vertex_buffer: 3.361828 +vertex_buffer: 0.533257 +vertex_buffer: 0.069300 +vertex_buffer: 0.377100 +vertex_buffer: 7.645000 +vertex_buffer: 3.370319 +vertex_buffer: 0.535608 +vertex_buffer: 0.071000 +vertex_buffer: 0.377100 +vertex_buffer: 7.853990 +vertex_buffer: 3.366539 +vertex_buffer: -0.205084 +vertex_buffer: 0.052900 +vertex_buffer: 0.425100 +vertex_buffer: 7.788000 +vertex_buffer: 3.362257 +vertex_buffer: 0.520264 +vertex_buffer: 0.061300 +vertex_buffer: 0.377200 +vertex_buffer: 7.617990 +vertex_buffer: 3.353667 +vertex_buffer: 2.352724 +vertex_buffer: 0.086400 +vertex_buffer: 0.257100 +vertex_buffer: 7.483990 +vertex_buffer: 3.353064 +vertex_buffer: 2.370386 +vertex_buffer: 0.095400 +vertex_buffer: 0.256900 +vertex_buffer: 7.872000 +vertex_buffer: 3.374127 +vertex_buffer: -0.206767 +vertex_buffer: 0.051600 +vertex_buffer: 0.425100 +vertex_buffer: 7.806990 +vertex_buffer: 3.370908 +vertex_buffer: 0.517625 +vertex_buffer: 0.059900 +vertex_buffer: 0.377200 +vertex_buffer: 7.834000 +vertex_buffer: 3.449010 +vertex_buffer: -1.795735 +vertex_buffer: 0.050200 +vertex_buffer: 0.531200 +vertex_buffer: 7.352990 +vertex_buffer: 3.341964 +vertex_buffer: 4.875596 +vertex_buffer: 0.127900 +vertex_buffer: 0.090400 +vertex_buffer: 7.197000 +vertex_buffer: 3.342421 +vertex_buffer: 4.899290 +vertex_buffer: 0.138500 +vertex_buffer: 0.090000 +vertex_buffer: 7.191990 +vertex_buffer: 3.355385 +vertex_buffer: 4.963379 +vertex_buffer: 0.139400 +vertex_buffer: 0.085700 +vertex_buffer: 7.192990 +vertex_buffer: 3.345232 +vertex_buffer: 4.943656 +vertex_buffer: 0.139100 +vertex_buffer: 0.087100 +vertex_buffer: 7.349990 +vertex_buffer: 3.344753 +vertex_buffer: 4.918966 +vertex_buffer: 0.128500 +vertex_buffer: 0.087500 +vertex_buffer: 7.348990 +vertex_buffer: 3.354917 +vertex_buffer: 4.939651 +vertex_buffer: 0.128700 +vertex_buffer: 0.086000 +vertex_buffer: 7.380990 +vertex_buffer: 3.353447 +vertex_buffer: 4.914453 +vertex_buffer: 0.126400 +vertex_buffer: 0.087500 +vertex_buffer: 7.371990 +vertex_buffer: 3.361561 +vertex_buffer: 4.930083 +vertex_buffer: 0.127000 +vertex_buffer: 0.086300 +vertex_buffer: 7.383990 +vertex_buffer: 3.350628 +vertex_buffer: 4.870098 +vertex_buffer: 0.125700 +vertex_buffer: 0.090500 +vertex_buffer: 7.641990 +vertex_buffer: 3.362851 +vertex_buffer: 2.349142 +vertex_buffer: 0.084600 +vertex_buffer: 0.257100 +vertex_buffer: 7.459990 +vertex_buffer: 3.362018 +vertex_buffer: 2.373692 +vertex_buffer: 0.097100 +vertex_buffer: 0.256900 +vertex_buffer: 7.172990 +vertex_buffer: 3.351269 +vertex_buffer: 4.902964 +vertex_buffer: 0.140200 +vertex_buffer: 0.090000 +vertex_buffer: 7.169990 +vertex_buffer: 3.354093 +vertex_buffer: 4.947350 +vertex_buffer: 0.140700 +vertex_buffer: 0.087000 +vertex_buffer: 7.174990 +vertex_buffer: 3.362181 +vertex_buffer: 4.961206 +vertex_buffer: 0.140600 +vertex_buffer: 0.085800 +vertex_buffer: -0.317000 +vertex_buffer: 4.026103 +vertex_buffer: 5.867753 +vertex_buffer: 0.115200 +vertex_buffer: 0.743500 +vertex_buffer: -0.317000 +vertex_buffer: 4.024064 +vertex_buffer: 5.899689 +vertex_buffer: 0.113300 +vertex_buffer: 0.743500 +vertex_buffer: -0.317000 +vertex_buffer: 4.024140 +vertex_buffer: 5.836836 +vertex_buffer: 0.117100 +vertex_buffer: 0.743500 +vertex_buffer: -0.670000 +vertex_buffer: 4.054759 +vertex_buffer: 5.859921 +vertex_buffer: 0.115200 +vertex_buffer: 0.720700 +vertex_buffer: -1.083000 +vertex_buffer: 4.118413 +vertex_buffer: 5.852974 +vertex_buffer: 0.115200 +vertex_buffer: 0.693300 +vertex_buffer: -1.083000 +vertex_buffer: 4.115381 +vertex_buffer: 5.880229 +vertex_buffer: 0.113300 +vertex_buffer: 0.693300 +vertex_buffer: -0.670000 +vertex_buffer: 4.051723 +vertex_buffer: 5.889535 +vertex_buffer: 0.113300 +vertex_buffer: 0.720700 +vertex_buffer: -0.669000 +vertex_buffer: 4.051794 +vertex_buffer: 5.831267 +vertex_buffer: 0.117100 +vertex_buffer: 0.720700 +vertex_buffer: -1.082000 +vertex_buffer: 4.115445 +vertex_buffer: 5.826654 +vertex_buffer: 0.117100 +vertex_buffer: 0.693300 +vertex_buffer: -1.464000 +vertex_buffer: 4.185110 +vertex_buffer: 5.847359 +vertex_buffer: 0.115200 +vertex_buffer: 0.667700 +vertex_buffer: -1.465000 +vertex_buffer: 4.182078 +vertex_buffer: 5.872258 +vertex_buffer: 0.113300 +vertex_buffer: 0.667700 +vertex_buffer: -1.464000 +vertex_buffer: 4.182139 +vertex_buffer: 5.822321 +vertex_buffer: 0.117100 +vertex_buffer: 0.667700 +vertex_buffer: -1.842000 +vertex_buffer: 4.250652 +vertex_buffer: 5.839960 +vertex_buffer: 0.115200 +vertex_buffer: 0.642000 +vertex_buffer: -1.843000 +vertex_buffer: 4.247624 +vertex_buffer: 5.863575 +vertex_buffer: 0.113300 +vertex_buffer: 0.642000 +vertex_buffer: -1.841000 +vertex_buffer: 4.247682 +vertex_buffer: 5.816204 +vertex_buffer: 0.117100 +vertex_buffer: 0.642000 +vertex_buffer: -2.364000 +vertex_buffer: 4.319502 +vertex_buffer: 5.798289 +vertex_buffer: 0.117100 +vertex_buffer: 0.606500 +vertex_buffer: -2.366000 +vertex_buffer: 4.322475 +vertex_buffer: 5.821735 +vertex_buffer: 0.115200 +vertex_buffer: 0.606500 +vertex_buffer: -2.367000 +vertex_buffer: 4.319444 +vertex_buffer: 5.846098 +vertex_buffer: 0.113300 +vertex_buffer: 0.606500 +vertex_buffer: -3.038000 +vertex_buffer: 4.375773 +vertex_buffer: 5.788562 +vertex_buffer: 0.115200 +vertex_buffer: 0.561200 +vertex_buffer: -3.039000 +vertex_buffer: 4.372745 +vertex_buffer: 5.811448 +vertex_buffer: 0.113300 +vertex_buffer: 0.561200 +vertex_buffer: -3.036000 +vertex_buffer: 4.372801 +vertex_buffer: 5.765585 +vertex_buffer: 0.117100 +vertex_buffer: 0.561200 +vertex_buffer: -3.714000 +vertex_buffer: 4.403336 +vertex_buffer: 5.721646 +vertex_buffer: 0.117100 +vertex_buffer: 0.515600 +vertex_buffer: -3.716000 +vertex_buffer: 4.406310 +vertex_buffer: 5.744192 +vertex_buffer: 0.115200 +vertex_buffer: 0.515600 +vertex_buffer: -3.718000 +vertex_buffer: 4.403282 +vertex_buffer: 5.765681 +vertex_buffer: 0.113300 +vertex_buffer: 0.515600 +vertex_buffer: -4.257000 +vertex_buffer: 4.407372 +vertex_buffer: 5.693258 +vertex_buffer: 0.115200 +vertex_buffer: 0.479100 +vertex_buffer: -4.259000 +vertex_buffer: 4.404346 +vertex_buffer: 5.714486 +vertex_buffer: 0.113300 +vertex_buffer: 0.479100 +vertex_buffer: -4.254000 +vertex_buffer: 4.404398 +vertex_buffer: 5.671983 +vertex_buffer: 0.117100 +vertex_buffer: 0.479100 +vertex_buffer: -4.709000 +vertex_buffer: 4.387179 +vertex_buffer: 5.639311 +vertex_buffer: 0.115200 +vertex_buffer: 0.448800 +vertex_buffer: -4.706000 +vertex_buffer: 4.384205 +vertex_buffer: 5.617180 +vertex_buffer: 0.117100 +vertex_buffer: 0.448800 +vertex_buffer: -4.711000 +vertex_buffer: 4.384153 +vertex_buffer: 5.660390 +vertex_buffer: 0.113300 +vertex_buffer: 0.448800 +vertex_buffer: -5.122000 +vertex_buffer: 4.352591 +vertex_buffer: 5.582086 +vertex_buffer: 0.115200 +vertex_buffer: 0.421000 +vertex_buffer: -5.125000 +vertex_buffer: 4.349563 +vertex_buffer: 5.603030 +vertex_buffer: 0.113300 +vertex_buffer: 0.421000 +vertex_buffer: -5.119000 +vertex_buffer: 4.349615 +vertex_buffer: 5.561021 +vertex_buffer: 0.117100 +vertex_buffer: 0.421000 +vertex_buffer: -5.539000 +vertex_buffer: 4.291658 +vertex_buffer: 5.495723 +vertex_buffer: 0.117100 +vertex_buffer: 0.392600 +vertex_buffer: -5.542000 +vertex_buffer: 4.293632 +vertex_buffer: 5.516748 +vertex_buffer: 0.115200 +vertex_buffer: 0.392600 +vertex_buffer: -5.545000 +vertex_buffer: 4.290609 +vertex_buffer: 5.537658 +vertex_buffer: 0.113300 +vertex_buffer: 0.392600 +vertex_buffer: -6.018000 +vertex_buffer: 4.203568 +vertex_buffer: 5.459014 +vertex_buffer: 0.113300 +vertex_buffer: 0.360400 +vertex_buffer: -6.015000 +vertex_buffer: 4.205595 +vertex_buffer: 5.438093 +vertex_buffer: 0.115200 +vertex_buffer: 0.360400 +vertex_buffer: -6.012000 +vertex_buffer: 4.203619 +vertex_buffer: 5.417067 +vertex_buffer: 0.117100 +vertex_buffer: 0.360400 +vertex_buffer: -6.398000 +vertex_buffer: 4.123437 +vertex_buffer: 5.353050 +vertex_buffer: 0.117100 +vertex_buffer: 0.333900 +vertex_buffer: -6.402000 +vertex_buffer: 4.126411 +vertex_buffer: 5.374100 +vertex_buffer: 0.115200 +vertex_buffer: 0.333900 +vertex_buffer: -6.405000 +vertex_buffer: 4.123386 +vertex_buffer: 5.394981 +vertex_buffer: 0.113300 +vertex_buffer: 0.333900 +vertex_buffer: -0.317000 +vertex_buffer: 4.016156 +vertex_buffer: 5.825611 +vertex_buffer: 0.117800 +vertex_buffer: 0.743500 +vertex_buffer: -0.318000 +vertex_buffer: 3.995154 +vertex_buffer: 5.825060 +vertex_buffer: 0.119200 +vertex_buffer: 0.743500 +vertex_buffer: -0.317000 +vertex_buffer: 4.016054 +vertex_buffer: 5.909416 +vertex_buffer: 0.112500 +vertex_buffer: 0.743500 +vertex_buffer: -0.318999 +vertex_buffer: 3.995053 +vertex_buffer: 5.908851 +vertex_buffer: 0.111100 +vertex_buffer: 0.743500 +vertex_buffer: -1.082000 +vertex_buffer: 4.107457 +vertex_buffer: 5.816597 +vertex_buffer: 0.117800 +vertex_buffer: 0.693300 +vertex_buffer: -0.669000 +vertex_buffer: 4.043805 +vertex_buffer: 5.821159 +vertex_buffer: 0.117800 +vertex_buffer: 0.720700 +vertex_buffer: -1.082000 +vertex_buffer: 4.086458 +vertex_buffer: 5.816010 +vertex_buffer: 0.119200 +vertex_buffer: 0.693300 +vertex_buffer: -0.669000 +vertex_buffer: 4.022807 +vertex_buffer: 5.820588 +vertex_buffer: 0.119200 +vertex_buffer: 0.720700 +vertex_buffer: -1.083000 +vertex_buffer: 4.107370 +vertex_buffer: 5.888755 +vertex_buffer: 0.112500 +vertex_buffer: 0.693300 +vertex_buffer: -0.670000 +vertex_buffer: 4.043711 +vertex_buffer: 5.899221 +vertex_buffer: 0.112500 +vertex_buffer: 0.720700 +vertex_buffer: -1.083000 +vertex_buffer: 4.086370 +vertex_buffer: 5.888166 +vertex_buffer: 0.111100 +vertex_buffer: 0.693300 +vertex_buffer: -0.670000 +vertex_buffer: 4.022712 +vertex_buffer: 5.898648 +vertex_buffer: 0.111100 +vertex_buffer: 0.720700 +vertex_buffer: -1.463000 +vertex_buffer: 4.174151 +vertex_buffer: 5.813412 +vertex_buffer: 0.117800 +vertex_buffer: 0.667700 +vertex_buffer: -1.463000 +vertex_buffer: 4.153151 +vertex_buffer: 5.812834 +vertex_buffer: 0.119200 +vertex_buffer: 0.667700 +vertex_buffer: -1.465000 +vertex_buffer: 4.174070 +vertex_buffer: 5.879640 +vertex_buffer: 0.112500 +vertex_buffer: 0.667700 +vertex_buffer: -1.465000 +vertex_buffer: 4.153070 +vertex_buffer: 5.879068 +vertex_buffer: 0.111100 +vertex_buffer: 0.667700 +vertex_buffer: -2.364000 +vertex_buffer: 4.311512 +vertex_buffer: 5.790699 +vertex_buffer: 0.117800 +vertex_buffer: 0.606500 +vertex_buffer: -1.841000 +vertex_buffer: 4.239691 +vertex_buffer: 5.807399 +vertex_buffer: 0.117800 +vertex_buffer: 0.642000 +vertex_buffer: -1.840000 +vertex_buffer: 4.218691 +vertex_buffer: 5.806841 +vertex_buffer: 0.119200 +vertex_buffer: 0.642000 +vertex_buffer: -2.363000 +vertex_buffer: 4.291511 +vertex_buffer: 5.790249 +vertex_buffer: 0.119200 +vertex_buffer: 0.606500 +vertex_buffer: -1.843000 +vertex_buffer: 4.239612 +vertex_buffer: 5.871983 +vertex_buffer: 0.112500 +vertex_buffer: 0.642000 +vertex_buffer: -2.367000 +vertex_buffer: 4.311437 +vertex_buffer: 5.853360 +vertex_buffer: 0.112500 +vertex_buffer: 0.606500 +vertex_buffer: -2.367000 +vertex_buffer: 4.291435 +vertex_buffer: 5.852943 +vertex_buffer: 0.111100 +vertex_buffer: 0.606500 +vertex_buffer: -1.843000 +vertex_buffer: 4.218612 +vertex_buffer: 5.871453 +vertex_buffer: 0.111100 +vertex_buffer: 0.642000 +vertex_buffer: -3.035000 +vertex_buffer: 4.364810 +vertex_buffer: 5.758161 +vertex_buffer: 0.117800 +vertex_buffer: 0.561200 +vertex_buffer: -3.713000 +vertex_buffer: 4.395346 +vertex_buffer: 5.714444 +vertex_buffer: 0.117800 +vertex_buffer: 0.515600 +vertex_buffer: -3.035000 +vertex_buffer: 4.344810 +vertex_buffer: 5.757899 +vertex_buffer: 0.119200 +vertex_buffer: 0.561200 +vertex_buffer: -3.713000 +vertex_buffer: 4.375346 +vertex_buffer: 5.714359 +vertex_buffer: 0.119200 +vertex_buffer: 0.515600 +vertex_buffer: -3.040000 +vertex_buffer: 4.364735 +vertex_buffer: 5.819693 +vertex_buffer: 0.112500 +vertex_buffer: 0.561200 +vertex_buffer: -3.718000 +vertex_buffer: 4.395276 +vertex_buffer: 5.772814 +vertex_buffer: 0.112500 +vertex_buffer: 0.515600 +vertex_buffer: -3.039000 +vertex_buffer: 4.344735 +vertex_buffer: 5.819412 +vertex_buffer: 0.111100 +vertex_buffer: 0.561200 +vertex_buffer: -3.718000 +vertex_buffer: 4.375276 +vertex_buffer: 5.772729 +vertex_buffer: 0.111100 +vertex_buffer: 0.515600 +vertex_buffer: -4.253000 +vertex_buffer: 4.396406 +vertex_buffer: 5.664846 +vertex_buffer: 0.117800 +vertex_buffer: 0.479100 +vertex_buffer: -4.705000 +vertex_buffer: 4.376215 +vertex_buffer: 5.610039 +vertex_buffer: 0.117800 +vertex_buffer: 0.448800 +vertex_buffer: -4.253000 +vertex_buffer: 4.375406 +vertex_buffer: 5.664687 +vertex_buffer: 0.119200 +vertex_buffer: 0.479100 +vertex_buffer: -4.705000 +vertex_buffer: 4.355214 +vertex_buffer: 5.609741 +vertex_buffer: 0.119200 +vertex_buffer: 0.448800 +vertex_buffer: -4.259000 +vertex_buffer: 4.396337 +vertex_buffer: 5.721516 +vertex_buffer: 0.112500 +vertex_buffer: 0.479100 +vertex_buffer: -4.712000 +vertex_buffer: 4.376145 +vertex_buffer: 5.667303 +vertex_buffer: 0.112500 +vertex_buffer: 0.448800 +vertex_buffer: -4.711000 +vertex_buffer: 4.355145 +vertex_buffer: 5.667006 +vertex_buffer: 0.111100 +vertex_buffer: 0.448800 +vertex_buffer: -4.259000 +vertex_buffer: 4.375338 +vertex_buffer: 5.721359 +vertex_buffer: 0.111100 +vertex_buffer: 0.479100 +vertex_buffer: -5.118000 +vertex_buffer: 4.341623 +vertex_buffer: 5.553867 +vertex_buffer: 0.117800 +vertex_buffer: 0.421000 +vertex_buffer: -5.538000 +vertex_buffer: 4.282668 +vertex_buffer: 5.488510 +vertex_buffer: 0.117800 +vertex_buffer: 0.392600 +vertex_buffer: -5.118000 +vertex_buffer: 4.320625 +vertex_buffer: 5.553451 +vertex_buffer: 0.119200 +vertex_buffer: 0.421000 +vertex_buffer: -5.537000 +vertex_buffer: 4.262668 +vertex_buffer: 5.488038 +vertex_buffer: 0.119200 +vertex_buffer: 0.392600 +vertex_buffer: -5.125000 +vertex_buffer: 4.341555 +vertex_buffer: 5.609896 +vertex_buffer: 0.112500 +vertex_buffer: 0.421000 +vertex_buffer: -5.546000 +vertex_buffer: 4.282600 +vertex_buffer: 5.544456 +vertex_buffer: 0.112500 +vertex_buffer: 0.392600 +vertex_buffer: -5.545000 +vertex_buffer: 4.262599 +vertex_buffer: 5.544984 +vertex_buffer: 0.111100 +vertex_buffer: 0.392600 +vertex_buffer: -5.125000 +vertex_buffer: 4.320557 +vertex_buffer: 5.609480 +vertex_buffer: 0.111100 +vertex_buffer: 0.421000 +vertex_buffer: -6.011000 +vertex_buffer: 4.195629 +vertex_buffer: 5.409849 +vertex_buffer: 0.117800 +vertex_buffer: 0.360400 +vertex_buffer: -6.397000 +vertex_buffer: 4.115445 +vertex_buffer: 5.345820 +vertex_buffer: 0.117800 +vertex_buffer: 0.333900 +vertex_buffer: -6.010000 +vertex_buffer: 4.174628 +vertex_buffer: 5.409264 +vertex_buffer: 0.119200 +vertex_buffer: 0.360400 +vertex_buffer: -6.396000 +vertex_buffer: 4.094446 +vertex_buffer: 5.345189 +vertex_buffer: 0.119200 +vertex_buffer: 0.333900 +vertex_buffer: -6.019000 +vertex_buffer: 4.194561 +vertex_buffer: 5.465749 +vertex_buffer: 0.112500 +vertex_buffer: 0.360400 +vertex_buffer: -6.406000 +vertex_buffer: 4.115377 +vertex_buffer: 5.401730 +vertex_buffer: 0.112500 +vertex_buffer: 0.333900 +vertex_buffer: -6.018000 +vertex_buffer: 4.174561 +vertex_buffer: 5.465191 +vertex_buffer: 0.111100 +vertex_buffer: 0.360400 +vertex_buffer: -6.405000 +vertex_buffer: 4.094377 +vertex_buffer: 5.401098 +vertex_buffer: 0.111100 +vertex_buffer: 0.333900 +vertex_buffer: -6.663430 +vertex_buffer: 4.069083 +vertex_buffer: 5.334795 +vertex_buffer: 0.115200 +vertex_buffer: 0.318300 +vertex_buffer: -6.667440 +vertex_buffer: 4.066058 +vertex_buffer: 5.355673 +vertex_buffer: 0.113300 +vertex_buffer: 0.318300 +vertex_buffer: -6.660440 +vertex_buffer: 4.066109 +vertex_buffer: 5.313739 +vertex_buffer: 0.117100 +vertex_buffer: 0.318300 +vertex_buffer: -6.658440 +vertex_buffer: 4.058116 +vertex_buffer: 5.306510 +vertex_buffer: 0.117800 +vertex_buffer: 0.318300 +vertex_buffer: -6.657430 +vertex_buffer: 4.038118 +vertex_buffer: 5.305898 +vertex_buffer: 0.119200 +vertex_buffer: 0.318300 +vertex_buffer: -6.667440 +vertex_buffer: 4.037049 +vertex_buffer: 5.361777 +vertex_buffer: 0.111100 +vertex_buffer: 0.318300 +vertex_buffer: -6.663430 +vertex_buffer: 3.946052 +vertex_buffer: 5.360036 +vertex_buffer: 0.104900 +vertex_buffer: 0.318300 +vertex_buffer: -6.402000 +vertex_buffer: 4.002382 +vertex_buffer: 5.398364 +vertex_buffer: 0.104900 +vertex_buffer: 0.333900 +vertex_buffer: -6.678430 +vertex_buffer: 3.942064 +vertex_buffer: 5.349873 +vertex_buffer: 0.113300 +vertex_buffer: 0.309200 +vertex_buffer: -6.682430 +vertex_buffer: 4.033060 +vertex_buffer: 5.352612 +vertex_buffer: 0.113300 +vertex_buffer: 0.315300 +vertex_buffer: -6.683440 +vertex_buffer: 4.032087 +vertex_buffer: 5.330598 +vertex_buffer: 0.115200 +vertex_buffer: 0.315300 +vertex_buffer: -6.680430 +vertex_buffer: 3.940090 +vertex_buffer: 5.327828 +vertex_buffer: 0.115200 +vertex_buffer: 0.309200 +vertex_buffer: -6.675430 +vertex_buffer: 4.034112 +vertex_buffer: 5.310711 +vertex_buffer: 0.117100 +vertex_buffer: 0.315300 +vertex_buffer: -6.671430 +vertex_buffer: 3.942115 +vertex_buffer: 5.307944 +vertex_buffer: 0.117100 +vertex_buffer: 0.309200 +vertex_buffer: -0.323999 +vertex_buffer: 3.891866 +vertex_buffer: 5.822424 +vertex_buffer: 0.125300 +vertex_buffer: 0.743500 +vertex_buffer: -0.327999 +vertex_buffer: 3.891764 +vertex_buffer: 5.906166 +vertex_buffer: 0.104900 +vertex_buffer: 0.743500 +vertex_buffer: -0.669000 +vertex_buffer: 3.913872 +vertex_buffer: 5.817708 +vertex_buffer: 0.125300 +vertex_buffer: 0.720700 +vertex_buffer: -1.081000 +vertex_buffer: 3.967878 +vertex_buffer: 5.812775 +vertex_buffer: 0.125300 +vertex_buffer: 0.693300 +vertex_buffer: -1.083000 +vertex_buffer: 3.967790 +vertex_buffer: 5.884938 +vertex_buffer: 0.104900 +vertex_buffer: 0.693300 +vertex_buffer: -0.672999 +vertex_buffer: 3.913777 +vertex_buffer: 5.895747 +vertex_buffer: 0.104900 +vertex_buffer: 0.720700 +vertex_buffer: -1.462000 +vertex_buffer: 4.038882 +vertex_buffer: 5.809780 +vertex_buffer: 0.125300 +vertex_buffer: 0.667700 +vertex_buffer: -1.464000 +vertex_buffer: 4.038802 +vertex_buffer: 5.876020 +vertex_buffer: 0.104900 +vertex_buffer: 0.667700 +vertex_buffer: -1.840000 +vertex_buffer: 4.110889 +vertex_buffer: 5.804165 +vertex_buffer: 0.125300 +vertex_buffer: 0.642000 +vertex_buffer: -2.362000 +vertex_buffer: 4.186910 +vertex_buffer: 5.788058 +vertex_buffer: 0.125300 +vertex_buffer: 0.606500 +vertex_buffer: -2.366000 +vertex_buffer: 4.186833 +vertex_buffer: 5.850768 +vertex_buffer: 0.104900 +vertex_buffer: 0.606500 +vertex_buffer: -1.842000 +vertex_buffer: 4.110811 +vertex_buffer: 5.868769 +vertex_buffer: 0.104900 +vertex_buffer: 0.642000 +vertex_buffer: -3.034000 +vertex_buffer: 4.240947 +vertex_buffer: 5.756465 +vertex_buffer: 0.125300 +vertex_buffer: 0.561200 +vertex_buffer: -3.711000 +vertex_buffer: 4.269999 +vertex_buffer: 5.713801 +vertex_buffer: 0.125300 +vertex_buffer: 0.515600 +vertex_buffer: -3.716000 +vertex_buffer: 4.269928 +vertex_buffer: 5.772200 +vertex_buffer: 0.104900 +vertex_buffer: 0.515600 +vertex_buffer: -3.038000 +vertex_buffer: 4.240872 +vertex_buffer: 5.817998 +vertex_buffer: 0.104900 +vertex_buffer: 0.561200 +vertex_buffer: -4.251000 +vertex_buffer: 4.271059 +vertex_buffer: 5.663842 +vertex_buffer: 0.125300 +vertex_buffer: 0.479100 +vertex_buffer: -4.702000 +vertex_buffer: 4.250126 +vertex_buffer: 5.608262 +vertex_buffer: 0.125300 +vertex_buffer: 0.448800 +vertex_buffer: -4.257000 +vertex_buffer: 4.270990 +vertex_buffer: 5.720535 +vertex_buffer: 0.104900 +vertex_buffer: 0.479100 +vertex_buffer: -4.709000 +vertex_buffer: 4.249059 +vertex_buffer: 5.665525 +vertex_buffer: 0.104900 +vertex_buffer: 0.448800 +vertex_buffer: -5.115000 +vertex_buffer: 4.213196 +vertex_buffer: 5.551396 +vertex_buffer: 0.125300 +vertex_buffer: 0.421000 +vertex_buffer: -5.534000 +vertex_buffer: 4.156276 +vertex_buffer: 5.485503 +vertex_buffer: 0.125300 +vertex_buffer: 0.392600 +vertex_buffer: -5.542000 +vertex_buffer: 4.156207 +vertex_buffer: 5.542446 +vertex_buffer: 0.104900 +vertex_buffer: 0.392600 +vertex_buffer: -5.122000 +vertex_buffer: 4.213128 +vertex_buffer: 5.607423 +vertex_buffer: 0.104900 +vertex_buffer: 0.421000 +vertex_buffer: -6.007000 +vertex_buffer: 4.075372 +vertex_buffer: 5.406505 +vertex_buffer: 0.125300 +vertex_buffer: 0.360400 +vertex_buffer: -6.393000 +vertex_buffer: 4.002450 +vertex_buffer: 5.342460 +vertex_buffer: 0.125300 +vertex_buffer: 0.333900 +vertex_buffer: -6.015000 +vertex_buffer: 4.075303 +vertex_buffer: 5.463432 +vertex_buffer: 0.104900 +vertex_buffer: 0.360400 +vertex_buffer: -6.654430 +vertex_buffer: 3.946120 +vertex_buffer: 5.304128 +vertex_buffer: 0.125300 +vertex_buffer: 0.318300 +vertex_buffer: -6.667440 +vertex_buffer: 4.058049 +vertex_buffer: 5.362424 +vertex_buffer: 0.112500 +vertex_buffer: 0.318300 +vertex_buffer: -6.682430 +vertex_buffer: 4.054059 +vertex_buffer: 5.353259 +vertex_buffer: 0.113300 +vertex_buffer: 0.316700 +vertex_buffer: -6.684430 +vertex_buffer: 4.053086 +vertex_buffer: 5.331241 +vertex_buffer: 0.115200 +vertex_buffer: 0.316700 +vertex_buffer: -6.677440 +vertex_buffer: 4.061067 +vertex_buffer: 5.348493 +vertex_buffer: 0.113300 +vertex_buffer: 0.317300 +vertex_buffer: -6.679430 +vertex_buffer: 4.062085 +vertex_buffer: 5.332533 +vertex_buffer: 0.115200 +vertex_buffer: 0.317300 +vertex_buffer: -6.672430 +vertex_buffer: 4.061104 +vertex_buffer: 5.317541 +vertex_buffer: 0.117100 +vertex_buffer: 0.317300 +vertex_buffer: -6.675430 +vertex_buffer: 4.054110 +vertex_buffer: 5.311325 +vertex_buffer: 0.117100 +vertex_buffer: 0.316700 +vertex_buffer: -6.675430 +vertex_buffer: 4.034112 +vertex_buffer: 5.310711 +vertex_buffer: 0.119200 +vertex_buffer: 0.317300 +vertex_buffer: -6.675430 +vertex_buffer: 4.054110 +vertex_buffer: 5.311325 +vertex_buffer: 0.117800 +vertex_buffer: 0.317300 +vertex_buffer: -6.682430 +vertex_buffer: 4.033060 +vertex_buffer: 5.352612 +vertex_buffer: 0.111100 +vertex_buffer: 0.317300 +vertex_buffer: -6.678430 +vertex_buffer: 3.942064 +vertex_buffer: 5.349873 +vertex_buffer: 0.104900 +vertex_buffer: 0.317300 +vertex_buffer: -6.671430 +vertex_buffer: 3.942115 +vertex_buffer: 5.307944 +vertex_buffer: 0.125300 +vertex_buffer: 0.317300 +vertex_buffer: -6.682430 +vertex_buffer: 4.054059 +vertex_buffer: 5.353259 +vertex_buffer: 0.112500 +vertex_buffer: 0.317300 +vertex_buffer: -8.035000 +vertex_buffer: 3.803084 +vertex_buffer: -3.073275 +vertex_buffer: 0.196600 +vertex_buffer: 0.592000 +vertex_buffer: -8.053000 +vertex_buffer: 3.796094 +vertex_buffer: -3.073513 +vertex_buffer: 0.198000 +vertex_buffer: 0.592300 +vertex_buffer: -7.965990 +vertex_buffer: 3.860461 +vertex_buffer: -1.788585 +vertex_buffer: 0.203100 +vertex_buffer: 0.507000 +vertex_buffer: -7.945990 +vertex_buffer: 3.868423 +vertex_buffer: -1.787311 +vertex_buffer: 0.201700 +vertex_buffer: 0.506700 +vertex_buffer: -7.874000 +vertex_buffer: 3.893830 +vertex_buffer: -0.680814 +vertex_buffer: 0.205900 +vertex_buffer: 0.433200 +vertex_buffer: -7.896000 +vertex_buffer: 3.885868 +vertex_buffer: -0.682088 +vertex_buffer: 0.207400 +vertex_buffer: 0.433600 +vertex_buffer: -7.380000 +vertex_buffer: 3.852270 +vertex_buffer: 4.933776 +vertex_buffer: 0.224200 +vertex_buffer: 0.054600 +vertex_buffer: -7.372000 +vertex_buffer: 3.872185 +vertex_buffer: 4.929770 +vertex_buffer: 0.222400 +vertex_buffer: 0.054500 +vertex_buffer: -7.380990 +vertex_buffer: 3.877836 +vertex_buffer: 4.914071 +vertex_buffer: 0.222500 +vertex_buffer: 0.055900 +vertex_buffer: -7.392000 +vertex_buffer: 3.851786 +vertex_buffer: 4.912165 +vertex_buffer: 0.224200 +vertex_buffer: 0.056300 +vertex_buffer: -7.395000 +vertex_buffer: 3.848810 +vertex_buffer: 4.868700 +vertex_buffer: 0.224100 +vertex_buffer: 0.059300 +vertex_buffer: -7.384000 +vertex_buffer: 3.875837 +vertex_buffer: 4.869610 +vertex_buffer: 0.222300 +vertex_buffer: 0.059000 +vertex_buffer: -7.395000 +vertex_buffer: 3.776789 +vertex_buffer: 4.868576 +vertex_buffer: 0.228900 +vertex_buffer: 0.059900 +vertex_buffer: -7.392000 +vertex_buffer: 3.778766 +vertex_buffer: 4.912027 +vertex_buffer: 0.229100 +vertex_buffer: 0.056900 +vertex_buffer: -7.380000 +vertex_buffer: 3.780248 +vertex_buffer: 4.933626 +vertex_buffer: 0.229100 +vertex_buffer: 0.055200 +vertex_buffer: -7.888000 +vertex_buffer: 2.644913 +vertex_buffer: -7.592765 +vertex_buffer: 0.183300 +vertex_buffer: 0.914400 +vertex_buffer: -7.925000 +vertex_buffer: 2.694416 +vertex_buffer: -7.491223 +vertex_buffer: 0.182100 +vertex_buffer: 0.905500 +vertex_buffer: -7.934000 +vertex_buffer: 2.768480 +vertex_buffer: -7.441971 +vertex_buffer: 0.176600 +vertex_buffer: 0.898900 +vertex_buffer: -7.905000 +vertex_buffer: 2.747339 +vertex_buffer: -7.532923 +vertex_buffer: 0.173800 +vertex_buffer: 0.905600 +vertex_buffer: -7.897000 +vertex_buffer: 2.545880 +vertex_buffer: -7.491230 +vertex_buffer: 0.196300 +vertex_buffer: 0.913300 +vertex_buffer: -7.934000 +vertex_buffer: 2.598798 +vertex_buffer: -7.395112 +vertex_buffer: 0.194600 +vertex_buffer: 0.904500 +vertex_buffer: -7.928990 +vertex_buffer: 3.775072 +vertex_buffer: -3.073229 +vertex_buffer: 0.188100 +vertex_buffer: 0.591800 +vertex_buffer: -7.933000 +vertex_buffer: 3.796029 +vertex_buffer: -3.071515 +vertex_buffer: 0.189600 +vertex_buffer: 0.591400 +vertex_buffer: -7.831990 +vertex_buffer: 3.860223 +vertex_buffer: -1.781595 +vertex_buffer: 0.194100 +vertex_buffer: 0.505600 +vertex_buffer: -7.828000 +vertex_buffer: 3.836232 +vertex_buffer: -1.782403 +vertex_buffer: 0.192400 +vertex_buffer: 0.505900 +vertex_buffer: -7.747990 +vertex_buffer: 3.885460 +vertex_buffer: -0.670087 +vertex_buffer: 0.197600 +vertex_buffer: 0.431600 +vertex_buffer: -7.742000 +vertex_buffer: 3.858442 +vertex_buffer: -0.670008 +vertex_buffer: 0.195700 +vertex_buffer: 0.431800 +vertex_buffer: -7.828000 +vertex_buffer: 3.775273 +vertex_buffer: -1.784482 +vertex_buffer: 0.188400 +vertex_buffer: 0.506300 +vertex_buffer: -7.742000 +vertex_buffer: 3.787447 +vertex_buffer: -0.671427 +vertex_buffer: 0.191000 +vertex_buffer: 0.432000 +vertex_buffer: -7.928990 +vertex_buffer: 3.721103 +vertex_buffer: -3.075061 +vertex_buffer: 0.184400 +vertex_buffer: 0.592400 +vertex_buffer: -7.169000 +vertex_buffer: 3.853018 +vertex_buffer: 4.967149 +vertex_buffer: 0.209200 +vertex_buffer: 0.048900 +vertex_buffer: -7.175000 +vertex_buffer: 3.872894 +vertex_buffer: 4.961336 +vertex_buffer: 0.209100 +vertex_buffer: 0.050600 +vertex_buffer: -7.192000 +vertex_buffer: 3.879943 +vertex_buffer: 4.963492 +vertex_buffer: 0.210400 +vertex_buffer: 0.050900 +vertex_buffer: -7.191000 +vertex_buffer: 3.854091 +vertex_buffer: 4.970315 +vertex_buffer: 0.210700 +vertex_buffer: 0.049300 +vertex_buffer: -7.349000 +vertex_buffer: 3.879403 +vertex_buffer: 4.939404 +vertex_buffer: 0.220600 +vertex_buffer: 0.053900 +vertex_buffer: -7.347990 +vertex_buffer: 3.853528 +vertex_buffer: 4.945254 +vertex_buffer: 0.221000 +vertex_buffer: 0.052200 +vertex_buffer: -7.191000 +vertex_buffer: 3.781066 +vertex_buffer: 4.970090 +vertex_buffer: 0.212100 +vertex_buffer: 0.044600 +vertex_buffer: -7.347990 +vertex_buffer: 3.780507 +vertex_buffer: 4.945086 +vertex_buffer: 0.222300 +vertex_buffer: 0.047500 +vertex_buffer: -7.169000 +vertex_buffer: 3.780995 +vertex_buffer: 4.966923 +vertex_buffer: 0.210600 +vertex_buffer: 0.044200 +vertex_buffer: -8.088990 +vertex_buffer: 3.680678 +vertex_buffer: -4.093029 +vertex_buffer: 0.192100 +vertex_buffer: 0.659800 +vertex_buffer: -8.106000 +vertex_buffer: 3.673678 +vertex_buffer: -4.093265 +vertex_buffer: 0.193400 +vertex_buffer: 0.660000 +vertex_buffer: -8.121000 +vertex_buffer: 3.479514 +vertex_buffer: -4.987499 +vertex_buffer: 0.189100 +vertex_buffer: 0.720200 +vertex_buffer: -8.104000 +vertex_buffer: 3.485179 +vertex_buffer: -4.988288 +vertex_buffer: 0.187800 +vertex_buffer: 0.720000 +vertex_buffer: -7.988000 +vertex_buffer: 3.650700 +vertex_buffer: -4.094052 +vertex_buffer: 0.183500 +vertex_buffer: 0.659800 +vertex_buffer: -7.992000 +vertex_buffer: 3.673678 +vertex_buffer: -4.093265 +vertex_buffer: 0.185200 +vertex_buffer: 0.659400 +vertex_buffer: -7.988000 +vertex_buffer: 3.596764 +vertex_buffer: -4.096878 +vertex_buffer: 0.179800 +vertex_buffer: 0.660700 +vertex_buffer: -8.003000 +vertex_buffer: 3.417072 +vertex_buffer: -4.978396 +vertex_buffer: 0.174700 +vertex_buffer: 0.720500 +vertex_buffer: -8.003000 +vertex_buffer: 3.461763 +vertex_buffer: -4.984319 +vertex_buffer: 0.179100 +vertex_buffer: 0.719900 +vertex_buffer: -8.007000 +vertex_buffer: 3.479514 +vertex_buffer: -4.987499 +vertex_buffer: 0.180900 +vertex_buffer: 0.719700 +vertex_buffer: -8.003990 +vertex_buffer: 3.352830 +vertex_buffer: -4.109857 +vertex_buffer: 0.040600 +vertex_buffer: 0.685900 +vertex_buffer: -7.992000 +vertex_buffer: 3.357945 +vertex_buffer: -4.109599 +vertex_buffer: 0.041500 +vertex_buffer: 0.685800 +vertex_buffer: -7.934000 +vertex_buffer: 3.447359 +vertex_buffer: -3.089672 +vertex_buffer: 0.044900 +vertex_buffer: 0.617400 +vertex_buffer: -7.947990 +vertex_buffer: 3.442067 +vertex_buffer: -3.089904 +vertex_buffer: 0.043900 +vertex_buffer: 0.617400 +vertex_buffer: -8.036000 +vertex_buffer: 3.442122 +vertex_buffer: -3.091901 +vertex_buffer: 0.038000 +vertex_buffer: 0.617500 +vertex_buffer: -8.088990 +vertex_buffer: 3.352830 +vertex_buffer: -4.109857 +vertex_buffer: 0.034900 +vertex_buffer: 0.685900 +vertex_buffer: -8.107000 +vertex_buffer: 3.171661 +vertex_buffer: -4.940374 +vertex_buffer: 0.033700 +vertex_buffer: 0.743900 +vertex_buffer: -8.022000 +vertex_buffer: 3.171661 +vertex_buffer: -4.940374 +vertex_buffer: 0.039400 +vertex_buffer: 0.744000 +vertex_buffer: -8.009000 +vertex_buffer: 3.177350 +vertex_buffer: -4.941065 +vertex_buffer: 0.040400 +vertex_buffer: 0.743800 +vertex_buffer: -8.107000 +vertex_buffer: 3.357945 +vertex_buffer: -4.109599 +vertex_buffer: 0.217200 +vertex_buffer: 0.668000 +vertex_buffer: -8.053000 +vertex_buffer: 3.447424 +vertex_buffer: -3.091670 +vertex_buffer: 0.221700 +vertex_buffer: 0.598600 +vertex_buffer: -8.058990 +vertex_buffer: 3.464815 +vertex_buffer: -3.089903 +vertex_buffer: 0.220100 +vertex_buffer: 0.598100 +vertex_buffer: -8.112000 +vertex_buffer: 3.375448 +vertex_buffer: -4.108757 +vertex_buffer: 0.215600 +vertex_buffer: 0.667500 +vertex_buffer: -8.058990 +vertex_buffer: 3.514396 +vertex_buffer: -3.087097 +vertex_buffer: 0.216600 +vertex_buffer: 0.597100 +vertex_buffer: -8.112000 +vertex_buffer: 3.415554 +vertex_buffer: -4.105842 +vertex_buffer: 0.212000 +vertex_buffer: 0.666200 +vertex_buffer: -8.129000 +vertex_buffer: 3.196587 +vertex_buffer: -4.943947 +vertex_buffer: 0.215600 +vertex_buffer: 0.726900 +vertex_buffer: -8.129000 +vertex_buffer: 3.242119 +vertex_buffer: -4.950491 +vertex_buffer: 0.211300 +vertex_buffer: 0.725700 +vertex_buffer: -8.123990 +vertex_buffer: 3.177350 +vertex_buffer: -4.941065 +vertex_buffer: 0.217500 +vertex_buffer: 0.727300 +vertex_buffer: -8.085000 +vertex_buffer: 3.292145 +vertex_buffer: -5.899772 +vertex_buffer: 0.182700 +vertex_buffer: 0.782700 +vertex_buffer: -8.102000 +vertex_buffer: 3.285218 +vertex_buffer: -5.896081 +vertex_buffer: 0.183700 +vertex_buffer: 0.782700 +vertex_buffer: -8.038000 +vertex_buffer: 3.086942 +vertex_buffer: -6.694157 +vertex_buffer: 0.178000 +vertex_buffer: 0.838900 +vertex_buffer: -8.054990 +vertex_buffer: 3.078037 +vertex_buffer: -6.686757 +vertex_buffer: 0.178700 +vertex_buffer: 0.838700 +vertex_buffer: -7.984000 +vertex_buffer: 3.265013 +vertex_buffer: -5.884281 +vertex_buffer: 0.174900 +vertex_buffer: 0.782200 +vertex_buffer: -7.987000 +vertex_buffer: 3.285218 +vertex_buffer: -5.896081 +vertex_buffer: 0.176600 +vertex_buffer: 0.782500 +vertex_buffer: -7.985000 +vertex_buffer: 3.209211 +vertex_buffer: -5.851367 +vertex_buffer: 0.169400 +vertex_buffer: 0.781500 +vertex_buffer: -7.941000 +vertex_buffer: 2.980811 +vertex_buffer: -6.599105 +vertex_buffer: 0.163500 +vertex_buffer: 0.836100 +vertex_buffer: -7.938000 +vertex_buffer: 3.050547 +vertex_buffer: -6.662533 +vertex_buffer: 0.170600 +vertex_buffer: 0.838100 +vertex_buffer: -7.941000 +vertex_buffer: 3.078037 +vertex_buffer: -6.686757 +vertex_buffer: 0.172700 +vertex_buffer: 0.838800 +vertex_buffer: -8.009000 +vertex_buffer: 2.894458 +vertex_buffer: -5.665260 +vertex_buffer: 0.039000 +vertex_buffer: 0.799600 +vertex_buffer: -7.995990 +vertex_buffer: 2.901561 +vertex_buffer: -5.669784 +vertex_buffer: 0.040100 +vertex_buffer: 0.799500 +vertex_buffer: -8.093990 +vertex_buffer: 2.894458 +vertex_buffer: -5.665260 +vertex_buffer: 0.033300 +vertex_buffer: 0.799400 +vertex_buffer: -8.060000 +vertex_buffer: 2.609329 +vertex_buffer: -6.232546 +vertex_buffer: 0.033500 +vertex_buffer: 0.847100 +vertex_buffer: -7.975000 +vertex_buffer: 2.609329 +vertex_buffer: -6.232546 +vertex_buffer: 0.039200 +vertex_buffer: 0.847400 +vertex_buffer: -7.962000 +vertex_buffer: 2.617311 +vertex_buffer: -6.241937 +vertex_buffer: 0.040500 +vertex_buffer: 0.847400 +vertex_buffer: -8.111000 +vertex_buffer: 2.901561 +vertex_buffer: -5.669784 +vertex_buffer: 0.222900 +vertex_buffer: 0.784000 +vertex_buffer: -8.116000 +vertex_buffer: 2.923470 +vertex_buffer: -5.681317 +vertex_buffer: 0.220600 +vertex_buffer: 0.783800 +vertex_buffer: -8.115000 +vertex_buffer: 2.981445 +vertex_buffer: -5.714432 +vertex_buffer: 0.214600 +vertex_buffer: 0.783700 +vertex_buffer: -8.081000 +vertex_buffer: 2.639407 +vertex_buffer: -6.273185 +vertex_buffer: 0.227500 +vertex_buffer: 0.833300 +vertex_buffer: -8.078000 +vertex_buffer: 2.705993 +vertex_buffer: -6.343039 +vertex_buffer: 0.219700 +vertex_buffer: 0.834800 +vertex_buffer: -8.077000 +vertex_buffer: 2.617311 +vertex_buffer: -6.241937 +vertex_buffer: 0.230400 +vertex_buffer: 0.832400 +vertex_buffer: -7.984000 +vertex_buffer: 2.886415 +vertex_buffer: -7.224260 +vertex_buffer: 0.176300 +vertex_buffer: 0.879600 +vertex_buffer: -7.966000 +vertex_buffer: 2.899952 +vertex_buffer: -7.236242 +vertex_buffer: 0.174900 +vertex_buffer: 0.879800 +vertex_buffer: -7.870000 +vertex_buffer: 2.886415 +vertex_buffer: -7.224260 +vertex_buffer: 0.168700 +vertex_buffer: 0.879800 +vertex_buffer: -7.868000 +vertex_buffer: 2.845190 +vertex_buffer: -7.190347 +vertex_buffer: 0.164500 +vertex_buffer: 0.879000 +vertex_buffer: -7.874000 +vertex_buffer: 2.760812 +vertex_buffer: -7.105696 +vertex_buffer: 0.154900 +vertex_buffer: 0.876400 +vertex_buffer: -7.819000 +vertex_buffer: 2.598798 +vertex_buffer: -7.395112 +vertex_buffer: 0.146400 +vertex_buffer: 0.901300 +vertex_buffer: -7.810990 +vertex_buffer: 2.694416 +vertex_buffer: -7.491223 +vertex_buffer: 0.158600 +vertex_buffer: 0.904300 +vertex_buffer: -7.828000 +vertex_buffer: 2.768480 +vertex_buffer: -7.441971 +vertex_buffer: 0.165100 +vertex_buffer: 0.898700 +vertex_buffer: -7.923000 +vertex_buffer: 2.392508 +vertex_buffer: -6.583891 +vertex_buffer: 0.040800 +vertex_buffer: 0.880000 +vertex_buffer: -7.910000 +vertex_buffer: 2.398530 +vertex_buffer: -6.603409 +vertex_buffer: 0.042400 +vertex_buffer: 0.880600 +vertex_buffer: -8.008000 +vertex_buffer: 2.392508 +vertex_buffer: -6.583891 +vertex_buffer: 0.035100 +vertex_buffer: 0.879700 +vertex_buffer: -7.960990 +vertex_buffer: 2.257022 +vertex_buffer: -6.797844 +vertex_buffer: 0.036900 +vertex_buffer: 0.899900 +vertex_buffer: -7.875990 +vertex_buffer: 2.257022 +vertex_buffer: -6.797844 +vertex_buffer: 0.042500 +vertex_buffer: 0.900300 +vertex_buffer: -7.878000 +vertex_buffer: 2.296595 +vertex_buffer: -6.770846 +vertex_buffer: 0.044500 +vertex_buffer: 0.896400 +vertex_buffer: -8.023990 +vertex_buffer: 2.398530 +vertex_buffer: -6.603409 +vertex_buffer: 0.237500 +vertex_buffer: 0.865700 +vertex_buffer: -8.027000 +vertex_buffer: 2.416037 +vertex_buffer: -6.664004 +vertex_buffer: 0.234100 +vertex_buffer: 0.868500 +vertex_buffer: -8.021000 +vertex_buffer: 2.477772 +vertex_buffer: -6.773771 +vertex_buffer: 0.225400 +vertex_buffer: 0.872400 +vertex_buffer: -7.973990 +vertex_buffer: 2.270065 +vertex_buffer: -6.882959 +vertex_buffer: 0.239800 +vertex_buffer: 0.889500 +vertex_buffer: -7.966000 +vertex_buffer: 2.324553 +vertex_buffer: -7.024226 +vertex_buffer: 0.230700 +vertex_buffer: 0.895400 +vertex_buffer: -7.984000 +vertex_buffer: 2.296595 +vertex_buffer: -6.770846 +vertex_buffer: 0.241100 +vertex_buffer: 0.881300 +vertex_buffer: -7.869990 +vertex_buffer: 3.893466 +vertex_buffer: -0.199551 +vertex_buffer: 0.209300 +vertex_buffer: 0.401700 +vertex_buffer: -7.847000 +vertex_buffer: 3.902400 +vertex_buffer: -0.197242 +vertex_buffer: 0.207700 +vertex_buffer: 0.401200 +vertex_buffer: -7.805000 +vertex_buffer: 3.890782 +vertex_buffer: 0.526775 +vertex_buffer: 0.211700 +vertex_buffer: 0.353300 +vertex_buffer: -7.781000 +vertex_buffer: 3.899673 +vertex_buffer: 0.530080 +vertex_buffer: 0.210000 +vertex_buffer: 0.352800 +vertex_buffer: -7.973000 +vertex_buffer: 3.836469 +vertex_buffer: -1.789402 +vertex_buffer: 0.204700 +vertex_buffer: 0.507500 +vertex_buffer: -7.903000 +vertex_buffer: 3.858916 +vertex_buffer: -0.683997 +vertex_buffer: 0.209200 +vertex_buffer: 0.434100 +vertex_buffer: -8.058990 +vertex_buffer: 3.775105 +vertex_buffer: -3.074223 +vertex_buffer: 0.199500 +vertex_buffer: 0.592800 +vertex_buffer: -8.058990 +vertex_buffer: 3.721167 +vertex_buffer: -3.077068 +vertex_buffer: 0.203000 +vertex_buffer: 0.593900 +vertex_buffer: -7.973000 +vertex_buffer: 3.775511 +vertex_buffer: -1.791471 +vertex_buffer: 0.208700 +vertex_buffer: 0.508400 +vertex_buffer: -7.903000 +vertex_buffer: 3.787890 +vertex_buffer: -0.684412 +vertex_buffer: 0.213800 +vertex_buffer: 0.434700 +vertex_buffer: -7.714990 +vertex_buffer: 3.892960 +vertex_buffer: -0.184558 +vertex_buffer: 0.198900 +vertex_buffer: 0.399400 +vertex_buffer: -7.710000 +vertex_buffer: 3.865943 +vertex_buffer: -0.184470 +vertex_buffer: 0.197100 +vertex_buffer: 0.399400 +vertex_buffer: -7.638000 +vertex_buffer: 3.863151 +vertex_buffer: 0.544850 +vertex_buffer: 0.198800 +vertex_buffer: 0.350700 +vertex_buffer: -7.642990 +vertex_buffer: 3.890169 +vertex_buffer: 0.544772 +vertex_buffer: 0.200700 +vertex_buffer: 0.350700 +vertex_buffer: -7.638000 +vertex_buffer: 3.790160 +vertex_buffer: 0.543377 +vertex_buffer: 0.193800 +vertex_buffer: 0.350800 +vertex_buffer: -7.710000 +vertex_buffer: 3.791945 +vertex_buffer: -0.185995 +vertex_buffer: 0.192200 +vertex_buffer: 0.399600 +vertex_buffer: -7.641000 +vertex_buffer: 3.885418 +vertex_buffer: 2.361643 +vertex_buffer: 0.216600 +vertex_buffer: 0.230800 +vertex_buffer: -7.650000 +vertex_buffer: 3.858468 +vertex_buffer: 2.359723 +vertex_buffer: 0.218500 +vertex_buffer: 0.231100 +vertex_buffer: -7.650000 +vertex_buffer: 3.785477 +vertex_buffer: 2.358199 +vertex_buffer: 0.223300 +vertex_buffer: 0.231600 +vertex_buffer: -7.350000 +vertex_buffer: 3.886940 +vertex_buffer: 4.918659 +vertex_buffer: 0.220500 +vertex_buffer: 0.055400 +vertex_buffer: -7.352990 +vertex_buffer: 3.884966 +vertex_buffer: 4.875184 +vertex_buffer: 0.220300 +vertex_buffer: 0.058300 +vertex_buffer: -7.172990 +vertex_buffer: 3.876585 +vertex_buffer: 4.902972 +vertex_buffer: 0.208700 +vertex_buffer: 0.054700 +vertex_buffer: -7.170000 +vertex_buffer: 3.878584 +vertex_buffer: 4.947460 +vertex_buffer: 0.208900 +vertex_buffer: 0.051700 +vertex_buffer: -7.162000 +vertex_buffer: 3.852596 +vertex_buffer: 4.948288 +vertex_buffer: 0.207200 +vertex_buffer: 0.051600 +vertex_buffer: -7.166000 +vertex_buffer: 3.849597 +vertex_buffer: 4.903810 +vertex_buffer: 0.207000 +vertex_buffer: 0.054600 +vertex_buffer: -7.169000 +vertex_buffer: 3.853018 +vertex_buffer: 4.967149 +vertex_buffer: 0.207300 +vertex_buffer: 0.050200 +vertex_buffer: -7.169000 +vertex_buffer: 3.780995 +vertex_buffer: 4.966923 +vertex_buffer: 0.202400 +vertex_buffer: 0.050300 +vertex_buffer: -7.162000 +vertex_buffer: 3.779572 +vertex_buffer: 4.948063 +vertex_buffer: 0.202300 +vertex_buffer: 0.051600 +vertex_buffer: -7.166000 +vertex_buffer: 3.777573 +vertex_buffer: 4.903606 +vertex_buffer: 0.202200 +vertex_buffer: 0.054700 +vertex_buffer: -7.847000 +vertex_buffer: 3.868250 +vertex_buffer: -1.782319 +vertex_buffer: 0.195200 +vertex_buffer: 0.505600 +vertex_buffer: -7.763990 +vertex_buffer: 3.893518 +vertex_buffer: -0.671815 +vertex_buffer: 0.198700 +vertex_buffer: 0.431800 +vertex_buffer: -7.946990 +vertex_buffer: 3.803019 +vertex_buffer: -3.071277 +vertex_buffer: 0.190800 +vertex_buffer: 0.591300 +vertex_buffer: -7.803000 +vertex_buffer: 2.644913 +vertex_buffer: -7.592765 +vertex_buffer: 0.166300 +vertex_buffer: 0.917200 +vertex_buffer: -7.888000 +vertex_buffer: 2.644913 +vertex_buffer: -7.592765 +vertex_buffer: 0.172000 +vertex_buffer: 0.917200 +vertex_buffer: -7.820000 +vertex_buffer: 2.747339 +vertex_buffer: -7.532923 +vertex_buffer: 0.166600 +vertex_buffer: 0.905600 +vertex_buffer: -7.803000 +vertex_buffer: 2.644913 +vertex_buffer: -7.592765 +vertex_buffer: 0.155700 +vertex_buffer: 0.912500 +vertex_buffer: -7.812000 +vertex_buffer: 2.545880 +vertex_buffer: -7.491230 +vertex_buffer: 0.143300 +vertex_buffer: 0.909300 +vertex_buffer: -7.897000 +vertex_buffer: 2.545880 +vertex_buffer: -7.491230 +vertex_buffer: 0.172300 +vertex_buffer: 0.929500 +vertex_buffer: -7.812000 +vertex_buffer: 2.545880 +vertex_buffer: -7.491230 +vertex_buffer: 0.166600 +vertex_buffer: 0.929200 +vertex_buffer: -8.003990 +vertex_buffer: 3.680678 +vertex_buffer: -4.093029 +vertex_buffer: 0.186300 +vertex_buffer: 0.659300 +vertex_buffer: -8.019000 +vertex_buffer: 3.485179 +vertex_buffer: -4.988288 +vertex_buffer: 0.182000 +vertex_buffer: 0.719600 +vertex_buffer: -8.000000 +vertex_buffer: 3.292145 +vertex_buffer: -5.899772 +vertex_buffer: 0.177400 +vertex_buffer: 0.782500 +vertex_buffer: -7.953000 +vertex_buffer: 3.086942 +vertex_buffer: -6.694157 +vertex_buffer: 0.173300 +vertex_buffer: 0.839000 +vertex_buffer: -7.881000 +vertex_buffer: 2.899952 +vertex_buffer: -7.236242 +vertex_buffer: 0.169900 +vertex_buffer: 0.880000 +vertex_buffer: -7.479000 +vertex_buffer: 3.893669 +vertex_buffer: 2.383827 +vertex_buffer: 0.205900 +vertex_buffer: 0.227800 +vertex_buffer: -7.614000 +vertex_buffer: 3.894277 +vertex_buffer: 2.365932 +vertex_buffer: 0.214700 +vertex_buffer: 0.230200 +vertex_buffer: -7.197000 +vertex_buffer: 3.885506 +vertex_buffer: 4.899257 +vertex_buffer: 0.210300 +vertex_buffer: 0.055200 +vertex_buffer: -7.459000 +vertex_buffer: 3.884572 +vertex_buffer: 2.386488 +vertex_buffer: 0.204400 +vertex_buffer: 0.227500 +vertex_buffer: -7.192990 +vertex_buffer: 3.887502 +vertex_buffer: 4.943735 +vertex_buffer: 0.210400 +vertex_buffer: 0.052200 +vertex_buffer: -7.380000 +vertex_buffer: 3.852270 +vertex_buffer: 4.933776 +vertex_buffer: 0.223200 +vertex_buffer: 0.052900 +vertex_buffer: -7.380000 +vertex_buffer: 3.780248 +vertex_buffer: 4.933626 +vertex_buffer: 0.224500 +vertex_buffer: 0.048100 +vertex_buffer: -8.053000 +vertex_buffer: 3.447424 +vertex_buffer: -3.091670 +vertex_buffer: 0.036800 +vertex_buffer: 0.617500 +vertex_buffer: -8.107000 +vertex_buffer: 3.357945 +vertex_buffer: -4.109599 +vertex_buffer: 0.033700 +vertex_buffer: 0.685800 +vertex_buffer: -8.123990 +vertex_buffer: 3.177350 +vertex_buffer: -4.941065 +vertex_buffer: 0.032500 +vertex_buffer: 0.743700 +vertex_buffer: -8.111000 +vertex_buffer: 2.901561 +vertex_buffer: -5.669784 +vertex_buffer: 0.032000 +vertex_buffer: 0.799200 +vertex_buffer: -8.077000 +vertex_buffer: 2.617311 +vertex_buffer: -6.241937 +vertex_buffer: 0.032000 +vertex_buffer: 0.847000 +vertex_buffer: -8.023990 +vertex_buffer: 2.398530 +vertex_buffer: -6.603409 +vertex_buffer: 0.033400 +vertex_buffer: 0.880300 +vertex_buffer: -7.984000 +vertex_buffer: 2.296595 +vertex_buffer: -6.770846 +vertex_buffer: 0.034200 +vertex_buffer: 0.896200 +vertex_buffer: -7.395000 +vertex_buffer: 3.450573 +vertex_buffer: 4.868867 +vertex_buffer: 0.248500 +vertex_buffer: 0.061500 +vertex_buffer: -7.395000 +vertex_buffer: 3.377893 +vertex_buffer: 4.869167 +vertex_buffer: 0.253400 +vertex_buffer: 0.062000 +vertex_buffer: -7.392000 +vertex_buffer: 3.380724 +vertex_buffer: 4.912542 +vertex_buffer: 0.253500 +vertex_buffer: 0.059000 +vertex_buffer: -7.392000 +vertex_buffer: 3.453546 +vertex_buffer: 4.912252 +vertex_buffer: 0.248600 +vertex_buffer: 0.058500 +vertex_buffer: -7.384000 +vertex_buffer: 3.350628 +vertex_buffer: 4.870098 +vertex_buffer: 0.255400 +vertex_buffer: 0.062000 +vertex_buffer: -7.380990 +vertex_buffer: 3.353446 +vertex_buffer: 4.914453 +vertex_buffer: 0.255500 +vertex_buffer: 0.058900 +vertex_buffer: -7.372000 +vertex_buffer: 3.361561 +vertex_buffer: 4.930083 +vertex_buffer: 0.255200 +vertex_buffer: 0.057600 +vertex_buffer: -7.380000 +vertex_buffer: 3.381164 +vertex_buffer: 4.934087 +vertex_buffer: 0.253700 +vertex_buffer: 0.057400 +vertex_buffer: -7.380000 +vertex_buffer: 3.454030 +vertex_buffer: 4.933805 +vertex_buffer: 0.248700 +vertex_buffer: 0.056800 +vertex_buffer: -7.973990 +vertex_buffer: 2.270065 +vertex_buffer: -6.882959 +vertex_buffer: 0.034000 +vertex_buffer: 0.904500 +vertex_buffer: -7.941000 +vertex_buffer: 2.221733 +vertex_buffer: -6.955181 +vertex_buffer: 0.037400 +vertex_buffer: 0.911100 +vertex_buffer: -7.941000 +vertex_buffer: 2.221733 +vertex_buffer: -6.955181 +vertex_buffer: 0.241900 +vertex_buffer: 0.896700 +vertex_buffer: -7.932000 +vertex_buffer: 2.274002 +vertex_buffer: -7.107549 +vertex_buffer: 0.232600 +vertex_buffer: 0.903300 +vertex_buffer: -7.828000 +vertex_buffer: 3.530380 +vertex_buffer: -1.791804 +vertex_buffer: 0.172000 +vertex_buffer: 0.507000 +vertex_buffer: -7.741990 +vertex_buffer: 3.470328 +vertex_buffer: -0.677179 +vertex_buffer: 0.172000 +vertex_buffer: 0.432200 +vertex_buffer: -7.741990 +vertex_buffer: 3.409785 +vertex_buffer: -0.678599 +vertex_buffer: 0.167200 +vertex_buffer: 0.432400 +vertex_buffer: -7.828000 +vertex_buffer: 3.467998 +vertex_buffer: -1.793948 +vertex_buffer: 0.167800 +vertex_buffer: 0.507400 +vertex_buffer: -7.834000 +vertex_buffer: 3.449010 +vertex_buffer: -1.795735 +vertex_buffer: 0.166200 +vertex_buffer: 0.507700 +vertex_buffer: -7.749000 +vertex_buffer: 3.386746 +vertex_buffer: -0.679570 +vertex_buffer: 0.165300 +vertex_buffer: 0.432600 +vertex_buffer: -7.934000 +vertex_buffer: 3.447359 +vertex_buffer: -3.089672 +vertex_buffer: 0.165300 +vertex_buffer: 0.594900 +vertex_buffer: -7.928990 +vertex_buffer: 3.464759 +vertex_buffer: -3.087906 +vertex_buffer: 0.166900 +vertex_buffer: 0.594600 +vertex_buffer: -7.928990 +vertex_buffer: 3.514363 +vertex_buffer: -3.086102 +vertex_buffer: 0.170500 +vertex_buffer: 0.594000 +vertex_buffer: -7.347990 +vertex_buffer: 3.455285 +vertex_buffer: 4.945203 +vertex_buffer: 0.227600 +vertex_buffer: 0.028600 +vertex_buffer: -7.347990 +vertex_buffer: 3.382373 +vertex_buffer: 4.945470 +vertex_buffer: 0.228900 +vertex_buffer: 0.023800 +vertex_buffer: -7.191000 +vertex_buffer: 3.382879 +vertex_buffer: 4.970206 +vertex_buffer: 0.218700 +vertex_buffer: 0.021000 +vertex_buffer: -7.191000 +vertex_buffer: 3.455840 +vertex_buffer: 4.969988 +vertex_buffer: 0.217300 +vertex_buffer: 0.025700 +vertex_buffer: -7.349000 +vertex_buffer: 3.354916 +vertex_buffer: 4.939652 +vertex_buffer: 0.229500 +vertex_buffer: 0.022000 +vertex_buffer: -7.192000 +vertex_buffer: 3.355385 +vertex_buffer: 4.963381 +vertex_buffer: 0.219300 +vertex_buffer: 0.019200 +vertex_buffer: -7.175000 +vertex_buffer: 3.362181 +vertex_buffer: 4.961208 +vertex_buffer: 0.218100 +vertex_buffer: 0.019200 +vertex_buffer: -7.169000 +vertex_buffer: 3.381838 +vertex_buffer: 4.967018 +vertex_buffer: 0.217300 +vertex_buffer: 0.020500 +vertex_buffer: -7.169000 +vertex_buffer: 3.454769 +vertex_buffer: 4.966805 +vertex_buffer: 0.215900 +vertex_buffer: 0.025300 +vertex_buffer: -7.988000 +vertex_buffer: 3.375448 +vertex_buffer: -4.108757 +vertex_buffer: 0.162200 +vertex_buffer: 0.663900 +vertex_buffer: -7.988000 +vertex_buffer: 3.415554 +vertex_buffer: -4.105842 +vertex_buffer: 0.166000 +vertex_buffer: 0.663100 +vertex_buffer: -7.992000 +vertex_buffer: 3.357945 +vertex_buffer: -4.109599 +vertex_buffer: 0.160600 +vertex_buffer: 0.664300 +vertex_buffer: -8.009000 +vertex_buffer: 3.177350 +vertex_buffer: -4.941065 +vertex_buffer: 0.151800 +vertex_buffer: 0.722800 +vertex_buffer: -8.004990 +vertex_buffer: 3.196587 +vertex_buffer: -4.943947 +vertex_buffer: 0.153700 +vertex_buffer: 0.722600 +vertex_buffer: -8.003990 +vertex_buffer: 3.242119 +vertex_buffer: -4.950491 +vertex_buffer: 0.158100 +vertex_buffer: 0.722100 +vertex_buffer: -8.112000 +vertex_buffer: 3.596764 +vertex_buffer: -4.096878 +vertex_buffer: 0.198600 +vertex_buffer: 0.661900 +vertex_buffer: -8.128000 +vertex_buffer: 3.417072 +vertex_buffer: -4.978396 +vertex_buffer: 0.195100 +vertex_buffer: 0.721700 +vertex_buffer: -7.991000 +vertex_buffer: 2.923470 +vertex_buffer: -5.681317 +vertex_buffer: 0.140000 +vertex_buffer: 0.778100 +vertex_buffer: -7.990000 +vertex_buffer: 2.981445 +vertex_buffer: -5.714432 +vertex_buffer: 0.145900 +vertex_buffer: 0.778800 +vertex_buffer: -7.995990 +vertex_buffer: 2.901561 +vertex_buffer: -5.669784 +vertex_buffer: 0.137700 +vertex_buffer: 0.777900 +vertex_buffer: -7.962000 +vertex_buffer: 2.617311 +vertex_buffer: -6.241937 +vertex_buffer: 0.122700 +vertex_buffer: 0.824400 +vertex_buffer: -7.956000 +vertex_buffer: 2.639407 +vertex_buffer: -6.273185 +vertex_buffer: 0.125400 +vertex_buffer: 0.825900 +vertex_buffer: -7.953000 +vertex_buffer: 2.705993 +vertex_buffer: -6.343039 +vertex_buffer: 0.132900 +vertex_buffer: 0.828500 +vertex_buffer: -8.109000 +vertex_buffer: 3.209211 +vertex_buffer: -5.851367 +vertex_buffer: 0.191000 +vertex_buffer: 0.782700 +vertex_buffer: -8.066000 +vertex_buffer: 2.980811 +vertex_buffer: -6.599105 +vertex_buffer: 0.188300 +vertex_buffer: 0.837500 +vertex_buffer: -7.903000 +vertex_buffer: 2.416037 +vertex_buffer: -6.664004 +vertex_buffer: 0.113300 +vertex_buffer: 0.859500 +vertex_buffer: -7.897000 +vertex_buffer: 2.477772 +vertex_buffer: -6.773771 +vertex_buffer: 0.121200 +vertex_buffer: 0.864700 +vertex_buffer: -7.910000 +vertex_buffer: 2.398530 +vertex_buffer: -6.603409 +vertex_buffer: 0.110400 +vertex_buffer: 0.856100 +vertex_buffer: -7.878000 +vertex_buffer: 2.296595 +vertex_buffer: -6.770846 +vertex_buffer: 0.104400 +vertex_buffer: 0.870800 +vertex_buffer: -7.860000 +vertex_buffer: 2.270065 +vertex_buffer: -6.882959 +vertex_buffer: 0.104200 +vertex_buffer: 0.879200 +vertex_buffer: -7.850990 +vertex_buffer: 2.324553 +vertex_buffer: -7.024226 +vertex_buffer: 0.112200 +vertex_buffer: 0.886500 +vertex_buffer: -7.998000 +vertex_buffer: 2.760812 +vertex_buffer: -7.105696 +vertex_buffer: 0.190300 +vertex_buffer: 0.878600 +vertex_buffer: -7.973000 +vertex_buffer: 3.530650 +vertex_buffer: -1.799798 +vertex_buffer: 0.224900 +vertex_buffer: 0.510900 +vertex_buffer: -7.973000 +vertex_buffer: 3.468228 +vertex_buffer: -1.801936 +vertex_buffer: 0.229000 +vertex_buffer: 0.511800 +vertex_buffer: -7.967000 +vertex_buffer: 3.449207 +vertex_buffer: -1.802729 +vertex_buffer: 0.230600 +vertex_buffer: 0.512100 +vertex_buffer: -7.903000 +vertex_buffer: 3.410186 +vertex_buffer: -0.691589 +vertex_buffer: 0.237500 +vertex_buffer: 0.437500 +vertex_buffer: -7.897000 +vertex_buffer: 3.387124 +vertex_buffer: -0.691567 +vertex_buffer: 0.239400 +vertex_buffer: 0.437700 +vertex_buffer: -7.903000 +vertex_buffer: 3.470769 +vertex_buffer: -0.690174 +vertex_buffer: 0.232800 +vertex_buffer: 0.436900 +vertex_buffer: -7.453000 +vertex_buffer: 3.387348 +vertex_buffer: 2.375706 +vertex_buffer: 0.172800 +vertex_buffer: 0.227400 +vertex_buffer: -7.453000 +vertex_buffer: 3.456503 +vertex_buffer: 2.377381 +vertex_buffer: 0.177800 +vertex_buffer: 0.227400 +vertex_buffer: -7.166000 +vertex_buffer: 3.451351 +vertex_buffer: 4.903571 +vertex_buffer: 0.182600 +vertex_buffer: 0.054900 +vertex_buffer: -7.166000 +vertex_buffer: 3.378595 +vertex_buffer: 4.903802 +vertex_buffer: 0.177700 +vertex_buffer: 0.055000 +vertex_buffer: -7.460000 +vertex_buffer: 3.362018 +vertex_buffer: 2.373692 +vertex_buffer: 0.170900 +vertex_buffer: 0.227600 +vertex_buffer: -7.172990 +vertex_buffer: 3.351269 +vertex_buffer: 4.902964 +vertex_buffer: 0.175700 +vertex_buffer: 0.055100 +vertex_buffer: -7.877000 +vertex_buffer: 3.461314 +vertex_buffer: -0.206221 +vertex_buffer: 0.235800 +vertex_buffer: 0.404400 +vertex_buffer: -7.877000 +vertex_buffer: 3.398390 +vertex_buffer: -0.206755 +vertex_buffer: 0.240800 +vertex_buffer: 0.404900 +vertex_buffer: -7.872000 +vertex_buffer: 3.374127 +vertex_buffer: -0.206767 +vertex_buffer: 0.242700 +vertex_buffer: 0.405000 +vertex_buffer: -7.806990 +vertex_buffer: 3.370908 +vertex_buffer: 0.517625 +vertex_buffer: 0.245400 +vertex_buffer: 0.356300 +vertex_buffer: -7.813000 +vertex_buffer: 3.394889 +vertex_buffer: 0.517606 +vertex_buffer: 0.243500 +vertex_buffer: 0.356200 +vertex_buffer: -7.813000 +vertex_buffer: 3.459661 +vertex_buffer: 0.519144 +vertex_buffer: 0.238500 +vertex_buffer: 0.355700 +vertex_buffer: -7.169000 +vertex_buffer: 3.381838 +vertex_buffer: 4.967018 +vertex_buffer: 0.177700 +vertex_buffer: 0.050600 +vertex_buffer: -7.162000 +vertex_buffer: 3.381451 +vertex_buffer: 4.948179 +vertex_buffer: 0.177800 +vertex_buffer: 0.052000 +vertex_buffer: -7.162000 +vertex_buffer: 3.454346 +vertex_buffer: 4.947963 +vertex_buffer: 0.182700 +vertex_buffer: 0.051900 +vertex_buffer: -7.169000 +vertex_buffer: 3.454769 +vertex_buffer: 4.966805 +vertex_buffer: 0.182700 +vertex_buffer: 0.050500 +vertex_buffer: -7.175000 +vertex_buffer: 3.362181 +vertex_buffer: 4.961208 +vertex_buffer: 0.176300 +vertex_buffer: 0.051000 +vertex_buffer: -7.170000 +vertex_buffer: 3.354093 +vertex_buffer: 4.947351 +vertex_buffer: 0.175900 +vertex_buffer: 0.052100 +vertex_buffer: -7.857000 +vertex_buffer: 2.221733 +vertex_buffer: -6.955181 +vertex_buffer: 0.101100 +vertex_buffer: 0.885600 +vertex_buffer: -7.847000 +vertex_buffer: 2.274002 +vertex_buffer: -7.107549 +vertex_buffer: 0.109100 +vertex_buffer: 0.893600 +vertex_buffer: -7.857000 +vertex_buffer: 2.221733 +vertex_buffer: -6.955181 +vertex_buffer: 0.043100 +vertex_buffer: 0.911500 +vertex_buffer: -7.860000 +vertex_buffer: 2.270065 +vertex_buffer: -6.882959 +vertex_buffer: 0.045600 +vertex_buffer: 0.904800 +vertex_buffer: -7.857000 +vertex_buffer: 2.221733 +vertex_buffer: -6.955181 +vertex_buffer: 0.167100 +vertex_buffer: 0.977700 +vertex_buffer: -7.941000 +vertex_buffer: 2.221733 +vertex_buffer: -6.955181 +vertex_buffer: 0.172700 +vertex_buffer: 0.978000 +vertex_buffer: -7.932000 +vertex_buffer: 2.274002 +vertex_buffer: -7.107549 +vertex_buffer: 0.172700 +vertex_buffer: 0.966700 +vertex_buffer: -7.847000 +vertex_buffer: 2.274002 +vertex_buffer: -7.107549 +vertex_buffer: 0.167000 +vertex_buffer: 0.966400 +vertex_buffer: -7.380000 +vertex_buffer: 3.454030 +vertex_buffer: 4.933805 +vertex_buffer: 0.229800 +vertex_buffer: 0.029200 +vertex_buffer: -7.380000 +vertex_buffer: 3.381164 +vertex_buffer: 4.934087 +vertex_buffer: 0.231100 +vertex_buffer: 0.024400 +vertex_buffer: -7.372000 +vertex_buffer: 3.361561 +vertex_buffer: 4.930083 +vertex_buffer: 0.231000 +vertex_buffer: 0.022900 +vertex_buffer: -7.453000 +vertex_buffer: 3.784569 +vertex_buffer: 2.384960 +vertex_buffer: 0.197600 +vertex_buffer: 0.227500 +vertex_buffer: -7.877000 +vertex_buffer: 3.792463 +vertex_buffer: -0.200980 +vertex_buffer: 0.215900 +vertex_buffer: 0.402600 +vertex_buffer: -7.813000 +vertex_buffer: 3.790806 +vertex_buffer: 0.524386 +vertex_buffer: 0.218500 +vertex_buffer: 0.354200 +vertex_buffer: -8.112000 +vertex_buffer: 3.650700 +vertex_buffer: -4.094052 +vertex_buffer: 0.195100 +vertex_buffer: 0.660600 +vertex_buffer: -8.127000 +vertex_buffer: 3.461763 +vertex_buffer: -4.984319 +vertex_buffer: 0.190900 +vertex_buffer: 0.720600 +vertex_buffer: -8.108000 +vertex_buffer: 3.265013 +vertex_buffer: -5.884281 +vertex_buffer: 0.185500 +vertex_buffer: 0.782600 +vertex_buffer: -8.062000 +vertex_buffer: 3.050547 +vertex_buffer: -6.662533 +vertex_buffer: 0.181000 +vertex_buffer: 0.838300 +vertex_buffer: -7.992000 +vertex_buffer: 2.845190 +vertex_buffer: -7.190347 +vertex_buffer: 0.180500 +vertex_buffer: 0.879500 +vertex_buffer: -7.453000 +vertex_buffer: 3.857556 +vertex_buffer: 2.386535 +vertex_buffer: 0.202500 +vertex_buffer: 0.227400 +vertex_buffer: -7.813000 +vertex_buffer: 3.863797 +vertex_buffer: 0.525859 +vertex_buffer: 0.213600 +vertex_buffer: 0.353600 +vertex_buffer: -7.660990 +vertex_buffer: 3.899231 +vertex_buffer: 0.543075 +vertex_buffer: 0.202100 +vertex_buffer: 0.350900 +vertex_buffer: -7.645000 +vertex_buffer: 3.370319 +vertex_buffer: 0.535608 +vertex_buffer: 0.166900 +vertex_buffer: 0.350800 +vertex_buffer: -7.638000 +vertex_buffer: 3.394282 +vertex_buffer: 0.536591 +vertex_buffer: 0.168800 +vertex_buffer: 0.350700 +vertex_buffer: -7.638000 +vertex_buffer: 3.459015 +vertex_buffer: 0.538135 +vertex_buffer: 0.173800 +vertex_buffer: 0.350600 +vertex_buffer: -7.650000 +vertex_buffer: 3.388224 +vertex_buffer: 2.349172 +vertex_buffer: 0.248100 +vertex_buffer: 0.233500 +vertex_buffer: -7.642000 +vertex_buffer: 3.362851 +vertex_buffer: 2.349142 +vertex_buffer: 0.250000 +vertex_buffer: 0.233600 +vertex_buffer: -7.650000 +vertex_buffer: 3.457405 +vertex_buffer: 2.350813 +vertex_buffer: 0.243100 +vertex_buffer: 0.233000 +vertex_buffer: -7.877000 +vertex_buffer: 3.866491 +vertex_buffer: -0.200468 +vertex_buffer: 0.211100 +vertex_buffer: 0.402000 +vertex_buffer: -7.732000 +vertex_buffer: 3.902024 +vertex_buffer: -0.186245 +vertex_buffer: 0.200200 +vertex_buffer: 0.399600 +vertex_buffer: -7.710000 +vertex_buffer: 3.397887 +vertex_buffer: -0.190762 +vertex_buffer: 0.167200 +vertex_buffer: 0.399500 +vertex_buffer: -7.716990 +vertex_buffer: 3.373675 +vertex_buffer: -0.192771 +vertex_buffer: 0.165200 +vertex_buffer: 0.399700 +vertex_buffer: -7.710000 +vertex_buffer: 3.460771 +vertex_buffer: -0.190223 +vertex_buffer: 0.172200 +vertex_buffer: 0.399500 +vertex_buffer: -7.949990 +vertex_buffer: 3.442044 +vertex_buffer: -1.802035 +vertex_buffer: 0.042300 +vertex_buffer: 0.531400 +vertex_buffer: -7.967000 +vertex_buffer: 3.449207 +vertex_buffer: -1.802729 +vertex_buffer: 0.041100 +vertex_buffer: 0.531500 +vertex_buffer: -7.850990 +vertex_buffer: 3.441902 +vertex_buffer: -1.797037 +vertex_buffer: 0.048900 +vertex_buffer: 0.531200 +vertex_buffer: -7.879990 +vertex_buffer: 3.379658 +vertex_buffer: -0.689881 +vertex_buffer: 0.049200 +vertex_buffer: 0.457400 +vertex_buffer: -7.770990 +vertex_buffer: 3.379373 +vertex_buffer: -0.680886 +vertex_buffer: 0.056500 +vertex_buffer: 0.457100 +vertex_buffer: -7.897000 +vertex_buffer: 3.387124 +vertex_buffer: -0.691567 +vertex_buffer: 0.047900 +vertex_buffer: 0.457400 +vertex_buffer: -7.740000 +vertex_buffer: 3.366214 +vertex_buffer: -0.195094 +vertex_buffer: 0.060500 +vertex_buffer: 0.425000 +vertex_buffer: -7.749000 +vertex_buffer: 3.386746 +vertex_buffer: -0.679570 +vertex_buffer: 0.058100 +vertex_buffer: 0.457100 +vertex_buffer: -7.716990 +vertex_buffer: 3.373675 +vertex_buffer: -0.192771 +vertex_buffer: 0.062200 +vertex_buffer: 0.425000 +vertex_buffer: -7.645000 +vertex_buffer: 3.370319 +vertex_buffer: 0.535608 +vertex_buffer: 0.071000 +vertex_buffer: 0.377100 +vertex_buffer: -7.667990 +vertex_buffer: 3.361828 +vertex_buffer: 0.533257 +vertex_buffer: 0.069300 +vertex_buffer: 0.377100 +vertex_buffer: -7.787990 +vertex_buffer: 3.362257 +vertex_buffer: 0.520264 +vertex_buffer: 0.061300 +vertex_buffer: 0.377200 +vertex_buffer: -7.853990 +vertex_buffer: 3.366539 +vertex_buffer: -0.205084 +vertex_buffer: 0.052900 +vertex_buffer: 0.425100 +vertex_buffer: -7.617990 +vertex_buffer: 3.353667 +vertex_buffer: 2.352724 +vertex_buffer: 0.086400 +vertex_buffer: 0.257100 +vertex_buffer: -7.484000 +vertex_buffer: 3.353064 +vertex_buffer: 2.370386 +vertex_buffer: 0.095400 +vertex_buffer: 0.256900 +vertex_buffer: -7.806990 +vertex_buffer: 3.370908 +vertex_buffer: 0.517625 +vertex_buffer: 0.059900 +vertex_buffer: 0.377200 +vertex_buffer: -7.872000 +vertex_buffer: 3.374127 +vertex_buffer: -0.206767 +vertex_buffer: 0.051600 +vertex_buffer: 0.425100 +vertex_buffer: -7.834000 +vertex_buffer: 3.449010 +vertex_buffer: -1.795735 +vertex_buffer: 0.050200 +vertex_buffer: 0.531200 +vertex_buffer: -7.352990 +vertex_buffer: 3.341964 +vertex_buffer: 4.875596 +vertex_buffer: 0.127900 +vertex_buffer: 0.090400 +vertex_buffer: -7.197000 +vertex_buffer: 3.342422 +vertex_buffer: 4.899300 +vertex_buffer: 0.138500 +vertex_buffer: 0.090000 +vertex_buffer: -7.350000 +vertex_buffer: 3.344753 +vertex_buffer: 4.918966 +vertex_buffer: 0.128500 +vertex_buffer: 0.087500 +vertex_buffer: -7.192990 +vertex_buffer: 3.345233 +vertex_buffer: 4.943666 +vertex_buffer: 0.139100 +vertex_buffer: 0.087100 +vertex_buffer: -7.192000 +vertex_buffer: 3.355385 +vertex_buffer: 4.963381 +vertex_buffer: 0.139400 +vertex_buffer: 0.085700 +vertex_buffer: -7.349000 +vertex_buffer: 3.354916 +vertex_buffer: 4.939652 +vertex_buffer: 0.128700 +vertex_buffer: 0.086000 +vertex_buffer: -7.372000 +vertex_buffer: 3.361561 +vertex_buffer: 4.930083 +vertex_buffer: 0.127000 +vertex_buffer: 0.086300 +vertex_buffer: -7.380990 +vertex_buffer: 3.353446 +vertex_buffer: 4.914453 +vertex_buffer: 0.126400 +vertex_buffer: 0.087500 +vertex_buffer: -7.384000 +vertex_buffer: 3.350628 +vertex_buffer: 4.870098 +vertex_buffer: 0.125700 +vertex_buffer: 0.090500 +vertex_buffer: -7.642000 +vertex_buffer: 3.362851 +vertex_buffer: 2.349142 +vertex_buffer: 0.084600 +vertex_buffer: 0.257100 +vertex_buffer: -7.460000 +vertex_buffer: 3.362018 +vertex_buffer: 2.373692 +vertex_buffer: 0.097100 +vertex_buffer: 0.256900 +vertex_buffer: -7.172990 +vertex_buffer: 3.351269 +vertex_buffer: 4.902964 +vertex_buffer: 0.140200 +vertex_buffer: 0.090000 +vertex_buffer: -7.170000 +vertex_buffer: 3.354093 +vertex_buffer: 4.947351 +vertex_buffer: 0.140700 +vertex_buffer: 0.087000 +vertex_buffer: -7.175000 +vertex_buffer: 3.362181 +vertex_buffer: 4.961208 +vertex_buffer: 0.140600 +vertex_buffer: 0.085800 +index_buffer: 0 +index_buffer: 1 +index_buffer: 2 +index_buffer: 0 +index_buffer: 2 +index_buffer: 3 +index_buffer: 0 +index_buffer: 3 +index_buffer: 4 +index_buffer: 5 +index_buffer: 6 +index_buffer: 7 +index_buffer: 5 +index_buffer: 7 +index_buffer: 8 +index_buffer: 5 +index_buffer: 8 +index_buffer: 9 +index_buffer: 10 +index_buffer: 11 +index_buffer: 12 +index_buffer: 10 +index_buffer: 12 +index_buffer: 13 +index_buffer: 14 +index_buffer: 15 +index_buffer: 12 +index_buffer: 14 +index_buffer: 12 +index_buffer: 11 +index_buffer: 16 +index_buffer: 17 +index_buffer: 11 +index_buffer: 16 +index_buffer: 11 +index_buffer: 10 +index_buffer: 17 +index_buffer: 16 +index_buffer: 18 +index_buffer: 17 +index_buffer: 18 +index_buffer: 19 +index_buffer: 19 +index_buffer: 20 +index_buffer: 21 +index_buffer: 19 +index_buffer: 21 +index_buffer: 17 +index_buffer: 22 +index_buffer: 23 +index_buffer: 19 +index_buffer: 22 +index_buffer: 19 +index_buffer: 18 +index_buffer: 22 +index_buffer: 24 +index_buffer: 25 +index_buffer: 22 +index_buffer: 25 +index_buffer: 23 +index_buffer: 25 +index_buffer: 26 +index_buffer: 27 +index_buffer: 25 +index_buffer: 27 +index_buffer: 23 +index_buffer: 28 +index_buffer: 25 +index_buffer: 24 +index_buffer: 28 +index_buffer: 24 +index_buffer: 29 +index_buffer: 30 +index_buffer: 31 +index_buffer: 28 +index_buffer: 30 +index_buffer: 28 +index_buffer: 29 +index_buffer: 32 +index_buffer: 33 +index_buffer: 28 +index_buffer: 32 +index_buffer: 28 +index_buffer: 31 +index_buffer: 34 +index_buffer: 31 +index_buffer: 30 +index_buffer: 34 +index_buffer: 30 +index_buffer: 35 +index_buffer: 36 +index_buffer: 37 +index_buffer: 38 +index_buffer: 36 +index_buffer: 38 +index_buffer: 39 +index_buffer: 39 +index_buffer: 38 +index_buffer: 40 +index_buffer: 39 +index_buffer: 40 +index_buffer: 41 +index_buffer: 42 +index_buffer: 43 +index_buffer: 1 +index_buffer: 42 +index_buffer: 1 +index_buffer: 0 +index_buffer: 43 +index_buffer: 44 +index_buffer: 45 +index_buffer: 43 +index_buffer: 45 +index_buffer: 1 +index_buffer: 45 +index_buffer: 44 +index_buffer: 46 +index_buffer: 45 +index_buffer: 46 +index_buffer: 47 +index_buffer: 48 +index_buffer: 47 +index_buffer: 46 +index_buffer: 48 +index_buffer: 46 +index_buffer: 49 +index_buffer: 50 +index_buffer: 51 +index_buffer: 52 +index_buffer: 50 +index_buffer: 52 +index_buffer: 53 +index_buffer: 51 +index_buffer: 54 +index_buffer: 55 +index_buffer: 51 +index_buffer: 55 +index_buffer: 52 +index_buffer: 54 +index_buffer: 56 +index_buffer: 57 +index_buffer: 54 +index_buffer: 57 +index_buffer: 55 +index_buffer: 57 +index_buffer: 56 +index_buffer: 58 +index_buffer: 57 +index_buffer: 58 +index_buffer: 59 +index_buffer: 59 +index_buffer: 58 +index_buffer: 60 +index_buffer: 59 +index_buffer: 60 +index_buffer: 61 +index_buffer: 61 +index_buffer: 60 +index_buffer: 62 +index_buffer: 61 +index_buffer: 62 +index_buffer: 63 +index_buffer: 63 +index_buffer: 62 +index_buffer: 64 +index_buffer: 63 +index_buffer: 64 +index_buffer: 65 +index_buffer: 65 +index_buffer: 64 +index_buffer: 66 +index_buffer: 65 +index_buffer: 66 +index_buffer: 67 +index_buffer: 34 +index_buffer: 35 +index_buffer: 68 +index_buffer: 34 +index_buffer: 68 +index_buffer: 69 +index_buffer: 70 +index_buffer: 71 +index_buffer: 34 +index_buffer: 70 +index_buffer: 34 +index_buffer: 69 +index_buffer: 69 +index_buffer: 68 +index_buffer: 72 +index_buffer: 69 +index_buffer: 72 +index_buffer: 73 +index_buffer: 74 +index_buffer: 75 +index_buffer: 76 +index_buffer: 74 +index_buffer: 76 +index_buffer: 77 +index_buffer: 78 +index_buffer: 79 +index_buffer: 80 +index_buffer: 78 +index_buffer: 80 +index_buffer: 81 +index_buffer: 82 +index_buffer: 83 +index_buffer: 84 +index_buffer: 82 +index_buffer: 84 +index_buffer: 85 +index_buffer: 85 +index_buffer: 84 +index_buffer: 86 +index_buffer: 85 +index_buffer: 86 +index_buffer: 87 +index_buffer: 84 +index_buffer: 88 +index_buffer: 89 +index_buffer: 84 +index_buffer: 89 +index_buffer: 86 +index_buffer: 83 +index_buffer: 90 +index_buffer: 88 +index_buffer: 83 +index_buffer: 88 +index_buffer: 84 +index_buffer: 91 +index_buffer: 92 +index_buffer: 93 +index_buffer: 91 +index_buffer: 93 +index_buffer: 94 +index_buffer: 92 +index_buffer: 95 +index_buffer: 96 +index_buffer: 92 +index_buffer: 96 +index_buffer: 93 +index_buffer: 92 +index_buffer: 97 +index_buffer: 98 +index_buffer: 92 +index_buffer: 98 +index_buffer: 95 +index_buffer: 99 +index_buffer: 97 +index_buffer: 92 +index_buffer: 99 +index_buffer: 92 +index_buffer: 91 +index_buffer: 100 +index_buffer: 101 +index_buffer: 102 +index_buffer: 100 +index_buffer: 102 +index_buffer: 103 +index_buffer: 100 +index_buffer: 104 +index_buffer: 105 +index_buffer: 100 +index_buffer: 105 +index_buffer: 101 +index_buffer: 106 +index_buffer: 104 +index_buffer: 100 +index_buffer: 106 +index_buffer: 100 +index_buffer: 107 +index_buffer: 108 +index_buffer: 107 +index_buffer: 100 +index_buffer: 108 +index_buffer: 100 +index_buffer: 103 +index_buffer: 109 +index_buffer: 107 +index_buffer: 108 +index_buffer: 109 +index_buffer: 108 +index_buffer: 110 +index_buffer: 109 +index_buffer: 111 +index_buffer: 106 +index_buffer: 109 +index_buffer: 106 +index_buffer: 107 +index_buffer: 112 +index_buffer: 111 +index_buffer: 109 +index_buffer: 112 +index_buffer: 109 +index_buffer: 113 +index_buffer: 113 +index_buffer: 109 +index_buffer: 110 +index_buffer: 113 +index_buffer: 110 +index_buffer: 114 +index_buffer: 115 +index_buffer: 113 +index_buffer: 114 +index_buffer: 115 +index_buffer: 114 +index_buffer: 116 +index_buffer: 117 +index_buffer: 112 +index_buffer: 113 +index_buffer: 117 +index_buffer: 113 +index_buffer: 115 +index_buffer: 118 +index_buffer: 117 +index_buffer: 115 +index_buffer: 118 +index_buffer: 115 +index_buffer: 119 +index_buffer: 119 +index_buffer: 115 +index_buffer: 116 +index_buffer: 119 +index_buffer: 116 +index_buffer: 120 +index_buffer: 121 +index_buffer: 122 +index_buffer: 119 +index_buffer: 121 +index_buffer: 119 +index_buffer: 120 +index_buffer: 123 +index_buffer: 118 +index_buffer: 119 +index_buffer: 123 +index_buffer: 119 +index_buffer: 122 +index_buffer: 124 +index_buffer: 123 +index_buffer: 122 +index_buffer: 124 +index_buffer: 122 +index_buffer: 125 +index_buffer: 125 +index_buffer: 122 +index_buffer: 121 +index_buffer: 125 +index_buffer: 121 +index_buffer: 126 +index_buffer: 127 +index_buffer: 128 +index_buffer: 129 +index_buffer: 127 +index_buffer: 129 +index_buffer: 130 +index_buffer: 131 +index_buffer: 36 +index_buffer: 130 +index_buffer: 131 +index_buffer: 130 +index_buffer: 129 +index_buffer: 132 +index_buffer: 133 +index_buffer: 131 +index_buffer: 132 +index_buffer: 131 +index_buffer: 129 +index_buffer: 132 +index_buffer: 129 +index_buffer: 128 +index_buffer: 132 +index_buffer: 128 +index_buffer: 134 +index_buffer: 135 +index_buffer: 136 +index_buffer: 132 +index_buffer: 135 +index_buffer: 132 +index_buffer: 134 +index_buffer: 136 +index_buffer: 137 +index_buffer: 133 +index_buffer: 136 +index_buffer: 133 +index_buffer: 132 +index_buffer: 137 +index_buffer: 136 +index_buffer: 138 +index_buffer: 137 +index_buffer: 138 +index_buffer: 139 +index_buffer: 140 +index_buffer: 138 +index_buffer: 136 +index_buffer: 140 +index_buffer: 136 +index_buffer: 135 +index_buffer: 141 +index_buffer: 142 +index_buffer: 138 +index_buffer: 141 +index_buffer: 138 +index_buffer: 140 +index_buffer: 139 +index_buffer: 138 +index_buffer: 142 +index_buffer: 139 +index_buffer: 142 +index_buffer: 143 +index_buffer: 144 +index_buffer: 143 +index_buffer: 142 +index_buffer: 144 +index_buffer: 142 +index_buffer: 145 +index_buffer: 141 +index_buffer: 146 +index_buffer: 145 +index_buffer: 141 +index_buffer: 145 +index_buffer: 142 +index_buffer: 147 +index_buffer: 145 +index_buffer: 146 +index_buffer: 147 +index_buffer: 146 +index_buffer: 148 +index_buffer: 147 +index_buffer: 149 +index_buffer: 144 +index_buffer: 147 +index_buffer: 144 +index_buffer: 145 +index_buffer: 150 +index_buffer: 149 +index_buffer: 147 +index_buffer: 150 +index_buffer: 147 +index_buffer: 151 +index_buffer: 151 +index_buffer: 147 +index_buffer: 148 +index_buffer: 151 +index_buffer: 148 +index_buffer: 152 +index_buffer: 153 +index_buffer: 154 +index_buffer: 155 +index_buffer: 153 +index_buffer: 155 +index_buffer: 15 +index_buffer: 15 +index_buffer: 155 +index_buffer: 156 +index_buffer: 15 +index_buffer: 156 +index_buffer: 12 +index_buffer: 154 +index_buffer: 157 +index_buffer: 158 +index_buffer: 154 +index_buffer: 158 +index_buffer: 155 +index_buffer: 159 +index_buffer: 160 +index_buffer: 161 +index_buffer: 159 +index_buffer: 161 +index_buffer: 162 +index_buffer: 163 +index_buffer: 164 +index_buffer: 160 +index_buffer: 163 +index_buffer: 160 +index_buffer: 159 +index_buffer: 165 +index_buffer: 159 +index_buffer: 162 +index_buffer: 165 +index_buffer: 162 +index_buffer: 4 +index_buffer: 166 +index_buffer: 151 +index_buffer: 152 +index_buffer: 166 +index_buffer: 152 +index_buffer: 167 +index_buffer: 168 +index_buffer: 150 +index_buffer: 151 +index_buffer: 168 +index_buffer: 151 +index_buffer: 166 +index_buffer: 168 +index_buffer: 166 +index_buffer: 169 +index_buffer: 168 +index_buffer: 169 +index_buffer: 170 +index_buffer: 166 +index_buffer: 167 +index_buffer: 171 +index_buffer: 166 +index_buffer: 171 +index_buffer: 169 +index_buffer: 172 +index_buffer: 173 +index_buffer: 174 +index_buffer: 172 +index_buffer: 174 +index_buffer: 175 +index_buffer: 176 +index_buffer: 177 +index_buffer: 174 +index_buffer: 176 +index_buffer: 174 +index_buffer: 173 +index_buffer: 178 +index_buffer: 179 +index_buffer: 180 +index_buffer: 178 +index_buffer: 180 +index_buffer: 181 +index_buffer: 181 +index_buffer: 182 +index_buffer: 183 +index_buffer: 181 +index_buffer: 183 +index_buffer: 178 +index_buffer: 181 +index_buffer: 10 +index_buffer: 13 +index_buffer: 181 +index_buffer: 13 +index_buffer: 182 +index_buffer: 16 +index_buffer: 10 +index_buffer: 181 +index_buffer: 16 +index_buffer: 181 +index_buffer: 180 +index_buffer: 183 +index_buffer: 182 +index_buffer: 184 +index_buffer: 183 +index_buffer: 184 +index_buffer: 185 +index_buffer: 186 +index_buffer: 185 +index_buffer: 184 +index_buffer: 186 +index_buffer: 184 +index_buffer: 187 +index_buffer: 188 +index_buffer: 189 +index_buffer: 187 +index_buffer: 188 +index_buffer: 187 +index_buffer: 184 +index_buffer: 13 +index_buffer: 188 +index_buffer: 184 +index_buffer: 13 +index_buffer: 184 +index_buffer: 182 +index_buffer: 190 +index_buffer: 191 +index_buffer: 192 +index_buffer: 190 +index_buffer: 192 +index_buffer: 193 +index_buffer: 193 +index_buffer: 194 +index_buffer: 195 +index_buffer: 193 +index_buffer: 195 +index_buffer: 190 +index_buffer: 196 +index_buffer: 194 +index_buffer: 193 +index_buffer: 196 +index_buffer: 193 +index_buffer: 197 +index_buffer: 193 +index_buffer: 192 +index_buffer: 198 +index_buffer: 193 +index_buffer: 198 +index_buffer: 197 +index_buffer: 199 +index_buffer: 200 +index_buffer: 201 +index_buffer: 199 +index_buffer: 201 +index_buffer: 202 +index_buffer: 203 +index_buffer: 201 +index_buffer: 200 +index_buffer: 203 +index_buffer: 200 +index_buffer: 204 +index_buffer: 205 +index_buffer: 200 +index_buffer: 199 +index_buffer: 205 +index_buffer: 199 +index_buffer: 206 +index_buffer: 207 +index_buffer: 208 +index_buffer: 209 +index_buffer: 207 +index_buffer: 209 +index_buffer: 210 +index_buffer: 209 +index_buffer: 211 +index_buffer: 212 +index_buffer: 209 +index_buffer: 212 +index_buffer: 210 +index_buffer: 213 +index_buffer: 214 +index_buffer: 215 +index_buffer: 213 +index_buffer: 215 +index_buffer: 216 +index_buffer: 215 +index_buffer: 214 +index_buffer: 217 +index_buffer: 215 +index_buffer: 217 +index_buffer: 218 +index_buffer: 214 +index_buffer: 219 +index_buffer: 220 +index_buffer: 214 +index_buffer: 220 +index_buffer: 217 +index_buffer: 213 +index_buffer: 221 +index_buffer: 219 +index_buffer: 213 +index_buffer: 219 +index_buffer: 214 +index_buffer: 222 +index_buffer: 223 +index_buffer: 224 +index_buffer: 222 +index_buffer: 224 +index_buffer: 225 +index_buffer: 224 +index_buffer: 223 +index_buffer: 226 +index_buffer: 224 +index_buffer: 226 +index_buffer: 227 +index_buffer: 228 +index_buffer: 229 +index_buffer: 230 +index_buffer: 228 +index_buffer: 230 +index_buffer: 231 +index_buffer: 231 +index_buffer: 230 +index_buffer: 232 +index_buffer: 231 +index_buffer: 232 +index_buffer: 233 +index_buffer: 234 +index_buffer: 235 +index_buffer: 236 +index_buffer: 234 +index_buffer: 236 +index_buffer: 237 +index_buffer: 236 +index_buffer: 235 +index_buffer: 229 +index_buffer: 236 +index_buffer: 229 +index_buffer: 228 +index_buffer: 238 +index_buffer: 239 +index_buffer: 240 +index_buffer: 238 +index_buffer: 240 +index_buffer: 241 +index_buffer: 237 +index_buffer: 240 +index_buffer: 239 +index_buffer: 237 +index_buffer: 239 +index_buffer: 234 +index_buffer: 242 +index_buffer: 243 +index_buffer: 244 +index_buffer: 242 +index_buffer: 244 +index_buffer: 245 +index_buffer: 244 +index_buffer: 238 +index_buffer: 241 +index_buffer: 244 +index_buffer: 241 +index_buffer: 245 +index_buffer: 246 +index_buffer: 247 +index_buffer: 248 +index_buffer: 246 +index_buffer: 248 +index_buffer: 249 +index_buffer: 248 +index_buffer: 247 +index_buffer: 243 +index_buffer: 248 +index_buffer: 243 +index_buffer: 242 +index_buffer: 250 +index_buffer: 251 +index_buffer: 252 +index_buffer: 250 +index_buffer: 252 +index_buffer: 253 +index_buffer: 251 +index_buffer: 246 +index_buffer: 249 +index_buffer: 251 +index_buffer: 249 +index_buffer: 252 +index_buffer: 254 +index_buffer: 255 +index_buffer: 256 +index_buffer: 254 +index_buffer: 256 +index_buffer: 257 +index_buffer: 256 +index_buffer: 255 +index_buffer: 250 +index_buffer: 256 +index_buffer: 250 +index_buffer: 253 +index_buffer: 258 +index_buffer: 259 +index_buffer: 260 +index_buffer: 258 +index_buffer: 260 +index_buffer: 261 +index_buffer: 258 +index_buffer: 254 +index_buffer: 257 +index_buffer: 258 +index_buffer: 257 +index_buffer: 259 +index_buffer: 262 +index_buffer: 263 +index_buffer: 264 +index_buffer: 262 +index_buffer: 264 +index_buffer: 265 +index_buffer: 261 +index_buffer: 260 +index_buffer: 263 +index_buffer: 261 +index_buffer: 263 +index_buffer: 262 +index_buffer: 266 +index_buffer: 267 +index_buffer: 268 +index_buffer: 266 +index_buffer: 268 +index_buffer: 269 +index_buffer: 269 +index_buffer: 268 +index_buffer: 270 +index_buffer: 269 +index_buffer: 270 +index_buffer: 271 +index_buffer: 272 +index_buffer: 273 +index_buffer: 274 +index_buffer: 272 +index_buffer: 274 +index_buffer: 275 +index_buffer: 276 +index_buffer: 277 +index_buffer: 272 +index_buffer: 276 +index_buffer: 272 +index_buffer: 275 +index_buffer: 278 +index_buffer: 279 +index_buffer: 280 +index_buffer: 278 +index_buffer: 280 +index_buffer: 281 +index_buffer: 282 +index_buffer: 279 +index_buffer: 278 +index_buffer: 282 +index_buffer: 278 +index_buffer: 283 +index_buffer: 284 +index_buffer: 285 +index_buffer: 286 +index_buffer: 284 +index_buffer: 286 +index_buffer: 287 +index_buffer: 285 +index_buffer: 288 +index_buffer: 289 +index_buffer: 285 +index_buffer: 289 +index_buffer: 286 +index_buffer: 285 +index_buffer: 30 +index_buffer: 29 +index_buffer: 285 +index_buffer: 29 +index_buffer: 288 +index_buffer: 30 +index_buffer: 285 +index_buffer: 284 +index_buffer: 30 +index_buffer: 284 +index_buffer: 35 +index_buffer: 288 +index_buffer: 290 +index_buffer: 291 +index_buffer: 288 +index_buffer: 291 +index_buffer: 289 +index_buffer: 292 +index_buffer: 293 +index_buffer: 291 +index_buffer: 292 +index_buffer: 291 +index_buffer: 290 +index_buffer: 22 +index_buffer: 292 +index_buffer: 290 +index_buffer: 22 +index_buffer: 290 +index_buffer: 24 +index_buffer: 24 +index_buffer: 290 +index_buffer: 288 +index_buffer: 24 +index_buffer: 288 +index_buffer: 29 +index_buffer: 294 +index_buffer: 293 +index_buffer: 292 +index_buffer: 294 +index_buffer: 292 +index_buffer: 295 +index_buffer: 180 +index_buffer: 179 +index_buffer: 294 +index_buffer: 180 +index_buffer: 294 +index_buffer: 295 +index_buffer: 16 +index_buffer: 180 +index_buffer: 295 +index_buffer: 16 +index_buffer: 295 +index_buffer: 18 +index_buffer: 295 +index_buffer: 292 +index_buffer: 22 +index_buffer: 295 +index_buffer: 22 +index_buffer: 18 +index_buffer: 296 +index_buffer: 297 +index_buffer: 298 +index_buffer: 296 +index_buffer: 298 +index_buffer: 299 +index_buffer: 300 +index_buffer: 297 +index_buffer: 296 +index_buffer: 300 +index_buffer: 296 +index_buffer: 301 +index_buffer: 302 +index_buffer: 303 +index_buffer: 300 +index_buffer: 302 +index_buffer: 300 +index_buffer: 301 +index_buffer: 304 +index_buffer: 305 +index_buffer: 303 +index_buffer: 304 +index_buffer: 303 +index_buffer: 302 +index_buffer: 306 +index_buffer: 307 +index_buffer: 305 +index_buffer: 306 +index_buffer: 305 +index_buffer: 304 +index_buffer: 308 +index_buffer: 307 +index_buffer: 306 +index_buffer: 308 +index_buffer: 306 +index_buffer: 309 +index_buffer: 310 +index_buffer: 308 +index_buffer: 309 +index_buffer: 310 +index_buffer: 309 +index_buffer: 311 +index_buffer: 312 +index_buffer: 310 +index_buffer: 311 +index_buffer: 312 +index_buffer: 311 +index_buffer: 313 +index_buffer: 314 +index_buffer: 312 +index_buffer: 313 +index_buffer: 314 +index_buffer: 313 +index_buffer: 315 +index_buffer: 316 +index_buffer: 314 +index_buffer: 315 +index_buffer: 316 +index_buffer: 315 +index_buffer: 317 +index_buffer: 318 +index_buffer: 319 +index_buffer: 316 +index_buffer: 318 +index_buffer: 316 +index_buffer: 317 +index_buffer: 320 +index_buffer: 321 +index_buffer: 319 +index_buffer: 320 +index_buffer: 319 +index_buffer: 318 +index_buffer: 322 +index_buffer: 323 +index_buffer: 321 +index_buffer: 322 +index_buffer: 321 +index_buffer: 320 +index_buffer: 324 +index_buffer: 325 +index_buffer: 323 +index_buffer: 324 +index_buffer: 323 +index_buffer: 322 +index_buffer: 326 +index_buffer: 327 +index_buffer: 328 +index_buffer: 326 +index_buffer: 328 +index_buffer: 329 +index_buffer: 330 +index_buffer: 331 +index_buffer: 326 +index_buffer: 330 +index_buffer: 326 +index_buffer: 329 +index_buffer: 332 +index_buffer: 333 +index_buffer: 334 +index_buffer: 332 +index_buffer: 334 +index_buffer: 335 +index_buffer: 336 +index_buffer: 333 +index_buffer: 332 +index_buffer: 336 +index_buffer: 332 +index_buffer: 337 +index_buffer: 338 +index_buffer: 339 +index_buffer: 336 +index_buffer: 338 +index_buffer: 336 +index_buffer: 337 +index_buffer: 340 +index_buffer: 339 +index_buffer: 338 +index_buffer: 340 +index_buffer: 338 +index_buffer: 341 +index_buffer: 342 +index_buffer: 343 +index_buffer: 340 +index_buffer: 342 +index_buffer: 340 +index_buffer: 341 +index_buffer: 344 +index_buffer: 343 +index_buffer: 342 +index_buffer: 344 +index_buffer: 342 +index_buffer: 345 +index_buffer: 346 +index_buffer: 347 +index_buffer: 344 +index_buffer: 346 +index_buffer: 344 +index_buffer: 345 +index_buffer: 348 +index_buffer: 347 +index_buffer: 346 +index_buffer: 348 +index_buffer: 346 +index_buffer: 349 +index_buffer: 350 +index_buffer: 351 +index_buffer: 348 +index_buffer: 350 +index_buffer: 348 +index_buffer: 349 +index_buffer: 352 +index_buffer: 351 +index_buffer: 350 +index_buffer: 352 +index_buffer: 350 +index_buffer: 353 +index_buffer: 354 +index_buffer: 355 +index_buffer: 352 +index_buffer: 354 +index_buffer: 352 +index_buffer: 353 +index_buffer: 356 +index_buffer: 357 +index_buffer: 355 +index_buffer: 356 +index_buffer: 355 +index_buffer: 354 +index_buffer: 358 +index_buffer: 357 +index_buffer: 356 +index_buffer: 358 +index_buffer: 356 +index_buffer: 359 +index_buffer: 360 +index_buffer: 361 +index_buffer: 358 +index_buffer: 360 +index_buffer: 358 +index_buffer: 359 +index_buffer: 362 +index_buffer: 361 +index_buffer: 360 +index_buffer: 362 +index_buffer: 360 +index_buffer: 363 +index_buffer: 364 +index_buffer: 362 +index_buffer: 363 +index_buffer: 364 +index_buffer: 363 +index_buffer: 365 +index_buffer: 366 +index_buffer: 364 +index_buffer: 365 +index_buffer: 366 +index_buffer: 365 +index_buffer: 367 +index_buffer: 368 +index_buffer: 366 +index_buffer: 367 +index_buffer: 368 +index_buffer: 367 +index_buffer: 369 +index_buffer: 370 +index_buffer: 371 +index_buffer: 372 +index_buffer: 370 +index_buffer: 372 +index_buffer: 373 +index_buffer: 374 +index_buffer: 371 +index_buffer: 370 +index_buffer: 374 +index_buffer: 370 +index_buffer: 375 +index_buffer: 376 +index_buffer: 377 +index_buffer: 374 +index_buffer: 376 +index_buffer: 374 +index_buffer: 375 +index_buffer: 378 +index_buffer: 379 +index_buffer: 377 +index_buffer: 378 +index_buffer: 377 +index_buffer: 376 +index_buffer: 130 +index_buffer: 36 +index_buffer: 39 +index_buffer: 130 +index_buffer: 39 +index_buffer: 380 +index_buffer: 130 +index_buffer: 380 +index_buffer: 381 +index_buffer: 130 +index_buffer: 381 +index_buffer: 127 +index_buffer: 382 +index_buffer: 383 +index_buffer: 381 +index_buffer: 382 +index_buffer: 381 +index_buffer: 380 +index_buffer: 380 +index_buffer: 39 +index_buffer: 41 +index_buffer: 380 +index_buffer: 41 +index_buffer: 382 +index_buffer: 384 +index_buffer: 385 +index_buffer: 75 +index_buffer: 384 +index_buffer: 75 +index_buffer: 74 +index_buffer: 386 +index_buffer: 385 +index_buffer: 384 +index_buffer: 386 +index_buffer: 384 +index_buffer: 387 +index_buffer: 131 +index_buffer: 388 +index_buffer: 37 +index_buffer: 131 +index_buffer: 37 +index_buffer: 36 +index_buffer: 133 +index_buffer: 389 +index_buffer: 388 +index_buffer: 133 +index_buffer: 388 +index_buffer: 131 +index_buffer: 137 +index_buffer: 390 +index_buffer: 389 +index_buffer: 137 +index_buffer: 389 +index_buffer: 133 +index_buffer: 391 +index_buffer: 390 +index_buffer: 137 +index_buffer: 391 +index_buffer: 137 +index_buffer: 139 +index_buffer: 392 +index_buffer: 391 +index_buffer: 139 +index_buffer: 392 +index_buffer: 139 +index_buffer: 143 +index_buffer: 393 +index_buffer: 392 +index_buffer: 143 +index_buffer: 393 +index_buffer: 143 +index_buffer: 144 +index_buffer: 394 +index_buffer: 393 +index_buffer: 144 +index_buffer: 394 +index_buffer: 144 +index_buffer: 149 +index_buffer: 395 +index_buffer: 394 +index_buffer: 149 +index_buffer: 395 +index_buffer: 149 +index_buffer: 150 +index_buffer: 396 +index_buffer: 395 +index_buffer: 150 +index_buffer: 396 +index_buffer: 150 +index_buffer: 168 +index_buffer: 396 +index_buffer: 168 +index_buffer: 170 +index_buffer: 396 +index_buffer: 170 +index_buffer: 397 +index_buffer: 398 +index_buffer: 399 +index_buffer: 207 +index_buffer: 398 +index_buffer: 207 +index_buffer: 210 +index_buffer: 398 +index_buffer: 210 +index_buffer: 212 +index_buffer: 398 +index_buffer: 212 +index_buffer: 400 +index_buffer: 401 +index_buffer: 402 +index_buffer: 403 +index_buffer: 403 +index_buffer: 402 +index_buffer: 404 +index_buffer: 403 +index_buffer: 404 +index_buffer: 405 +index_buffer: 406 +index_buffer: 407 +index_buffer: 408 +index_buffer: 409 +index_buffer: 410 +index_buffer: 411 +index_buffer: 409 +index_buffer: 411 +index_buffer: 412 +index_buffer: 412 +index_buffer: 411 +index_buffer: 413 +index_buffer: 412 +index_buffer: 413 +index_buffer: 414 +index_buffer: 410 +index_buffer: 415 +index_buffer: 416 +index_buffer: 410 +index_buffer: 416 +index_buffer: 411 +index_buffer: 417 +index_buffer: 410 +index_buffer: 409 +index_buffer: 417 +index_buffer: 409 +index_buffer: 418 +index_buffer: 417 +index_buffer: 419 +index_buffer: 415 +index_buffer: 417 +index_buffer: 415 +index_buffer: 410 +index_buffer: 420 +index_buffer: 421 +index_buffer: 422 +index_buffer: 420 +index_buffer: 422 +index_buffer: 423 +index_buffer: 423 +index_buffer: 424 +index_buffer: 425 +index_buffer: 423 +index_buffer: 425 +index_buffer: 420 +index_buffer: 423 +index_buffer: 426 +index_buffer: 427 +index_buffer: 423 +index_buffer: 427 +index_buffer: 424 +index_buffer: 426 +index_buffer: 423 +index_buffer: 422 +index_buffer: 426 +index_buffer: 422 +index_buffer: 428 +index_buffer: 429 +index_buffer: 430 +index_buffer: 431 +index_buffer: 429 +index_buffer: 431 +index_buffer: 432 +index_buffer: 432 +index_buffer: 422 +index_buffer: 421 +index_buffer: 432 +index_buffer: 421 +index_buffer: 429 +index_buffer: 432 +index_buffer: 433 +index_buffer: 428 +index_buffer: 432 +index_buffer: 428 +index_buffer: 422 +index_buffer: 431 +index_buffer: 434 +index_buffer: 433 +index_buffer: 431 +index_buffer: 433 +index_buffer: 432 +index_buffer: 435 +index_buffer: 436 +index_buffer: 437 +index_buffer: 435 +index_buffer: 437 +index_buffer: 438 +index_buffer: 438 +index_buffer: 431 +index_buffer: 430 +index_buffer: 438 +index_buffer: 430 +index_buffer: 435 +index_buffer: 438 +index_buffer: 439 +index_buffer: 434 +index_buffer: 438 +index_buffer: 434 +index_buffer: 431 +index_buffer: 437 +index_buffer: 440 +index_buffer: 439 +index_buffer: 437 +index_buffer: 439 +index_buffer: 438 +index_buffer: 441 +index_buffer: 442 +index_buffer: 443 +index_buffer: 441 +index_buffer: 443 +index_buffer: 444 +index_buffer: 437 +index_buffer: 436 +index_buffer: 442 +index_buffer: 437 +index_buffer: 442 +index_buffer: 441 +index_buffer: 441 +index_buffer: 445 +index_buffer: 440 +index_buffer: 441 +index_buffer: 440 +index_buffer: 437 +index_buffer: 441 +index_buffer: 444 +index_buffer: 446 +index_buffer: 441 +index_buffer: 446 +index_buffer: 445 +index_buffer: 447 +index_buffer: 126 +index_buffer: 448 +index_buffer: 447 +index_buffer: 448 +index_buffer: 449 +index_buffer: 444 +index_buffer: 443 +index_buffer: 447 +index_buffer: 444 +index_buffer: 447 +index_buffer: 449 +index_buffer: 449 +index_buffer: 450 +index_buffer: 446 +index_buffer: 449 +index_buffer: 446 +index_buffer: 444 +index_buffer: 451 +index_buffer: 450 +index_buffer: 449 +index_buffer: 451 +index_buffer: 449 +index_buffer: 448 +index_buffer: 452 +index_buffer: 121 +index_buffer: 120 +index_buffer: 452 +index_buffer: 120 +index_buffer: 453 +index_buffer: 452 +index_buffer: 448 +index_buffer: 126 +index_buffer: 452 +index_buffer: 126 +index_buffer: 121 +index_buffer: 448 +index_buffer: 452 +index_buffer: 454 +index_buffer: 448 +index_buffer: 454 +index_buffer: 451 +index_buffer: 453 +index_buffer: 455 +index_buffer: 454 +index_buffer: 453 +index_buffer: 454 +index_buffer: 452 +index_buffer: 456 +index_buffer: 457 +index_buffer: 116 +index_buffer: 456 +index_buffer: 116 +index_buffer: 114 +index_buffer: 120 +index_buffer: 116 +index_buffer: 457 +index_buffer: 120 +index_buffer: 457 +index_buffer: 453 +index_buffer: 458 +index_buffer: 455 +index_buffer: 453 +index_buffer: 458 +index_buffer: 453 +index_buffer: 457 +index_buffer: 457 +index_buffer: 456 +index_buffer: 459 +index_buffer: 457 +index_buffer: 459 +index_buffer: 458 +index_buffer: 110 +index_buffer: 108 +index_buffer: 460 +index_buffer: 110 +index_buffer: 460 +index_buffer: 461 +index_buffer: 456 +index_buffer: 114 +index_buffer: 110 +index_buffer: 456 +index_buffer: 110 +index_buffer: 461 +index_buffer: 461 +index_buffer: 462 +index_buffer: 459 +index_buffer: 461 +index_buffer: 459 +index_buffer: 456 +index_buffer: 463 +index_buffer: 462 +index_buffer: 461 +index_buffer: 463 +index_buffer: 461 +index_buffer: 460 +index_buffer: 464 +index_buffer: 103 +index_buffer: 102 +index_buffer: 464 +index_buffer: 102 +index_buffer: 465 +index_buffer: 460 +index_buffer: 108 +index_buffer: 103 +index_buffer: 460 +index_buffer: 103 +index_buffer: 464 +index_buffer: 466 +index_buffer: 463 +index_buffer: 460 +index_buffer: 466 +index_buffer: 460 +index_buffer: 464 +index_buffer: 466 +index_buffer: 464 +index_buffer: 465 +index_buffer: 466 +index_buffer: 465 +index_buffer: 467 +index_buffer: 94 +index_buffer: 468 +index_buffer: 469 +index_buffer: 94 +index_buffer: 469 +index_buffer: 91 +index_buffer: 91 +index_buffer: 469 +index_buffer: 470 +index_buffer: 91 +index_buffer: 470 +index_buffer: 99 +index_buffer: 471 +index_buffer: 472 +index_buffer: 470 +index_buffer: 471 +index_buffer: 470 +index_buffer: 469 +index_buffer: 468 +index_buffer: 473 +index_buffer: 471 +index_buffer: 468 +index_buffer: 471 +index_buffer: 469 +index_buffer: 474 +index_buffer: 475 +index_buffer: 83 +index_buffer: 474 +index_buffer: 83 +index_buffer: 82 +index_buffer: 475 +index_buffer: 476 +index_buffer: 90 +index_buffer: 475 +index_buffer: 90 +index_buffer: 83 +index_buffer: 475 +index_buffer: 477 +index_buffer: 478 +index_buffer: 475 +index_buffer: 478 +index_buffer: 476 +index_buffer: 479 +index_buffer: 477 +index_buffer: 475 +index_buffer: 479 +index_buffer: 475 +index_buffer: 474 +index_buffer: 480 +index_buffer: 481 +index_buffer: 482 +index_buffer: 480 +index_buffer: 482 +index_buffer: 483 +index_buffer: 481 +index_buffer: 480 +index_buffer: 484 +index_buffer: 481 +index_buffer: 484 +index_buffer: 485 +index_buffer: 486 +index_buffer: 487 +index_buffer: 488 +index_buffer: 486 +index_buffer: 488 +index_buffer: 489 +index_buffer: 490 +index_buffer: 491 +index_buffer: 492 +index_buffer: 490 +index_buffer: 492 +index_buffer: 493 +index_buffer: 494 +index_buffer: 495 +index_buffer: 496 +index_buffer: 494 +index_buffer: 496 +index_buffer: 497 +index_buffer: 498 +index_buffer: 499 +index_buffer: 495 +index_buffer: 498 +index_buffer: 495 +index_buffer: 494 +index_buffer: 500 +index_buffer: 501 +index_buffer: 499 +index_buffer: 500 +index_buffer: 499 +index_buffer: 498 +index_buffer: 502 +index_buffer: 503 +index_buffer: 501 +index_buffer: 502 +index_buffer: 501 +index_buffer: 500 +index_buffer: 504 +index_buffer: 505 +index_buffer: 503 +index_buffer: 504 +index_buffer: 503 +index_buffer: 502 +index_buffer: 506 +index_buffer: 507 +index_buffer: 505 +index_buffer: 506 +index_buffer: 505 +index_buffer: 504 +index_buffer: 508 +index_buffer: 509 +index_buffer: 507 +index_buffer: 508 +index_buffer: 507 +index_buffer: 506 +index_buffer: 510 +index_buffer: 509 +index_buffer: 508 +index_buffer: 510 +index_buffer: 508 +index_buffer: 511 +index_buffer: 512 +index_buffer: 513 +index_buffer: 510 +index_buffer: 512 +index_buffer: 510 +index_buffer: 511 +index_buffer: 514 +index_buffer: 513 +index_buffer: 512 +index_buffer: 514 +index_buffer: 512 +index_buffer: 515 +index_buffer: 516 +index_buffer: 517 +index_buffer: 518 +index_buffer: 516 +index_buffer: 518 +index_buffer: 519 +index_buffer: 520 +index_buffer: 521 +index_buffer: 516 +index_buffer: 520 +index_buffer: 516 +index_buffer: 519 +index_buffer: 522 +index_buffer: 523 +index_buffer: 524 +index_buffer: 522 +index_buffer: 524 +index_buffer: 525 +index_buffer: 525 +index_buffer: 524 +index_buffer: 526 +index_buffer: 525 +index_buffer: 526 +index_buffer: 527 +index_buffer: 524 +index_buffer: 528 +index_buffer: 529 +index_buffer: 524 +index_buffer: 529 +index_buffer: 526 +index_buffer: 523 +index_buffer: 530 +index_buffer: 528 +index_buffer: 523 +index_buffer: 528 +index_buffer: 524 +index_buffer: 45 +index_buffer: 531 +index_buffer: 2 +index_buffer: 45 +index_buffer: 2 +index_buffer: 1 +index_buffer: 532 +index_buffer: 531 +index_buffer: 45 +index_buffer: 532 +index_buffer: 45 +index_buffer: 47 +index_buffer: 48 +index_buffer: 533 +index_buffer: 532 +index_buffer: 48 +index_buffer: 532 +index_buffer: 47 +index_buffer: 534 +index_buffer: 53 +index_buffer: 52 +index_buffer: 534 +index_buffer: 52 +index_buffer: 535 +index_buffer: 535 +index_buffer: 52 +index_buffer: 55 +index_buffer: 535 +index_buffer: 55 +index_buffer: 536 +index_buffer: 536 +index_buffer: 55 +index_buffer: 57 +index_buffer: 536 +index_buffer: 57 +index_buffer: 537 +index_buffer: 537 +index_buffer: 57 +index_buffer: 59 +index_buffer: 537 +index_buffer: 59 +index_buffer: 538 +index_buffer: 538 +index_buffer: 59 +index_buffer: 61 +index_buffer: 538 +index_buffer: 61 +index_buffer: 539 +index_buffer: 61 +index_buffer: 63 +index_buffer: 540 +index_buffer: 61 +index_buffer: 540 +index_buffer: 539 +index_buffer: 63 +index_buffer: 65 +index_buffer: 541 +index_buffer: 63 +index_buffer: 541 +index_buffer: 540 +index_buffer: 65 +index_buffer: 67 +index_buffer: 124 +index_buffer: 65 +index_buffer: 124 +index_buffer: 541 +index_buffer: 542 +index_buffer: 543 +index_buffer: 544 +index_buffer: 542 +index_buffer: 544 +index_buffer: 397 +index_buffer: 545 +index_buffer: 543 +index_buffer: 542 +index_buffer: 545 +index_buffer: 542 +index_buffer: 546 +index_buffer: 547 +index_buffer: 545 +index_buffer: 546 +index_buffer: 547 +index_buffer: 546 +index_buffer: 548 +index_buffer: 549 +index_buffer: 547 +index_buffer: 548 +index_buffer: 549 +index_buffer: 548 +index_buffer: 550 +index_buffer: 551 +index_buffer: 552 +index_buffer: 553 +index_buffer: 551 +index_buffer: 553 +index_buffer: 554 +index_buffer: 555 +index_buffer: 556 +index_buffer: 552 +index_buffer: 555 +index_buffer: 552 +index_buffer: 551 +index_buffer: 557 +index_buffer: 558 +index_buffer: 559 +index_buffer: 557 +index_buffer: 559 +index_buffer: 560 +index_buffer: 561 +index_buffer: 557 +index_buffer: 560 +index_buffer: 561 +index_buffer: 560 +index_buffer: 562 +index_buffer: 563 +index_buffer: 564 +index_buffer: 561 +index_buffer: 563 +index_buffer: 561 +index_buffer: 562 +index_buffer: 565 +index_buffer: 566 +index_buffer: 564 +index_buffer: 565 +index_buffer: 564 +index_buffer: 563 +index_buffer: 567 +index_buffer: 566 +index_buffer: 565 +index_buffer: 567 +index_buffer: 565 +index_buffer: 568 +index_buffer: 569 +index_buffer: 567 +index_buffer: 568 +index_buffer: 569 +index_buffer: 568 +index_buffer: 570 +index_buffer: 571 +index_buffer: 569 +index_buffer: 570 +index_buffer: 571 +index_buffer: 570 +index_buffer: 572 +index_buffer: 66 +index_buffer: 571 +index_buffer: 572 +index_buffer: 66 +index_buffer: 572 +index_buffer: 67 +index_buffer: 573 +index_buffer: 42 +index_buffer: 0 +index_buffer: 573 +index_buffer: 0 +index_buffer: 574 +index_buffer: 575 +index_buffer: 573 +index_buffer: 574 +index_buffer: 575 +index_buffer: 574 +index_buffer: 40 +index_buffer: 576 +index_buffer: 577 +index_buffer: 37 +index_buffer: 576 +index_buffer: 37 +index_buffer: 388 +index_buffer: 389 +index_buffer: 578 +index_buffer: 576 +index_buffer: 389 +index_buffer: 576 +index_buffer: 388 +index_buffer: 579 +index_buffer: 578 +index_buffer: 389 +index_buffer: 579 +index_buffer: 389 +index_buffer: 390 +index_buffer: 390 +index_buffer: 391 +index_buffer: 580 +index_buffer: 390 +index_buffer: 580 +index_buffer: 579 +index_buffer: 392 +index_buffer: 581 +index_buffer: 580 +index_buffer: 392 +index_buffer: 580 +index_buffer: 391 +index_buffer: 393 +index_buffer: 582 +index_buffer: 581 +index_buffer: 393 +index_buffer: 581 +index_buffer: 392 +index_buffer: 583 +index_buffer: 582 +index_buffer: 393 +index_buffer: 583 +index_buffer: 393 +index_buffer: 394 +index_buffer: 584 +index_buffer: 583 +index_buffer: 394 +index_buffer: 584 +index_buffer: 394 +index_buffer: 395 +index_buffer: 585 +index_buffer: 584 +index_buffer: 395 +index_buffer: 585 +index_buffer: 395 +index_buffer: 396 +index_buffer: 544 +index_buffer: 585 +index_buffer: 396 +index_buffer: 544 +index_buffer: 396 +index_buffer: 397 +index_buffer: 586 +index_buffer: 587 +index_buffer: 588 +index_buffer: 586 +index_buffer: 588 +index_buffer: 589 +index_buffer: 73 +index_buffer: 590 +index_buffer: 587 +index_buffer: 73 +index_buffer: 587 +index_buffer: 586 +index_buffer: 87 +index_buffer: 86 +index_buffer: 548 +index_buffer: 87 +index_buffer: 548 +index_buffer: 546 +index_buffer: 86 +index_buffer: 89 +index_buffer: 550 +index_buffer: 86 +index_buffer: 550 +index_buffer: 548 +index_buffer: 95 +index_buffer: 551 +index_buffer: 554 +index_buffer: 95 +index_buffer: 554 +index_buffer: 96 +index_buffer: 98 +index_buffer: 555 +index_buffer: 551 +index_buffer: 98 +index_buffer: 551 +index_buffer: 95 +index_buffer: 560 +index_buffer: 559 +index_buffer: 105 +index_buffer: 560 +index_buffer: 105 +index_buffer: 104 +index_buffer: 562 +index_buffer: 560 +index_buffer: 104 +index_buffer: 562 +index_buffer: 104 +index_buffer: 106 +index_buffer: 563 +index_buffer: 562 +index_buffer: 106 +index_buffer: 563 +index_buffer: 106 +index_buffer: 111 +index_buffer: 565 +index_buffer: 563 +index_buffer: 111 +index_buffer: 565 +index_buffer: 111 +index_buffer: 112 +index_buffer: 568 +index_buffer: 565 +index_buffer: 112 +index_buffer: 568 +index_buffer: 112 +index_buffer: 117 +index_buffer: 570 +index_buffer: 568 +index_buffer: 117 +index_buffer: 570 +index_buffer: 117 +index_buffer: 118 +index_buffer: 572 +index_buffer: 570 +index_buffer: 118 +index_buffer: 572 +index_buffer: 118 +index_buffer: 123 +index_buffer: 67 +index_buffer: 572 +index_buffer: 123 +index_buffer: 67 +index_buffer: 123 +index_buffer: 124 +index_buffer: 591 +index_buffer: 592 +index_buffer: 593 +index_buffer: 591 +index_buffer: 593 +index_buffer: 594 +index_buffer: 170 +index_buffer: 169 +index_buffer: 595 +index_buffer: 170 +index_buffer: 595 +index_buffer: 81 +index_buffer: 171 +index_buffer: 596 +index_buffer: 595 +index_buffer: 171 +index_buffer: 595 +index_buffer: 169 +index_buffer: 597 +index_buffer: 598 +index_buffer: 195 +index_buffer: 597 +index_buffer: 195 +index_buffer: 194 +index_buffer: 599 +index_buffer: 597 +index_buffer: 194 +index_buffer: 599 +index_buffer: 194 +index_buffer: 196 +index_buffer: 600 +index_buffer: 601 +index_buffer: 602 +index_buffer: 600 +index_buffer: 602 +index_buffer: 603 +index_buffer: 601 +index_buffer: 284 +index_buffer: 287 +index_buffer: 601 +index_buffer: 287 +index_buffer: 602 +index_buffer: 68 +index_buffer: 35 +index_buffer: 284 +index_buffer: 68 +index_buffer: 284 +index_buffer: 601 +index_buffer: 68 +index_buffer: 601 +index_buffer: 600 +index_buffer: 68 +index_buffer: 600 +index_buffer: 72 +index_buffer: 405 +index_buffer: 404 +index_buffer: 604 +index_buffer: 405 +index_buffer: 604 +index_buffer: 605 +index_buffer: 604 +index_buffer: 606 +index_buffer: 607 +index_buffer: 604 +index_buffer: 607 +index_buffer: 605 +index_buffer: 497 +index_buffer: 496 +index_buffer: 491 +index_buffer: 497 +index_buffer: 491 +index_buffer: 490 +index_buffer: 608 +index_buffer: 609 +index_buffer: 610 +index_buffer: 608 +index_buffer: 610 +index_buffer: 611 +index_buffer: 418 +index_buffer: 409 +index_buffer: 609 +index_buffer: 418 +index_buffer: 609 +index_buffer: 608 +index_buffer: 612 +index_buffer: 527 +index_buffer: 418 +index_buffer: 612 +index_buffer: 418 +index_buffer: 608 +index_buffer: 612 +index_buffer: 608 +index_buffer: 611 +index_buffer: 612 +index_buffer: 611 +index_buffer: 613 +index_buffer: 614 +index_buffer: 41 +index_buffer: 40 +index_buffer: 614 +index_buffer: 40 +index_buffer: 574 +index_buffer: 4 +index_buffer: 614 +index_buffer: 574 +index_buffer: 4 +index_buffer: 574 +index_buffer: 0 +index_buffer: 615 +index_buffer: 616 +index_buffer: 617 +index_buffer: 615 +index_buffer: 617 +index_buffer: 189 +index_buffer: 617 +index_buffer: 616 +index_buffer: 618 +index_buffer: 617 +index_buffer: 618 +index_buffer: 198 +index_buffer: 619 +index_buffer: 620 +index_buffer: 618 +index_buffer: 619 +index_buffer: 618 +index_buffer: 616 +index_buffer: 186 +index_buffer: 187 +index_buffer: 621 +index_buffer: 186 +index_buffer: 621 +index_buffer: 622 +index_buffer: 192 +index_buffer: 191 +index_buffer: 622 +index_buffer: 192 +index_buffer: 622 +index_buffer: 621 +index_buffer: 192 +index_buffer: 621 +index_buffer: 617 +index_buffer: 192 +index_buffer: 617 +index_buffer: 198 +index_buffer: 621 +index_buffer: 187 +index_buffer: 189 +index_buffer: 621 +index_buffer: 189 +index_buffer: 617 +index_buffer: 623 +index_buffer: 379 +index_buffer: 378 +index_buffer: 623 +index_buffer: 378 +index_buffer: 624 +index_buffer: 299 +index_buffer: 298 +index_buffer: 623 +index_buffer: 299 +index_buffer: 623 +index_buffer: 624 +index_buffer: 625 +index_buffer: 626 +index_buffer: 383 +index_buffer: 625 +index_buffer: 383 +index_buffer: 382 +index_buffer: 162 +index_buffer: 161 +index_buffer: 626 +index_buffer: 162 +index_buffer: 626 +index_buffer: 625 +index_buffer: 162 +index_buffer: 625 +index_buffer: 614 +index_buffer: 162 +index_buffer: 614 +index_buffer: 4 +index_buffer: 625 +index_buffer: 382 +index_buffer: 41 +index_buffer: 625 +index_buffer: 41 +index_buffer: 614 +index_buffer: 627 +index_buffer: 514 +index_buffer: 515 +index_buffer: 627 +index_buffer: 515 +index_buffer: 628 +index_buffer: 518 +index_buffer: 517 +index_buffer: 627 +index_buffer: 518 +index_buffer: 627 +index_buffer: 628 +index_buffer: 577 +index_buffer: 629 +index_buffer: 38 +index_buffer: 577 +index_buffer: 38 +index_buffer: 37 +index_buffer: 629 +index_buffer: 575 +index_buffer: 40 +index_buffer: 629 +index_buffer: 40 +index_buffer: 38 +index_buffer: 578 +index_buffer: 301 +index_buffer: 296 +index_buffer: 578 +index_buffer: 296 +index_buffer: 576 +index_buffer: 296 +index_buffer: 299 +index_buffer: 577 +index_buffer: 296 +index_buffer: 577 +index_buffer: 576 +index_buffer: 580 +index_buffer: 304 +index_buffer: 302 +index_buffer: 580 +index_buffer: 302 +index_buffer: 579 +index_buffer: 302 +index_buffer: 301 +index_buffer: 578 +index_buffer: 302 +index_buffer: 578 +index_buffer: 579 +index_buffer: 582 +index_buffer: 309 +index_buffer: 306 +index_buffer: 582 +index_buffer: 306 +index_buffer: 581 +index_buffer: 580 +index_buffer: 581 +index_buffer: 306 +index_buffer: 580 +index_buffer: 306 +index_buffer: 304 +index_buffer: 313 +index_buffer: 311 +index_buffer: 583 +index_buffer: 313 +index_buffer: 583 +index_buffer: 584 +index_buffer: 311 +index_buffer: 309 +index_buffer: 582 +index_buffer: 311 +index_buffer: 582 +index_buffer: 583 +index_buffer: 317 +index_buffer: 315 +index_buffer: 585 +index_buffer: 317 +index_buffer: 585 +index_buffer: 544 +index_buffer: 315 +index_buffer: 313 +index_buffer: 584 +index_buffer: 315 +index_buffer: 584 +index_buffer: 585 +index_buffer: 545 +index_buffer: 320 +index_buffer: 318 +index_buffer: 545 +index_buffer: 318 +index_buffer: 543 +index_buffer: 318 +index_buffer: 317 +index_buffer: 544 +index_buffer: 318 +index_buffer: 544 +index_buffer: 543 +index_buffer: 328 +index_buffer: 630 +index_buffer: 631 +index_buffer: 328 +index_buffer: 631 +index_buffer: 553 +index_buffer: 631 +index_buffer: 630 +index_buffer: 324 +index_buffer: 631 +index_buffer: 324 +index_buffer: 549 +index_buffer: 558 +index_buffer: 335 +index_buffer: 632 +index_buffer: 558 +index_buffer: 632 +index_buffer: 633 +index_buffer: 632 +index_buffer: 330 +index_buffer: 556 +index_buffer: 632 +index_buffer: 556 +index_buffer: 633 +index_buffer: 337 +index_buffer: 332 +index_buffer: 557 +index_buffer: 337 +index_buffer: 557 +index_buffer: 561 +index_buffer: 557 +index_buffer: 332 +index_buffer: 335 +index_buffer: 557 +index_buffer: 335 +index_buffer: 558 +index_buffer: 341 +index_buffer: 338 +index_buffer: 564 +index_buffer: 341 +index_buffer: 564 +index_buffer: 566 +index_buffer: 338 +index_buffer: 337 +index_buffer: 561 +index_buffer: 338 +index_buffer: 561 +index_buffer: 564 +index_buffer: 345 +index_buffer: 342 +index_buffer: 567 +index_buffer: 345 +index_buffer: 567 +index_buffer: 569 +index_buffer: 342 +index_buffer: 341 +index_buffer: 566 +index_buffer: 342 +index_buffer: 566 +index_buffer: 567 +index_buffer: 349 +index_buffer: 346 +index_buffer: 571 +index_buffer: 349 +index_buffer: 571 +index_buffer: 66 +index_buffer: 346 +index_buffer: 345 +index_buffer: 569 +index_buffer: 346 +index_buffer: 569 +index_buffer: 571 +index_buffer: 62 +index_buffer: 353 +index_buffer: 350 +index_buffer: 62 +index_buffer: 350 +index_buffer: 64 +index_buffer: 64 +index_buffer: 350 +index_buffer: 349 +index_buffer: 64 +index_buffer: 349 +index_buffer: 66 +index_buffer: 356 +index_buffer: 354 +index_buffer: 60 +index_buffer: 356 +index_buffer: 60 +index_buffer: 58 +index_buffer: 60 +index_buffer: 354 +index_buffer: 353 +index_buffer: 60 +index_buffer: 353 +index_buffer: 62 +index_buffer: 54 +index_buffer: 360 +index_buffer: 359 +index_buffer: 54 +index_buffer: 359 +index_buffer: 56 +index_buffer: 56 +index_buffer: 359 +index_buffer: 356 +index_buffer: 56 +index_buffer: 356 +index_buffer: 58 +index_buffer: 365 +index_buffer: 363 +index_buffer: 51 +index_buffer: 365 +index_buffer: 51 +index_buffer: 50 +index_buffer: 363 +index_buffer: 360 +index_buffer: 54 +index_buffer: 363 +index_buffer: 54 +index_buffer: 51 +index_buffer: 44 +index_buffer: 373 +index_buffer: 634 +index_buffer: 44 +index_buffer: 634 +index_buffer: 46 +index_buffer: 634 +index_buffer: 369 +index_buffer: 49 +index_buffer: 634 +index_buffer: 49 +index_buffer: 46 +index_buffer: 375 +index_buffer: 370 +index_buffer: 43 +index_buffer: 375 +index_buffer: 43 +index_buffer: 42 +index_buffer: 43 +index_buffer: 370 +index_buffer: 373 +index_buffer: 43 +index_buffer: 373 +index_buffer: 44 +index_buffer: 575 +index_buffer: 378 +index_buffer: 376 +index_buffer: 575 +index_buffer: 376 +index_buffer: 573 +index_buffer: 375 +index_buffer: 42 +index_buffer: 573 +index_buffer: 375 +index_buffer: 573 +index_buffer: 376 +index_buffer: 299 +index_buffer: 624 +index_buffer: 629 +index_buffer: 299 +index_buffer: 629 +index_buffer: 577 +index_buffer: 624 +index_buffer: 378 +index_buffer: 575 +index_buffer: 624 +index_buffer: 575 +index_buffer: 629 +index_buffer: 48 +index_buffer: 49 +index_buffer: 635 +index_buffer: 48 +index_buffer: 635 +index_buffer: 636 +index_buffer: 636 +index_buffer: 635 +index_buffer: 50 +index_buffer: 636 +index_buffer: 50 +index_buffer: 53 +index_buffer: 232 +index_buffer: 637 +index_buffer: 638 +index_buffer: 232 +index_buffer: 638 +index_buffer: 233 +index_buffer: 637 +index_buffer: 222 +index_buffer: 225 +index_buffer: 637 +index_buffer: 225 +index_buffer: 638 +index_buffer: 634 +index_buffer: 639 +index_buffer: 368 +index_buffer: 634 +index_buffer: 368 +index_buffer: 369 +index_buffer: 373 +index_buffer: 372 +index_buffer: 639 +index_buffer: 373 +index_buffer: 639 +index_buffer: 634 +index_buffer: 640 +index_buffer: 641 +index_buffer: 642 +index_buffer: 640 +index_buffer: 642 +index_buffer: 643 +index_buffer: 644 +index_buffer: 642 +index_buffer: 641 +index_buffer: 644 +index_buffer: 641 +index_buffer: 645 +index_buffer: 641 +index_buffer: 646 +index_buffer: 647 +index_buffer: 641 +index_buffer: 647 +index_buffer: 645 +index_buffer: 427 +index_buffer: 646 +index_buffer: 641 +index_buffer: 427 +index_buffer: 641 +index_buffer: 640 +index_buffer: 48 +index_buffer: 636 +index_buffer: 648 +index_buffer: 48 +index_buffer: 648 +index_buffer: 533 +index_buffer: 636 +index_buffer: 53 +index_buffer: 534 +index_buffer: 636 +index_buffer: 534 +index_buffer: 648 +index_buffer: 649 +index_buffer: 420 +index_buffer: 425 +index_buffer: 649 +index_buffer: 425 +index_buffer: 650 +index_buffer: 420 +index_buffer: 649 +index_buffer: 651 +index_buffer: 420 +index_buffer: 651 +index_buffer: 421 +index_buffer: 648 +index_buffer: 534 +index_buffer: 651 +index_buffer: 648 +index_buffer: 651 +index_buffer: 649 +index_buffer: 533 +index_buffer: 648 +index_buffer: 649 +index_buffer: 533 +index_buffer: 649 +index_buffer: 650 +index_buffer: 635 +index_buffer: 49 +index_buffer: 369 +index_buffer: 635 +index_buffer: 369 +index_buffer: 367 +index_buffer: 635 +index_buffer: 367 +index_buffer: 365 +index_buffer: 635 +index_buffer: 365 +index_buffer: 50 +index_buffer: 17 +index_buffer: 21 +index_buffer: 14 +index_buffer: 17 +index_buffer: 14 +index_buffer: 11 +index_buffer: 27 +index_buffer: 20 +index_buffer: 19 +index_buffer: 27 +index_buffer: 19 +index_buffer: 23 +index_buffer: 33 +index_buffer: 26 +index_buffer: 25 +index_buffer: 33 +index_buffer: 25 +index_buffer: 28 +index_buffer: 71 +index_buffer: 32 +index_buffer: 31 +index_buffer: 71 +index_buffer: 31 +index_buffer: 34 +index_buffer: 70 +index_buffer: 69 +index_buffer: 73 +index_buffer: 70 +index_buffer: 73 +index_buffer: 586 +index_buffer: 12 +index_buffer: 156 +index_buffer: 188 +index_buffer: 12 +index_buffer: 188 +index_buffer: 13 +index_buffer: 156 +index_buffer: 615 +index_buffer: 189 +index_buffer: 156 +index_buffer: 189 +index_buffer: 188 +index_buffer: 155 +index_buffer: 158 +index_buffer: 615 +index_buffer: 155 +index_buffer: 615 +index_buffer: 156 +index_buffer: 652 +index_buffer: 653 +index_buffer: 654 +index_buffer: 652 +index_buffer: 654 +index_buffer: 655 +index_buffer: 593 +index_buffer: 592 +index_buffer: 652 +index_buffer: 593 +index_buffer: 652 +index_buffer: 655 +index_buffer: 593 +index_buffer: 655 +index_buffer: 163 +index_buffer: 593 +index_buffer: 163 +index_buffer: 656 +index_buffer: 176 +index_buffer: 282 +index_buffer: 283 +index_buffer: 176 +index_buffer: 283 +index_buffer: 177 +index_buffer: 205 +index_buffer: 657 +index_buffer: 204 +index_buffer: 205 +index_buffer: 204 +index_buffer: 200 +index_buffer: 521 +index_buffer: 520 +index_buffer: 658 +index_buffer: 521 +index_buffer: 658 +index_buffer: 659 +index_buffer: 660 +index_buffer: 661 +index_buffer: 662 +index_buffer: 660 +index_buffer: 662 +index_buffer: 663 +index_buffer: 664 +index_buffer: 665 +index_buffer: 661 +index_buffer: 664 +index_buffer: 661 +index_buffer: 660 +index_buffer: 413 +index_buffer: 666 +index_buffer: 664 +index_buffer: 413 +index_buffer: 664 +index_buffer: 660 +index_buffer: 667 +index_buffer: 668 +index_buffer: 590 +index_buffer: 667 +index_buffer: 590 +index_buffer: 669 +index_buffer: 590 +index_buffer: 668 +index_buffer: 670 +index_buffer: 590 +index_buffer: 670 +index_buffer: 587 +index_buffer: 412 +index_buffer: 414 +index_buffer: 671 +index_buffer: 412 +index_buffer: 671 +index_buffer: 672 +index_buffer: 673 +index_buffer: 674 +index_buffer: 675 +index_buffer: 673 +index_buffer: 675 +index_buffer: 671 +index_buffer: 158 +index_buffer: 619 +index_buffer: 616 +index_buffer: 158 +index_buffer: 616 +index_buffer: 615 +index_buffer: 676 +index_buffer: 677 +index_buffer: 678 +index_buffer: 676 +index_buffer: 678 +index_buffer: 679 +index_buffer: 600 +index_buffer: 603 +index_buffer: 678 +index_buffer: 600 +index_buffer: 678 +index_buffer: 677 +index_buffer: 72 +index_buffer: 600 +index_buffer: 677 +index_buffer: 72 +index_buffer: 677 +index_buffer: 669 +index_buffer: 669 +index_buffer: 677 +index_buffer: 676 +index_buffer: 669 +index_buffer: 676 +index_buffer: 667 +index_buffer: 587 +index_buffer: 670 +index_buffer: 680 +index_buffer: 587 +index_buffer: 680 +index_buffer: 588 +index_buffer: 662 +index_buffer: 681 +index_buffer: 673 +index_buffer: 662 +index_buffer: 673 +index_buffer: 663 +index_buffer: 681 +index_buffer: 682 +index_buffer: 674 +index_buffer: 681 +index_buffer: 674 +index_buffer: 673 +index_buffer: 595 +index_buffer: 683 +index_buffer: 78 +index_buffer: 595 +index_buffer: 78 +index_buffer: 81 +index_buffer: 596 +index_buffer: 684 +index_buffer: 683 +index_buffer: 596 +index_buffer: 683 +index_buffer: 595 +index_buffer: 685 +index_buffer: 686 +index_buffer: 687 +index_buffer: 685 +index_buffer: 687 +index_buffer: 408 +index_buffer: 688 +index_buffer: 525 +index_buffer: 527 +index_buffer: 688 +index_buffer: 527 +index_buffer: 612 +index_buffer: 689 +index_buffer: 522 +index_buffer: 525 +index_buffer: 689 +index_buffer: 525 +index_buffer: 688 +index_buffer: 690 +index_buffer: 691 +index_buffer: 689 +index_buffer: 690 +index_buffer: 689 +index_buffer: 688 +index_buffer: 690 +index_buffer: 688 +index_buffer: 612 +index_buffer: 690 +index_buffer: 612 +index_buffer: 613 +index_buffer: 532 +index_buffer: 692 +index_buffer: 690 +index_buffer: 532 +index_buffer: 690 +index_buffer: 613 +index_buffer: 693 +index_buffer: 691 +index_buffer: 690 +index_buffer: 693 +index_buffer: 690 +index_buffer: 692 +index_buffer: 425 +index_buffer: 693 +index_buffer: 692 +index_buffer: 425 +index_buffer: 692 +index_buffer: 650 +index_buffer: 533 +index_buffer: 650 +index_buffer: 692 +index_buffer: 533 +index_buffer: 692 +index_buffer: 532 +index_buffer: 651 +index_buffer: 534 +index_buffer: 535 +index_buffer: 651 +index_buffer: 535 +index_buffer: 694 +index_buffer: 421 +index_buffer: 651 +index_buffer: 694 +index_buffer: 421 +index_buffer: 694 +index_buffer: 429 +index_buffer: 694 +index_buffer: 695 +index_buffer: 430 +index_buffer: 694 +index_buffer: 430 +index_buffer: 429 +index_buffer: 694 +index_buffer: 535 +index_buffer: 536 +index_buffer: 694 +index_buffer: 536 +index_buffer: 695 +index_buffer: 695 +index_buffer: 536 +index_buffer: 537 +index_buffer: 695 +index_buffer: 537 +index_buffer: 696 +index_buffer: 430 +index_buffer: 695 +index_buffer: 696 +index_buffer: 430 +index_buffer: 696 +index_buffer: 435 +index_buffer: 696 +index_buffer: 697 +index_buffer: 436 +index_buffer: 696 +index_buffer: 436 +index_buffer: 435 +index_buffer: 537 +index_buffer: 538 +index_buffer: 697 +index_buffer: 537 +index_buffer: 697 +index_buffer: 696 +index_buffer: 538 +index_buffer: 539 +index_buffer: 698 +index_buffer: 538 +index_buffer: 698 +index_buffer: 697 +index_buffer: 436 +index_buffer: 697 +index_buffer: 698 +index_buffer: 436 +index_buffer: 698 +index_buffer: 442 +index_buffer: 698 +index_buffer: 699 +index_buffer: 443 +index_buffer: 698 +index_buffer: 443 +index_buffer: 442 +index_buffer: 539 +index_buffer: 540 +index_buffer: 699 +index_buffer: 539 +index_buffer: 699 +index_buffer: 698 +index_buffer: 540 +index_buffer: 541 +index_buffer: 700 +index_buffer: 540 +index_buffer: 700 +index_buffer: 699 +index_buffer: 699 +index_buffer: 700 +index_buffer: 447 +index_buffer: 699 +index_buffer: 447 +index_buffer: 443 +index_buffer: 700 +index_buffer: 125 +index_buffer: 126 +index_buffer: 700 +index_buffer: 126 +index_buffer: 447 +index_buffer: 541 +index_buffer: 124 +index_buffer: 125 +index_buffer: 541 +index_buffer: 125 +index_buffer: 700 +index_buffer: 72 +index_buffer: 669 +index_buffer: 590 +index_buffer: 72 +index_buffer: 590 +index_buffer: 73 +index_buffer: 610 +index_buffer: 701 +index_buffer: 702 +index_buffer: 610 +index_buffer: 702 +index_buffer: 3 +index_buffer: 702 +index_buffer: 165 +index_buffer: 4 +index_buffer: 702 +index_buffer: 4 +index_buffer: 3 +index_buffer: 703 +index_buffer: 656 +index_buffer: 165 +index_buffer: 703 +index_buffer: 165 +index_buffer: 702 +index_buffer: 704 +index_buffer: 705 +index_buffer: 89 +index_buffer: 704 +index_buffer: 89 +index_buffer: 88 +index_buffer: 93 +index_buffer: 96 +index_buffer: 705 +index_buffer: 93 +index_buffer: 705 +index_buffer: 704 +index_buffer: 94 +index_buffer: 93 +index_buffer: 704 +index_buffer: 94 +index_buffer: 704 +index_buffer: 706 +index_buffer: 90 +index_buffer: 706 +index_buffer: 704 +index_buffer: 90 +index_buffer: 704 +index_buffer: 88 +index_buffer: 707 +index_buffer: 708 +index_buffer: 277 +index_buffer: 707 +index_buffer: 277 +index_buffer: 276 +index_buffer: 267 +index_buffer: 266 +index_buffer: 708 +index_buffer: 267 +index_buffer: 708 +index_buffer: 707 +index_buffer: 630 +index_buffer: 709 +index_buffer: 325 +index_buffer: 630 +index_buffer: 325 +index_buffer: 324 +index_buffer: 328 +index_buffer: 327 +index_buffer: 709 +index_buffer: 328 +index_buffer: 709 +index_buffer: 630 +index_buffer: 90 +index_buffer: 476 +index_buffer: 710 +index_buffer: 90 +index_buffer: 710 +index_buffer: 706 +index_buffer: 468 +index_buffer: 94 +index_buffer: 706 +index_buffer: 468 +index_buffer: 706 +index_buffer: 710 +index_buffer: 710 +index_buffer: 711 +index_buffer: 473 +index_buffer: 710 +index_buffer: 473 +index_buffer: 468 +index_buffer: 476 +index_buffer: 478 +index_buffer: 711 +index_buffer: 476 +index_buffer: 711 +index_buffer: 710 +index_buffer: 553 +index_buffer: 631 +index_buffer: 712 +index_buffer: 553 +index_buffer: 712 +index_buffer: 554 +index_buffer: 631 +index_buffer: 549 +index_buffer: 550 +index_buffer: 631 +index_buffer: 550 +index_buffer: 712 +index_buffer: 705 +index_buffer: 712 +index_buffer: 550 +index_buffer: 705 +index_buffer: 550 +index_buffer: 89 +index_buffer: 96 +index_buffer: 554 +index_buffer: 712 +index_buffer: 96 +index_buffer: 712 +index_buffer: 705 +index_buffer: 549 +index_buffer: 324 +index_buffer: 322 +index_buffer: 549 +index_buffer: 322 +index_buffer: 547 +index_buffer: 322 +index_buffer: 320 +index_buffer: 545 +index_buffer: 322 +index_buffer: 545 +index_buffer: 547 +index_buffer: 274 +index_buffer: 273 +index_buffer: 713 +index_buffer: 274 +index_buffer: 713 +index_buffer: 714 +index_buffer: 481 +index_buffer: 715 +index_buffer: 716 +index_buffer: 481 +index_buffer: 716 +index_buffer: 482 +index_buffer: 716 +index_buffer: 715 +index_buffer: 474 +index_buffer: 716 +index_buffer: 474 +index_buffer: 82 +index_buffer: 479 +index_buffer: 474 +index_buffer: 715 +index_buffer: 479 +index_buffer: 715 +index_buffer: 717 +index_buffer: 717 +index_buffer: 715 +index_buffer: 481 +index_buffer: 717 +index_buffer: 481 +index_buffer: 485 +index_buffer: 718 +index_buffer: 719 +index_buffer: 720 +index_buffer: 718 +index_buffer: 720 +index_buffer: 721 +index_buffer: 721 +index_buffer: 483 +index_buffer: 482 +index_buffer: 721 +index_buffer: 482 +index_buffer: 718 +index_buffer: 722 +index_buffer: 723 +index_buffer: 85 +index_buffer: 722 +index_buffer: 85 +index_buffer: 87 +index_buffer: 716 +index_buffer: 82 +index_buffer: 85 +index_buffer: 716 +index_buffer: 85 +index_buffer: 723 +index_buffer: 482 +index_buffer: 716 +index_buffer: 723 +index_buffer: 482 +index_buffer: 723 +index_buffer: 718 +index_buffer: 719 +index_buffer: 718 +index_buffer: 723 +index_buffer: 719 +index_buffer: 723 +index_buffer: 722 +index_buffer: 724 +index_buffer: 725 +index_buffer: 399 +index_buffer: 724 +index_buffer: 399 +index_buffer: 398 +index_buffer: 726 +index_buffer: 725 +index_buffer: 724 +index_buffer: 726 +index_buffer: 724 +index_buffer: 727 +index_buffer: 728 +index_buffer: 727 +index_buffer: 724 +index_buffer: 728 +index_buffer: 724 +index_buffer: 729 +index_buffer: 729 +index_buffer: 724 +index_buffer: 398 +index_buffer: 729 +index_buffer: 398 +index_buffer: 400 +index_buffer: 527 +index_buffer: 526 +index_buffer: 417 +index_buffer: 527 +index_buffer: 417 +index_buffer: 418 +index_buffer: 529 +index_buffer: 419 +index_buffer: 417 +index_buffer: 529 +index_buffer: 417 +index_buffer: 526 +index_buffer: 730 +index_buffer: 731 +index_buffer: 732 +index_buffer: 730 +index_buffer: 732 +index_buffer: 733 +index_buffer: 530 +index_buffer: 730 +index_buffer: 733 +index_buffer: 530 +index_buffer: 733 +index_buffer: 734 +index_buffer: 728 +index_buffer: 734 +index_buffer: 733 +index_buffer: 728 +index_buffer: 733 +index_buffer: 735 +index_buffer: 735 +index_buffer: 733 +index_buffer: 732 +index_buffer: 735 +index_buffer: 732 +index_buffer: 221 +index_buffer: 736 +index_buffer: 737 +index_buffer: 199 +index_buffer: 736 +index_buffer: 199 +index_buffer: 202 +index_buffer: 206 +index_buffer: 199 +index_buffer: 737 +index_buffer: 206 +index_buffer: 737 +index_buffer: 738 +index_buffer: 738 +index_buffer: 737 +index_buffer: 739 +index_buffer: 738 +index_buffer: 739 +index_buffer: 740 +index_buffer: 741 +index_buffer: 685 +index_buffer: 408 +index_buffer: 665 +index_buffer: 685 +index_buffer: 741 +index_buffer: 665 +index_buffer: 741 +index_buffer: 661 +index_buffer: 661 +index_buffer: 741 +index_buffer: 407 +index_buffer: 661 +index_buffer: 407 +index_buffer: 662 +index_buffer: 662 +index_buffer: 407 +index_buffer: 406 +index_buffer: 662 +index_buffer: 406 +index_buffer: 681 +index_buffer: 681 +index_buffer: 406 +index_buffer: 742 +index_buffer: 681 +index_buffer: 742 +index_buffer: 682 +index_buffer: 742 +index_buffer: 743 +index_buffer: 591 +index_buffer: 742 +index_buffer: 591 +index_buffer: 682 +index_buffer: 743 +index_buffer: 606 +index_buffer: 592 +index_buffer: 743 +index_buffer: 592 +index_buffer: 591 +index_buffer: 652 +index_buffer: 592 +index_buffer: 606 +index_buffer: 652 +index_buffer: 606 +index_buffer: 604 +index_buffer: 404 +index_buffer: 653 +index_buffer: 652 +index_buffer: 404 +index_buffer: 652 +index_buffer: 604 +index_buffer: 654 +index_buffer: 653 +index_buffer: 404 +index_buffer: 654 +index_buffer: 404 +index_buffer: 402 +index_buffer: 164 +index_buffer: 401 +index_buffer: 658 +index_buffer: 164 +index_buffer: 658 +index_buffer: 160 +index_buffer: 520 +index_buffer: 519 +index_buffer: 626 +index_buffer: 520 +index_buffer: 626 +index_buffer: 161 +index_buffer: 519 +index_buffer: 518 +index_buffer: 383 +index_buffer: 519 +index_buffer: 383 +index_buffer: 626 +index_buffer: 518 +index_buffer: 628 +index_buffer: 381 +index_buffer: 518 +index_buffer: 381 +index_buffer: 383 +index_buffer: 381 +index_buffer: 628 +index_buffer: 515 +index_buffer: 381 +index_buffer: 515 +index_buffer: 127 +index_buffer: 128 +index_buffer: 127 +index_buffer: 515 +index_buffer: 128 +index_buffer: 515 +index_buffer: 512 +index_buffer: 512 +index_buffer: 511 +index_buffer: 134 +index_buffer: 512 +index_buffer: 134 +index_buffer: 128 +index_buffer: 135 +index_buffer: 134 +index_buffer: 511 +index_buffer: 135 +index_buffer: 511 +index_buffer: 508 +index_buffer: 508 +index_buffer: 506 +index_buffer: 140 +index_buffer: 508 +index_buffer: 140 +index_buffer: 135 +index_buffer: 504 +index_buffer: 141 +index_buffer: 140 +index_buffer: 504 +index_buffer: 140 +index_buffer: 506 +index_buffer: 502 +index_buffer: 146 +index_buffer: 141 +index_buffer: 502 +index_buffer: 141 +index_buffer: 504 +index_buffer: 148 +index_buffer: 146 +index_buffer: 502 +index_buffer: 148 +index_buffer: 502 +index_buffer: 500 +index_buffer: 148 +index_buffer: 500 +index_buffer: 498 +index_buffer: 148 +index_buffer: 498 +index_buffer: 152 +index_buffer: 167 +index_buffer: 152 +index_buffer: 498 +index_buffer: 167 +index_buffer: 498 +index_buffer: 494 +index_buffer: 167 +index_buffer: 494 +index_buffer: 497 +index_buffer: 167 +index_buffer: 497 +index_buffer: 171 +index_buffer: 497 +index_buffer: 490 +index_buffer: 596 +index_buffer: 497 +index_buffer: 596 +index_buffer: 171 +index_buffer: 490 +index_buffer: 493 +index_buffer: 684 +index_buffer: 490 +index_buffer: 684 +index_buffer: 596 +index_buffer: 486 +index_buffer: 489 +index_buffer: 386 +index_buffer: 486 +index_buffer: 386 +index_buffer: 387 +index_buffer: 426 +index_buffer: 646 +index_buffer: 427 +index_buffer: 647 +index_buffer: 646 +index_buffer: 426 +index_buffer: 647 +index_buffer: 426 +index_buffer: 638 +index_buffer: 434 +index_buffer: 228 +index_buffer: 231 +index_buffer: 434 +index_buffer: 231 +index_buffer: 433 +index_buffer: 439 +index_buffer: 236 +index_buffer: 228 +index_buffer: 439 +index_buffer: 228 +index_buffer: 434 +index_buffer: 240 +index_buffer: 237 +index_buffer: 440 +index_buffer: 240 +index_buffer: 440 +index_buffer: 445 +index_buffer: 450 +index_buffer: 245 +index_buffer: 241 +index_buffer: 450 +index_buffer: 241 +index_buffer: 446 +index_buffer: 248 +index_buffer: 242 +index_buffer: 451 +index_buffer: 248 +index_buffer: 451 +index_buffer: 454 +index_buffer: 458 +index_buffer: 252 +index_buffer: 249 +index_buffer: 458 +index_buffer: 249 +index_buffer: 455 +index_buffer: 256 +index_buffer: 253 +index_buffer: 459 +index_buffer: 256 +index_buffer: 459 +index_buffer: 462 +index_buffer: 259 +index_buffer: 257 +index_buffer: 463 +index_buffer: 259 +index_buffer: 463 +index_buffer: 466 +index_buffer: 260 +index_buffer: 467 +index_buffer: 744 +index_buffer: 260 +index_buffer: 744 +index_buffer: 263 +index_buffer: 477 +index_buffer: 708 +index_buffer: 266 +index_buffer: 477 +index_buffer: 266 +index_buffer: 478 +index_buffer: 713 +index_buffer: 273 +index_buffer: 485 +index_buffer: 713 +index_buffer: 485 +index_buffer: 484 +index_buffer: 711 +index_buffer: 269 +index_buffer: 271 +index_buffer: 711 +index_buffer: 271 +index_buffer: 473 +index_buffer: 272 +index_buffer: 277 +index_buffer: 479 +index_buffer: 272 +index_buffer: 479 +index_buffer: 717 +index_buffer: 424 +index_buffer: 427 +index_buffer: 640 +index_buffer: 424 +index_buffer: 640 +index_buffer: 745 +index_buffer: 425 +index_buffer: 424 +index_buffer: 745 +index_buffer: 425 +index_buffer: 745 +index_buffer: 693 +index_buffer: 693 +index_buffer: 745 +index_buffer: 746 +index_buffer: 693 +index_buffer: 746 +index_buffer: 691 +index_buffer: 745 +index_buffer: 640 +index_buffer: 643 +index_buffer: 745 +index_buffer: 643 +index_buffer: 746 +index_buffer: 2 +index_buffer: 611 +index_buffer: 610 +index_buffer: 2 +index_buffer: 610 +index_buffer: 3 +index_buffer: 613 +index_buffer: 611 +index_buffer: 2 +index_buffer: 613 +index_buffer: 2 +index_buffer: 531 +index_buffer: 747 +index_buffer: 748 +index_buffer: 749 +index_buffer: 747 +index_buffer: 749 +index_buffer: 750 +index_buffer: 226 +index_buffer: 751 +index_buffer: 748 +index_buffer: 226 +index_buffer: 748 +index_buffer: 747 +index_buffer: 752 +index_buffer: 753 +index_buffer: 754 +index_buffer: 752 +index_buffer: 754 +index_buffer: 657 +index_buffer: 755 +index_buffer: 756 +index_buffer: 665 +index_buffer: 755 +index_buffer: 665 +index_buffer: 664 +index_buffer: 755 +index_buffer: 205 +index_buffer: 206 +index_buffer: 755 +index_buffer: 206 +index_buffer: 756 +index_buffer: 757 +index_buffer: 758 +index_buffer: 212 +index_buffer: 757 +index_buffer: 212 +index_buffer: 211 +index_buffer: 419 +index_buffer: 758 +index_buffer: 757 +index_buffer: 419 +index_buffer: 757 +index_buffer: 415 +index_buffer: 759 +index_buffer: 760 +index_buffer: 761 +index_buffer: 759 +index_buffer: 761 +index_buffer: 227 +index_buffer: 731 +index_buffer: 761 +index_buffer: 760 +index_buffer: 731 +index_buffer: 760 +index_buffer: 732 +index_buffer: 221 +index_buffer: 732 +index_buffer: 760 +index_buffer: 221 +index_buffer: 760 +index_buffer: 219 +index_buffer: 220 +index_buffer: 219 +index_buffer: 760 +index_buffer: 220 +index_buffer: 760 +index_buffer: 759 +index_buffer: 762 +index_buffer: 400 +index_buffer: 212 +index_buffer: 762 +index_buffer: 212 +index_buffer: 758 +index_buffer: 529 +index_buffer: 762 +index_buffer: 758 +index_buffer: 529 +index_buffer: 758 +index_buffer: 419 +index_buffer: 757 +index_buffer: 211 +index_buffer: 754 +index_buffer: 757 +index_buffer: 754 +index_buffer: 753 +index_buffer: 415 +index_buffer: 757 +index_buffer: 753 +index_buffer: 415 +index_buffer: 753 +index_buffer: 416 +index_buffer: 666 +index_buffer: 752 +index_buffer: 755 +index_buffer: 666 +index_buffer: 755 +index_buffer: 664 +index_buffer: 728 +index_buffer: 729 +index_buffer: 763 +index_buffer: 728 +index_buffer: 763 +index_buffer: 734 +index_buffer: 530 +index_buffer: 734 +index_buffer: 763 +index_buffer: 530 +index_buffer: 763 +index_buffer: 528 +index_buffer: 528 +index_buffer: 763 +index_buffer: 762 +index_buffer: 528 +index_buffer: 762 +index_buffer: 529 +index_buffer: 763 +index_buffer: 729 +index_buffer: 400 +index_buffer: 763 +index_buffer: 400 +index_buffer: 762 +index_buffer: 756 +index_buffer: 206 +index_buffer: 738 +index_buffer: 756 +index_buffer: 738 +index_buffer: 686 +index_buffer: 756 +index_buffer: 686 +index_buffer: 685 +index_buffer: 756 +index_buffer: 685 +index_buffer: 665 +index_buffer: 764 +index_buffer: 765 +index_buffer: 766 +index_buffer: 764 +index_buffer: 766 +index_buffer: 767 +index_buffer: 749 +index_buffer: 767 +index_buffer: 766 +index_buffer: 749 +index_buffer: 766 +index_buffer: 750 +index_buffer: 768 +index_buffer: 727 +index_buffer: 728 +index_buffer: 768 +index_buffer: 728 +index_buffer: 735 +index_buffer: 726 +index_buffer: 727 +index_buffer: 768 +index_buffer: 726 +index_buffer: 768 +index_buffer: 769 +index_buffer: 768 +index_buffer: 213 +index_buffer: 216 +index_buffer: 768 +index_buffer: 216 +index_buffer: 769 +index_buffer: 768 +index_buffer: 735 +index_buffer: 221 +index_buffer: 768 +index_buffer: 221 +index_buffer: 213 +index_buffer: 770 +index_buffer: 771 +index_buffer: 772 +index_buffer: 770 +index_buffer: 772 +index_buffer: 773 +index_buffer: 773 +index_buffer: 772 +index_buffer: 523 +index_buffer: 773 +index_buffer: 523 +index_buffer: 522 +index_buffer: 523 +index_buffer: 772 +index_buffer: 730 +index_buffer: 523 +index_buffer: 730 +index_buffer: 530 +index_buffer: 772 +index_buffer: 771 +index_buffer: 731 +index_buffer: 772 +index_buffer: 731 +index_buffer: 730 +index_buffer: 774 +index_buffer: 775 +index_buffer: 770 +index_buffer: 774 +index_buffer: 770 +index_buffer: 773 +index_buffer: 746 +index_buffer: 643 +index_buffer: 775 +index_buffer: 746 +index_buffer: 775 +index_buffer: 774 +index_buffer: 691 +index_buffer: 746 +index_buffer: 774 +index_buffer: 691 +index_buffer: 774 +index_buffer: 689 +index_buffer: 774 +index_buffer: 773 +index_buffer: 522 +index_buffer: 774 +index_buffer: 522 +index_buffer: 689 +index_buffer: 682 +index_buffer: 591 +index_buffer: 594 +index_buffer: 682 +index_buffer: 594 +index_buffer: 674 +index_buffer: 702 +index_buffer: 701 +index_buffer: 675 +index_buffer: 702 +index_buffer: 675 +index_buffer: 703 +index_buffer: 776 +index_buffer: 777 +index_buffer: 598 +index_buffer: 776 +index_buffer: 598 +index_buffer: 597 +index_buffer: 776 +index_buffer: 597 +index_buffer: 599 +index_buffer: 776 +index_buffer: 599 +index_buffer: 408 +index_buffer: 496 +index_buffer: 589 +index_buffer: 588 +index_buffer: 496 +index_buffer: 588 +index_buffer: 491 +index_buffer: 532 +index_buffer: 613 +index_buffer: 531 +index_buffer: 196 +index_buffer: 607 +index_buffer: 599 +index_buffer: 408 +index_buffer: 599 +index_buffer: 743 +index_buffer: 408 +index_buffer: 743 +index_buffer: 742 +index_buffer: 778 +index_buffer: 153 +index_buffer: 15 +index_buffer: 778 +index_buffer: 15 +index_buffer: 14 +index_buffer: 21 +index_buffer: 779 +index_buffer: 778 +index_buffer: 21 +index_buffer: 778 +index_buffer: 14 +index_buffer: 20 +index_buffer: 780 +index_buffer: 779 +index_buffer: 20 +index_buffer: 779 +index_buffer: 21 +index_buffer: 27 +index_buffer: 781 +index_buffer: 780 +index_buffer: 27 +index_buffer: 780 +index_buffer: 20 +index_buffer: 781 +index_buffer: 27 +index_buffer: 26 +index_buffer: 781 +index_buffer: 26 +index_buffer: 782 +index_buffer: 33 +index_buffer: 783 +index_buffer: 782 +index_buffer: 33 +index_buffer: 782 +index_buffer: 26 +index_buffer: 784 +index_buffer: 783 +index_buffer: 33 +index_buffer: 784 +index_buffer: 33 +index_buffer: 32 +index_buffer: 785 +index_buffer: 784 +index_buffer: 32 +index_buffer: 785 +index_buffer: 32 +index_buffer: 71 +index_buffer: 785 +index_buffer: 71 +index_buffer: 70 +index_buffer: 785 +index_buffer: 70 +index_buffer: 786 +index_buffer: 786 +index_buffer: 70 +index_buffer: 586 +index_buffer: 786 +index_buffer: 586 +index_buffer: 589 +index_buffer: 208 +index_buffer: 787 +index_buffer: 788 +index_buffer: 208 +index_buffer: 788 +index_buffer: 209 +index_buffer: 754 +index_buffer: 211 +index_buffer: 209 +index_buffer: 754 +index_buffer: 209 +index_buffer: 788 +index_buffer: 618 +index_buffer: 620 +index_buffer: 659 +index_buffer: 618 +index_buffer: 659 +index_buffer: 403 +index_buffer: 609 +index_buffer: 409 +index_buffer: 412 +index_buffer: 609 +index_buffer: 412 +index_buffer: 672 +index_buffer: 610 +index_buffer: 609 +index_buffer: 672 +index_buffer: 610 +index_buffer: 672 +index_buffer: 701 +index_buffer: 789 +index_buffer: 790 +index_buffer: 620 +index_buffer: 789 +index_buffer: 620 +index_buffer: 619 +index_buffer: 157 +index_buffer: 789 +index_buffer: 619 +index_buffer: 157 +index_buffer: 619 +index_buffer: 158 +index_buffer: 658 +index_buffer: 520 +index_buffer: 161 +index_buffer: 658 +index_buffer: 161 +index_buffer: 160 +index_buffer: 791 +index_buffer: 179 +index_buffer: 178 +index_buffer: 791 +index_buffer: 178 +index_buffer: 792 +index_buffer: 792 +index_buffer: 178 +index_buffer: 183 +index_buffer: 792 +index_buffer: 183 +index_buffer: 793 +index_buffer: 185 +index_buffer: 794 +index_buffer: 793 +index_buffer: 185 +index_buffer: 793 +index_buffer: 183 +index_buffer: 795 +index_buffer: 794 +index_buffer: 185 +index_buffer: 795 +index_buffer: 185 +index_buffer: 186 +index_buffer: 796 +index_buffer: 191 +index_buffer: 190 +index_buffer: 796 +index_buffer: 190 +index_buffer: 797 +index_buffer: 190 +index_buffer: 195 +index_buffer: 798 +index_buffer: 190 +index_buffer: 798 +index_buffer: 797 +index_buffer: 223 +index_buffer: 799 +index_buffer: 751 +index_buffer: 223 +index_buffer: 751 +index_buffer: 226 +index_buffer: 222 +index_buffer: 800 +index_buffer: 799 +index_buffer: 222 +index_buffer: 799 +index_buffer: 223 +index_buffer: 230 +index_buffer: 801 +index_buffer: 802 +index_buffer: 230 +index_buffer: 802 +index_buffer: 232 +index_buffer: 803 +index_buffer: 801 +index_buffer: 230 +index_buffer: 803 +index_buffer: 230 +index_buffer: 229 +index_buffer: 804 +index_buffer: 803 +index_buffer: 229 +index_buffer: 804 +index_buffer: 229 +index_buffer: 235 +index_buffer: 234 +index_buffer: 805 +index_buffer: 804 +index_buffer: 234 +index_buffer: 804 +index_buffer: 235 +index_buffer: 806 +index_buffer: 805 +index_buffer: 234 +index_buffer: 806 +index_buffer: 234 +index_buffer: 239 +index_buffer: 807 +index_buffer: 806 +index_buffer: 239 +index_buffer: 807 +index_buffer: 239 +index_buffer: 238 +index_buffer: 808 +index_buffer: 807 +index_buffer: 238 +index_buffer: 808 +index_buffer: 238 +index_buffer: 244 +index_buffer: 809 +index_buffer: 808 +index_buffer: 244 +index_buffer: 809 +index_buffer: 244 +index_buffer: 243 +index_buffer: 247 +index_buffer: 810 +index_buffer: 809 +index_buffer: 247 +index_buffer: 809 +index_buffer: 243 +index_buffer: 246 +index_buffer: 811 +index_buffer: 810 +index_buffer: 246 +index_buffer: 810 +index_buffer: 247 +index_buffer: 251 +index_buffer: 812 +index_buffer: 811 +index_buffer: 251 +index_buffer: 811 +index_buffer: 246 +index_buffer: 250 +index_buffer: 813 +index_buffer: 812 +index_buffer: 250 +index_buffer: 812 +index_buffer: 251 +index_buffer: 814 +index_buffer: 813 +index_buffer: 250 +index_buffer: 814 +index_buffer: 250 +index_buffer: 255 +index_buffer: 815 +index_buffer: 814 +index_buffer: 255 +index_buffer: 815 +index_buffer: 255 +index_buffer: 254 +index_buffer: 816 +index_buffer: 815 +index_buffer: 254 +index_buffer: 816 +index_buffer: 254 +index_buffer: 258 +index_buffer: 817 +index_buffer: 816 +index_buffer: 258 +index_buffer: 817 +index_buffer: 258 +index_buffer: 261 +index_buffer: 818 +index_buffer: 819 +index_buffer: 265 +index_buffer: 818 +index_buffer: 265 +index_buffer: 820 +index_buffer: 821 +index_buffer: 818 +index_buffer: 820 +index_buffer: 821 +index_buffer: 820 +index_buffer: 270 +index_buffer: 268 +index_buffer: 822 +index_buffer: 821 +index_buffer: 268 +index_buffer: 821 +index_buffer: 270 +index_buffer: 268 +index_buffer: 267 +index_buffer: 823 +index_buffer: 268 +index_buffer: 823 +index_buffer: 822 +index_buffer: 276 +index_buffer: 275 +index_buffer: 824 +index_buffer: 276 +index_buffer: 824 +index_buffer: 825 +index_buffer: 275 +index_buffer: 274 +index_buffer: 826 +index_buffer: 275 +index_buffer: 826 +index_buffer: 824 +index_buffer: 281 +index_buffer: 280 +index_buffer: 827 +index_buffer: 281 +index_buffer: 827 +index_buffer: 828 +index_buffer: 829 +index_buffer: 830 +index_buffer: 679 +index_buffer: 829 +index_buffer: 679 +index_buffer: 678 +index_buffer: 831 +index_buffer: 603 +index_buffer: 602 +index_buffer: 831 +index_buffer: 602 +index_buffer: 832 +index_buffer: 833 +index_buffer: 832 +index_buffer: 602 +index_buffer: 833 +index_buffer: 602 +index_buffer: 287 +index_buffer: 833 +index_buffer: 287 +index_buffer: 286 +index_buffer: 833 +index_buffer: 286 +index_buffer: 834 +index_buffer: 835 +index_buffer: 834 +index_buffer: 286 +index_buffer: 835 +index_buffer: 286 +index_buffer: 289 +index_buffer: 291 +index_buffer: 836 +index_buffer: 835 +index_buffer: 291 +index_buffer: 835 +index_buffer: 289 +index_buffer: 293 +index_buffer: 837 +index_buffer: 836 +index_buffer: 293 +index_buffer: 836 +index_buffer: 291 +index_buffer: 294 +index_buffer: 838 +index_buffer: 837 +index_buffer: 294 +index_buffer: 837 +index_buffer: 293 +index_buffer: 791 +index_buffer: 838 +index_buffer: 294 +index_buffer: 791 +index_buffer: 294 +index_buffer: 179 +index_buffer: 798 +index_buffer: 195 +index_buffer: 598 +index_buffer: 798 +index_buffer: 598 +index_buffer: 839 +index_buffer: 622 +index_buffer: 840 +index_buffer: 795 +index_buffer: 622 +index_buffer: 795 +index_buffer: 186 +index_buffer: 191 +index_buffer: 796 +index_buffer: 840 +index_buffer: 191 +index_buffer: 840 +index_buffer: 622 +index_buffer: 637 +index_buffer: 841 +index_buffer: 800 +index_buffer: 637 +index_buffer: 800 +index_buffer: 222 +index_buffer: 232 +index_buffer: 802 +index_buffer: 841 +index_buffer: 232 +index_buffer: 841 +index_buffer: 637 +index_buffer: 829 +index_buffer: 678 +index_buffer: 603 +index_buffer: 829 +index_buffer: 603 +index_buffer: 831 +index_buffer: 823 +index_buffer: 267 +index_buffer: 707 +index_buffer: 823 +index_buffer: 707 +index_buffer: 842 +index_buffer: 842 +index_buffer: 707 +index_buffer: 276 +index_buffer: 842 +index_buffer: 276 +index_buffer: 825 +index_buffer: 826 +index_buffer: 274 +index_buffer: 714 +index_buffer: 826 +index_buffer: 714 +index_buffer: 843 +index_buffer: 844 +index_buffer: 845 +index_buffer: 777 +index_buffer: 844 +index_buffer: 777 +index_buffer: 846 +index_buffer: 847 +index_buffer: 844 +index_buffer: 846 +index_buffer: 847 +index_buffer: 846 +index_buffer: 848 +index_buffer: 201 +index_buffer: 849 +index_buffer: 850 +index_buffer: 201 +index_buffer: 850 +index_buffer: 202 +index_buffer: 851 +index_buffer: 849 +index_buffer: 201 +index_buffer: 851 +index_buffer: 201 +index_buffer: 203 +index_buffer: 769 +index_buffer: 852 +index_buffer: 853 +index_buffer: 769 +index_buffer: 853 +index_buffer: 726 +index_buffer: 769 +index_buffer: 216 +index_buffer: 854 +index_buffer: 769 +index_buffer: 854 +index_buffer: 852 +index_buffer: 207 +index_buffer: 855 +index_buffer: 856 +index_buffer: 207 +index_buffer: 856 +index_buffer: 208 +index_buffer: 857 +index_buffer: 858 +index_buffer: 859 +index_buffer: 857 +index_buffer: 859 +index_buffer: 860 +index_buffer: 859 +index_buffer: 861 +index_buffer: 862 +index_buffer: 859 +index_buffer: 862 +index_buffer: 860 +index_buffer: 863 +index_buffer: 864 +index_buffer: 399 +index_buffer: 863 +index_buffer: 399 +index_buffer: 725 +index_buffer: 853 +index_buffer: 863 +index_buffer: 725 +index_buffer: 853 +index_buffer: 725 +index_buffer: 726 +index_buffer: 218 +index_buffer: 765 +index_buffer: 764 +index_buffer: 218 +index_buffer: 764 +index_buffer: 865 +index_buffer: 866 +index_buffer: 736 +index_buffer: 202 +index_buffer: 866 +index_buffer: 202 +index_buffer: 850 +index_buffer: 864 +index_buffer: 855 +index_buffer: 207 +index_buffer: 864 +index_buffer: 207 +index_buffer: 399 +index_buffer: 845 +index_buffer: 839 +index_buffer: 598 +index_buffer: 845 +index_buffer: 598 +index_buffer: 777 +index_buffer: 208 +index_buffer: 856 +index_buffer: 867 +index_buffer: 208 +index_buffer: 867 +index_buffer: 787 +index_buffer: 766 +index_buffer: 765 +index_buffer: 218 +index_buffer: 766 +index_buffer: 218 +index_buffer: 217 +index_buffer: 750 +index_buffer: 766 +index_buffer: 217 +index_buffer: 750 +index_buffer: 217 +index_buffer: 220 +index_buffer: 747 +index_buffer: 750 +index_buffer: 220 +index_buffer: 747 +index_buffer: 220 +index_buffer: 759 +index_buffer: 227 +index_buffer: 226 +index_buffer: 747 +index_buffer: 227 +index_buffer: 747 +index_buffer: 759 +index_buffer: 868 +index_buffer: 869 +index_buffer: 771 +index_buffer: 868 +index_buffer: 771 +index_buffer: 770 +index_buffer: 771 +index_buffer: 869 +index_buffer: 761 +index_buffer: 771 +index_buffer: 761 +index_buffer: 731 +index_buffer: 761 +index_buffer: 869 +index_buffer: 868 +index_buffer: 761 +index_buffer: 868 +index_buffer: 227 +index_buffer: 870 +index_buffer: 644 +index_buffer: 227 +index_buffer: 870 +index_buffer: 227 +index_buffer: 868 +index_buffer: 870 +index_buffer: 642 +index_buffer: 644 +index_buffer: 643 +index_buffer: 642 +index_buffer: 870 +index_buffer: 643 +index_buffer: 870 +index_buffer: 775 +index_buffer: 775 +index_buffer: 870 +index_buffer: 868 +index_buffer: 775 +index_buffer: 868 +index_buffer: 770 +index_buffer: 644 +index_buffer: 645 +index_buffer: 224 +index_buffer: 644 +index_buffer: 224 +index_buffer: 227 +index_buffer: 645 +index_buffer: 647 +index_buffer: 225 +index_buffer: 645 +index_buffer: 225 +index_buffer: 224 +index_buffer: 638 +index_buffer: 225 +index_buffer: 647 +index_buffer: 428 +index_buffer: 233 +index_buffer: 638 +index_buffer: 428 +index_buffer: 638 +index_buffer: 426 +index_buffer: 97 +index_buffer: 871 +index_buffer: 872 +index_buffer: 97 +index_buffer: 872 +index_buffer: 98 +index_buffer: 101 +index_buffer: 105 +index_buffer: 872 +index_buffer: 101 +index_buffer: 872 +index_buffer: 871 +index_buffer: 102 +index_buffer: 101 +index_buffer: 871 +index_buffer: 102 +index_buffer: 871 +index_buffer: 873 +index_buffer: 99 +index_buffer: 873 +index_buffer: 871 +index_buffer: 99 +index_buffer: 871 +index_buffer: 97 +index_buffer: 271 +index_buffer: 270 +index_buffer: 820 +index_buffer: 271 +index_buffer: 820 +index_buffer: 874 +index_buffer: 820 +index_buffer: 265 +index_buffer: 264 +index_buffer: 820 +index_buffer: 264 +index_buffer: 874 +index_buffer: 875 +index_buffer: 331 +index_buffer: 330 +index_buffer: 875 +index_buffer: 330 +index_buffer: 632 +index_buffer: 334 +index_buffer: 875 +index_buffer: 632 +index_buffer: 334 +index_buffer: 632 +index_buffer: 335 +index_buffer: 470 +index_buffer: 876 +index_buffer: 873 +index_buffer: 470 +index_buffer: 873 +index_buffer: 99 +index_buffer: 873 +index_buffer: 876 +index_buffer: 465 +index_buffer: 873 +index_buffer: 465 +index_buffer: 102 +index_buffer: 467 +index_buffer: 465 +index_buffer: 876 +index_buffer: 467 +index_buffer: 876 +index_buffer: 744 +index_buffer: 744 +index_buffer: 876 +index_buffer: 470 +index_buffer: 744 +index_buffer: 470 +index_buffer: 472 +index_buffer: 559 +index_buffer: 558 +index_buffer: 633 +index_buffer: 559 +index_buffer: 633 +index_buffer: 877 +index_buffer: 555 +index_buffer: 877 +index_buffer: 633 +index_buffer: 555 +index_buffer: 633 +index_buffer: 556 +index_buffer: 98 +index_buffer: 872 +index_buffer: 877 +index_buffer: 98 +index_buffer: 877 +index_buffer: 555 +index_buffer: 105 +index_buffer: 559 +index_buffer: 877 +index_buffer: 105 +index_buffer: 877 +index_buffer: 872 +index_buffer: 556 +index_buffer: 330 +index_buffer: 329 +index_buffer: 556 +index_buffer: 329 +index_buffer: 552 +index_buffer: 552 +index_buffer: 329 +index_buffer: 328 +index_buffer: 552 +index_buffer: 328 +index_buffer: 553 +index_buffer: 473 +index_buffer: 271 +index_buffer: 874 +index_buffer: 473 +index_buffer: 874 +index_buffer: 471 +index_buffer: 878 +index_buffer: 817 +index_buffer: 261 +index_buffer: 878 +index_buffer: 261 +index_buffer: 262 +index_buffer: 819 +index_buffer: 878 +index_buffer: 262 +index_buffer: 819 +index_buffer: 262 +index_buffer: 265 +index_buffer: 216 +index_buffer: 215 +index_buffer: 879 +index_buffer: 216 +index_buffer: 879 +index_buffer: 854 +index_buffer: 215 +index_buffer: 218 +index_buffer: 865 +index_buffer: 215 +index_buffer: 865 +index_buffer: 879 +index_buffer: 618 +index_buffer: 403 +index_buffer: 405 +index_buffer: 618 +index_buffer: 405 +index_buffer: 198 +index_buffer: 487 +index_buffer: 172 +index_buffer: 175 +index_buffer: 487 +index_buffer: 175 +index_buffer: 488 +index_buffer: 491 +index_buffer: 588 +index_buffer: 680 +index_buffer: 491 +index_buffer: 680 +index_buffer: 492 +index_buffer: 495 +index_buffer: 786 +index_buffer: 589 +index_buffer: 495 +index_buffer: 589 +index_buffer: 496 +index_buffer: 499 +index_buffer: 785 +index_buffer: 786 +index_buffer: 499 +index_buffer: 786 +index_buffer: 495 +index_buffer: 501 +index_buffer: 784 +index_buffer: 785 +index_buffer: 501 +index_buffer: 785 +index_buffer: 499 +index_buffer: 501 +index_buffer: 503 +index_buffer: 783 +index_buffer: 501 +index_buffer: 783 +index_buffer: 784 +index_buffer: 505 +index_buffer: 782 +index_buffer: 783 +index_buffer: 505 +index_buffer: 783 +index_buffer: 503 +index_buffer: 507 +index_buffer: 781 +index_buffer: 782 +index_buffer: 507 +index_buffer: 782 +index_buffer: 505 +index_buffer: 780 +index_buffer: 781 +index_buffer: 507 +index_buffer: 780 +index_buffer: 507 +index_buffer: 509 +index_buffer: 510 +index_buffer: 779 +index_buffer: 780 +index_buffer: 510 +index_buffer: 780 +index_buffer: 509 +index_buffer: 513 +index_buffer: 778 +index_buffer: 779 +index_buffer: 513 +index_buffer: 779 +index_buffer: 510 +index_buffer: 513 +index_buffer: 514 +index_buffer: 153 +index_buffer: 513 +index_buffer: 153 +index_buffer: 778 +index_buffer: 517 +index_buffer: 516 +index_buffer: 789 +index_buffer: 517 +index_buffer: 789 +index_buffer: 157 +index_buffer: 521 +index_buffer: 790 +index_buffer: 789 +index_buffer: 521 +index_buffer: 789 +index_buffer: 516 +index_buffer: 405 +index_buffer: 605 +index_buffer: 197 +index_buffer: 405 +index_buffer: 197 +index_buffer: 198 +index_buffer: 605 +index_buffer: 607 +index_buffer: 196 +index_buffer: 605 +index_buffer: 196 +index_buffer: 197 +index_buffer: 153 +index_buffer: 514 +index_buffer: 627 +index_buffer: 153 +index_buffer: 627 +index_buffer: 154 +index_buffer: 154 +index_buffer: 627 +index_buffer: 517 +index_buffer: 154 +index_buffer: 517 +index_buffer: 157 +index_buffer: 620 +index_buffer: 790 +index_buffer: 521 +index_buffer: 620 +index_buffer: 521 +index_buffer: 659 +index_buffer: 440 +index_buffer: 237 +index_buffer: 236 +index_buffer: 440 +index_buffer: 236 +index_buffer: 439 +index_buffer: 446 +index_buffer: 241 +index_buffer: 240 +index_buffer: 446 +index_buffer: 240 +index_buffer: 445 +index_buffer: 451 +index_buffer: 242 +index_buffer: 245 +index_buffer: 451 +index_buffer: 245 +index_buffer: 450 +index_buffer: 455 +index_buffer: 249 +index_buffer: 248 +index_buffer: 455 +index_buffer: 248 +index_buffer: 454 +index_buffer: 253 +index_buffer: 252 +index_buffer: 458 +index_buffer: 253 +index_buffer: 458 +index_buffer: 459 +index_buffer: 257 +index_buffer: 256 +index_buffer: 462 +index_buffer: 257 +index_buffer: 462 +index_buffer: 463 +index_buffer: 259 +index_buffer: 466 +index_buffer: 467 +index_buffer: 259 +index_buffer: 467 +index_buffer: 260 +index_buffer: 263 +index_buffer: 744 +index_buffer: 472 +index_buffer: 263 +index_buffer: 472 +index_buffer: 264 +index_buffer: 479 +index_buffer: 277 +index_buffer: 708 +index_buffer: 479 +index_buffer: 708 +index_buffer: 477 +index_buffer: 478 +index_buffer: 266 +index_buffer: 269 +index_buffer: 478 +index_buffer: 269 +index_buffer: 711 +index_buffer: 273 +index_buffer: 272 +index_buffer: 717 +index_buffer: 273 +index_buffer: 717 +index_buffer: 485 +index_buffer: 874 +index_buffer: 264 +index_buffer: 472 +index_buffer: 874 +index_buffer: 472 +index_buffer: 471 +index_buffer: 687 +index_buffer: 880 +index_buffer: 776 +index_buffer: 687 +index_buffer: 776 +index_buffer: 408 +index_buffer: 880 +index_buffer: 846 +index_buffer: 777 +index_buffer: 880 +index_buffer: 777 +index_buffer: 776 +index_buffer: 881 +index_buffer: 848 +index_buffer: 846 +index_buffer: 881 +index_buffer: 846 +index_buffer: 880 +index_buffer: 740 +index_buffer: 881 +index_buffer: 880 +index_buffer: 740 +index_buffer: 880 +index_buffer: 687 +index_buffer: 231 +index_buffer: 233 +index_buffer: 428 +index_buffer: 231 +index_buffer: 428 +index_buffer: 433 +index_buffer: 882 +index_buffer: 847 +index_buffer: 848 +index_buffer: 882 +index_buffer: 848 +index_buffer: 883 +index_buffer: 883 +index_buffer: 858 +index_buffer: 857 +index_buffer: 883 +index_buffer: 857 +index_buffer: 882 +index_buffer: 883 +index_buffer: 848 +index_buffer: 881 +index_buffer: 883 +index_buffer: 881 +index_buffer: 884 +index_buffer: 859 +index_buffer: 858 +index_buffer: 883 +index_buffer: 859 +index_buffer: 883 +index_buffer: 884 +index_buffer: 859 +index_buffer: 884 +index_buffer: 739 +index_buffer: 859 +index_buffer: 739 +index_buffer: 861 +index_buffer: 739 +index_buffer: 884 +index_buffer: 881 +index_buffer: 739 +index_buffer: 881 +index_buffer: 740 +index_buffer: 686 +index_buffer: 738 +index_buffer: 740 +index_buffer: 686 +index_buffer: 740 +index_buffer: 687 +index_buffer: 736 +index_buffer: 861 +index_buffer: 739 +index_buffer: 736 +index_buffer: 739 +index_buffer: 737 +index_buffer: 866 +index_buffer: 862 +index_buffer: 861 +index_buffer: 866 +index_buffer: 861 +index_buffer: 736 +index_buffer: 163 +index_buffer: 655 +index_buffer: 654 +index_buffer: 163 +index_buffer: 654 +index_buffer: 164 +index_buffer: 787 +index_buffer: 203 +index_buffer: 204 +index_buffer: 787 +index_buffer: 204 +index_buffer: 788 +index_buffer: 658 +index_buffer: 401 +index_buffer: 403 +index_buffer: 658 +index_buffer: 403 +index_buffer: 659 +index_buffer: 414 +index_buffer: 413 +index_buffer: 660 +index_buffer: 414 +index_buffer: 660 +index_buffer: 663 +index_buffer: 656 +index_buffer: 163 +index_buffer: 159 +index_buffer: 656 +index_buffer: 159 +index_buffer: 165 +index_buffer: 754 +index_buffer: 788 +index_buffer: 204 +index_buffer: 754 +index_buffer: 204 +index_buffer: 657 +index_buffer: 411 +index_buffer: 416 +index_buffer: 666 +index_buffer: 411 +index_buffer: 666 +index_buffer: 413 +index_buffer: 671 +index_buffer: 414 +index_buffer: 663 +index_buffer: 671 +index_buffer: 663 +index_buffer: 673 +index_buffer: 701 +index_buffer: 672 +index_buffer: 671 +index_buffer: 701 +index_buffer: 671 +index_buffer: 675 +index_buffer: 594 +index_buffer: 593 +index_buffer: 656 +index_buffer: 594 +index_buffer: 656 +index_buffer: 703 +index_buffer: 401 +index_buffer: 164 +index_buffer: 654 +index_buffer: 401 +index_buffer: 654 +index_buffer: 402 +index_buffer: 752 +index_buffer: 657 +index_buffer: 205 +index_buffer: 752 +index_buffer: 205 +index_buffer: 755 +index_buffer: 416 +index_buffer: 753 +index_buffer: 752 +index_buffer: 416 +index_buffer: 752 +index_buffer: 666 +index_buffer: 674 +index_buffer: 594 +index_buffer: 703 +index_buffer: 674 +index_buffer: 703 +index_buffer: 675 +index_buffer: 203 +index_buffer: 787 +index_buffer: 867 +index_buffer: 203 +index_buffer: 867 +index_buffer: 851 +index_buffer: 408 +index_buffer: 742 +index_buffer: 406 +index_buffer: 408 +index_buffer: 407 +index_buffer: 741 +index_buffer: 607 +index_buffer: 606 +index_buffer: 743 +index_buffer: 607 +index_buffer: 743 +index_buffer: 599 +index_buffer: 79 +index_buffer: 885 +index_buffer: 886 +index_buffer: 79 +index_buffer: 886 +index_buffer: 80 +index_buffer: 885 +index_buffer: 79 +index_buffer: 77 +index_buffer: 885 +index_buffer: 77 +index_buffer: 887 +index_buffer: 885 +index_buffer: 722 +index_buffer: 87 +index_buffer: 885 +index_buffer: 87 +index_buffer: 886 +index_buffer: 885 +index_buffer: 887 +index_buffer: 719 +index_buffer: 885 +index_buffer: 719 +index_buffer: 722 +index_buffer: 170 +index_buffer: 81 +index_buffer: 80 +index_buffer: 170 +index_buffer: 80 +index_buffer: 397 +index_buffer: 80 +index_buffer: 886 +index_buffer: 542 +index_buffer: 80 +index_buffer: 542 +index_buffer: 397 +index_buffer: 546 +index_buffer: 542 +index_buffer: 886 +index_buffer: 546 +index_buffer: 886 +index_buffer: 87 +index_buffer: 78 +index_buffer: 74 +index_buffer: 77 +index_buffer: 78 +index_buffer: 77 +index_buffer: 79 +index_buffer: 172 +index_buffer: 680 +index_buffer: 670 +index_buffer: 172 +index_buffer: 670 +index_buffer: 173 +index_buffer: 668 +index_buffer: 176 +index_buffer: 173 +index_buffer: 668 +index_buffer: 173 +index_buffer: 670 +index_buffer: 279 +index_buffer: 676 +index_buffer: 679 +index_buffer: 279 +index_buffer: 679 +index_buffer: 280 +index_buffer: 282 +index_buffer: 667 +index_buffer: 676 +index_buffer: 282 +index_buffer: 676 +index_buffer: 279 +index_buffer: 683 +index_buffer: 384 +index_buffer: 74 +index_buffer: 683 +index_buffer: 74 +index_buffer: 78 +index_buffer: 387 +index_buffer: 384 +index_buffer: 683 +index_buffer: 387 +index_buffer: 683 +index_buffer: 684 +index_buffer: 493 +index_buffer: 492 +index_buffer: 487 +index_buffer: 493 +index_buffer: 487 +index_buffer: 486 +index_buffer: 668 +index_buffer: 667 +index_buffer: 282 +index_buffer: 668 +index_buffer: 282 +index_buffer: 176 +index_buffer: 493 +index_buffer: 486 +index_buffer: 387 +index_buffer: 493 +index_buffer: 387 +index_buffer: 684 +index_buffer: 280 +index_buffer: 679 +index_buffer: 830 +index_buffer: 280 +index_buffer: 830 +index_buffer: 827 +index_buffer: 487 +index_buffer: 492 +index_buffer: 680 +index_buffer: 487 +index_buffer: 680 +index_buffer: 172 +index_buffer: 887 +index_buffer: 77 +index_buffer: 76 +index_buffer: 887 +index_buffer: 76 +index_buffer: 888 +index_buffer: 887 +index_buffer: 888 +index_buffer: 720 +index_buffer: 887 +index_buffer: 720 +index_buffer: 719 +index_buffer: 889 +index_buffer: 890 +index_buffer: 891 +index_buffer: 889 +index_buffer: 891 +index_buffer: 892 +index_buffer: 889 +index_buffer: 893 +index_buffer: 894 +index_buffer: 889 +index_buffer: 894 +index_buffer: 890 +index_buffer: 890 +index_buffer: 895 +index_buffer: 896 +index_buffer: 890 +index_buffer: 896 +index_buffer: 891 +index_buffer: 896 +index_buffer: 895 +index_buffer: 897 +index_buffer: 896 +index_buffer: 897 +index_buffer: 898 +index_buffer: 899 +index_buffer: 900 +index_buffer: 897 +index_buffer: 899 +index_buffer: 897 +index_buffer: 895 +index_buffer: 897 +index_buffer: 901 +index_buffer: 902 +index_buffer: 897 +index_buffer: 902 +index_buffer: 898 +index_buffer: 903 +index_buffer: 904 +index_buffer: 902 +index_buffer: 903 +index_buffer: 902 +index_buffer: 901 +index_buffer: 905 +index_buffer: 906 +index_buffer: 903 +index_buffer: 905 +index_buffer: 903 +index_buffer: 901 +index_buffer: 904 +index_buffer: 903 +index_buffer: 907 +index_buffer: 904 +index_buffer: 907 +index_buffer: 908 +index_buffer: 907 +index_buffer: 909 +index_buffer: 910 +index_buffer: 907 +index_buffer: 910 +index_buffer: 908 +index_buffer: 907 +index_buffer: 911 +index_buffer: 912 +index_buffer: 907 +index_buffer: 912 +index_buffer: 909 +index_buffer: 910 +index_buffer: 909 +index_buffer: 913 +index_buffer: 910 +index_buffer: 913 +index_buffer: 914 +index_buffer: 915 +index_buffer: 916 +index_buffer: 917 +index_buffer: 915 +index_buffer: 917 +index_buffer: 918 +index_buffer: 919 +index_buffer: 915 +index_buffer: 918 +index_buffer: 919 +index_buffer: 918 +index_buffer: 920 +index_buffer: 7 +index_buffer: 921 +index_buffer: 922 +index_buffer: 7 +index_buffer: 922 +index_buffer: 8 +index_buffer: 923 +index_buffer: 924 +index_buffer: 921 +index_buffer: 923 +index_buffer: 921 +index_buffer: 7 +index_buffer: 925 +index_buffer: 924 +index_buffer: 923 +index_buffer: 925 +index_buffer: 923 +index_buffer: 926 +index_buffer: 925 +index_buffer: 926 +index_buffer: 927 +index_buffer: 925 +index_buffer: 927 +index_buffer: 928 +index_buffer: 929 +index_buffer: 930 +index_buffer: 931 +index_buffer: 929 +index_buffer: 931 +index_buffer: 932 +index_buffer: 933 +index_buffer: 934 +index_buffer: 930 +index_buffer: 933 +index_buffer: 930 +index_buffer: 929 +index_buffer: 935 +index_buffer: 936 +index_buffer: 934 +index_buffer: 935 +index_buffer: 934 +index_buffer: 933 +index_buffer: 937 +index_buffer: 936 +index_buffer: 935 +index_buffer: 937 +index_buffer: 935 +index_buffer: 938 +index_buffer: 939 +index_buffer: 937 +index_buffer: 938 +index_buffer: 939 +index_buffer: 938 +index_buffer: 940 +index_buffer: 941 +index_buffer: 939 +index_buffer: 940 +index_buffer: 941 +index_buffer: 940 +index_buffer: 942 +index_buffer: 943 +index_buffer: 941 +index_buffer: 942 +index_buffer: 943 +index_buffer: 942 +index_buffer: 944 +index_buffer: 945 +index_buffer: 943 +index_buffer: 944 +index_buffer: 945 +index_buffer: 944 +index_buffer: 946 +index_buffer: 947 +index_buffer: 914 +index_buffer: 913 +index_buffer: 947 +index_buffer: 913 +index_buffer: 948 +index_buffer: 913 +index_buffer: 949 +index_buffer: 950 +index_buffer: 913 +index_buffer: 950 +index_buffer: 948 +index_buffer: 951 +index_buffer: 947 +index_buffer: 948 +index_buffer: 951 +index_buffer: 948 +index_buffer: 952 +index_buffer: 76 +index_buffer: 75 +index_buffer: 953 +index_buffer: 76 +index_buffer: 953 +index_buffer: 954 +index_buffer: 955 +index_buffer: 956 +index_buffer: 957 +index_buffer: 955 +index_buffer: 957 +index_buffer: 958 +index_buffer: 959 +index_buffer: 960 +index_buffer: 961 +index_buffer: 959 +index_buffer: 961 +index_buffer: 962 +index_buffer: 963 +index_buffer: 959 +index_buffer: 962 +index_buffer: 963 +index_buffer: 962 +index_buffer: 964 +index_buffer: 965 +index_buffer: 966 +index_buffer: 959 +index_buffer: 965 +index_buffer: 959 +index_buffer: 963 +index_buffer: 966 +index_buffer: 967 +index_buffer: 960 +index_buffer: 966 +index_buffer: 960 +index_buffer: 959 +index_buffer: 968 +index_buffer: 969 +index_buffer: 970 +index_buffer: 968 +index_buffer: 970 +index_buffer: 971 +index_buffer: 972 +index_buffer: 973 +index_buffer: 969 +index_buffer: 972 +index_buffer: 969 +index_buffer: 968 +index_buffer: 974 +index_buffer: 975 +index_buffer: 969 +index_buffer: 974 +index_buffer: 969 +index_buffer: 973 +index_buffer: 969 +index_buffer: 975 +index_buffer: 976 +index_buffer: 969 +index_buffer: 976 +index_buffer: 970 +index_buffer: 977 +index_buffer: 978 +index_buffer: 979 +index_buffer: 977 +index_buffer: 979 +index_buffer: 980 +index_buffer: 981 +index_buffer: 982 +index_buffer: 979 +index_buffer: 981 +index_buffer: 979 +index_buffer: 978 +index_buffer: 979 +index_buffer: 982 +index_buffer: 983 +index_buffer: 979 +index_buffer: 983 +index_buffer: 984 +index_buffer: 979 +index_buffer: 984 +index_buffer: 985 +index_buffer: 979 +index_buffer: 985 +index_buffer: 980 +index_buffer: 985 +index_buffer: 984 +index_buffer: 986 +index_buffer: 985 +index_buffer: 986 +index_buffer: 987 +index_buffer: 983 +index_buffer: 988 +index_buffer: 986 +index_buffer: 983 +index_buffer: 986 +index_buffer: 984 +index_buffer: 986 +index_buffer: 988 +index_buffer: 989 +index_buffer: 986 +index_buffer: 989 +index_buffer: 990 +index_buffer: 987 +index_buffer: 986 +index_buffer: 990 +index_buffer: 987 +index_buffer: 990 +index_buffer: 991 +index_buffer: 991 +index_buffer: 990 +index_buffer: 992 +index_buffer: 991 +index_buffer: 992 +index_buffer: 993 +index_buffer: 990 +index_buffer: 989 +index_buffer: 994 +index_buffer: 990 +index_buffer: 994 +index_buffer: 992 +index_buffer: 992 +index_buffer: 994 +index_buffer: 995 +index_buffer: 992 +index_buffer: 995 +index_buffer: 996 +index_buffer: 993 +index_buffer: 992 +index_buffer: 996 +index_buffer: 993 +index_buffer: 996 +index_buffer: 997 +index_buffer: 996 +index_buffer: 998 +index_buffer: 999 +index_buffer: 996 +index_buffer: 999 +index_buffer: 997 +index_buffer: 996 +index_buffer: 995 +index_buffer: 1000 +index_buffer: 996 +index_buffer: 1000 +index_buffer: 998 +index_buffer: 998 +index_buffer: 1000 +index_buffer: 1001 +index_buffer: 998 +index_buffer: 1001 +index_buffer: 1002 +index_buffer: 999 +index_buffer: 998 +index_buffer: 1002 +index_buffer: 999 +index_buffer: 1002 +index_buffer: 1003 +index_buffer: 1004 +index_buffer: 1005 +index_buffer: 1006 +index_buffer: 1004 +index_buffer: 1006 +index_buffer: 1007 +index_buffer: 1007 +index_buffer: 917 +index_buffer: 1008 +index_buffer: 1007 +index_buffer: 1008 +index_buffer: 1004 +index_buffer: 1008 +index_buffer: 1009 +index_buffer: 1010 +index_buffer: 1008 +index_buffer: 1010 +index_buffer: 1004 +index_buffer: 1005 +index_buffer: 1004 +index_buffer: 1010 +index_buffer: 1005 +index_buffer: 1010 +index_buffer: 1011 +index_buffer: 1012 +index_buffer: 1013 +index_buffer: 1011 +index_buffer: 1012 +index_buffer: 1011 +index_buffer: 1010 +index_buffer: 1009 +index_buffer: 1014 +index_buffer: 1012 +index_buffer: 1009 +index_buffer: 1012 +index_buffer: 1010 +index_buffer: 1015 +index_buffer: 1012 +index_buffer: 1014 +index_buffer: 1015 +index_buffer: 1014 +index_buffer: 1016 +index_buffer: 1015 +index_buffer: 1017 +index_buffer: 1013 +index_buffer: 1015 +index_buffer: 1013 +index_buffer: 1012 +index_buffer: 1015 +index_buffer: 1018 +index_buffer: 1019 +index_buffer: 1015 +index_buffer: 1019 +index_buffer: 1017 +index_buffer: 1018 +index_buffer: 1015 +index_buffer: 1016 +index_buffer: 1018 +index_buffer: 1016 +index_buffer: 1020 +index_buffer: 1018 +index_buffer: 1020 +index_buffer: 1021 +index_buffer: 1018 +index_buffer: 1021 +index_buffer: 1022 +index_buffer: 1022 +index_buffer: 1023 +index_buffer: 1019 +index_buffer: 1022 +index_buffer: 1019 +index_buffer: 1018 +index_buffer: 1023 +index_buffer: 1022 +index_buffer: 1024 +index_buffer: 1023 +index_buffer: 1024 +index_buffer: 1025 +index_buffer: 1021 +index_buffer: 1026 +index_buffer: 1024 +index_buffer: 1021 +index_buffer: 1024 +index_buffer: 1022 +index_buffer: 1024 +index_buffer: 1026 +index_buffer: 1027 +index_buffer: 1024 +index_buffer: 1027 +index_buffer: 1028 +index_buffer: 1025 +index_buffer: 1024 +index_buffer: 1028 +index_buffer: 1025 +index_buffer: 1028 +index_buffer: 1029 +index_buffer: 1030 +index_buffer: 1031 +index_buffer: 1032 +index_buffer: 1030 +index_buffer: 1032 +index_buffer: 893 +index_buffer: 1033 +index_buffer: 1030 +index_buffer: 893 +index_buffer: 1033 +index_buffer: 893 +index_buffer: 889 +index_buffer: 1034 +index_buffer: 1035 +index_buffer: 1031 +index_buffer: 1034 +index_buffer: 1031 +index_buffer: 1030 +index_buffer: 1036 +index_buffer: 1037 +index_buffer: 1038 +index_buffer: 1036 +index_buffer: 1038 +index_buffer: 1039 +index_buffer: 1037 +index_buffer: 1040 +index_buffer: 1041 +index_buffer: 1037 +index_buffer: 1041 +index_buffer: 1038 +index_buffer: 1039 +index_buffer: 1038 +index_buffer: 1042 +index_buffer: 1039 +index_buffer: 1042 +index_buffer: 9 +index_buffer: 1029 +index_buffer: 1028 +index_buffer: 1043 +index_buffer: 1029 +index_buffer: 1043 +index_buffer: 1044 +index_buffer: 1028 +index_buffer: 1027 +index_buffer: 1045 +index_buffer: 1028 +index_buffer: 1045 +index_buffer: 1043 +index_buffer: 1046 +index_buffer: 1043 +index_buffer: 1045 +index_buffer: 1046 +index_buffer: 1045 +index_buffer: 1047 +index_buffer: 1048 +index_buffer: 1044 +index_buffer: 1043 +index_buffer: 1048 +index_buffer: 1043 +index_buffer: 1046 +index_buffer: 174 +index_buffer: 1049 +index_buffer: 1050 +index_buffer: 174 +index_buffer: 1050 +index_buffer: 175 +index_buffer: 174 +index_buffer: 177 +index_buffer: 1051 +index_buffer: 174 +index_buffer: 1051 +index_buffer: 1049 +index_buffer: 1052 +index_buffer: 1053 +index_buffer: 1054 +index_buffer: 1052 +index_buffer: 1054 +index_buffer: 1055 +index_buffer: 1056 +index_buffer: 1057 +index_buffer: 1055 +index_buffer: 1056 +index_buffer: 1055 +index_buffer: 1054 +index_buffer: 892 +index_buffer: 891 +index_buffer: 1055 +index_buffer: 892 +index_buffer: 1055 +index_buffer: 1057 +index_buffer: 1055 +index_buffer: 891 +index_buffer: 896 +index_buffer: 1055 +index_buffer: 896 +index_buffer: 1052 +index_buffer: 1058 +index_buffer: 1057 +index_buffer: 1056 +index_buffer: 1058 +index_buffer: 1056 +index_buffer: 1059 +index_buffer: 1058 +index_buffer: 1059 +index_buffer: 1060 +index_buffer: 1058 +index_buffer: 1060 +index_buffer: 1061 +index_buffer: 1061 +index_buffer: 1062 +index_buffer: 1063 +index_buffer: 1061 +index_buffer: 1063 +index_buffer: 1058 +index_buffer: 1058 +index_buffer: 1063 +index_buffer: 892 +index_buffer: 1058 +index_buffer: 892 +index_buffer: 1057 +index_buffer: 1064 +index_buffer: 1065 +index_buffer: 1066 +index_buffer: 1064 +index_buffer: 1066 +index_buffer: 1067 +index_buffer: 1068 +index_buffer: 1069 +index_buffer: 1067 +index_buffer: 1068 +index_buffer: 1067 +index_buffer: 1066 +index_buffer: 1067 +index_buffer: 1069 +index_buffer: 1070 +index_buffer: 1067 +index_buffer: 1070 +index_buffer: 1071 +index_buffer: 1072 +index_buffer: 1064 +index_buffer: 1067 +index_buffer: 1072 +index_buffer: 1067 +index_buffer: 1071 +index_buffer: 1073 +index_buffer: 1074 +index_buffer: 1075 +index_buffer: 1073 +index_buffer: 1075 +index_buffer: 1076 +index_buffer: 1074 +index_buffer: 1073 +index_buffer: 1077 +index_buffer: 1074 +index_buffer: 1077 +index_buffer: 1078 +index_buffer: 1075 +index_buffer: 1074 +index_buffer: 1079 +index_buffer: 1075 +index_buffer: 1079 +index_buffer: 1080 +index_buffer: 1081 +index_buffer: 1082 +index_buffer: 1083 +index_buffer: 1081 +index_buffer: 1083 +index_buffer: 1084 +index_buffer: 1085 +index_buffer: 1086 +index_buffer: 1081 +index_buffer: 1085 +index_buffer: 1081 +index_buffer: 1084 +index_buffer: 1087 +index_buffer: 1088 +index_buffer: 1089 +index_buffer: 1087 +index_buffer: 1089 +index_buffer: 1090 +index_buffer: 1091 +index_buffer: 1088 +index_buffer: 1087 +index_buffer: 1091 +index_buffer: 1087 +index_buffer: 1092 +index_buffer: 1093 +index_buffer: 1094 +index_buffer: 1088 +index_buffer: 1093 +index_buffer: 1088 +index_buffer: 1091 +index_buffer: 1094 +index_buffer: 1095 +index_buffer: 1089 +index_buffer: 1094 +index_buffer: 1089 +index_buffer: 1088 +index_buffer: 1096 +index_buffer: 1097 +index_buffer: 1098 +index_buffer: 1096 +index_buffer: 1098 +index_buffer: 1099 +index_buffer: 1100 +index_buffer: 1097 +index_buffer: 1096 +index_buffer: 1100 +index_buffer: 1096 +index_buffer: 1101 +index_buffer: 1102 +index_buffer: 1103 +index_buffer: 1104 +index_buffer: 1102 +index_buffer: 1104 +index_buffer: 1105 +index_buffer: 1106 +index_buffer: 1102 +index_buffer: 1105 +index_buffer: 1106 +index_buffer: 1105 +index_buffer: 1107 +index_buffer: 1108 +index_buffer: 1109 +index_buffer: 1110 +index_buffer: 1108 +index_buffer: 1110 +index_buffer: 1111 +index_buffer: 1103 +index_buffer: 1109 +index_buffer: 1108 +index_buffer: 1103 +index_buffer: 1108 +index_buffer: 1104 +index_buffer: 1112 +index_buffer: 1113 +index_buffer: 1114 +index_buffer: 1112 +index_buffer: 1114 +index_buffer: 1115 +index_buffer: 1113 +index_buffer: 1112 +index_buffer: 1111 +index_buffer: 1113 +index_buffer: 1111 +index_buffer: 1110 +index_buffer: 1116 +index_buffer: 1117 +index_buffer: 1118 +index_buffer: 1116 +index_buffer: 1118 +index_buffer: 1119 +index_buffer: 1115 +index_buffer: 1114 +index_buffer: 1116 +index_buffer: 1115 +index_buffer: 1116 +index_buffer: 1119 +index_buffer: 1120 +index_buffer: 1121 +index_buffer: 1122 +index_buffer: 1120 +index_buffer: 1122 +index_buffer: 1123 +index_buffer: 1117 +index_buffer: 1121 +index_buffer: 1120 +index_buffer: 1117 +index_buffer: 1120 +index_buffer: 1118 +index_buffer: 1124 +index_buffer: 1125 +index_buffer: 1126 +index_buffer: 1124 +index_buffer: 1126 +index_buffer: 1127 +index_buffer: 1123 +index_buffer: 1122 +index_buffer: 1125 +index_buffer: 1123 +index_buffer: 1125 +index_buffer: 1124 +index_buffer: 1128 +index_buffer: 1129 +index_buffer: 1130 +index_buffer: 1128 +index_buffer: 1130 +index_buffer: 1131 +index_buffer: 1126 +index_buffer: 1129 +index_buffer: 1128 +index_buffer: 1126 +index_buffer: 1128 +index_buffer: 1127 +index_buffer: 1132 +index_buffer: 1133 +index_buffer: 1134 +index_buffer: 1132 +index_buffer: 1134 +index_buffer: 1135 +index_buffer: 1131 +index_buffer: 1130 +index_buffer: 1134 +index_buffer: 1131 +index_buffer: 1134 +index_buffer: 1133 +index_buffer: 1136 +index_buffer: 1137 +index_buffer: 1138 +index_buffer: 1136 +index_buffer: 1138 +index_buffer: 1139 +index_buffer: 1137 +index_buffer: 1132 +index_buffer: 1135 +index_buffer: 1137 +index_buffer: 1135 +index_buffer: 1138 +index_buffer: 1140 +index_buffer: 1141 +index_buffer: 1142 +index_buffer: 1140 +index_buffer: 1142 +index_buffer: 1143 +index_buffer: 1144 +index_buffer: 1140 +index_buffer: 1143 +index_buffer: 1144 +index_buffer: 1143 +index_buffer: 1145 +index_buffer: 1146 +index_buffer: 1147 +index_buffer: 1148 +index_buffer: 1146 +index_buffer: 1148 +index_buffer: 1149 +index_buffer: 1148 +index_buffer: 1150 +index_buffer: 1151 +index_buffer: 1148 +index_buffer: 1151 +index_buffer: 1149 +index_buffer: 1152 +index_buffer: 1153 +index_buffer: 278 +index_buffer: 1152 +index_buffer: 278 +index_buffer: 281 +index_buffer: 278 +index_buffer: 1153 +index_buffer: 1154 +index_buffer: 278 +index_buffer: 1154 +index_buffer: 283 +index_buffer: 1155 +index_buffer: 1156 +index_buffer: 1157 +index_buffer: 1155 +index_buffer: 1157 +index_buffer: 1158 +index_buffer: 1159 +index_buffer: 1160 +index_buffer: 1156 +index_buffer: 1159 +index_buffer: 1156 +index_buffer: 1155 +index_buffer: 908 +index_buffer: 910 +index_buffer: 1156 +index_buffer: 908 +index_buffer: 1156 +index_buffer: 1160 +index_buffer: 1157 +index_buffer: 1156 +index_buffer: 910 +index_buffer: 1157 +index_buffer: 910 +index_buffer: 914 +index_buffer: 1161 +index_buffer: 1162 +index_buffer: 1160 +index_buffer: 1161 +index_buffer: 1160 +index_buffer: 1159 +index_buffer: 1161 +index_buffer: 1163 +index_buffer: 1164 +index_buffer: 1161 +index_buffer: 1164 +index_buffer: 1162 +index_buffer: 1162 +index_buffer: 1164 +index_buffer: 902 +index_buffer: 1162 +index_buffer: 902 +index_buffer: 904 +index_buffer: 1160 +index_buffer: 1162 +index_buffer: 904 +index_buffer: 1160 +index_buffer: 904 +index_buffer: 908 +index_buffer: 1164 +index_buffer: 1163 +index_buffer: 1165 +index_buffer: 1164 +index_buffer: 1165 +index_buffer: 1166 +index_buffer: 1165 +index_buffer: 1053 +index_buffer: 1052 +index_buffer: 1165 +index_buffer: 1052 +index_buffer: 1166 +index_buffer: 1166 +index_buffer: 1052 +index_buffer: 896 +index_buffer: 1166 +index_buffer: 896 +index_buffer: 898 +index_buffer: 902 +index_buffer: 1164 +index_buffer: 1166 +index_buffer: 902 +index_buffer: 1166 +index_buffer: 898 +index_buffer: 1167 +index_buffer: 1168 +index_buffer: 1169 +index_buffer: 1167 +index_buffer: 1169 +index_buffer: 1170 +index_buffer: 1169 +index_buffer: 1168 +index_buffer: 1171 +index_buffer: 1169 +index_buffer: 1171 +index_buffer: 1172 +index_buffer: 1171 +index_buffer: 1173 +index_buffer: 1174 +index_buffer: 1171 +index_buffer: 1174 +index_buffer: 1172 +index_buffer: 1173 +index_buffer: 1175 +index_buffer: 1176 +index_buffer: 1173 +index_buffer: 1176 +index_buffer: 1174 +index_buffer: 1175 +index_buffer: 1177 +index_buffer: 1178 +index_buffer: 1175 +index_buffer: 1178 +index_buffer: 1176 +index_buffer: 1178 +index_buffer: 1177 +index_buffer: 1179 +index_buffer: 1178 +index_buffer: 1179 +index_buffer: 1180 +index_buffer: 1180 +index_buffer: 1179 +index_buffer: 1181 +index_buffer: 1180 +index_buffer: 1181 +index_buffer: 1182 +index_buffer: 1182 +index_buffer: 1181 +index_buffer: 1183 +index_buffer: 1182 +index_buffer: 1183 +index_buffer: 1184 +index_buffer: 1184 +index_buffer: 1183 +index_buffer: 1185 +index_buffer: 1184 +index_buffer: 1185 +index_buffer: 1186 +index_buffer: 1186 +index_buffer: 1185 +index_buffer: 1187 +index_buffer: 1186 +index_buffer: 1187 +index_buffer: 1188 +index_buffer: 1187 +index_buffer: 1189 +index_buffer: 1190 +index_buffer: 1187 +index_buffer: 1190 +index_buffer: 1188 +index_buffer: 1189 +index_buffer: 1191 +index_buffer: 1192 +index_buffer: 1189 +index_buffer: 1192 +index_buffer: 1190 +index_buffer: 1191 +index_buffer: 1193 +index_buffer: 1194 +index_buffer: 1191 +index_buffer: 1194 +index_buffer: 1192 +index_buffer: 1193 +index_buffer: 1195 +index_buffer: 1196 +index_buffer: 1193 +index_buffer: 1196 +index_buffer: 1194 +index_buffer: 1197 +index_buffer: 1198 +index_buffer: 1199 +index_buffer: 1197 +index_buffer: 1199 +index_buffer: 1200 +index_buffer: 1199 +index_buffer: 1201 +index_buffer: 1202 +index_buffer: 1199 +index_buffer: 1202 +index_buffer: 1200 +index_buffer: 1203 +index_buffer: 1204 +index_buffer: 1205 +index_buffer: 1203 +index_buffer: 1205 +index_buffer: 1206 +index_buffer: 1205 +index_buffer: 1204 +index_buffer: 1207 +index_buffer: 1205 +index_buffer: 1207 +index_buffer: 1208 +index_buffer: 1207 +index_buffer: 1209 +index_buffer: 1210 +index_buffer: 1207 +index_buffer: 1210 +index_buffer: 1208 +index_buffer: 1210 +index_buffer: 1209 +index_buffer: 1211 +index_buffer: 1210 +index_buffer: 1211 +index_buffer: 1212 +index_buffer: 1211 +index_buffer: 1213 +index_buffer: 1214 +index_buffer: 1211 +index_buffer: 1214 +index_buffer: 1212 +index_buffer: 1214 +index_buffer: 1213 +index_buffer: 1215 +index_buffer: 1214 +index_buffer: 1215 +index_buffer: 1216 +index_buffer: 1215 +index_buffer: 1217 +index_buffer: 1218 +index_buffer: 1215 +index_buffer: 1218 +index_buffer: 1216 +index_buffer: 1218 +index_buffer: 1217 +index_buffer: 1219 +index_buffer: 1218 +index_buffer: 1219 +index_buffer: 1220 +index_buffer: 1219 +index_buffer: 1221 +index_buffer: 1222 +index_buffer: 1219 +index_buffer: 1222 +index_buffer: 1220 +index_buffer: 1222 +index_buffer: 1221 +index_buffer: 1223 +index_buffer: 1222 +index_buffer: 1223 +index_buffer: 1224 +index_buffer: 1223 +index_buffer: 1225 +index_buffer: 1226 +index_buffer: 1223 +index_buffer: 1226 +index_buffer: 1224 +index_buffer: 1225 +index_buffer: 1227 +index_buffer: 1228 +index_buffer: 1225 +index_buffer: 1228 +index_buffer: 1226 +index_buffer: 1228 +index_buffer: 1227 +index_buffer: 1229 +index_buffer: 1228 +index_buffer: 1229 +index_buffer: 1230 +index_buffer: 1229 +index_buffer: 1231 +index_buffer: 1232 +index_buffer: 1229 +index_buffer: 1232 +index_buffer: 1230 +index_buffer: 1232 +index_buffer: 1231 +index_buffer: 1233 +index_buffer: 1232 +index_buffer: 1233 +index_buffer: 1234 +index_buffer: 1234 +index_buffer: 1233 +index_buffer: 1235 +index_buffer: 1234 +index_buffer: 1235 +index_buffer: 1236 +index_buffer: 1236 +index_buffer: 1235 +index_buffer: 1237 +index_buffer: 1236 +index_buffer: 1237 +index_buffer: 1238 +index_buffer: 1238 +index_buffer: 1237 +index_buffer: 1239 +index_buffer: 1238 +index_buffer: 1239 +index_buffer: 1240 +index_buffer: 1241 +index_buffer: 1242 +index_buffer: 1243 +index_buffer: 1241 +index_buffer: 1243 +index_buffer: 1244 +index_buffer: 1243 +index_buffer: 1242 +index_buffer: 1245 +index_buffer: 1243 +index_buffer: 1245 +index_buffer: 1246 +index_buffer: 1245 +index_buffer: 1247 +index_buffer: 1248 +index_buffer: 1245 +index_buffer: 1248 +index_buffer: 1246 +index_buffer: 1247 +index_buffer: 1249 +index_buffer: 1250 +index_buffer: 1247 +index_buffer: 1250 +index_buffer: 1248 +index_buffer: 918 +index_buffer: 917 +index_buffer: 1007 +index_buffer: 918 +index_buffer: 1007 +index_buffer: 1251 +index_buffer: 1252 +index_buffer: 1251 +index_buffer: 1007 +index_buffer: 1252 +index_buffer: 1007 +index_buffer: 1006 +index_buffer: 1252 +index_buffer: 1253 +index_buffer: 1254 +index_buffer: 1252 +index_buffer: 1254 +index_buffer: 1251 +index_buffer: 920 +index_buffer: 918 +index_buffer: 1251 +index_buffer: 920 +index_buffer: 1251 +index_buffer: 1254 +index_buffer: 75 +index_buffer: 385 +index_buffer: 1255 +index_buffer: 75 +index_buffer: 1255 +index_buffer: 953 +index_buffer: 385 +index_buffer: 386 +index_buffer: 1256 +index_buffer: 385 +index_buffer: 1256 +index_buffer: 1255 +index_buffer: 916 +index_buffer: 1257 +index_buffer: 1008 +index_buffer: 916 +index_buffer: 1008 +index_buffer: 917 +index_buffer: 1257 +index_buffer: 1258 +index_buffer: 1009 +index_buffer: 1257 +index_buffer: 1009 +index_buffer: 1008 +index_buffer: 1258 +index_buffer: 1259 +index_buffer: 1014 +index_buffer: 1258 +index_buffer: 1014 +index_buffer: 1009 +index_buffer: 1014 +index_buffer: 1259 +index_buffer: 1260 +index_buffer: 1014 +index_buffer: 1260 +index_buffer: 1016 +index_buffer: 1016 +index_buffer: 1260 +index_buffer: 1261 +index_buffer: 1016 +index_buffer: 1261 +index_buffer: 1020 +index_buffer: 1020 +index_buffer: 1261 +index_buffer: 1262 +index_buffer: 1020 +index_buffer: 1262 +index_buffer: 1021 +index_buffer: 1021 +index_buffer: 1262 +index_buffer: 1263 +index_buffer: 1021 +index_buffer: 1263 +index_buffer: 1026 +index_buffer: 1026 +index_buffer: 1263 +index_buffer: 1264 +index_buffer: 1026 +index_buffer: 1264 +index_buffer: 1027 +index_buffer: 1027 +index_buffer: 1264 +index_buffer: 1265 +index_buffer: 1027 +index_buffer: 1265 +index_buffer: 1045 +index_buffer: 1047 +index_buffer: 1045 +index_buffer: 1265 +index_buffer: 1047 +index_buffer: 1265 +index_buffer: 1266 +index_buffer: 1083 +index_buffer: 1267 +index_buffer: 1268 +index_buffer: 1083 +index_buffer: 1268 +index_buffer: 1084 +index_buffer: 1085 +index_buffer: 1084 +index_buffer: 1268 +index_buffer: 1085 +index_buffer: 1268 +index_buffer: 1269 +index_buffer: 1270 +index_buffer: 1271 +index_buffer: 1272 +index_buffer: 1273 +index_buffer: 1270 +index_buffer: 1272 +index_buffer: 1273 +index_buffer: 1272 +index_buffer: 1274 +index_buffer: 1275 +index_buffer: 1276 +index_buffer: 1277 +index_buffer: 1278 +index_buffer: 1279 +index_buffer: 1280 +index_buffer: 1278 +index_buffer: 1280 +index_buffer: 1281 +index_buffer: 1282 +index_buffer: 1278 +index_buffer: 1281 +index_buffer: 1282 +index_buffer: 1281 +index_buffer: 1283 +index_buffer: 1284 +index_buffer: 1285 +index_buffer: 1279 +index_buffer: 1284 +index_buffer: 1279 +index_buffer: 1278 +index_buffer: 1280 +index_buffer: 1279 +index_buffer: 1286 +index_buffer: 1280 +index_buffer: 1286 +index_buffer: 1287 +index_buffer: 1285 +index_buffer: 1288 +index_buffer: 1286 +index_buffer: 1285 +index_buffer: 1286 +index_buffer: 1279 +index_buffer: 1289 +index_buffer: 1290 +index_buffer: 1291 +index_buffer: 1289 +index_buffer: 1291 +index_buffer: 1292 +index_buffer: 1293 +index_buffer: 1294 +index_buffer: 1292 +index_buffer: 1293 +index_buffer: 1292 +index_buffer: 1291 +index_buffer: 1295 +index_buffer: 1296 +index_buffer: 1292 +index_buffer: 1295 +index_buffer: 1292 +index_buffer: 1294 +index_buffer: 1289 +index_buffer: 1292 +index_buffer: 1296 +index_buffer: 1289 +index_buffer: 1296 +index_buffer: 1297 +index_buffer: 1298 +index_buffer: 1299 +index_buffer: 1300 +index_buffer: 1298 +index_buffer: 1300 +index_buffer: 1301 +index_buffer: 1290 +index_buffer: 1289 +index_buffer: 1301 +index_buffer: 1290 +index_buffer: 1301 +index_buffer: 1300 +index_buffer: 1297 +index_buffer: 1302 +index_buffer: 1301 +index_buffer: 1297 +index_buffer: 1301 +index_buffer: 1289 +index_buffer: 1302 +index_buffer: 1303 +index_buffer: 1298 +index_buffer: 1302 +index_buffer: 1298 +index_buffer: 1301 +index_buffer: 1304 +index_buffer: 1305 +index_buffer: 1306 +index_buffer: 1304 +index_buffer: 1306 +index_buffer: 1307 +index_buffer: 1299 +index_buffer: 1298 +index_buffer: 1307 +index_buffer: 1299 +index_buffer: 1307 +index_buffer: 1306 +index_buffer: 1303 +index_buffer: 1308 +index_buffer: 1307 +index_buffer: 1303 +index_buffer: 1307 +index_buffer: 1298 +index_buffer: 1308 +index_buffer: 1309 +index_buffer: 1304 +index_buffer: 1308 +index_buffer: 1304 +index_buffer: 1307 +index_buffer: 1310 +index_buffer: 1311 +index_buffer: 1312 +index_buffer: 1310 +index_buffer: 1312 +index_buffer: 1313 +index_buffer: 1311 +index_buffer: 1305 +index_buffer: 1304 +index_buffer: 1311 +index_buffer: 1304 +index_buffer: 1312 +index_buffer: 1309 +index_buffer: 1314 +index_buffer: 1312 +index_buffer: 1309 +index_buffer: 1312 +index_buffer: 1304 +index_buffer: 1315 +index_buffer: 1313 +index_buffer: 1312 +index_buffer: 1315 +index_buffer: 1312 +index_buffer: 1314 +index_buffer: 1316 +index_buffer: 1003 +index_buffer: 1317 +index_buffer: 1316 +index_buffer: 1317 +index_buffer: 1318 +index_buffer: 1317 +index_buffer: 1310 +index_buffer: 1313 +index_buffer: 1317 +index_buffer: 1313 +index_buffer: 1318 +index_buffer: 1315 +index_buffer: 1319 +index_buffer: 1318 +index_buffer: 1315 +index_buffer: 1318 +index_buffer: 1313 +index_buffer: 1318 +index_buffer: 1319 +index_buffer: 1320 +index_buffer: 1318 +index_buffer: 1320 +index_buffer: 1316 +index_buffer: 997 +index_buffer: 999 +index_buffer: 1321 +index_buffer: 997 +index_buffer: 1321 +index_buffer: 1322 +index_buffer: 1003 +index_buffer: 1316 +index_buffer: 1321 +index_buffer: 1003 +index_buffer: 1321 +index_buffer: 999 +index_buffer: 1323 +index_buffer: 1321 +index_buffer: 1316 +index_buffer: 1323 +index_buffer: 1316 +index_buffer: 1320 +index_buffer: 1323 +index_buffer: 1324 +index_buffer: 1322 +index_buffer: 1323 +index_buffer: 1322 +index_buffer: 1321 +index_buffer: 993 +index_buffer: 1325 +index_buffer: 1326 +index_buffer: 993 +index_buffer: 1326 +index_buffer: 991 +index_buffer: 1325 +index_buffer: 993 +index_buffer: 997 +index_buffer: 1325 +index_buffer: 997 +index_buffer: 1322 +index_buffer: 1322 +index_buffer: 1324 +index_buffer: 1327 +index_buffer: 1322 +index_buffer: 1327 +index_buffer: 1325 +index_buffer: 1328 +index_buffer: 1326 +index_buffer: 1325 +index_buffer: 1328 +index_buffer: 1325 +index_buffer: 1327 +index_buffer: 1329 +index_buffer: 985 +index_buffer: 987 +index_buffer: 1329 +index_buffer: 987 +index_buffer: 1330 +index_buffer: 987 +index_buffer: 991 +index_buffer: 1326 +index_buffer: 987 +index_buffer: 1326 +index_buffer: 1330 +index_buffer: 1328 +index_buffer: 1331 +index_buffer: 1330 +index_buffer: 1328 +index_buffer: 1330 +index_buffer: 1326 +index_buffer: 1330 +index_buffer: 1331 +index_buffer: 1332 +index_buffer: 1330 +index_buffer: 1332 +index_buffer: 1329 +index_buffer: 977 +index_buffer: 980 +index_buffer: 1333 +index_buffer: 977 +index_buffer: 1333 +index_buffer: 1334 +index_buffer: 980 +index_buffer: 985 +index_buffer: 1329 +index_buffer: 980 +index_buffer: 1329 +index_buffer: 1333 +index_buffer: 1329 +index_buffer: 1332 +index_buffer: 1335 +index_buffer: 1329 +index_buffer: 1335 +index_buffer: 1333 +index_buffer: 1334 +index_buffer: 1333 +index_buffer: 1335 +index_buffer: 1334 +index_buffer: 1335 +index_buffer: 1336 +index_buffer: 1337 +index_buffer: 1338 +index_buffer: 971 +index_buffer: 1337 +index_buffer: 971 +index_buffer: 970 +index_buffer: 1339 +index_buffer: 1337 +index_buffer: 970 +index_buffer: 1339 +index_buffer: 970 +index_buffer: 976 +index_buffer: 1339 +index_buffer: 1340 +index_buffer: 1341 +index_buffer: 1339 +index_buffer: 1341 +index_buffer: 1337 +index_buffer: 1341 +index_buffer: 1342 +index_buffer: 1338 +index_buffer: 1341 +index_buffer: 1338 +index_buffer: 1337 +index_buffer: 960 +index_buffer: 1343 +index_buffer: 1344 +index_buffer: 960 +index_buffer: 1344 +index_buffer: 961 +index_buffer: 967 +index_buffer: 1345 +index_buffer: 1343 +index_buffer: 967 +index_buffer: 1343 +index_buffer: 960 +index_buffer: 1346 +index_buffer: 1347 +index_buffer: 1343 +index_buffer: 1346 +index_buffer: 1343 +index_buffer: 1345 +index_buffer: 1343 +index_buffer: 1347 +index_buffer: 1348 +index_buffer: 1343 +index_buffer: 1348 +index_buffer: 1344 +index_buffer: 1349 +index_buffer: 1350 +index_buffer: 480 +index_buffer: 1349 +index_buffer: 480 +index_buffer: 483 +index_buffer: 484 +index_buffer: 480 +index_buffer: 1350 +index_buffer: 484 +index_buffer: 1350 +index_buffer: 1351 +index_buffer: 488 +index_buffer: 1352 +index_buffer: 1353 +index_buffer: 488 +index_buffer: 1353 +index_buffer: 489 +index_buffer: 1354 +index_buffer: 1355 +index_buffer: 1356 +index_buffer: 1354 +index_buffer: 1356 +index_buffer: 1357 +index_buffer: 1358 +index_buffer: 1359 +index_buffer: 1360 +index_buffer: 1358 +index_buffer: 1360 +index_buffer: 1361 +index_buffer: 1359 +index_buffer: 1362 +index_buffer: 1363 +index_buffer: 1359 +index_buffer: 1363 +index_buffer: 1360 +index_buffer: 1362 +index_buffer: 1364 +index_buffer: 1365 +index_buffer: 1362 +index_buffer: 1365 +index_buffer: 1363 +index_buffer: 1364 +index_buffer: 1366 +index_buffer: 1367 +index_buffer: 1364 +index_buffer: 1367 +index_buffer: 1365 +index_buffer: 1366 +index_buffer: 1368 +index_buffer: 1369 +index_buffer: 1366 +index_buffer: 1369 +index_buffer: 1367 +index_buffer: 1368 +index_buffer: 1370 +index_buffer: 1371 +index_buffer: 1368 +index_buffer: 1371 +index_buffer: 1369 +index_buffer: 1370 +index_buffer: 1372 +index_buffer: 1373 +index_buffer: 1370 +index_buffer: 1373 +index_buffer: 1371 +index_buffer: 1373 +index_buffer: 1372 +index_buffer: 1374 +index_buffer: 1373 +index_buffer: 1374 +index_buffer: 1375 +index_buffer: 1374 +index_buffer: 1376 +index_buffer: 1377 +index_buffer: 1374 +index_buffer: 1377 +index_buffer: 1375 +index_buffer: 1377 +index_buffer: 1376 +index_buffer: 1378 +index_buffer: 1377 +index_buffer: 1378 +index_buffer: 1379 +index_buffer: 1380 +index_buffer: 1381 +index_buffer: 1382 +index_buffer: 1380 +index_buffer: 1382 +index_buffer: 1383 +index_buffer: 1382 +index_buffer: 1384 +index_buffer: 1385 +index_buffer: 1382 +index_buffer: 1385 +index_buffer: 1383 +index_buffer: 1386 +index_buffer: 1387 +index_buffer: 1388 +index_buffer: 1386 +index_buffer: 1388 +index_buffer: 1389 +index_buffer: 1390 +index_buffer: 1386 +index_buffer: 1389 +index_buffer: 1390 +index_buffer: 1389 +index_buffer: 1391 +index_buffer: 1392 +index_buffer: 1393 +index_buffer: 1386 +index_buffer: 1392 +index_buffer: 1386 +index_buffer: 1390 +index_buffer: 1393 +index_buffer: 1394 +index_buffer: 1387 +index_buffer: 1393 +index_buffer: 1387 +index_buffer: 1386 +index_buffer: 6 +index_buffer: 1395 +index_buffer: 923 +index_buffer: 6 +index_buffer: 923 +index_buffer: 7 +index_buffer: 923 +index_buffer: 1395 +index_buffer: 1396 +index_buffer: 923 +index_buffer: 1396 +index_buffer: 926 +index_buffer: 1396 +index_buffer: 1397 +index_buffer: 927 +index_buffer: 1396 +index_buffer: 927 +index_buffer: 926 +index_buffer: 929 +index_buffer: 932 +index_buffer: 1398 +index_buffer: 929 +index_buffer: 1398 +index_buffer: 1399 +index_buffer: 933 +index_buffer: 929 +index_buffer: 1399 +index_buffer: 933 +index_buffer: 1399 +index_buffer: 1400 +index_buffer: 935 +index_buffer: 933 +index_buffer: 1400 +index_buffer: 935 +index_buffer: 1400 +index_buffer: 1401 +index_buffer: 938 +index_buffer: 935 +index_buffer: 1401 +index_buffer: 938 +index_buffer: 1401 +index_buffer: 1402 +index_buffer: 940 +index_buffer: 938 +index_buffer: 1402 +index_buffer: 940 +index_buffer: 1402 +index_buffer: 1403 +index_buffer: 1404 +index_buffer: 942 +index_buffer: 940 +index_buffer: 1404 +index_buffer: 940 +index_buffer: 1403 +index_buffer: 1405 +index_buffer: 944 +index_buffer: 942 +index_buffer: 1405 +index_buffer: 942 +index_buffer: 1404 +index_buffer: 1001 +index_buffer: 946 +index_buffer: 944 +index_buffer: 1001 +index_buffer: 944 +index_buffer: 1405 +index_buffer: 1406 +index_buffer: 1407 +index_buffer: 1408 +index_buffer: 1406 +index_buffer: 1408 +index_buffer: 1266 +index_buffer: 1408 +index_buffer: 1407 +index_buffer: 1409 +index_buffer: 1408 +index_buffer: 1409 +index_buffer: 1410 +index_buffer: 1410 +index_buffer: 1409 +index_buffer: 1411 +index_buffer: 1410 +index_buffer: 1411 +index_buffer: 1412 +index_buffer: 1412 +index_buffer: 1411 +index_buffer: 1413 +index_buffer: 1412 +index_buffer: 1413 +index_buffer: 1414 +index_buffer: 1415 +index_buffer: 1416 +index_buffer: 1417 +index_buffer: 1415 +index_buffer: 1417 +index_buffer: 1418 +index_buffer: 1416 +index_buffer: 1419 +index_buffer: 1420 +index_buffer: 1416 +index_buffer: 1420 +index_buffer: 1417 +index_buffer: 1421 +index_buffer: 1422 +index_buffer: 1423 +index_buffer: 1421 +index_buffer: 1423 +index_buffer: 1424 +index_buffer: 1424 +index_buffer: 1423 +index_buffer: 1425 +index_buffer: 1424 +index_buffer: 1425 +index_buffer: 1426 +index_buffer: 1425 +index_buffer: 1427 +index_buffer: 1428 +index_buffer: 1425 +index_buffer: 1428 +index_buffer: 1426 +index_buffer: 1427 +index_buffer: 1429 +index_buffer: 1430 +index_buffer: 1427 +index_buffer: 1430 +index_buffer: 1428 +index_buffer: 1430 +index_buffer: 1429 +index_buffer: 1431 +index_buffer: 1430 +index_buffer: 1431 +index_buffer: 1432 +index_buffer: 1432 +index_buffer: 1431 +index_buffer: 1433 +index_buffer: 1432 +index_buffer: 1433 +index_buffer: 1434 +index_buffer: 1434 +index_buffer: 1433 +index_buffer: 1435 +index_buffer: 1434 +index_buffer: 1435 +index_buffer: 1436 +index_buffer: 1436 +index_buffer: 1435 +index_buffer: 945 +index_buffer: 1436 +index_buffer: 945 +index_buffer: 946 +index_buffer: 8 +index_buffer: 922 +index_buffer: 1437 +index_buffer: 8 +index_buffer: 1437 +index_buffer: 1438 +index_buffer: 1438 +index_buffer: 1437 +index_buffer: 1439 +index_buffer: 1438 +index_buffer: 1439 +index_buffer: 919 +index_buffer: 916 +index_buffer: 1440 +index_buffer: 1441 +index_buffer: 916 +index_buffer: 1441 +index_buffer: 1257 +index_buffer: 1441 +index_buffer: 1442 +index_buffer: 1258 +index_buffer: 1441 +index_buffer: 1258 +index_buffer: 1257 +index_buffer: 1258 +index_buffer: 1442 +index_buffer: 1443 +index_buffer: 1258 +index_buffer: 1443 +index_buffer: 1259 +index_buffer: 1444 +index_buffer: 1260 +index_buffer: 1259 +index_buffer: 1444 +index_buffer: 1259 +index_buffer: 1443 +index_buffer: 1444 +index_buffer: 1445 +index_buffer: 1261 +index_buffer: 1444 +index_buffer: 1261 +index_buffer: 1260 +index_buffer: 1445 +index_buffer: 1446 +index_buffer: 1262 +index_buffer: 1445 +index_buffer: 1262 +index_buffer: 1261 +index_buffer: 1262 +index_buffer: 1446 +index_buffer: 1447 +index_buffer: 1262 +index_buffer: 1447 +index_buffer: 1263 +index_buffer: 1263 +index_buffer: 1447 +index_buffer: 1448 +index_buffer: 1263 +index_buffer: 1448 +index_buffer: 1264 +index_buffer: 1264 +index_buffer: 1448 +index_buffer: 1449 +index_buffer: 1264 +index_buffer: 1449 +index_buffer: 1265 +index_buffer: 1265 +index_buffer: 1449 +index_buffer: 1406 +index_buffer: 1265 +index_buffer: 1406 +index_buffer: 1266 +index_buffer: 1450 +index_buffer: 1451 +index_buffer: 1452 +index_buffer: 1450 +index_buffer: 1452 +index_buffer: 1453 +index_buffer: 1451 +index_buffer: 1454 +index_buffer: 952 +index_buffer: 1451 +index_buffer: 952 +index_buffer: 1452 +index_buffer: 1412 +index_buffer: 963 +index_buffer: 964 +index_buffer: 1412 +index_buffer: 964 +index_buffer: 1410 +index_buffer: 1414 +index_buffer: 965 +index_buffer: 963 +index_buffer: 1414 +index_buffer: 963 +index_buffer: 1412 +index_buffer: 1418 +index_buffer: 1417 +index_buffer: 973 +index_buffer: 1418 +index_buffer: 973 +index_buffer: 972 +index_buffer: 1417 +index_buffer: 1420 +index_buffer: 974 +index_buffer: 1417 +index_buffer: 974 +index_buffer: 973 +index_buffer: 981 +index_buffer: 1421 +index_buffer: 1424 +index_buffer: 981 +index_buffer: 1424 +index_buffer: 982 +index_buffer: 982 +index_buffer: 1424 +index_buffer: 1426 +index_buffer: 982 +index_buffer: 1426 +index_buffer: 983 +index_buffer: 983 +index_buffer: 1426 +index_buffer: 1428 +index_buffer: 983 +index_buffer: 1428 +index_buffer: 988 +index_buffer: 988 +index_buffer: 1428 +index_buffer: 1430 +index_buffer: 988 +index_buffer: 1430 +index_buffer: 989 +index_buffer: 989 +index_buffer: 1430 +index_buffer: 1432 +index_buffer: 989 +index_buffer: 1432 +index_buffer: 994 +index_buffer: 994 +index_buffer: 1432 +index_buffer: 1434 +index_buffer: 994 +index_buffer: 1434 +index_buffer: 995 +index_buffer: 995 +index_buffer: 1434 +index_buffer: 1436 +index_buffer: 995 +index_buffer: 1436 +index_buffer: 1000 +index_buffer: 1000 +index_buffer: 1436 +index_buffer: 946 +index_buffer: 1000 +index_buffer: 946 +index_buffer: 1001 +index_buffer: 1455 +index_buffer: 1456 +index_buffer: 1457 +index_buffer: 1455 +index_buffer: 1457 +index_buffer: 1458 +index_buffer: 1459 +index_buffer: 1046 +index_buffer: 1047 +index_buffer: 1459 +index_buffer: 1047 +index_buffer: 958 +index_buffer: 1459 +index_buffer: 1460 +index_buffer: 1048 +index_buffer: 1459 +index_buffer: 1048 +index_buffer: 1046 +index_buffer: 1068 +index_buffer: 1461 +index_buffer: 1462 +index_buffer: 1068 +index_buffer: 1462 +index_buffer: 1069 +index_buffer: 1069 +index_buffer: 1462 +index_buffer: 1463 +index_buffer: 1069 +index_buffer: 1463 +index_buffer: 1070 +index_buffer: 1464 +index_buffer: 1465 +index_buffer: 1466 +index_buffer: 1464 +index_buffer: 1466 +index_buffer: 1467 +index_buffer: 1158 +index_buffer: 1157 +index_buffer: 1465 +index_buffer: 1158 +index_buffer: 1465 +index_buffer: 1464 +index_buffer: 1157 +index_buffer: 914 +index_buffer: 947 +index_buffer: 1157 +index_buffer: 947 +index_buffer: 1465 +index_buffer: 1466 +index_buffer: 1465 +index_buffer: 947 +index_buffer: 1466 +index_buffer: 947 +index_buffer: 951 +index_buffer: 1468 +index_buffer: 1273 +index_buffer: 1274 +index_buffer: 1468 +index_buffer: 1274 +index_buffer: 1469 +index_buffer: 1470 +index_buffer: 1471 +index_buffer: 1468 +index_buffer: 1470 +index_buffer: 1468 +index_buffer: 1469 +index_buffer: 1355 +index_buffer: 1358 +index_buffer: 1361 +index_buffer: 1355 +index_buffer: 1361 +index_buffer: 1356 +index_buffer: 1472 +index_buffer: 1473 +index_buffer: 1474 +index_buffer: 1472 +index_buffer: 1474 +index_buffer: 1475 +index_buffer: 1473 +index_buffer: 1280 +index_buffer: 1287 +index_buffer: 1473 +index_buffer: 1287 +index_buffer: 1474 +index_buffer: 1287 +index_buffer: 1391 +index_buffer: 1476 +index_buffer: 1287 +index_buffer: 1476 +index_buffer: 1474 +index_buffer: 1475 +index_buffer: 1474 +index_buffer: 1476 +index_buffer: 1475 +index_buffer: 1476 +index_buffer: 1477 +index_buffer: 919 +index_buffer: 920 +index_buffer: 1478 +index_buffer: 919 +index_buffer: 1478 +index_buffer: 1438 +index_buffer: 1438 +index_buffer: 1478 +index_buffer: 9 +index_buffer: 1438 +index_buffer: 9 +index_buffer: 8 +index_buffer: 1479 +index_buffer: 1480 +index_buffer: 1481 +index_buffer: 1479 +index_buffer: 1481 +index_buffer: 1062 +index_buffer: 1482 +index_buffer: 1480 +index_buffer: 1479 +index_buffer: 1482 +index_buffer: 1479 +index_buffer: 1072 +index_buffer: 1482 +index_buffer: 1483 +index_buffer: 1484 +index_buffer: 1482 +index_buffer: 1484 +index_buffer: 1480 +index_buffer: 1485 +index_buffer: 1061 +index_buffer: 1060 +index_buffer: 1485 +index_buffer: 1060 +index_buffer: 1486 +index_buffer: 1486 +index_buffer: 1065 +index_buffer: 1064 +index_buffer: 1486 +index_buffer: 1064 +index_buffer: 1485 +index_buffer: 1479 +index_buffer: 1485 +index_buffer: 1064 +index_buffer: 1479 +index_buffer: 1064 +index_buffer: 1072 +index_buffer: 1062 +index_buffer: 1061 +index_buffer: 1485 +index_buffer: 1062 +index_buffer: 1485 +index_buffer: 1479 +index_buffer: 1250 +index_buffer: 1249 +index_buffer: 1487 +index_buffer: 1250 +index_buffer: 1487 +index_buffer: 1488 +index_buffer: 1487 +index_buffer: 1167 +index_buffer: 1170 +index_buffer: 1487 +index_buffer: 1170 +index_buffer: 1488 +index_buffer: 1253 +index_buffer: 1489 +index_buffer: 1490 +index_buffer: 1253 +index_buffer: 1490 +index_buffer: 1254 +index_buffer: 1489 +index_buffer: 1036 +index_buffer: 1039 +index_buffer: 1489 +index_buffer: 1039 +index_buffer: 1490 +index_buffer: 1478 +index_buffer: 1490 +index_buffer: 1039 +index_buffer: 1478 +index_buffer: 1039 +index_buffer: 9 +index_buffer: 920 +index_buffer: 1254 +index_buffer: 1490 +index_buffer: 920 +index_buffer: 1490 +index_buffer: 1478 +index_buffer: 1379 +index_buffer: 1378 +index_buffer: 1491 +index_buffer: 1379 +index_buffer: 1491 +index_buffer: 1492 +index_buffer: 1491 +index_buffer: 1381 +index_buffer: 1380 +index_buffer: 1491 +index_buffer: 1380 +index_buffer: 1492 +index_buffer: 915 +index_buffer: 1493 +index_buffer: 1440 +index_buffer: 915 +index_buffer: 1440 +index_buffer: 916 +index_buffer: 919 +index_buffer: 1439 +index_buffer: 1493 +index_buffer: 919 +index_buffer: 1493 +index_buffer: 915 +index_buffer: 1169 +index_buffer: 1172 +index_buffer: 1442 +index_buffer: 1169 +index_buffer: 1442 +index_buffer: 1441 +index_buffer: 1440 +index_buffer: 1170 +index_buffer: 1169 +index_buffer: 1440 +index_buffer: 1169 +index_buffer: 1441 +index_buffer: 1174 +index_buffer: 1176 +index_buffer: 1444 +index_buffer: 1174 +index_buffer: 1444 +index_buffer: 1443 +index_buffer: 1442 +index_buffer: 1172 +index_buffer: 1174 +index_buffer: 1442 +index_buffer: 1174 +index_buffer: 1443 +index_buffer: 1178 +index_buffer: 1180 +index_buffer: 1446 +index_buffer: 1178 +index_buffer: 1446 +index_buffer: 1445 +index_buffer: 1178 +index_buffer: 1445 +index_buffer: 1444 +index_buffer: 1178 +index_buffer: 1444 +index_buffer: 1176 +index_buffer: 1447 +index_buffer: 1182 +index_buffer: 1184 +index_buffer: 1447 +index_buffer: 1184 +index_buffer: 1448 +index_buffer: 1446 +index_buffer: 1180 +index_buffer: 1182 +index_buffer: 1446 +index_buffer: 1182 +index_buffer: 1447 +index_buffer: 1449 +index_buffer: 1186 +index_buffer: 1188 +index_buffer: 1449 +index_buffer: 1188 +index_buffer: 1406 +index_buffer: 1448 +index_buffer: 1184 +index_buffer: 1186 +index_buffer: 1448 +index_buffer: 1186 +index_buffer: 1449 +index_buffer: 1190 +index_buffer: 1192 +index_buffer: 1409 +index_buffer: 1190 +index_buffer: 1409 +index_buffer: 1407 +index_buffer: 1406 +index_buffer: 1188 +index_buffer: 1190 +index_buffer: 1406 +index_buffer: 1190 +index_buffer: 1407 +index_buffer: 1494 +index_buffer: 1495 +index_buffer: 1197 +index_buffer: 1494 +index_buffer: 1197 +index_buffer: 1415 +index_buffer: 1196 +index_buffer: 1495 +index_buffer: 1494 +index_buffer: 1196 +index_buffer: 1494 +index_buffer: 1413 +index_buffer: 1496 +index_buffer: 1206 +index_buffer: 1422 +index_buffer: 1496 +index_buffer: 1422 +index_buffer: 1497 +index_buffer: 1419 +index_buffer: 1202 +index_buffer: 1496 +index_buffer: 1419 +index_buffer: 1496 +index_buffer: 1497 +index_buffer: 1423 +index_buffer: 1205 +index_buffer: 1208 +index_buffer: 1423 +index_buffer: 1208 +index_buffer: 1425 +index_buffer: 1206 +index_buffer: 1205 +index_buffer: 1423 +index_buffer: 1206 +index_buffer: 1423 +index_buffer: 1422 +index_buffer: 1427 +index_buffer: 1210 +index_buffer: 1212 +index_buffer: 1427 +index_buffer: 1212 +index_buffer: 1429 +index_buffer: 1425 +index_buffer: 1208 +index_buffer: 1210 +index_buffer: 1425 +index_buffer: 1210 +index_buffer: 1427 +index_buffer: 1431 +index_buffer: 1214 +index_buffer: 1216 +index_buffer: 1431 +index_buffer: 1216 +index_buffer: 1433 +index_buffer: 1429 +index_buffer: 1212 +index_buffer: 1214 +index_buffer: 1429 +index_buffer: 1214 +index_buffer: 1431 +index_buffer: 1435 +index_buffer: 1218 +index_buffer: 1220 +index_buffer: 1435 +index_buffer: 1220 +index_buffer: 945 +index_buffer: 1433 +index_buffer: 1216 +index_buffer: 1218 +index_buffer: 1433 +index_buffer: 1218 +index_buffer: 1435 +index_buffer: 1222 +index_buffer: 1224 +index_buffer: 941 +index_buffer: 1222 +index_buffer: 941 +index_buffer: 943 +index_buffer: 1220 +index_buffer: 1222 +index_buffer: 943 +index_buffer: 1220 +index_buffer: 943 +index_buffer: 945 +index_buffer: 939 +index_buffer: 1226 +index_buffer: 1228 +index_buffer: 939 +index_buffer: 1228 +index_buffer: 937 +index_buffer: 1224 +index_buffer: 1226 +index_buffer: 939 +index_buffer: 1224 +index_buffer: 939 +index_buffer: 941 +index_buffer: 1230 +index_buffer: 1232 +index_buffer: 934 +index_buffer: 1230 +index_buffer: 934 +index_buffer: 936 +index_buffer: 1228 +index_buffer: 1230 +index_buffer: 936 +index_buffer: 1228 +index_buffer: 936 +index_buffer: 937 +index_buffer: 930 +index_buffer: 1234 +index_buffer: 1236 +index_buffer: 930 +index_buffer: 1236 +index_buffer: 931 +index_buffer: 934 +index_buffer: 1232 +index_buffer: 1234 +index_buffer: 934 +index_buffer: 1234 +index_buffer: 930 +index_buffer: 1498 +index_buffer: 1244 +index_buffer: 924 +index_buffer: 1498 +index_buffer: 924 +index_buffer: 925 +index_buffer: 928 +index_buffer: 1240 +index_buffer: 1498 +index_buffer: 928 +index_buffer: 1498 +index_buffer: 925 +index_buffer: 921 +index_buffer: 1243 +index_buffer: 1246 +index_buffer: 921 +index_buffer: 1246 +index_buffer: 922 +index_buffer: 1244 +index_buffer: 1243 +index_buffer: 921 +index_buffer: 1244 +index_buffer: 921 +index_buffer: 924 +index_buffer: 1248 +index_buffer: 1250 +index_buffer: 1439 +index_buffer: 1248 +index_buffer: 1439 +index_buffer: 1437 +index_buffer: 1437 +index_buffer: 922 +index_buffer: 1246 +index_buffer: 1437 +index_buffer: 1246 +index_buffer: 1248 +index_buffer: 1493 +index_buffer: 1488 +index_buffer: 1170 +index_buffer: 1493 +index_buffer: 1170 +index_buffer: 1440 +index_buffer: 1439 +index_buffer: 1250 +index_buffer: 1488 +index_buffer: 1439 +index_buffer: 1488 +index_buffer: 1493 +index_buffer: 1499 +index_buffer: 928 +index_buffer: 927 +index_buffer: 1499 +index_buffer: 927 +index_buffer: 1500 +index_buffer: 931 +index_buffer: 1499 +index_buffer: 1500 +index_buffer: 931 +index_buffer: 1500 +index_buffer: 932 +index_buffer: 1501 +index_buffer: 1502 +index_buffer: 1106 +index_buffer: 1501 +index_buffer: 1106 +index_buffer: 1107 +index_buffer: 1099 +index_buffer: 1098 +index_buffer: 1502 +index_buffer: 1099 +index_buffer: 1502 +index_buffer: 1501 +index_buffer: 1239 +index_buffer: 1503 +index_buffer: 1498 +index_buffer: 1239 +index_buffer: 1498 +index_buffer: 1240 +index_buffer: 1503 +index_buffer: 1241 +index_buffer: 1244 +index_buffer: 1503 +index_buffer: 1244 +index_buffer: 1498 +index_buffer: 1504 +index_buffer: 1505 +index_buffer: 1506 +index_buffer: 1504 +index_buffer: 1506 +index_buffer: 1507 +index_buffer: 1505 +index_buffer: 1504 +index_buffer: 1508 +index_buffer: 1505 +index_buffer: 1508 +index_buffer: 1509 +index_buffer: 1510 +index_buffer: 1511 +index_buffer: 1505 +index_buffer: 1510 +index_buffer: 1505 +index_buffer: 1509 +index_buffer: 1505 +index_buffer: 1511 +index_buffer: 1295 +index_buffer: 1505 +index_buffer: 1295 +index_buffer: 1506 +index_buffer: 1512 +index_buffer: 1500 +index_buffer: 927 +index_buffer: 1512 +index_buffer: 927 +index_buffer: 1397 +index_buffer: 1398 +index_buffer: 932 +index_buffer: 1500 +index_buffer: 1398 +index_buffer: 1500 +index_buffer: 1512 +index_buffer: 1293 +index_buffer: 1291 +index_buffer: 1513 +index_buffer: 1293 +index_buffer: 1513 +index_buffer: 1514 +index_buffer: 1515 +index_buffer: 1513 +index_buffer: 1291 +index_buffer: 1515 +index_buffer: 1291 +index_buffer: 1290 +index_buffer: 1515 +index_buffer: 1398 +index_buffer: 1512 +index_buffer: 1515 +index_buffer: 1512 +index_buffer: 1513 +index_buffer: 1513 +index_buffer: 1512 +index_buffer: 1397 +index_buffer: 1513 +index_buffer: 1397 +index_buffer: 1514 +index_buffer: 1240 +index_buffer: 928 +index_buffer: 1499 +index_buffer: 1240 +index_buffer: 1499 +index_buffer: 1238 +index_buffer: 1236 +index_buffer: 1238 +index_buffer: 1499 +index_buffer: 1236 +index_buffer: 1499 +index_buffer: 931 +index_buffer: 894 +index_buffer: 899 +index_buffer: 895 +index_buffer: 894 +index_buffer: 895 +index_buffer: 890 +index_buffer: 897 +index_buffer: 900 +index_buffer: 905 +index_buffer: 897 +index_buffer: 905 +index_buffer: 901 +index_buffer: 903 +index_buffer: 906 +index_buffer: 911 +index_buffer: 903 +index_buffer: 911 +index_buffer: 907 +index_buffer: 909 +index_buffer: 912 +index_buffer: 949 +index_buffer: 909 +index_buffer: 949 +index_buffer: 913 +index_buffer: 952 +index_buffer: 948 +index_buffer: 950 +index_buffer: 952 +index_buffer: 950 +index_buffer: 1452 +index_buffer: 1063 +index_buffer: 1033 +index_buffer: 889 +index_buffer: 1063 +index_buffer: 889 +index_buffer: 892 +index_buffer: 1062 +index_buffer: 1481 +index_buffer: 1033 +index_buffer: 1062 +index_buffer: 1033 +index_buffer: 1063 +index_buffer: 1481 +index_buffer: 1034 +index_buffer: 1030 +index_buffer: 1481 +index_buffer: 1030 +index_buffer: 1033 +index_buffer: 1516 +index_buffer: 1517 +index_buffer: 1518 +index_buffer: 1516 +index_buffer: 1518 +index_buffer: 1519 +index_buffer: 1518 +index_buffer: 1456 +index_buffer: 1455 +index_buffer: 1518 +index_buffer: 1455 +index_buffer: 1519 +index_buffer: 1041 +index_buffer: 1519 +index_buffer: 1455 +index_buffer: 1041 +index_buffer: 1455 +index_buffer: 1520 +index_buffer: 283 +index_buffer: 1154 +index_buffer: 1051 +index_buffer: 283 +index_buffer: 1051 +index_buffer: 177 +index_buffer: 1078 +index_buffer: 1521 +index_buffer: 1079 +index_buffer: 1078 +index_buffer: 1079 +index_buffer: 1074 +index_buffer: 1522 +index_buffer: 1385 +index_buffer: 1384 +index_buffer: 1522 +index_buffer: 1384 +index_buffer: 1523 +index_buffer: 1524 +index_buffer: 1525 +index_buffer: 1526 +index_buffer: 1524 +index_buffer: 1526 +index_buffer: 1527 +index_buffer: 1525 +index_buffer: 1528 +index_buffer: 1529 +index_buffer: 1525 +index_buffer: 1529 +index_buffer: 1526 +index_buffer: 1529 +index_buffer: 1530 +index_buffer: 1282 +index_buffer: 1529 +index_buffer: 1282 +index_buffer: 1526 +index_buffer: 1454 +index_buffer: 1531 +index_buffer: 1532 +index_buffer: 1454 +index_buffer: 1532 +index_buffer: 1533 +index_buffer: 1534 +index_buffer: 1531 +index_buffer: 1454 +index_buffer: 1534 +index_buffer: 1454 +index_buffer: 1451 +index_buffer: 1535 +index_buffer: 1283 +index_buffer: 1281 +index_buffer: 1535 +index_buffer: 1281 +index_buffer: 1536 +index_buffer: 1537 +index_buffer: 1538 +index_buffer: 1539 +index_buffer: 1537 +index_buffer: 1539 +index_buffer: 1535 +index_buffer: 1480 +index_buffer: 1484 +index_buffer: 1034 +index_buffer: 1480 +index_buffer: 1034 +index_buffer: 1481 +index_buffer: 1540 +index_buffer: 1541 +index_buffer: 1542 +index_buffer: 1540 +index_buffer: 1542 +index_buffer: 1543 +index_buffer: 1540 +index_buffer: 1467 +index_buffer: 1466 +index_buffer: 1540 +index_buffer: 1466 +index_buffer: 1541 +index_buffer: 1541 +index_buffer: 1466 +index_buffer: 951 +index_buffer: 1541 +index_buffer: 951 +index_buffer: 1533 +index_buffer: 1542 +index_buffer: 1541 +index_buffer: 1533 +index_buffer: 1542 +index_buffer: 1533 +index_buffer: 1532 +index_buffer: 1544 +index_buffer: 1534 +index_buffer: 1451 +index_buffer: 1544 +index_buffer: 1451 +index_buffer: 1450 +index_buffer: 1539 +index_buffer: 1545 +index_buffer: 1524 +index_buffer: 1539 +index_buffer: 1524 +index_buffer: 1527 +index_buffer: 1538 +index_buffer: 1546 +index_buffer: 1545 +index_buffer: 1538 +index_buffer: 1545 +index_buffer: 1539 +index_buffer: 957 +index_buffer: 1547 +index_buffer: 1459 +index_buffer: 957 +index_buffer: 1459 +index_buffer: 958 +index_buffer: 1547 +index_buffer: 1548 +index_buffer: 1460 +index_buffer: 1547 +index_buffer: 1460 +index_buffer: 1459 +index_buffer: 1549 +index_buffer: 1550 +index_buffer: 1551 +index_buffer: 1549 +index_buffer: 1551 +index_buffer: 1277 +index_buffer: 1391 +index_buffer: 1389 +index_buffer: 1552 +index_buffer: 1391 +index_buffer: 1552 +index_buffer: 1476 +index_buffer: 1389 +index_buffer: 1388 +index_buffer: 1553 +index_buffer: 1389 +index_buffer: 1553 +index_buffer: 1552 +index_buffer: 1553 +index_buffer: 1554 +index_buffer: 1555 +index_buffer: 1553 +index_buffer: 1555 +index_buffer: 1552 +index_buffer: 1476 +index_buffer: 1552 +index_buffer: 1555 +index_buffer: 1476 +index_buffer: 1555 +index_buffer: 1477 +index_buffer: 1555 +index_buffer: 1556 +index_buffer: 1396 +index_buffer: 1555 +index_buffer: 1396 +index_buffer: 1477 +index_buffer: 1555 +index_buffer: 1554 +index_buffer: 1557 +index_buffer: 1555 +index_buffer: 1557 +index_buffer: 1556 +index_buffer: 1556 +index_buffer: 1557 +index_buffer: 1293 +index_buffer: 1556 +index_buffer: 1293 +index_buffer: 1514 +index_buffer: 1556 +index_buffer: 1514 +index_buffer: 1397 +index_buffer: 1556 +index_buffer: 1397 +index_buffer: 1396 +index_buffer: 1399 +index_buffer: 1398 +index_buffer: 1515 +index_buffer: 1399 +index_buffer: 1515 +index_buffer: 1558 +index_buffer: 1558 +index_buffer: 1515 +index_buffer: 1290 +index_buffer: 1558 +index_buffer: 1290 +index_buffer: 1300 +index_buffer: 1299 +index_buffer: 1559 +index_buffer: 1558 +index_buffer: 1299 +index_buffer: 1558 +index_buffer: 1300 +index_buffer: 1400 +index_buffer: 1399 +index_buffer: 1558 +index_buffer: 1400 +index_buffer: 1558 +index_buffer: 1559 +index_buffer: 1401 +index_buffer: 1400 +index_buffer: 1559 +index_buffer: 1401 +index_buffer: 1559 +index_buffer: 1560 +index_buffer: 1560 +index_buffer: 1559 +index_buffer: 1299 +index_buffer: 1560 +index_buffer: 1299 +index_buffer: 1306 +index_buffer: 1305 +index_buffer: 1561 +index_buffer: 1560 +index_buffer: 1305 +index_buffer: 1560 +index_buffer: 1306 +index_buffer: 1561 +index_buffer: 1402 +index_buffer: 1401 +index_buffer: 1561 +index_buffer: 1401 +index_buffer: 1560 +index_buffer: 1562 +index_buffer: 1403 +index_buffer: 1402 +index_buffer: 1562 +index_buffer: 1402 +index_buffer: 1561 +index_buffer: 1562 +index_buffer: 1561 +index_buffer: 1305 +index_buffer: 1562 +index_buffer: 1305 +index_buffer: 1311 +index_buffer: 1310 +index_buffer: 1563 +index_buffer: 1562 +index_buffer: 1310 +index_buffer: 1562 +index_buffer: 1311 +index_buffer: 1563 +index_buffer: 1404 +index_buffer: 1403 +index_buffer: 1563 +index_buffer: 1403 +index_buffer: 1562 +index_buffer: 1564 +index_buffer: 1405 +index_buffer: 1404 +index_buffer: 1564 +index_buffer: 1404 +index_buffer: 1563 +index_buffer: 1317 +index_buffer: 1564 +index_buffer: 1563 +index_buffer: 1317 +index_buffer: 1563 +index_buffer: 1310 +index_buffer: 1003 +index_buffer: 1002 +index_buffer: 1564 +index_buffer: 1003 +index_buffer: 1564 +index_buffer: 1317 +index_buffer: 1002 +index_buffer: 1001 +index_buffer: 1405 +index_buffer: 1002 +index_buffer: 1405 +index_buffer: 1564 +index_buffer: 1454 +index_buffer: 1533 +index_buffer: 951 +index_buffer: 1454 +index_buffer: 951 +index_buffer: 952 +index_buffer: 1565 +index_buffer: 1566 +index_buffer: 1472 +index_buffer: 1565 +index_buffer: 1472 +index_buffer: 5 +index_buffer: 9 +index_buffer: 1042 +index_buffer: 1565 +index_buffer: 9 +index_buffer: 1565 +index_buffer: 5 +index_buffer: 1042 +index_buffer: 1520 +index_buffer: 1567 +index_buffer: 1042 +index_buffer: 1567 +index_buffer: 1565 +index_buffer: 965 +index_buffer: 1568 +index_buffer: 1569 +index_buffer: 965 +index_buffer: 1569 +index_buffer: 966 +index_buffer: 1568 +index_buffer: 972 +index_buffer: 968 +index_buffer: 1568 +index_buffer: 968 +index_buffer: 1569 +index_buffer: 1569 +index_buffer: 968 +index_buffer: 971 +index_buffer: 1569 +index_buffer: 971 +index_buffer: 1570 +index_buffer: 1569 +index_buffer: 1570 +index_buffer: 967 +index_buffer: 1569 +index_buffer: 967 +index_buffer: 966 +index_buffer: 1150 +index_buffer: 1571 +index_buffer: 1572 +index_buffer: 1150 +index_buffer: 1572 +index_buffer: 1151 +index_buffer: 1571 +index_buffer: 1142 +index_buffer: 1141 +index_buffer: 1571 +index_buffer: 1141 +index_buffer: 1572 +index_buffer: 1195 +index_buffer: 1573 +index_buffer: 1495 +index_buffer: 1195 +index_buffer: 1495 +index_buffer: 1196 +index_buffer: 1573 +index_buffer: 1198 +index_buffer: 1197 +index_buffer: 1573 +index_buffer: 1197 +index_buffer: 1495 +index_buffer: 1574 +index_buffer: 1345 +index_buffer: 967 +index_buffer: 1574 +index_buffer: 967 +index_buffer: 1570 +index_buffer: 1570 +index_buffer: 971 +index_buffer: 1338 +index_buffer: 1570 +index_buffer: 1338 +index_buffer: 1574 +index_buffer: 1342 +index_buffer: 1575 +index_buffer: 1574 +index_buffer: 1342 +index_buffer: 1574 +index_buffer: 1338 +index_buffer: 1575 +index_buffer: 1346 +index_buffer: 1345 +index_buffer: 1575 +index_buffer: 1345 +index_buffer: 1574 +index_buffer: 1576 +index_buffer: 1494 +index_buffer: 1415 +index_buffer: 1576 +index_buffer: 1415 +index_buffer: 1418 +index_buffer: 1414 +index_buffer: 1413 +index_buffer: 1494 +index_buffer: 1414 +index_buffer: 1494 +index_buffer: 1576 +index_buffer: 1414 +index_buffer: 1576 +index_buffer: 1568 +index_buffer: 1414 +index_buffer: 1568 +index_buffer: 965 +index_buffer: 1576 +index_buffer: 1418 +index_buffer: 972 +index_buffer: 1576 +index_buffer: 972 +index_buffer: 1568 +index_buffer: 1194 +index_buffer: 1196 +index_buffer: 1413 +index_buffer: 1194 +index_buffer: 1413 +index_buffer: 1411 +index_buffer: 1409 +index_buffer: 1192 +index_buffer: 1194 +index_buffer: 1409 +index_buffer: 1194 +index_buffer: 1411 +index_buffer: 713 +index_buffer: 1147 +index_buffer: 1146 +index_buffer: 713 +index_buffer: 1146 +index_buffer: 714 +index_buffer: 1577 +index_buffer: 1578 +index_buffer: 1350 +index_buffer: 1577 +index_buffer: 1350 +index_buffer: 1349 +index_buffer: 1344 +index_buffer: 1578 +index_buffer: 1577 +index_buffer: 1344 +index_buffer: 1577 +index_buffer: 961 +index_buffer: 1344 +index_buffer: 1348 +index_buffer: 1579 +index_buffer: 1344 +index_buffer: 1579 +index_buffer: 1578 +index_buffer: 1578 +index_buffer: 1579 +index_buffer: 1351 +index_buffer: 1578 +index_buffer: 1351 +index_buffer: 1350 +index_buffer: 720 +index_buffer: 1580 +index_buffer: 1581 +index_buffer: 720 +index_buffer: 1581 +index_buffer: 721 +index_buffer: 1349 +index_buffer: 483 +index_buffer: 721 +index_buffer: 1349 +index_buffer: 721 +index_buffer: 1581 +index_buffer: 962 +index_buffer: 1582 +index_buffer: 1583 +index_buffer: 962 +index_buffer: 1583 +index_buffer: 964 +index_buffer: 962 +index_buffer: 961 +index_buffer: 1577 +index_buffer: 962 +index_buffer: 1577 +index_buffer: 1582 +index_buffer: 1582 +index_buffer: 1577 +index_buffer: 1349 +index_buffer: 1582 +index_buffer: 1349 +index_buffer: 1581 +index_buffer: 1582 +index_buffer: 1581 +index_buffer: 1580 +index_buffer: 1582 +index_buffer: 1580 +index_buffer: 1583 +index_buffer: 1267 +index_buffer: 1584 +index_buffer: 1585 +index_buffer: 1267 +index_buffer: 1585 +index_buffer: 1268 +index_buffer: 1585 +index_buffer: 1584 +index_buffer: 1586 +index_buffer: 1585 +index_buffer: 1586 +index_buffer: 1587 +index_buffer: 1585 +index_buffer: 1587 +index_buffer: 1588 +index_buffer: 1585 +index_buffer: 1588 +index_buffer: 1589 +index_buffer: 1268 +index_buffer: 1585 +index_buffer: 1589 +index_buffer: 1268 +index_buffer: 1589 +index_buffer: 1269 +index_buffer: 1286 +index_buffer: 1390 +index_buffer: 1391 +index_buffer: 1286 +index_buffer: 1391 +index_buffer: 1287 +index_buffer: 1286 +index_buffer: 1288 +index_buffer: 1392 +index_buffer: 1286 +index_buffer: 1392 +index_buffer: 1390 +index_buffer: 1590 +index_buffer: 1591 +index_buffer: 1592 +index_buffer: 1590 +index_buffer: 1592 +index_buffer: 1593 +index_buffer: 1593 +index_buffer: 1592 +index_buffer: 1394 +index_buffer: 1593 +index_buffer: 1394 +index_buffer: 1594 +index_buffer: 1593 +index_buffer: 1594 +index_buffer: 1588 +index_buffer: 1593 +index_buffer: 1588 +index_buffer: 1595 +index_buffer: 1590 +index_buffer: 1593 +index_buffer: 1595 +index_buffer: 1590 +index_buffer: 1595 +index_buffer: 1095 +index_buffer: 1075 +index_buffer: 1596 +index_buffer: 1597 +index_buffer: 1075 +index_buffer: 1597 +index_buffer: 1076 +index_buffer: 1596 +index_buffer: 1075 +index_buffer: 1080 +index_buffer: 1596 +index_buffer: 1080 +index_buffer: 1598 +index_buffer: 1599 +index_buffer: 1596 +index_buffer: 1598 +index_buffer: 1599 +index_buffer: 1598 +index_buffer: 1600 +index_buffer: 1551 +index_buffer: 1601 +index_buffer: 1277 +index_buffer: 1601 +index_buffer: 1551 +index_buffer: 1528 +index_buffer: 1601 +index_buffer: 1528 +index_buffer: 1525 +index_buffer: 1275 +index_buffer: 1601 +index_buffer: 1525 +index_buffer: 1275 +index_buffer: 1525 +index_buffer: 1524 +index_buffer: 1276 +index_buffer: 1275 +index_buffer: 1524 +index_buffer: 1276 +index_buffer: 1524 +index_buffer: 1545 +index_buffer: 1602 +index_buffer: 1276 +index_buffer: 1545 +index_buffer: 1602 +index_buffer: 1545 +index_buffer: 1546 +index_buffer: 1457 +index_buffer: 1603 +index_buffer: 1602 +index_buffer: 1457 +index_buffer: 1602 +index_buffer: 1546 +index_buffer: 1456 +index_buffer: 1471 +index_buffer: 1603 +index_buffer: 1456 +index_buffer: 1603 +index_buffer: 1457 +index_buffer: 1471 +index_buffer: 1456 +index_buffer: 1518 +index_buffer: 1471 +index_buffer: 1518 +index_buffer: 1468 +index_buffer: 1518 +index_buffer: 1517 +index_buffer: 1273 +index_buffer: 1518 +index_buffer: 1273 +index_buffer: 1468 +index_buffer: 1273 +index_buffer: 1517 +index_buffer: 1516 +index_buffer: 1273 +index_buffer: 1516 +index_buffer: 1270 +index_buffer: 1522 +index_buffer: 1271 +index_buffer: 1040 +index_buffer: 1522 +index_buffer: 1040 +index_buffer: 1037 +index_buffer: 1489 +index_buffer: 1383 +index_buffer: 1385 +index_buffer: 1489 +index_buffer: 1385 +index_buffer: 1036 +index_buffer: 1253 +index_buffer: 1380 +index_buffer: 1383 +index_buffer: 1253 +index_buffer: 1383 +index_buffer: 1489 +index_buffer: 1252 +index_buffer: 1492 +index_buffer: 1380 +index_buffer: 1252 +index_buffer: 1380 +index_buffer: 1253 +index_buffer: 1379 +index_buffer: 1492 +index_buffer: 1252 +index_buffer: 1379 +index_buffer: 1252 +index_buffer: 1006 +index_buffer: 1379 +index_buffer: 1006 +index_buffer: 1005 +index_buffer: 1379 +index_buffer: 1005 +index_buffer: 1377 +index_buffer: 1011 +index_buffer: 1375 +index_buffer: 1377 +index_buffer: 1011 +index_buffer: 1377 +index_buffer: 1005 +index_buffer: 1375 +index_buffer: 1011 +index_buffer: 1013 +index_buffer: 1375 +index_buffer: 1013 +index_buffer: 1373 +index_buffer: 1017 +index_buffer: 1371 +index_buffer: 1373 +index_buffer: 1017 +index_buffer: 1373 +index_buffer: 1013 +index_buffer: 1017 +index_buffer: 1019 +index_buffer: 1369 +index_buffer: 1017 +index_buffer: 1369 +index_buffer: 1371 +index_buffer: 1019 +index_buffer: 1023 +index_buffer: 1367 +index_buffer: 1019 +index_buffer: 1367 +index_buffer: 1369 +index_buffer: 1367 +index_buffer: 1023 +index_buffer: 1025 +index_buffer: 1367 +index_buffer: 1025 +index_buffer: 1365 +index_buffer: 1363 +index_buffer: 1365 +index_buffer: 1025 +index_buffer: 1363 +index_buffer: 1025 +index_buffer: 1029 +index_buffer: 1363 +index_buffer: 1029 +index_buffer: 1044 +index_buffer: 1363 +index_buffer: 1044 +index_buffer: 1360 +index_buffer: 1361 +index_buffer: 1360 +index_buffer: 1044 +index_buffer: 1361 +index_buffer: 1044 +index_buffer: 1048 +index_buffer: 1460 +index_buffer: 1356 +index_buffer: 1361 +index_buffer: 1460 +index_buffer: 1361 +index_buffer: 1048 +index_buffer: 1548 +index_buffer: 1357 +index_buffer: 1356 +index_buffer: 1548 +index_buffer: 1356 +index_buffer: 1460 +index_buffer: 386 +index_buffer: 489 +index_buffer: 1353 +index_buffer: 386 +index_buffer: 1353 +index_buffer: 1256 +index_buffer: 1511 +index_buffer: 1296 +index_buffer: 1295 +index_buffer: 1296 +index_buffer: 1511 +index_buffer: 1510 +index_buffer: 1296 +index_buffer: 1510 +index_buffer: 1501 +index_buffer: 1105 +index_buffer: 1104 +index_buffer: 1303 +index_buffer: 1105 +index_buffer: 1303 +index_buffer: 1302 +index_buffer: 1104 +index_buffer: 1108 +index_buffer: 1308 +index_buffer: 1104 +index_buffer: 1308 +index_buffer: 1303 +index_buffer: 1309 +index_buffer: 1111 +index_buffer: 1112 +index_buffer: 1309 +index_buffer: 1112 +index_buffer: 1314 +index_buffer: 1115 +index_buffer: 1119 +index_buffer: 1319 +index_buffer: 1115 +index_buffer: 1319 +index_buffer: 1315 +index_buffer: 1320 +index_buffer: 1118 +index_buffer: 1120 +index_buffer: 1320 +index_buffer: 1120 +index_buffer: 1323 +index_buffer: 1123 +index_buffer: 1124 +index_buffer: 1327 +index_buffer: 1123 +index_buffer: 1327 +index_buffer: 1324 +index_buffer: 1328 +index_buffer: 1127 +index_buffer: 1128 +index_buffer: 1328 +index_buffer: 1128 +index_buffer: 1331 +index_buffer: 1332 +index_buffer: 1131 +index_buffer: 1133 +index_buffer: 1332 +index_buffer: 1133 +index_buffer: 1335 +index_buffer: 1604 +index_buffer: 1336 +index_buffer: 1132 +index_buffer: 1604 +index_buffer: 1132 +index_buffer: 1137 +index_buffer: 1142 +index_buffer: 1571 +index_buffer: 1347 +index_buffer: 1142 +index_buffer: 1347 +index_buffer: 1346 +index_buffer: 1351 +index_buffer: 1147 +index_buffer: 713 +index_buffer: 1351 +index_buffer: 713 +index_buffer: 484 +index_buffer: 1145 +index_buffer: 1143 +index_buffer: 1575 +index_buffer: 1145 +index_buffer: 1575 +index_buffer: 1342 +index_buffer: 1348 +index_buffer: 1150 +index_buffer: 1148 +index_buffer: 1348 +index_buffer: 1148 +index_buffer: 1579 +index_buffer: 1506 +index_buffer: 1295 +index_buffer: 1294 +index_buffer: 1506 +index_buffer: 1294 +index_buffer: 1605 +index_buffer: 1605 +index_buffer: 1294 +index_buffer: 1293 +index_buffer: 1605 +index_buffer: 1293 +index_buffer: 1557 +index_buffer: 1606 +index_buffer: 1605 +index_buffer: 1557 +index_buffer: 1606 +index_buffer: 1557 +index_buffer: 1554 +index_buffer: 1507 +index_buffer: 1506 +index_buffer: 1605 +index_buffer: 1507 +index_buffer: 1605 +index_buffer: 1606 +index_buffer: 1472 +index_buffer: 1475 +index_buffer: 6 +index_buffer: 1472 +index_buffer: 6 +index_buffer: 5 +index_buffer: 6 +index_buffer: 1475 +index_buffer: 1477 +index_buffer: 6 +index_buffer: 1477 +index_buffer: 1395 +index_buffer: 1607 +index_buffer: 1608 +index_buffer: 1609 +index_buffer: 1607 +index_buffer: 1609 +index_buffer: 1610 +index_buffer: 1608 +index_buffer: 1611 +index_buffer: 1100 +index_buffer: 1608 +index_buffer: 1100 +index_buffer: 1609 +index_buffer: 1612 +index_buffer: 1613 +index_buffer: 1614 +index_buffer: 1612 +index_buffer: 1614 +index_buffer: 1521 +index_buffer: 1528 +index_buffer: 1615 +index_buffer: 1616 +index_buffer: 1528 +index_buffer: 1616 +index_buffer: 1529 +index_buffer: 1080 +index_buffer: 1079 +index_buffer: 1616 +index_buffer: 1080 +index_buffer: 1616 +index_buffer: 1615 +index_buffer: 1085 +index_buffer: 1617 +index_buffer: 1618 +index_buffer: 1085 +index_buffer: 1618 +index_buffer: 1086 +index_buffer: 1618 +index_buffer: 1617 +index_buffer: 1288 +index_buffer: 1618 +index_buffer: 1288 +index_buffer: 1285 +index_buffer: 1619 +index_buffer: 1620 +index_buffer: 1621 +index_buffer: 1619 +index_buffer: 1621 +index_buffer: 1101 +index_buffer: 1620 +index_buffer: 1619 +index_buffer: 1591 +index_buffer: 1620 +index_buffer: 1591 +index_buffer: 1590 +index_buffer: 1620 +index_buffer: 1590 +index_buffer: 1095 +index_buffer: 1620 +index_buffer: 1095 +index_buffer: 1094 +index_buffer: 1620 +index_buffer: 1094 +index_buffer: 1093 +index_buffer: 1620 +index_buffer: 1093 +index_buffer: 1621 +index_buffer: 1085 +index_buffer: 1269 +index_buffer: 1622 +index_buffer: 1085 +index_buffer: 1622 +index_buffer: 1617 +index_buffer: 1617 +index_buffer: 1622 +index_buffer: 1392 +index_buffer: 1617 +index_buffer: 1392 +index_buffer: 1288 +index_buffer: 1612 +index_buffer: 1086 +index_buffer: 1618 +index_buffer: 1612 +index_buffer: 1618 +index_buffer: 1613 +index_buffer: 1613 +index_buffer: 1618 +index_buffer: 1285 +index_buffer: 1613 +index_buffer: 1285 +index_buffer: 1284 +index_buffer: 1616 +index_buffer: 1614 +index_buffer: 1530 +index_buffer: 1616 +index_buffer: 1530 +index_buffer: 1529 +index_buffer: 1623 +index_buffer: 1589 +index_buffer: 1588 +index_buffer: 1623 +index_buffer: 1588 +index_buffer: 1594 +index_buffer: 1623 +index_buffer: 1594 +index_buffer: 1394 +index_buffer: 1623 +index_buffer: 1394 +index_buffer: 1393 +index_buffer: 1622 +index_buffer: 1623 +index_buffer: 1393 +index_buffer: 1622 +index_buffer: 1393 +index_buffer: 1392 +index_buffer: 1269 +index_buffer: 1589 +index_buffer: 1623 +index_buffer: 1269 +index_buffer: 1623 +index_buffer: 1622 +index_buffer: 1598 +index_buffer: 1080 +index_buffer: 1615 +index_buffer: 1598 +index_buffer: 1615 +index_buffer: 1550 +index_buffer: 1551 +index_buffer: 1550 +index_buffer: 1615 +index_buffer: 1551 +index_buffer: 1615 +index_buffer: 1528 +index_buffer: 1624 +index_buffer: 1625 +index_buffer: 1626 +index_buffer: 1624 +index_buffer: 1626 +index_buffer: 1627 +index_buffer: 1624 +index_buffer: 1627 +index_buffer: 1607 +index_buffer: 1624 +index_buffer: 1607 +index_buffer: 1610 +index_buffer: 1588 +index_buffer: 1587 +index_buffer: 1628 +index_buffer: 1588 +index_buffer: 1628 +index_buffer: 1595 +index_buffer: 1628 +index_buffer: 1587 +index_buffer: 1586 +index_buffer: 1628 +index_buffer: 1586 +index_buffer: 1629 +index_buffer: 1090 +index_buffer: 1089 +index_buffer: 1628 +index_buffer: 1090 +index_buffer: 1628 +index_buffer: 1629 +index_buffer: 1095 +index_buffer: 1595 +index_buffer: 1628 +index_buffer: 1095 +index_buffer: 1628 +index_buffer: 1089 +index_buffer: 1630 +index_buffer: 1631 +index_buffer: 1632 +index_buffer: 1630 +index_buffer: 1632 +index_buffer: 1633 +index_buffer: 1387 +index_buffer: 1630 +index_buffer: 1633 +index_buffer: 1387 +index_buffer: 1633 +index_buffer: 1388 +index_buffer: 1592 +index_buffer: 1630 +index_buffer: 1387 +index_buffer: 1592 +index_buffer: 1387 +index_buffer: 1394 +index_buffer: 1591 +index_buffer: 1631 +index_buffer: 1630 +index_buffer: 1591 +index_buffer: 1630 +index_buffer: 1592 +index_buffer: 1632 +index_buffer: 1634 +index_buffer: 1635 +index_buffer: 1632 +index_buffer: 1635 +index_buffer: 1633 +index_buffer: 1634 +index_buffer: 1507 +index_buffer: 1606 +index_buffer: 1634 +index_buffer: 1606 +index_buffer: 1635 +index_buffer: 1635 +index_buffer: 1606 +index_buffer: 1554 +index_buffer: 1635 +index_buffer: 1554 +index_buffer: 1553 +index_buffer: 1388 +index_buffer: 1633 +index_buffer: 1635 +index_buffer: 1388 +index_buffer: 1635 +index_buffer: 1553 +index_buffer: 1458 +index_buffer: 1457 +index_buffer: 1546 +index_buffer: 1458 +index_buffer: 1546 +index_buffer: 1538 +index_buffer: 1537 +index_buffer: 1566 +index_buffer: 1565 +index_buffer: 1537 +index_buffer: 1565 +index_buffer: 1567 +index_buffer: 1461 +index_buffer: 1636 +index_buffer: 1637 +index_buffer: 1461 +index_buffer: 1637 +index_buffer: 1462 +index_buffer: 1463 +index_buffer: 1462 +index_buffer: 1637 +index_buffer: 1463 +index_buffer: 1637 +index_buffer: 1277 +index_buffer: 1450 +index_buffer: 1453 +index_buffer: 1358 +index_buffer: 1450 +index_buffer: 1358 +index_buffer: 1355 +index_buffer: 1477 +index_buffer: 1396 +index_buffer: 1395 +index_buffer: 1470 +index_buffer: 1070 +index_buffer: 1463 +index_buffer: 1603 +index_buffer: 1463 +index_buffer: 1277 +index_buffer: 1603 +index_buffer: 1277 +index_buffer: 1602 +index_buffer: 893 +index_buffer: 1032 +index_buffer: 1638 +index_buffer: 893 +index_buffer: 1638 +index_buffer: 894 +index_buffer: 1638 +index_buffer: 1639 +index_buffer: 899 +index_buffer: 1638 +index_buffer: 899 +index_buffer: 894 +index_buffer: 1639 +index_buffer: 1640 +index_buffer: 900 +index_buffer: 1639 +index_buffer: 900 +index_buffer: 899 +index_buffer: 1640 +index_buffer: 1641 +index_buffer: 905 +index_buffer: 1640 +index_buffer: 905 +index_buffer: 900 +index_buffer: 906 +index_buffer: 905 +index_buffer: 1641 +index_buffer: 906 +index_buffer: 1641 +index_buffer: 1642 +index_buffer: 1642 +index_buffer: 1643 +index_buffer: 911 +index_buffer: 1642 +index_buffer: 911 +index_buffer: 906 +index_buffer: 911 +index_buffer: 1643 +index_buffer: 1644 +index_buffer: 911 +index_buffer: 1644 +index_buffer: 912 +index_buffer: 912 +index_buffer: 1644 +index_buffer: 1645 +index_buffer: 912 +index_buffer: 1645 +index_buffer: 949 +index_buffer: 950 +index_buffer: 949 +index_buffer: 1645 +index_buffer: 950 +index_buffer: 1645 +index_buffer: 1646 +index_buffer: 1452 +index_buffer: 950 +index_buffer: 1646 +index_buffer: 1452 +index_buffer: 1646 +index_buffer: 1453 +index_buffer: 1647 +index_buffer: 1648 +index_buffer: 1082 +index_buffer: 1647 +index_buffer: 1082 +index_buffer: 1081 +index_buffer: 1081 +index_buffer: 1086 +index_buffer: 1612 +index_buffer: 1081 +index_buffer: 1612 +index_buffer: 1647 +index_buffer: 1523 +index_buffer: 1483 +index_buffer: 1482 +index_buffer: 1523 +index_buffer: 1482 +index_buffer: 1272 +index_buffer: 1281 +index_buffer: 1280 +index_buffer: 1473 +index_buffer: 1281 +index_buffer: 1473 +index_buffer: 1536 +index_buffer: 1536 +index_buffer: 1473 +index_buffer: 1472 +index_buffer: 1536 +index_buffer: 1472 +index_buffer: 1566 +index_buffer: 1483 +index_buffer: 1649 +index_buffer: 1650 +index_buffer: 1483 +index_buffer: 1650 +index_buffer: 1484 +index_buffer: 1484 +index_buffer: 1650 +index_buffer: 1035 +index_buffer: 1484 +index_buffer: 1035 +index_buffer: 1034 +index_buffer: 1036 +index_buffer: 1385 +index_buffer: 1522 +index_buffer: 1036 +index_buffer: 1522 +index_buffer: 1037 +index_buffer: 1054 +index_buffer: 1053 +index_buffer: 1651 +index_buffer: 1054 +index_buffer: 1651 +index_buffer: 1652 +index_buffer: 1056 +index_buffer: 1054 +index_buffer: 1652 +index_buffer: 1056 +index_buffer: 1652 +index_buffer: 1653 +index_buffer: 1653 +index_buffer: 1654 +index_buffer: 1059 +index_buffer: 1653 +index_buffer: 1059 +index_buffer: 1056 +index_buffer: 1059 +index_buffer: 1654 +index_buffer: 1655 +index_buffer: 1059 +index_buffer: 1655 +index_buffer: 1060 +index_buffer: 1066 +index_buffer: 1065 +index_buffer: 1656 +index_buffer: 1066 +index_buffer: 1656 +index_buffer: 1657 +index_buffer: 1658 +index_buffer: 1068 +index_buffer: 1066 +index_buffer: 1658 +index_buffer: 1066 +index_buffer: 1657 +index_buffer: 1611 +index_buffer: 1659 +index_buffer: 1097 +index_buffer: 1611 +index_buffer: 1097 +index_buffer: 1100 +index_buffer: 1659 +index_buffer: 1660 +index_buffer: 1098 +index_buffer: 1659 +index_buffer: 1098 +index_buffer: 1097 +index_buffer: 1661 +index_buffer: 1662 +index_buffer: 1102 +index_buffer: 1661 +index_buffer: 1102 +index_buffer: 1106 +index_buffer: 1102 +index_buffer: 1662 +index_buffer: 1663 +index_buffer: 1102 +index_buffer: 1663 +index_buffer: 1103 +index_buffer: 1103 +index_buffer: 1663 +index_buffer: 1664 +index_buffer: 1103 +index_buffer: 1664 +index_buffer: 1109 +index_buffer: 1664 +index_buffer: 1665 +index_buffer: 1110 +index_buffer: 1664 +index_buffer: 1110 +index_buffer: 1109 +index_buffer: 1110 +index_buffer: 1665 +index_buffer: 1666 +index_buffer: 1110 +index_buffer: 1666 +index_buffer: 1113 +index_buffer: 1113 +index_buffer: 1666 +index_buffer: 1667 +index_buffer: 1113 +index_buffer: 1667 +index_buffer: 1114 +index_buffer: 1114 +index_buffer: 1667 +index_buffer: 1668 +index_buffer: 1114 +index_buffer: 1668 +index_buffer: 1116 +index_buffer: 1116 +index_buffer: 1668 +index_buffer: 1669 +index_buffer: 1116 +index_buffer: 1669 +index_buffer: 1117 +index_buffer: 1669 +index_buffer: 1670 +index_buffer: 1121 +index_buffer: 1669 +index_buffer: 1121 +index_buffer: 1117 +index_buffer: 1670 +index_buffer: 1671 +index_buffer: 1122 +index_buffer: 1670 +index_buffer: 1122 +index_buffer: 1121 +index_buffer: 1671 +index_buffer: 1672 +index_buffer: 1125 +index_buffer: 1671 +index_buffer: 1125 +index_buffer: 1122 +index_buffer: 1672 +index_buffer: 1673 +index_buffer: 1126 +index_buffer: 1672 +index_buffer: 1126 +index_buffer: 1125 +index_buffer: 1126 +index_buffer: 1673 +index_buffer: 1674 +index_buffer: 1126 +index_buffer: 1674 +index_buffer: 1129 +index_buffer: 1129 +index_buffer: 1674 +index_buffer: 1675 +index_buffer: 1129 +index_buffer: 1675 +index_buffer: 1130 +index_buffer: 1130 +index_buffer: 1675 +index_buffer: 1676 +index_buffer: 1130 +index_buffer: 1676 +index_buffer: 1134 +index_buffer: 1134 +index_buffer: 1676 +index_buffer: 1677 +index_buffer: 1134 +index_buffer: 1677 +index_buffer: 1135 +index_buffer: 1139 +index_buffer: 1678 +index_buffer: 1679 +index_buffer: 1139 +index_buffer: 1679 +index_buffer: 1680 +index_buffer: 1680 +index_buffer: 1679 +index_buffer: 1681 +index_buffer: 1680 +index_buffer: 1681 +index_buffer: 1144 +index_buffer: 1681 +index_buffer: 1682 +index_buffer: 1140 +index_buffer: 1681 +index_buffer: 1140 +index_buffer: 1144 +index_buffer: 1683 +index_buffer: 1141 +index_buffer: 1140 +index_buffer: 1683 +index_buffer: 1140 +index_buffer: 1682 +index_buffer: 1684 +index_buffer: 1149 +index_buffer: 1151 +index_buffer: 1684 +index_buffer: 1151 +index_buffer: 1685 +index_buffer: 1686 +index_buffer: 1146 +index_buffer: 1149 +index_buffer: 1686 +index_buffer: 1149 +index_buffer: 1684 +index_buffer: 1687 +index_buffer: 1152 +index_buffer: 281 +index_buffer: 1687 +index_buffer: 281 +index_buffer: 828 +index_buffer: 1543 +index_buffer: 1688 +index_buffer: 1689 +index_buffer: 1543 +index_buffer: 1689 +index_buffer: 1540 +index_buffer: 1464 +index_buffer: 1467 +index_buffer: 1690 +index_buffer: 1464 +index_buffer: 1690 +index_buffer: 1691 +index_buffer: 1464 +index_buffer: 1691 +index_buffer: 1692 +index_buffer: 1464 +index_buffer: 1692 +index_buffer: 1158 +index_buffer: 1155 +index_buffer: 1158 +index_buffer: 1692 +index_buffer: 1155 +index_buffer: 1692 +index_buffer: 1693 +index_buffer: 1155 +index_buffer: 1693 +index_buffer: 1694 +index_buffer: 1155 +index_buffer: 1694 +index_buffer: 1159 +index_buffer: 1694 +index_buffer: 1695 +index_buffer: 1161 +index_buffer: 1694 +index_buffer: 1161 +index_buffer: 1159 +index_buffer: 1695 +index_buffer: 1696 +index_buffer: 1163 +index_buffer: 1695 +index_buffer: 1163 +index_buffer: 1161 +index_buffer: 1696 +index_buffer: 1697 +index_buffer: 1165 +index_buffer: 1696 +index_buffer: 1165 +index_buffer: 1163 +index_buffer: 1165 +index_buffer: 1697 +index_buffer: 1651 +index_buffer: 1165 +index_buffer: 1651 +index_buffer: 1053 +index_buffer: 1461 +index_buffer: 1068 +index_buffer: 1658 +index_buffer: 1461 +index_buffer: 1658 +index_buffer: 1698 +index_buffer: 1655 +index_buffer: 1699 +index_buffer: 1486 +index_buffer: 1655 +index_buffer: 1486 +index_buffer: 1060 +index_buffer: 1699 +index_buffer: 1656 +index_buffer: 1065 +index_buffer: 1699 +index_buffer: 1065 +index_buffer: 1486 +index_buffer: 1660 +index_buffer: 1700 +index_buffer: 1502 +index_buffer: 1660 +index_buffer: 1502 +index_buffer: 1098 +index_buffer: 1700 +index_buffer: 1661 +index_buffer: 1106 +index_buffer: 1700 +index_buffer: 1106 +index_buffer: 1502 +index_buffer: 1467 +index_buffer: 1540 +index_buffer: 1689 +index_buffer: 1467 +index_buffer: 1689 +index_buffer: 1690 +index_buffer: 1572 +index_buffer: 1141 +index_buffer: 1683 +index_buffer: 1572 +index_buffer: 1683 +index_buffer: 1701 +index_buffer: 1151 +index_buffer: 1572 +index_buffer: 1701 +index_buffer: 1151 +index_buffer: 1701 +index_buffer: 1685 +index_buffer: 714 +index_buffer: 1146 +index_buffer: 1686 +index_buffer: 714 +index_buffer: 1686 +index_buffer: 843 +index_buffer: 1636 +index_buffer: 1702 +index_buffer: 1703 +index_buffer: 1636 +index_buffer: 1703 +index_buffer: 1704 +index_buffer: 1704 +index_buffer: 1703 +index_buffer: 1705 +index_buffer: 1704 +index_buffer: 1705 +index_buffer: 1706 +index_buffer: 1707 +index_buffer: 1708 +index_buffer: 1073 +index_buffer: 1707 +index_buffer: 1073 +index_buffer: 1076 +index_buffer: 1073 +index_buffer: 1708 +index_buffer: 1709 +index_buffer: 1073 +index_buffer: 1709 +index_buffer: 1077 +index_buffer: 1710 +index_buffer: 1711 +index_buffer: 1629 +index_buffer: 1710 +index_buffer: 1629 +index_buffer: 1586 +index_buffer: 1712 +index_buffer: 1090 +index_buffer: 1629 +index_buffer: 1712 +index_buffer: 1629 +index_buffer: 1711 +index_buffer: 1713 +index_buffer: 1714 +index_buffer: 1083 +index_buffer: 1713 +index_buffer: 1083 +index_buffer: 1082 +index_buffer: 1715 +index_buffer: 1716 +index_buffer: 1717 +index_buffer: 1715 +index_buffer: 1717 +index_buffer: 1718 +index_buffer: 1719 +index_buffer: 1720 +index_buffer: 1715 +index_buffer: 1719 +index_buffer: 1715 +index_buffer: 1718 +index_buffer: 1267 +index_buffer: 1721 +index_buffer: 1722 +index_buffer: 1267 +index_buffer: 1722 +index_buffer: 1584 +index_buffer: 1584 +index_buffer: 1722 +index_buffer: 1710 +index_buffer: 1584 +index_buffer: 1710 +index_buffer: 1586 +index_buffer: 1626 +index_buffer: 1625 +index_buffer: 1092 +index_buffer: 1626 +index_buffer: 1092 +index_buffer: 1723 +index_buffer: 1076 +index_buffer: 1597 +index_buffer: 1724 +index_buffer: 1076 +index_buffer: 1724 +index_buffer: 1707 +index_buffer: 1083 +index_buffer: 1714 +index_buffer: 1721 +index_buffer: 1083 +index_buffer: 1721 +index_buffer: 1267 +index_buffer: 1461 +index_buffer: 1698 +index_buffer: 1702 +index_buffer: 1461 +index_buffer: 1702 +index_buffer: 1636 +index_buffer: 1725 +index_buffer: 1713 +index_buffer: 1082 +index_buffer: 1725 +index_buffer: 1082 +index_buffer: 1648 +index_buffer: 1092 +index_buffer: 1625 +index_buffer: 1624 +index_buffer: 1092 +index_buffer: 1624 +index_buffer: 1091 +index_buffer: 1091 +index_buffer: 1624 +index_buffer: 1610 +index_buffer: 1091 +index_buffer: 1610 +index_buffer: 1093 +index_buffer: 1093 +index_buffer: 1610 +index_buffer: 1609 +index_buffer: 1093 +index_buffer: 1609 +index_buffer: 1621 +index_buffer: 1609 +index_buffer: 1100 +index_buffer: 1101 +index_buffer: 1609 +index_buffer: 1101 +index_buffer: 1621 +index_buffer: 1631 +index_buffer: 1726 +index_buffer: 1727 +index_buffer: 1631 +index_buffer: 1727 +index_buffer: 1632 +index_buffer: 1619 +index_buffer: 1726 +index_buffer: 1631 +index_buffer: 1619 +index_buffer: 1631 +index_buffer: 1591 +index_buffer: 1727 +index_buffer: 1726 +index_buffer: 1619 +index_buffer: 1727 +index_buffer: 1619 +index_buffer: 1101 +index_buffer: 1101 +index_buffer: 1508 +index_buffer: 1728 +index_buffer: 1101 +index_buffer: 1728 +index_buffer: 1727 +index_buffer: 1504 +index_buffer: 1728 +index_buffer: 1508 +index_buffer: 1728 +index_buffer: 1504 +index_buffer: 1507 +index_buffer: 1728 +index_buffer: 1507 +index_buffer: 1634 +index_buffer: 1727 +index_buffer: 1728 +index_buffer: 1634 +index_buffer: 1727 +index_buffer: 1634 +index_buffer: 1632 +index_buffer: 1096 +index_buffer: 1509 +index_buffer: 1508 +index_buffer: 1096 +index_buffer: 1508 +index_buffer: 1101 +index_buffer: 1099 +index_buffer: 1510 +index_buffer: 1509 +index_buffer: 1099 +index_buffer: 1509 +index_buffer: 1096 +index_buffer: 1099 +index_buffer: 1501 +index_buffer: 1510 +index_buffer: 1501 +index_buffer: 1107 +index_buffer: 1297 +index_buffer: 1501 +index_buffer: 1297 +index_buffer: 1296 +index_buffer: 1729 +index_buffer: 1730 +index_buffer: 975 +index_buffer: 1729 +index_buffer: 975 +index_buffer: 974 +index_buffer: 1729 +index_buffer: 981 +index_buffer: 978 +index_buffer: 1729 +index_buffer: 978 +index_buffer: 1730 +index_buffer: 1730 +index_buffer: 978 +index_buffer: 977 +index_buffer: 1730 +index_buffer: 977 +index_buffer: 1731 +index_buffer: 1730 +index_buffer: 1731 +index_buffer: 976 +index_buffer: 1730 +index_buffer: 976 +index_buffer: 975 +index_buffer: 1680 +index_buffer: 1144 +index_buffer: 1145 +index_buffer: 1680 +index_buffer: 1145 +index_buffer: 1732 +index_buffer: 1136 +index_buffer: 1139 +index_buffer: 1680 +index_buffer: 1136 +index_buffer: 1680 +index_buffer: 1732 +index_buffer: 1202 +index_buffer: 1201 +index_buffer: 1733 +index_buffer: 1202 +index_buffer: 1733 +index_buffer: 1496 +index_buffer: 1496 +index_buffer: 1733 +index_buffer: 1203 +index_buffer: 1496 +index_buffer: 1203 +index_buffer: 1206 +index_buffer: 1731 +index_buffer: 1734 +index_buffer: 1339 +index_buffer: 1731 +index_buffer: 1339 +index_buffer: 976 +index_buffer: 1334 +index_buffer: 1734 +index_buffer: 1731 +index_buffer: 1334 +index_buffer: 1731 +index_buffer: 977 +index_buffer: 1734 +index_buffer: 1334 +index_buffer: 1336 +index_buffer: 1734 +index_buffer: 1336 +index_buffer: 1604 +index_buffer: 1339 +index_buffer: 1734 +index_buffer: 1604 +index_buffer: 1339 +index_buffer: 1604 +index_buffer: 1340 +index_buffer: 1497 +index_buffer: 1422 +index_buffer: 1421 +index_buffer: 1497 +index_buffer: 1421 +index_buffer: 1735 +index_buffer: 1497 +index_buffer: 1735 +index_buffer: 1420 +index_buffer: 1497 +index_buffer: 1420 +index_buffer: 1419 +index_buffer: 1735 +index_buffer: 1729 +index_buffer: 974 +index_buffer: 1735 +index_buffer: 974 +index_buffer: 1420 +index_buffer: 1735 +index_buffer: 1421 +index_buffer: 981 +index_buffer: 1735 +index_buffer: 981 +index_buffer: 1729 +index_buffer: 1200 +index_buffer: 1202 +index_buffer: 1419 +index_buffer: 1200 +index_buffer: 1419 +index_buffer: 1416 +index_buffer: 1197 +index_buffer: 1200 +index_buffer: 1416 +index_buffer: 1197 +index_buffer: 1416 +index_buffer: 1415 +index_buffer: 1732 +index_buffer: 1145 +index_buffer: 1342 +index_buffer: 1732 +index_buffer: 1342 +index_buffer: 1341 +index_buffer: 1135 +index_buffer: 1677 +index_buffer: 1736 +index_buffer: 1135 +index_buffer: 1736 +index_buffer: 1138 +index_buffer: 1138 +index_buffer: 1736 +index_buffer: 1678 +index_buffer: 1138 +index_buffer: 1678 +index_buffer: 1139 +index_buffer: 1737 +index_buffer: 1087 +index_buffer: 1090 +index_buffer: 1737 +index_buffer: 1090 +index_buffer: 1712 +index_buffer: 1723 +index_buffer: 1092 +index_buffer: 1087 +index_buffer: 1723 +index_buffer: 1087 +index_buffer: 1737 +index_buffer: 1274 +index_buffer: 1272 +index_buffer: 1482 +index_buffer: 1274 +index_buffer: 1482 +index_buffer: 1072 +index_buffer: 175 +index_buffer: 1050 +index_buffer: 1352 +index_buffer: 175 +index_buffer: 1352 +index_buffer: 488 +index_buffer: 1544 +index_buffer: 1450 +index_buffer: 1355 +index_buffer: 1544 +index_buffer: 1355 +index_buffer: 1354 +index_buffer: 1453 +index_buffer: 1646 +index_buffer: 1359 +index_buffer: 1453 +index_buffer: 1359 +index_buffer: 1358 +index_buffer: 1646 +index_buffer: 1645 +index_buffer: 1362 +index_buffer: 1646 +index_buffer: 1362 +index_buffer: 1359 +index_buffer: 1645 +index_buffer: 1644 +index_buffer: 1364 +index_buffer: 1645 +index_buffer: 1364 +index_buffer: 1362 +index_buffer: 1643 +index_buffer: 1366 +index_buffer: 1364 +index_buffer: 1643 +index_buffer: 1364 +index_buffer: 1644 +index_buffer: 1643 +index_buffer: 1642 +index_buffer: 1368 +index_buffer: 1643 +index_buffer: 1368 +index_buffer: 1366 +index_buffer: 1642 +index_buffer: 1641 +index_buffer: 1370 +index_buffer: 1642 +index_buffer: 1370 +index_buffer: 1368 +index_buffer: 1370 +index_buffer: 1641 +index_buffer: 1640 +index_buffer: 1370 +index_buffer: 1640 +index_buffer: 1372 +index_buffer: 1640 +index_buffer: 1639 +index_buffer: 1374 +index_buffer: 1640 +index_buffer: 1374 +index_buffer: 1372 +index_buffer: 1639 +index_buffer: 1638 +index_buffer: 1376 +index_buffer: 1639 +index_buffer: 1376 +index_buffer: 1374 +index_buffer: 1032 +index_buffer: 1378 +index_buffer: 1376 +index_buffer: 1032 +index_buffer: 1376 +index_buffer: 1638 +index_buffer: 1650 +index_buffer: 1382 +index_buffer: 1381 +index_buffer: 1650 +index_buffer: 1381 +index_buffer: 1035 +index_buffer: 1650 +index_buffer: 1649 +index_buffer: 1384 +index_buffer: 1650 +index_buffer: 1384 +index_buffer: 1382 +index_buffer: 1071 +index_buffer: 1469 +index_buffer: 1274 +index_buffer: 1071 +index_buffer: 1274 +index_buffer: 1072 +index_buffer: 1070 +index_buffer: 1470 +index_buffer: 1469 +index_buffer: 1070 +index_buffer: 1469 +index_buffer: 1071 +index_buffer: 1491 +index_buffer: 1378 +index_buffer: 1032 +index_buffer: 1491 +index_buffer: 1032 +index_buffer: 1031 +index_buffer: 1381 +index_buffer: 1491 +index_buffer: 1031 +index_buffer: 1381 +index_buffer: 1031 +index_buffer: 1035 +index_buffer: 1384 +index_buffer: 1649 +index_buffer: 1483 +index_buffer: 1384 +index_buffer: 1483 +index_buffer: 1523 +index_buffer: 1108 +index_buffer: 1111 +index_buffer: 1309 +index_buffer: 1108 +index_buffer: 1309 +index_buffer: 1308 +index_buffer: 1112 +index_buffer: 1115 +index_buffer: 1315 +index_buffer: 1112 +index_buffer: 1315 +index_buffer: 1314 +index_buffer: 1119 +index_buffer: 1118 +index_buffer: 1320 +index_buffer: 1119 +index_buffer: 1320 +index_buffer: 1319 +index_buffer: 1120 +index_buffer: 1123 +index_buffer: 1324 +index_buffer: 1120 +index_buffer: 1324 +index_buffer: 1323 +index_buffer: 1327 +index_buffer: 1124 +index_buffer: 1127 +index_buffer: 1327 +index_buffer: 1127 +index_buffer: 1328 +index_buffer: 1331 +index_buffer: 1128 +index_buffer: 1131 +index_buffer: 1331 +index_buffer: 1131 +index_buffer: 1332 +index_buffer: 1336 +index_buffer: 1335 +index_buffer: 1133 +index_buffer: 1336 +index_buffer: 1133 +index_buffer: 1132 +index_buffer: 1340 +index_buffer: 1604 +index_buffer: 1137 +index_buffer: 1340 +index_buffer: 1137 +index_buffer: 1136 +index_buffer: 1571 +index_buffer: 1150 +index_buffer: 1348 +index_buffer: 1571 +index_buffer: 1348 +index_buffer: 1347 +index_buffer: 1143 +index_buffer: 1142 +index_buffer: 1346 +index_buffer: 1143 +index_buffer: 1346 +index_buffer: 1575 +index_buffer: 1579 +index_buffer: 1148 +index_buffer: 1147 +index_buffer: 1579 +index_buffer: 1147 +index_buffer: 1351 +index_buffer: 1340 +index_buffer: 1136 +index_buffer: 1732 +index_buffer: 1340 +index_buffer: 1732 +index_buffer: 1341 +index_buffer: 1637 +index_buffer: 1738 +index_buffer: 1549 +index_buffer: 1637 +index_buffer: 1549 +index_buffer: 1277 +index_buffer: 1636 +index_buffer: 1704 +index_buffer: 1738 +index_buffer: 1636 +index_buffer: 1738 +index_buffer: 1637 +index_buffer: 1704 +index_buffer: 1706 +index_buffer: 1739 +index_buffer: 1704 +index_buffer: 1739 +index_buffer: 1738 +index_buffer: 1738 +index_buffer: 1739 +index_buffer: 1600 +index_buffer: 1738 +index_buffer: 1600 +index_buffer: 1549 +index_buffer: 1297 +index_buffer: 1107 +index_buffer: 1105 +index_buffer: 1297 +index_buffer: 1105 +index_buffer: 1302 +index_buffer: 1706 +index_buffer: 1705 +index_buffer: 1740 +index_buffer: 1706 +index_buffer: 1740 +index_buffer: 1741 +index_buffer: 1717 +index_buffer: 1716 +index_buffer: 1741 +index_buffer: 1717 +index_buffer: 1741 +index_buffer: 1740 +index_buffer: 1739 +index_buffer: 1706 +index_buffer: 1741 +index_buffer: 1739 +index_buffer: 1741 +index_buffer: 1742 +index_buffer: 1741 +index_buffer: 1716 +index_buffer: 1715 +index_buffer: 1741 +index_buffer: 1715 +index_buffer: 1742 +index_buffer: 1599 +index_buffer: 1742 +index_buffer: 1715 +index_buffer: 1599 +index_buffer: 1715 +index_buffer: 1720 +index_buffer: 1739 +index_buffer: 1742 +index_buffer: 1599 +index_buffer: 1739 +index_buffer: 1599 +index_buffer: 1600 +index_buffer: 1600 +index_buffer: 1598 +index_buffer: 1550 +index_buffer: 1600 +index_buffer: 1550 +index_buffer: 1549 +index_buffer: 1599 +index_buffer: 1720 +index_buffer: 1597 +index_buffer: 1599 +index_buffer: 1597 +index_buffer: 1596 +index_buffer: 1720 +index_buffer: 1719 +index_buffer: 1724 +index_buffer: 1720 +index_buffer: 1724 +index_buffer: 1597 +index_buffer: 1516 +index_buffer: 1519 +index_buffer: 1041 +index_buffer: 1516 +index_buffer: 1041 +index_buffer: 1040 +index_buffer: 1078 +index_buffer: 1077 +index_buffer: 1648 +index_buffer: 1078 +index_buffer: 1648 +index_buffer: 1647 +index_buffer: 1272 +index_buffer: 1271 +index_buffer: 1522 +index_buffer: 1272 +index_buffer: 1522 +index_buffer: 1523 +index_buffer: 1526 +index_buffer: 1282 +index_buffer: 1283 +index_buffer: 1526 +index_buffer: 1283 +index_buffer: 1527 +index_buffer: 1038 +index_buffer: 1041 +index_buffer: 1520 +index_buffer: 1038 +index_buffer: 1520 +index_buffer: 1042 +index_buffer: 1078 +index_buffer: 1647 +index_buffer: 1612 +index_buffer: 1078 +index_buffer: 1612 +index_buffer: 1521 +index_buffer: 1530 +index_buffer: 1284 +index_buffer: 1278 +index_buffer: 1530 +index_buffer: 1278 +index_buffer: 1282 +index_buffer: 1527 +index_buffer: 1283 +index_buffer: 1535 +index_buffer: 1527 +index_buffer: 1535 +index_buffer: 1539 +index_buffer: 1535 +index_buffer: 1536 +index_buffer: 1566 +index_buffer: 1535 +index_buffer: 1566 +index_buffer: 1537 +index_buffer: 1520 +index_buffer: 1455 +index_buffer: 1458 +index_buffer: 1520 +index_buffer: 1458 +index_buffer: 1567 +index_buffer: 1516 +index_buffer: 1040 +index_buffer: 1271 +index_buffer: 1516 +index_buffer: 1271 +index_buffer: 1270 +index_buffer: 1079 +index_buffer: 1521 +index_buffer: 1614 +index_buffer: 1079 +index_buffer: 1614 +index_buffer: 1616 +index_buffer: 1614 +index_buffer: 1613 +index_buffer: 1284 +index_buffer: 1614 +index_buffer: 1284 +index_buffer: 1530 +index_buffer: 1567 +index_buffer: 1458 +index_buffer: 1538 +index_buffer: 1567 +index_buffer: 1538 +index_buffer: 1537 +index_buffer: 1725 +index_buffer: 1648 +index_buffer: 1077 +index_buffer: 1725 +index_buffer: 1077 +index_buffer: 1709 +index_buffer: 1602 +index_buffer: 1277 +index_buffer: 1276 +index_buffer: 1275 +index_buffer: 1277 +index_buffer: 1601 +index_buffer: 1603 +index_buffer: 1471 +index_buffer: 1470 +index_buffer: 1603 +index_buffer: 1470 +index_buffer: 1463 +index_buffer: 1743 +index_buffer: 1744 +index_buffer: 956 +index_buffer: 1743 +index_buffer: 956 +index_buffer: 955 +index_buffer: 954 +index_buffer: 956 +index_buffer: 1744 +index_buffer: 954 +index_buffer: 1744 +index_buffer: 1745 +index_buffer: 964 +index_buffer: 1583 +index_buffer: 1744 +index_buffer: 964 +index_buffer: 1744 +index_buffer: 1743 +index_buffer: 1580 +index_buffer: 1745 +index_buffer: 1744 +index_buffer: 1580 +index_buffer: 1744 +index_buffer: 1583 +index_buffer: 955 +index_buffer: 958 +index_buffer: 1047 +index_buffer: 955 +index_buffer: 1047 +index_buffer: 1266 +index_buffer: 1408 +index_buffer: 1743 +index_buffer: 955 +index_buffer: 1408 +index_buffer: 955 +index_buffer: 1266 +index_buffer: 1743 +index_buffer: 1408 +index_buffer: 1410 +index_buffer: 1743 +index_buffer: 1410 +index_buffer: 964 +index_buffer: 954 +index_buffer: 953 +index_buffer: 957 +index_buffer: 954 +index_buffer: 957 +index_buffer: 956 +index_buffer: 1534 +index_buffer: 1544 +index_buffer: 1050 +index_buffer: 1534 +index_buffer: 1050 +index_buffer: 1049 +index_buffer: 1049 +index_buffer: 1051 +index_buffer: 1531 +index_buffer: 1049 +index_buffer: 1531 +index_buffer: 1534 +index_buffer: 1543 +index_buffer: 1542 +index_buffer: 1153 +index_buffer: 1543 +index_buffer: 1153 +index_buffer: 1152 +index_buffer: 1542 +index_buffer: 1532 +index_buffer: 1154 +index_buffer: 1542 +index_buffer: 1154 +index_buffer: 1153 +index_buffer: 953 +index_buffer: 1255 +index_buffer: 1547 +index_buffer: 953 +index_buffer: 1547 +index_buffer: 957 +index_buffer: 1255 +index_buffer: 1256 +index_buffer: 1548 +index_buffer: 1255 +index_buffer: 1548 +index_buffer: 1547 +index_buffer: 1352 +index_buffer: 1354 +index_buffer: 1357 +index_buffer: 1352 +index_buffer: 1357 +index_buffer: 1353 +index_buffer: 1154 +index_buffer: 1532 +index_buffer: 1531 +index_buffer: 1154 +index_buffer: 1531 +index_buffer: 1051 +index_buffer: 1256 +index_buffer: 1353 +index_buffer: 1357 +index_buffer: 1256 +index_buffer: 1357 +index_buffer: 1548 +index_buffer: 1688 +index_buffer: 1543 +index_buffer: 1152 +index_buffer: 1688 +index_buffer: 1152 +index_buffer: 1687 +index_buffer: 1544 +index_buffer: 1354 +index_buffer: 1352 +index_buffer: 1544 +index_buffer: 1352 +index_buffer: 1050 +index_buffer: 76 +index_buffer: 954 +index_buffer: 1745 +index_buffer: 76 +index_buffer: 1745 +index_buffer: 888 +index_buffer: 720 +index_buffer: 888 +index_buffer: 1745 +index_buffer: 720 +index_buffer: 1745 +index_buffer: 1580 +index_buffer: 1746 +index_buffer: 1747 +index_buffer: 1748 +index_buffer: 1746 +index_buffer: 1748 +index_buffer: 1749 +index_buffer: 1747 +index_buffer: 1750 +index_buffer: 1751 +index_buffer: 1747 +index_buffer: 1751 +index_buffer: 1748 +index_buffer: 1752 +index_buffer: 1753 +index_buffer: 1754 +index_buffer: 1752 +index_buffer: 1754 +index_buffer: 1755 +index_buffer: 1753 +index_buffer: 1756 +index_buffer: 1757 +index_buffer: 1753 +index_buffer: 1757 +index_buffer: 1754 +index_buffer: 1758 +index_buffer: 1759 +index_buffer: 1753 +index_buffer: 1758 +index_buffer: 1753 +index_buffer: 1752 +index_buffer: 1753 +index_buffer: 1759 +index_buffer: 1760 +index_buffer: 1753 +index_buffer: 1760 +index_buffer: 1756 +index_buffer: 1761 +index_buffer: 1762 +index_buffer: 1759 +index_buffer: 1761 +index_buffer: 1759 +index_buffer: 1758 +index_buffer: 1762 +index_buffer: 1763 +index_buffer: 1760 +index_buffer: 1762 +index_buffer: 1760 +index_buffer: 1759 +index_buffer: 1764 +index_buffer: 1765 +index_buffer: 1763 +index_buffer: 1764 +index_buffer: 1763 +index_buffer: 1762 +index_buffer: 1762 +index_buffer: 1761 +index_buffer: 1766 +index_buffer: 1762 +index_buffer: 1766 +index_buffer: 1764 +index_buffer: 1767 +index_buffer: 1768 +index_buffer: 1764 +index_buffer: 1767 +index_buffer: 1764 +index_buffer: 1766 +index_buffer: 1768 +index_buffer: 1769 +index_buffer: 1765 +index_buffer: 1768 +index_buffer: 1765 +index_buffer: 1764 +index_buffer: 1770 +index_buffer: 1771 +index_buffer: 1769 +index_buffer: 1770 +index_buffer: 1769 +index_buffer: 1768 +index_buffer: 1772 +index_buffer: 1770 +index_buffer: 1768 +index_buffer: 1772 +index_buffer: 1768 +index_buffer: 1767 +index_buffer: 1773 +index_buffer: 1774 +index_buffer: 1770 +index_buffer: 1773 +index_buffer: 1770 +index_buffer: 1772 +index_buffer: 1774 +index_buffer: 1775 +index_buffer: 1771 +index_buffer: 1774 +index_buffer: 1771 +index_buffer: 1770 +index_buffer: 1775 +index_buffer: 1774 +index_buffer: 1776 +index_buffer: 1775 +index_buffer: 1776 +index_buffer: 1777 +index_buffer: 1778 +index_buffer: 1776 +index_buffer: 1774 +index_buffer: 1778 +index_buffer: 1774 +index_buffer: 1773 +index_buffer: 1779 +index_buffer: 1776 +index_buffer: 1778 +index_buffer: 1779 +index_buffer: 1778 +index_buffer: 1780 +index_buffer: 1779 +index_buffer: 1781 +index_buffer: 1777 +index_buffer: 1779 +index_buffer: 1777 +index_buffer: 1776 +index_buffer: 1782 +index_buffer: 1783 +index_buffer: 1781 +index_buffer: 1782 +index_buffer: 1781 +index_buffer: 1779 +index_buffer: 1784 +index_buffer: 1782 +index_buffer: 1779 +index_buffer: 1784 +index_buffer: 1779 +index_buffer: 1780 +index_buffer: 1755 +index_buffer: 1754 +index_buffer: 1747 +index_buffer: 1755 +index_buffer: 1747 +index_buffer: 1746 +index_buffer: 1754 +index_buffer: 1757 +index_buffer: 1750 +index_buffer: 1754 +index_buffer: 1750 +index_buffer: 1747 +index_buffer: 1782 +index_buffer: 1784 +index_buffer: 1785 +index_buffer: 1782 +index_buffer: 1785 +index_buffer: 1786 +index_buffer: 1787 +index_buffer: 1783 +index_buffer: 1782 +index_buffer: 1787 +index_buffer: 1782 +index_buffer: 1786 +index_buffer: 1788 +index_buffer: 1787 +index_buffer: 1786 +index_buffer: 1788 +index_buffer: 1786 +index_buffer: 1789 +index_buffer: 1790 +index_buffer: 1789 +index_buffer: 1786 +index_buffer: 1790 +index_buffer: 1786 +index_buffer: 1785 +index_buffer: 1791 +index_buffer: 1792 +index_buffer: 1751 +index_buffer: 1791 +index_buffer: 1751 +index_buffer: 1750 +index_buffer: 1793 +index_buffer: 1792 +index_buffer: 1791 +index_buffer: 1793 +index_buffer: 1791 +index_buffer: 1794 +index_buffer: 1795 +index_buffer: 1746 +index_buffer: 1749 +index_buffer: 1795 +index_buffer: 1749 +index_buffer: 1796 +index_buffer: 1795 +index_buffer: 1796 +index_buffer: 1797 +index_buffer: 1795 +index_buffer: 1797 +index_buffer: 1798 +index_buffer: 1756 +index_buffer: 1799 +index_buffer: 1800 +index_buffer: 1756 +index_buffer: 1800 +index_buffer: 1757 +index_buffer: 1799 +index_buffer: 1801 +index_buffer: 1802 +index_buffer: 1799 +index_buffer: 1802 +index_buffer: 1800 +index_buffer: 1803 +index_buffer: 1752 +index_buffer: 1755 +index_buffer: 1803 +index_buffer: 1755 +index_buffer: 1804 +index_buffer: 1805 +index_buffer: 1803 +index_buffer: 1804 +index_buffer: 1805 +index_buffer: 1804 +index_buffer: 1806 +index_buffer: 1760 +index_buffer: 1807 +index_buffer: 1799 +index_buffer: 1760 +index_buffer: 1799 +index_buffer: 1756 +index_buffer: 1801 +index_buffer: 1799 +index_buffer: 1807 +index_buffer: 1801 +index_buffer: 1807 +index_buffer: 1808 +index_buffer: 1803 +index_buffer: 1809 +index_buffer: 1758 +index_buffer: 1803 +index_buffer: 1758 +index_buffer: 1752 +index_buffer: 1809 +index_buffer: 1803 +index_buffer: 1805 +index_buffer: 1809 +index_buffer: 1805 +index_buffer: 1810 +index_buffer: 1765 +index_buffer: 1811 +index_buffer: 1812 +index_buffer: 1765 +index_buffer: 1812 +index_buffer: 1763 +index_buffer: 1760 +index_buffer: 1763 +index_buffer: 1812 +index_buffer: 1760 +index_buffer: 1812 +index_buffer: 1807 +index_buffer: 1812 +index_buffer: 1813 +index_buffer: 1808 +index_buffer: 1812 +index_buffer: 1808 +index_buffer: 1807 +index_buffer: 1811 +index_buffer: 1814 +index_buffer: 1813 +index_buffer: 1811 +index_buffer: 1813 +index_buffer: 1812 +index_buffer: 1758 +index_buffer: 1809 +index_buffer: 1815 +index_buffer: 1758 +index_buffer: 1815 +index_buffer: 1761 +index_buffer: 1815 +index_buffer: 1816 +index_buffer: 1766 +index_buffer: 1815 +index_buffer: 1766 +index_buffer: 1761 +index_buffer: 1817 +index_buffer: 1816 +index_buffer: 1815 +index_buffer: 1817 +index_buffer: 1815 +index_buffer: 1818 +index_buffer: 1815 +index_buffer: 1809 +index_buffer: 1810 +index_buffer: 1815 +index_buffer: 1810 +index_buffer: 1818 +index_buffer: 1771 +index_buffer: 1819 +index_buffer: 1820 +index_buffer: 1771 +index_buffer: 1820 +index_buffer: 1769 +index_buffer: 1769 +index_buffer: 1820 +index_buffer: 1811 +index_buffer: 1769 +index_buffer: 1811 +index_buffer: 1765 +index_buffer: 1814 +index_buffer: 1811 +index_buffer: 1820 +index_buffer: 1814 +index_buffer: 1820 +index_buffer: 1821 +index_buffer: 1821 +index_buffer: 1820 +index_buffer: 1819 +index_buffer: 1821 +index_buffer: 1819 +index_buffer: 1822 +index_buffer: 1767 +index_buffer: 1766 +index_buffer: 1816 +index_buffer: 1767 +index_buffer: 1816 +index_buffer: 1823 +index_buffer: 1823 +index_buffer: 1824 +index_buffer: 1772 +index_buffer: 1823 +index_buffer: 1772 +index_buffer: 1767 +index_buffer: 1824 +index_buffer: 1823 +index_buffer: 1825 +index_buffer: 1824 +index_buffer: 1825 +index_buffer: 1826 +index_buffer: 1817 +index_buffer: 1825 +index_buffer: 1823 +index_buffer: 1817 +index_buffer: 1823 +index_buffer: 1816 +index_buffer: 1827 +index_buffer: 1828 +index_buffer: 1775 +index_buffer: 1827 +index_buffer: 1775 +index_buffer: 1777 +index_buffer: 1775 +index_buffer: 1828 +index_buffer: 1819 +index_buffer: 1775 +index_buffer: 1819 +index_buffer: 1771 +index_buffer: 1822 +index_buffer: 1819 +index_buffer: 1828 +index_buffer: 1822 +index_buffer: 1828 +index_buffer: 1829 +index_buffer: 1827 +index_buffer: 1830 +index_buffer: 1829 +index_buffer: 1827 +index_buffer: 1829 +index_buffer: 1828 +index_buffer: 1831 +index_buffer: 1773 +index_buffer: 1772 +index_buffer: 1831 +index_buffer: 1772 +index_buffer: 1824 +index_buffer: 1832 +index_buffer: 1778 +index_buffer: 1773 +index_buffer: 1832 +index_buffer: 1773 +index_buffer: 1831 +index_buffer: 1831 +index_buffer: 1833 +index_buffer: 1834 +index_buffer: 1831 +index_buffer: 1834 +index_buffer: 1832 +index_buffer: 1831 +index_buffer: 1824 +index_buffer: 1826 +index_buffer: 1831 +index_buffer: 1826 +index_buffer: 1833 +index_buffer: 1835 +index_buffer: 1781 +index_buffer: 1783 +index_buffer: 1835 +index_buffer: 1783 +index_buffer: 1836 +index_buffer: 1827 +index_buffer: 1777 +index_buffer: 1781 +index_buffer: 1827 +index_buffer: 1781 +index_buffer: 1835 +index_buffer: 1827 +index_buffer: 1835 +index_buffer: 1837 +index_buffer: 1827 +index_buffer: 1837 +index_buffer: 1830 +index_buffer: 1836 +index_buffer: 1838 +index_buffer: 1837 +index_buffer: 1836 +index_buffer: 1837 +index_buffer: 1835 +index_buffer: 1778 +index_buffer: 1832 +index_buffer: 1839 +index_buffer: 1778 +index_buffer: 1839 +index_buffer: 1780 +index_buffer: 1840 +index_buffer: 1784 +index_buffer: 1780 +index_buffer: 1840 +index_buffer: 1780 +index_buffer: 1839 +index_buffer: 1841 +index_buffer: 1842 +index_buffer: 1840 +index_buffer: 1841 +index_buffer: 1840 +index_buffer: 1839 +index_buffer: 1841 +index_buffer: 1839 +index_buffer: 1832 +index_buffer: 1841 +index_buffer: 1832 +index_buffer: 1834 +index_buffer: 1757 +index_buffer: 1800 +index_buffer: 1791 +index_buffer: 1757 +index_buffer: 1791 +index_buffer: 1750 +index_buffer: 1800 +index_buffer: 1802 +index_buffer: 1794 +index_buffer: 1800 +index_buffer: 1794 +index_buffer: 1791 +index_buffer: 1804 +index_buffer: 1755 +index_buffer: 1746 +index_buffer: 1804 +index_buffer: 1746 +index_buffer: 1795 +index_buffer: 1798 +index_buffer: 1806 +index_buffer: 1804 +index_buffer: 1798 +index_buffer: 1804 +index_buffer: 1795 +index_buffer: 1843 +index_buffer: 1787 +index_buffer: 1788 +index_buffer: 1843 +index_buffer: 1788 +index_buffer: 1844 +index_buffer: 1787 +index_buffer: 1843 +index_buffer: 1836 +index_buffer: 1787 +index_buffer: 1836 +index_buffer: 1783 +index_buffer: 1838 +index_buffer: 1836 +index_buffer: 1843 +index_buffer: 1838 +index_buffer: 1843 +index_buffer: 1845 +index_buffer: 1844 +index_buffer: 1846 +index_buffer: 1845 +index_buffer: 1844 +index_buffer: 1845 +index_buffer: 1843 +index_buffer: 1784 +index_buffer: 1840 +index_buffer: 1847 +index_buffer: 1784 +index_buffer: 1847 +index_buffer: 1785 +index_buffer: 1848 +index_buffer: 1790 +index_buffer: 1785 +index_buffer: 1848 +index_buffer: 1785 +index_buffer: 1847 +index_buffer: 1848 +index_buffer: 1847 +index_buffer: 1849 +index_buffer: 1848 +index_buffer: 1849 +index_buffer: 1850 +index_buffer: 1842 +index_buffer: 1849 +index_buffer: 1847 +index_buffer: 1842 +index_buffer: 1847 +index_buffer: 1840 +index_buffer: 1851 +index_buffer: 1789 +index_buffer: 1790 +index_buffer: 1851 +index_buffer: 1790 +index_buffer: 1852 +index_buffer: 1789 +index_buffer: 1851 +index_buffer: 1853 +index_buffer: 1789 +index_buffer: 1853 +index_buffer: 1788 +index_buffer: 1854 +index_buffer: 1844 +index_buffer: 1788 +index_buffer: 1854 +index_buffer: 1788 +index_buffer: 1853 +index_buffer: 1854 +index_buffer: 1855 +index_buffer: 1846 +index_buffer: 1854 +index_buffer: 1846 +index_buffer: 1844 +index_buffer: 1856 +index_buffer: 1857 +index_buffer: 1858 +index_buffer: 1856 +index_buffer: 1858 +index_buffer: 1850 +index_buffer: 1859 +index_buffer: 1860 +index_buffer: 1861 +index_buffer: 1859 +index_buffer: 1861 +index_buffer: 1862 +index_buffer: 1862 +index_buffer: 1863 +index_buffer: 1864 +index_buffer: 1862 +index_buffer: 1864 +index_buffer: 1859 +index_buffer: 1865 +index_buffer: 1793 +index_buffer: 1794 +index_buffer: 1865 +index_buffer: 1794 +index_buffer: 1866 +index_buffer: 1798 +index_buffer: 1797 +index_buffer: 1867 +index_buffer: 1798 +index_buffer: 1867 +index_buffer: 1868 +index_buffer: 1869 +index_buffer: 1870 +index_buffer: 1802 +index_buffer: 1869 +index_buffer: 1802 +index_buffer: 1801 +index_buffer: 1806 +index_buffer: 1871 +index_buffer: 1872 +index_buffer: 1806 +index_buffer: 1872 +index_buffer: 1805 +index_buffer: 1808 +index_buffer: 1873 +index_buffer: 1869 +index_buffer: 1808 +index_buffer: 1869 +index_buffer: 1801 +index_buffer: 1872 +index_buffer: 1874 +index_buffer: 1810 +index_buffer: 1872 +index_buffer: 1810 +index_buffer: 1805 +index_buffer: 1808 +index_buffer: 1813 +index_buffer: 1875 +index_buffer: 1808 +index_buffer: 1875 +index_buffer: 1873 +index_buffer: 1814 +index_buffer: 1876 +index_buffer: 1875 +index_buffer: 1814 +index_buffer: 1875 +index_buffer: 1813 +index_buffer: 1877 +index_buffer: 1878 +index_buffer: 1817 +index_buffer: 1877 +index_buffer: 1817 +index_buffer: 1818 +index_buffer: 1874 +index_buffer: 1877 +index_buffer: 1818 +index_buffer: 1874 +index_buffer: 1818 +index_buffer: 1810 +index_buffer: 1821 +index_buffer: 1879 +index_buffer: 1876 +index_buffer: 1821 +index_buffer: 1876 +index_buffer: 1814 +index_buffer: 1880 +index_buffer: 1879 +index_buffer: 1821 +index_buffer: 1880 +index_buffer: 1821 +index_buffer: 1822 +index_buffer: 1825 +index_buffer: 1881 +index_buffer: 1882 +index_buffer: 1825 +index_buffer: 1882 +index_buffer: 1826 +index_buffer: 1878 +index_buffer: 1881 +index_buffer: 1825 +index_buffer: 1878 +index_buffer: 1825 +index_buffer: 1817 +index_buffer: 1829 +index_buffer: 1883 +index_buffer: 1880 +index_buffer: 1829 +index_buffer: 1880 +index_buffer: 1822 +index_buffer: 1884 +index_buffer: 1883 +index_buffer: 1829 +index_buffer: 1884 +index_buffer: 1829 +index_buffer: 1830 +index_buffer: 1834 +index_buffer: 1833 +index_buffer: 1885 +index_buffer: 1834 +index_buffer: 1885 +index_buffer: 1886 +index_buffer: 1882 +index_buffer: 1885 +index_buffer: 1833 +index_buffer: 1882 +index_buffer: 1833 +index_buffer: 1826 +index_buffer: 1884 +index_buffer: 1830 +index_buffer: 1837 +index_buffer: 1884 +index_buffer: 1837 +index_buffer: 1887 +index_buffer: 1838 +index_buffer: 1888 +index_buffer: 1887 +index_buffer: 1838 +index_buffer: 1887 +index_buffer: 1837 +index_buffer: 1889 +index_buffer: 1890 +index_buffer: 1842 +index_buffer: 1889 +index_buffer: 1842 +index_buffer: 1841 +index_buffer: 1834 +index_buffer: 1886 +index_buffer: 1889 +index_buffer: 1834 +index_buffer: 1889 +index_buffer: 1841 +index_buffer: 1870 +index_buffer: 1866 +index_buffer: 1794 +index_buffer: 1870 +index_buffer: 1794 +index_buffer: 1802 +index_buffer: 1798 +index_buffer: 1868 +index_buffer: 1871 +index_buffer: 1798 +index_buffer: 1871 +index_buffer: 1806 +index_buffer: 1845 +index_buffer: 1891 +index_buffer: 1888 +index_buffer: 1845 +index_buffer: 1888 +index_buffer: 1838 +index_buffer: 1846 +index_buffer: 1892 +index_buffer: 1891 +index_buffer: 1846 +index_buffer: 1891 +index_buffer: 1845 +index_buffer: 1893 +index_buffer: 1856 +index_buffer: 1850 +index_buffer: 1893 +index_buffer: 1850 +index_buffer: 1849 +index_buffer: 1890 +index_buffer: 1893 +index_buffer: 1849 +index_buffer: 1890 +index_buffer: 1849 +index_buffer: 1842 +index_buffer: 1892 +index_buffer: 1846 +index_buffer: 1855 +index_buffer: 1892 +index_buffer: 1855 +index_buffer: 1894 +index_buffer: 1858 +index_buffer: 1895 +index_buffer: 1848 +index_buffer: 1858 +index_buffer: 1848 +index_buffer: 1850 +index_buffer: 1790 +index_buffer: 1848 +index_buffer: 1895 +index_buffer: 1790 +index_buffer: 1895 +index_buffer: 1852 +index_buffer: 1896 +index_buffer: 1860 +index_buffer: 1859 +index_buffer: 1896 +index_buffer: 1859 +index_buffer: 1897 +index_buffer: 1898 +index_buffer: 1899 +index_buffer: 1896 +index_buffer: 1898 +index_buffer: 1896 +index_buffer: 1897 +index_buffer: 1900 +index_buffer: 1901 +index_buffer: 1898 +index_buffer: 1900 +index_buffer: 1898 +index_buffer: 1897 +index_buffer: 1864 +index_buffer: 1900 +index_buffer: 1897 +index_buffer: 1864 +index_buffer: 1897 +index_buffer: 1859 +index_buffer: 1898 +index_buffer: 1901 +index_buffer: 1853 +index_buffer: 1898 +index_buffer: 1853 +index_buffer: 1851 +index_buffer: 1852 +index_buffer: 1899 +index_buffer: 1898 +index_buffer: 1852 +index_buffer: 1898 +index_buffer: 1851 +index_buffer: 1854 +index_buffer: 1902 +index_buffer: 1903 +index_buffer: 1854 +index_buffer: 1903 +index_buffer: 1855 +index_buffer: 1854 +index_buffer: 1853 +index_buffer: 1901 +index_buffer: 1854 +index_buffer: 1901 +index_buffer: 1902 +index_buffer: 1857 +index_buffer: 1904 +index_buffer: 1905 +index_buffer: 1857 +index_buffer: 1905 +index_buffer: 1858 +index_buffer: 1906 +index_buffer: 1894 +index_buffer: 1855 +index_buffer: 1906 +index_buffer: 1855 +index_buffer: 1903 +index_buffer: 1907 +index_buffer: 1899 +index_buffer: 1852 +index_buffer: 1907 +index_buffer: 1852 +index_buffer: 1895 +index_buffer: 1907 +index_buffer: 1895 +index_buffer: 1858 +index_buffer: 1907 +index_buffer: 1858 +index_buffer: 1905 +index_buffer: 1908 +index_buffer: 1909 +index_buffer: 1910 +index_buffer: 1908 +index_buffer: 1910 +index_buffer: 1911 +index_buffer: 1908 +index_buffer: 1911 +index_buffer: 1912 +index_buffer: 1908 +index_buffer: 1912 +index_buffer: 1913 +index_buffer: 1914 +index_buffer: 1915 +index_buffer: 1916 +index_buffer: 1914 +index_buffer: 1916 +index_buffer: 1917 +index_buffer: 1914 +index_buffer: 1917 +index_buffer: 1918 +index_buffer: 1914 +index_buffer: 1918 +index_buffer: 1919 +index_buffer: 1920 +index_buffer: 1921 +index_buffer: 1918 +index_buffer: 1920 +index_buffer: 1918 +index_buffer: 1917 +index_buffer: 1916 +index_buffer: 1922 +index_buffer: 1920 +index_buffer: 1916 +index_buffer: 1920 +index_buffer: 1917 +index_buffer: 1923 +index_buffer: 1924 +index_buffer: 1925 +index_buffer: 1923 +index_buffer: 1925 +index_buffer: 1926 +index_buffer: 1924 +index_buffer: 1927 +index_buffer: 1928 +index_buffer: 1924 +index_buffer: 1928 +index_buffer: 1925 +index_buffer: 1929 +index_buffer: 1930 +index_buffer: 1931 +index_buffer: 1929 +index_buffer: 1931 +index_buffer: 1932 +index_buffer: 1933 +index_buffer: 1929 +index_buffer: 1932 +index_buffer: 1933 +index_buffer: 1932 +index_buffer: 1934 +index_buffer: 1934 +index_buffer: 1932 +index_buffer: 1935 +index_buffer: 1934 +index_buffer: 1935 +index_buffer: 1936 +index_buffer: 1932 +index_buffer: 1931 +index_buffer: 1937 +index_buffer: 1932 +index_buffer: 1937 +index_buffer: 1935 +index_buffer: 1938 +index_buffer: 1939 +index_buffer: 1940 +index_buffer: 1938 +index_buffer: 1940 +index_buffer: 1941 +index_buffer: 1941 +index_buffer: 1942 +index_buffer: 1943 +index_buffer: 1941 +index_buffer: 1943 +index_buffer: 1938 +index_buffer: 1941 +index_buffer: 1944 +index_buffer: 1945 +index_buffer: 1941 +index_buffer: 1945 +index_buffer: 1942 +index_buffer: 1941 +index_buffer: 1940 +index_buffer: 1946 +index_buffer: 1941 +index_buffer: 1946 +index_buffer: 1944 +index_buffer: 1947 +index_buffer: 1948 +index_buffer: 1910 +index_buffer: 1947 +index_buffer: 1910 +index_buffer: 1909 +index_buffer: 1948 +index_buffer: 1947 +index_buffer: 1949 +index_buffer: 1948 +index_buffer: 1949 +index_buffer: 1950 +index_buffer: 1951 +index_buffer: 1931 +index_buffer: 1930 +index_buffer: 1951 +index_buffer: 1930 +index_buffer: 1952 +index_buffer: 1931 +index_buffer: 1951 +index_buffer: 1953 +index_buffer: 1931 +index_buffer: 1953 +index_buffer: 1937 +index_buffer: 1954 +index_buffer: 1955 +index_buffer: 1953 +index_buffer: 1954 +index_buffer: 1953 +index_buffer: 1951 +index_buffer: 1956 +index_buffer: 1954 +index_buffer: 1951 +index_buffer: 1956 +index_buffer: 1951 +index_buffer: 1952 +index_buffer: 1957 +index_buffer: 1958 +index_buffer: 1959 +index_buffer: 1957 +index_buffer: 1959 +index_buffer: 1960 +index_buffer: 1959 +index_buffer: 1961 +index_buffer: 1962 +index_buffer: 1959 +index_buffer: 1962 +index_buffer: 1960 +index_buffer: 1963 +index_buffer: 1961 +index_buffer: 1959 +index_buffer: 1963 +index_buffer: 1959 +index_buffer: 1964 +index_buffer: 1964 +index_buffer: 1959 +index_buffer: 1958 +index_buffer: 1964 +index_buffer: 1958 +index_buffer: 1965 +index_buffer: 1966 +index_buffer: 1967 +index_buffer: 1968 +index_buffer: 1966 +index_buffer: 1968 +index_buffer: 1969 +index_buffer: 1969 +index_buffer: 1970 +index_buffer: 1971 +index_buffer: 1969 +index_buffer: 1971 +index_buffer: 1966 +index_buffer: 1970 +index_buffer: 1969 +index_buffer: 1972 +index_buffer: 1970 +index_buffer: 1972 +index_buffer: 1973 +index_buffer: 1969 +index_buffer: 1968 +index_buffer: 1974 +index_buffer: 1969 +index_buffer: 1974 +index_buffer: 1972 +index_buffer: 1949 +index_buffer: 1975 +index_buffer: 1976 +index_buffer: 1949 +index_buffer: 1976 +index_buffer: 1950 +index_buffer: 1975 +index_buffer: 1977 +index_buffer: 1978 +index_buffer: 1975 +index_buffer: 1978 +index_buffer: 1976 +index_buffer: 1979 +index_buffer: 1954 +index_buffer: 1956 +index_buffer: 1979 +index_buffer: 1956 +index_buffer: 1980 +index_buffer: 1981 +index_buffer: 1955 +index_buffer: 1954 +index_buffer: 1981 +index_buffer: 1954 +index_buffer: 1979 +index_buffer: 1982 +index_buffer: 1981 +index_buffer: 1979 +index_buffer: 1982 +index_buffer: 1979 +index_buffer: 1983 +index_buffer: 1983 +index_buffer: 1979 +index_buffer: 1980 +index_buffer: 1983 +index_buffer: 1980 +index_buffer: 1984 +index_buffer: 1985 +index_buffer: 1986 +index_buffer: 1964 +index_buffer: 1985 +index_buffer: 1964 +index_buffer: 1965 +index_buffer: 1986 +index_buffer: 1987 +index_buffer: 1963 +index_buffer: 1986 +index_buffer: 1963 +index_buffer: 1964 +index_buffer: 1988 +index_buffer: 1987 +index_buffer: 1986 +index_buffer: 1988 +index_buffer: 1986 +index_buffer: 1989 +index_buffer: 1990 +index_buffer: 1989 +index_buffer: 1986 +index_buffer: 1990 +index_buffer: 1986 +index_buffer: 1985 +index_buffer: 1972 +index_buffer: 1974 +index_buffer: 1991 +index_buffer: 1972 +index_buffer: 1991 +index_buffer: 1992 +index_buffer: 1973 +index_buffer: 1972 +index_buffer: 1992 +index_buffer: 1973 +index_buffer: 1992 +index_buffer: 1993 +index_buffer: 1993 +index_buffer: 1992 +index_buffer: 1994 +index_buffer: 1993 +index_buffer: 1994 +index_buffer: 1995 +index_buffer: 1992 +index_buffer: 1991 +index_buffer: 1996 +index_buffer: 1992 +index_buffer: 1996 +index_buffer: 1994 +index_buffer: 1978 +index_buffer: 1977 +index_buffer: 1997 +index_buffer: 1978 +index_buffer: 1997 +index_buffer: 1998 +index_buffer: 1998 +index_buffer: 1997 +index_buffer: 1923 +index_buffer: 1998 +index_buffer: 1923 +index_buffer: 1926 +index_buffer: 1983 +index_buffer: 1984 +index_buffer: 1999 +index_buffer: 1983 +index_buffer: 1999 +index_buffer: 2000 +index_buffer: 2001 +index_buffer: 1982 +index_buffer: 1983 +index_buffer: 2001 +index_buffer: 1983 +index_buffer: 2000 +index_buffer: 2002 +index_buffer: 2001 +index_buffer: 2000 +index_buffer: 2002 +index_buffer: 2000 +index_buffer: 2003 +index_buffer: 1999 +index_buffer: 2004 +index_buffer: 2003 +index_buffer: 1999 +index_buffer: 2003 +index_buffer: 2000 +index_buffer: 2005 +index_buffer: 1989 +index_buffer: 1990 +index_buffer: 2005 +index_buffer: 1990 +index_buffer: 2006 +index_buffer: 1988 +index_buffer: 1989 +index_buffer: 2005 +index_buffer: 1988 +index_buffer: 2005 +index_buffer: 2007 +index_buffer: 2008 +index_buffer: 2009 +index_buffer: 2007 +index_buffer: 2008 +index_buffer: 2007 +index_buffer: 2005 +index_buffer: 2005 +index_buffer: 2006 +index_buffer: 2010 +index_buffer: 2005 +index_buffer: 2010 +index_buffer: 2008 +index_buffer: 1994 +index_buffer: 1996 +index_buffer: 2011 +index_buffer: 1994 +index_buffer: 2011 +index_buffer: 2012 +index_buffer: 1995 +index_buffer: 1994 +index_buffer: 2012 +index_buffer: 1995 +index_buffer: 2012 +index_buffer: 2013 +index_buffer: 2013 +index_buffer: 2012 +index_buffer: 2014 +index_buffer: 2013 +index_buffer: 2014 +index_buffer: 2015 +index_buffer: 2011 +index_buffer: 2016 +index_buffer: 2014 +index_buffer: 2011 +index_buffer: 2014 +index_buffer: 2012 +index_buffer: 2017 +index_buffer: 1913 +index_buffer: 1912 +index_buffer: 2017 +index_buffer: 1912 +index_buffer: 2018 +index_buffer: 2019 +index_buffer: 2017 +index_buffer: 2018 +index_buffer: 2019 +index_buffer: 2018 +index_buffer: 2020 +index_buffer: 2021 +index_buffer: 2022 +index_buffer: 1908 +index_buffer: 2021 +index_buffer: 1908 +index_buffer: 1913 +index_buffer: 2023 +index_buffer: 1909 +index_buffer: 1908 +index_buffer: 2023 +index_buffer: 1908 +index_buffer: 2022 +index_buffer: 2024 +index_buffer: 2023 +index_buffer: 2022 +index_buffer: 2024 +index_buffer: 2022 +index_buffer: 2025 +index_buffer: 2025 +index_buffer: 2022 +index_buffer: 2021 +index_buffer: 2025 +index_buffer: 2021 +index_buffer: 2026 +index_buffer: 2027 +index_buffer: 2028 +index_buffer: 1933 +index_buffer: 2027 +index_buffer: 1933 +index_buffer: 1934 +index_buffer: 2029 +index_buffer: 2028 +index_buffer: 2027 +index_buffer: 2029 +index_buffer: 2027 +index_buffer: 2030 +index_buffer: 2031 +index_buffer: 2030 +index_buffer: 2027 +index_buffer: 2031 +index_buffer: 2027 +index_buffer: 2032 +index_buffer: 1934 +index_buffer: 1936 +index_buffer: 2032 +index_buffer: 1934 +index_buffer: 2032 +index_buffer: 2027 +index_buffer: 2033 +index_buffer: 2034 +index_buffer: 1919 +index_buffer: 2033 +index_buffer: 1919 +index_buffer: 1918 +index_buffer: 2033 +index_buffer: 1918 +index_buffer: 1921 +index_buffer: 2033 +index_buffer: 1921 +index_buffer: 2035 +index_buffer: 1919 +index_buffer: 2036 +index_buffer: 2037 +index_buffer: 1919 +index_buffer: 2037 +index_buffer: 1914 +index_buffer: 1943 +index_buffer: 1915 +index_buffer: 1914 +index_buffer: 1943 +index_buffer: 1914 +index_buffer: 2037 +index_buffer: 2038 +index_buffer: 2039 +index_buffer: 2040 +index_buffer: 2038 +index_buffer: 2040 +index_buffer: 2041 +index_buffer: 2042 +index_buffer: 1939 +index_buffer: 2039 +index_buffer: 2042 +index_buffer: 2039 +index_buffer: 2038 +index_buffer: 2043 +index_buffer: 2044 +index_buffer: 2042 +index_buffer: 2043 +index_buffer: 2042 +index_buffer: 2038 +index_buffer: 2041 +index_buffer: 2045 +index_buffer: 2043 +index_buffer: 2041 +index_buffer: 2043 +index_buffer: 2038 +index_buffer: 1912 +index_buffer: 1911 +index_buffer: 2046 +index_buffer: 1912 +index_buffer: 2046 +index_buffer: 2047 +index_buffer: 2047 +index_buffer: 2046 +index_buffer: 1929 +index_buffer: 2047 +index_buffer: 1929 +index_buffer: 1933 +index_buffer: 2046 +index_buffer: 2048 +index_buffer: 1930 +index_buffer: 2046 +index_buffer: 1930 +index_buffer: 1929 +index_buffer: 1911 +index_buffer: 1910 +index_buffer: 2048 +index_buffer: 1911 +index_buffer: 2048 +index_buffer: 2046 +index_buffer: 1926 +index_buffer: 2049 +index_buffer: 2050 +index_buffer: 1926 +index_buffer: 2050 +index_buffer: 2051 +index_buffer: 2052 +index_buffer: 2003 +index_buffer: 2004 +index_buffer: 2052 +index_buffer: 2004 +index_buffer: 2051 +index_buffer: 2053 +index_buffer: 2002 +index_buffer: 2003 +index_buffer: 2053 +index_buffer: 2003 +index_buffer: 2052 +index_buffer: 2050 +index_buffer: 2049 +index_buffer: 2054 +index_buffer: 2050 +index_buffer: 2054 +index_buffer: 2055 +index_buffer: 1910 +index_buffer: 1948 +index_buffer: 2056 +index_buffer: 1910 +index_buffer: 2056 +index_buffer: 2048 +index_buffer: 2048 +index_buffer: 2056 +index_buffer: 1952 +index_buffer: 2048 +index_buffer: 1952 +index_buffer: 1930 +index_buffer: 2057 +index_buffer: 1956 +index_buffer: 1952 +index_buffer: 2057 +index_buffer: 1952 +index_buffer: 2056 +index_buffer: 2056 +index_buffer: 1948 +index_buffer: 1950 +index_buffer: 2056 +index_buffer: 1950 +index_buffer: 2057 +index_buffer: 1950 +index_buffer: 1976 +index_buffer: 2058 +index_buffer: 1950 +index_buffer: 2058 +index_buffer: 2057 +index_buffer: 1980 +index_buffer: 1956 +index_buffer: 2057 +index_buffer: 1980 +index_buffer: 2057 +index_buffer: 2058 +index_buffer: 2059 +index_buffer: 1984 +index_buffer: 1980 +index_buffer: 2059 +index_buffer: 1980 +index_buffer: 2058 +index_buffer: 1978 +index_buffer: 2059 +index_buffer: 2058 +index_buffer: 1978 +index_buffer: 2058 +index_buffer: 1976 +index_buffer: 1978 +index_buffer: 1998 +index_buffer: 2060 +index_buffer: 1978 +index_buffer: 2060 +index_buffer: 2059 +index_buffer: 1999 +index_buffer: 1984 +index_buffer: 2059 +index_buffer: 1999 +index_buffer: 2059 +index_buffer: 2060 +index_buffer: 2004 +index_buffer: 1999 +index_buffer: 2060 +index_buffer: 2004 +index_buffer: 2060 +index_buffer: 2051 +index_buffer: 2060 +index_buffer: 1998 +index_buffer: 1926 +index_buffer: 2060 +index_buffer: 1926 +index_buffer: 2051 +index_buffer: 2036 +index_buffer: 2061 +index_buffer: 2062 +index_buffer: 2036 +index_buffer: 2062 +index_buffer: 2063 +index_buffer: 2063 +index_buffer: 2062 +index_buffer: 2064 +index_buffer: 2063 +index_buffer: 2064 +index_buffer: 2040 +index_buffer: 2037 +index_buffer: 2065 +index_buffer: 1938 +index_buffer: 2037 +index_buffer: 1938 +index_buffer: 1943 +index_buffer: 2039 +index_buffer: 1939 +index_buffer: 1938 +index_buffer: 2039 +index_buffer: 1938 +index_buffer: 2065 +index_buffer: 2039 +index_buffer: 2065 +index_buffer: 2063 +index_buffer: 2039 +index_buffer: 2063 +index_buffer: 2040 +index_buffer: 2037 +index_buffer: 2036 +index_buffer: 2063 +index_buffer: 2037 +index_buffer: 2063 +index_buffer: 2065 +index_buffer: 2066 +index_buffer: 1915 +index_buffer: 1943 +index_buffer: 2066 +index_buffer: 1943 +index_buffer: 1942 +index_buffer: 2067 +index_buffer: 2066 +index_buffer: 1942 +index_buffer: 2067 +index_buffer: 1942 +index_buffer: 1945 +index_buffer: 2068 +index_buffer: 1962 +index_buffer: 1961 +index_buffer: 2068 +index_buffer: 1961 +index_buffer: 2069 +index_buffer: 1961 +index_buffer: 1963 +index_buffer: 2070 +index_buffer: 1961 +index_buffer: 2070 +index_buffer: 2069 +index_buffer: 2070 +index_buffer: 1963 +index_buffer: 1987 +index_buffer: 2070 +index_buffer: 1987 +index_buffer: 2071 +index_buffer: 2071 +index_buffer: 1987 +index_buffer: 1988 +index_buffer: 2071 +index_buffer: 1988 +index_buffer: 2072 +index_buffer: 2072 +index_buffer: 1988 +index_buffer: 2007 +index_buffer: 2072 +index_buffer: 2007 +index_buffer: 2073 +index_buffer: 2074 +index_buffer: 2073 +index_buffer: 2007 +index_buffer: 2074 +index_buffer: 2007 +index_buffer: 2009 +index_buffer: 2075 +index_buffer: 2076 +index_buffer: 2077 +index_buffer: 2075 +index_buffer: 2077 +index_buffer: 2078 +index_buffer: 2079 +index_buffer: 2076 +index_buffer: 2075 +index_buffer: 2079 +index_buffer: 2075 +index_buffer: 2080 +index_buffer: 2081 +index_buffer: 2082 +index_buffer: 2080 +index_buffer: 2081 +index_buffer: 2080 +index_buffer: 2075 +index_buffer: 2081 +index_buffer: 2075 +index_buffer: 2078 +index_buffer: 2081 +index_buffer: 2078 +index_buffer: 2083 +index_buffer: 2084 +index_buffer: 2085 +index_buffer: 2074 +index_buffer: 2084 +index_buffer: 2074 +index_buffer: 2009 +index_buffer: 2015 +index_buffer: 2014 +index_buffer: 2086 +index_buffer: 2015 +index_buffer: 2086 +index_buffer: 2087 +index_buffer: 2088 +index_buffer: 2089 +index_buffer: 2090 +index_buffer: 2088 +index_buffer: 2090 +index_buffer: 2091 +index_buffer: 2088 +index_buffer: 2091 +index_buffer: 2092 +index_buffer: 2088 +index_buffer: 2092 +index_buffer: 2093 +index_buffer: 2091 +index_buffer: 2094 +index_buffer: 2095 +index_buffer: 2091 +index_buffer: 2095 +index_buffer: 2092 +index_buffer: 2090 +index_buffer: 2096 +index_buffer: 2094 +index_buffer: 2090 +index_buffer: 2094 +index_buffer: 2091 +index_buffer: 2097 +index_buffer: 2098 +index_buffer: 2099 +index_buffer: 2097 +index_buffer: 2099 +index_buffer: 2100 +index_buffer: 2097 +index_buffer: 2100 +index_buffer: 2101 +index_buffer: 2097 +index_buffer: 2101 +index_buffer: 2102 +index_buffer: 2103 +index_buffer: 2104 +index_buffer: 2101 +index_buffer: 2103 +index_buffer: 2101 +index_buffer: 2100 +index_buffer: 2105 +index_buffer: 2103 +index_buffer: 2100 +index_buffer: 2105 +index_buffer: 2100 +index_buffer: 2099 +index_buffer: 2096 +index_buffer: 2106 +index_buffer: 2107 +index_buffer: 2096 +index_buffer: 2107 +index_buffer: 2094 +index_buffer: 2108 +index_buffer: 2095 +index_buffer: 2094 +index_buffer: 2108 +index_buffer: 2094 +index_buffer: 2107 +index_buffer: 2109 +index_buffer: 2108 +index_buffer: 2107 +index_buffer: 2109 +index_buffer: 2107 +index_buffer: 2110 +index_buffer: 2110 +index_buffer: 2107 +index_buffer: 2106 +index_buffer: 2110 +index_buffer: 2106 +index_buffer: 2111 +index_buffer: 1970 +index_buffer: 2112 +index_buffer: 2024 +index_buffer: 1970 +index_buffer: 2024 +index_buffer: 1971 +index_buffer: 2112 +index_buffer: 1970 +index_buffer: 1973 +index_buffer: 2112 +index_buffer: 1973 +index_buffer: 2113 +index_buffer: 2114 +index_buffer: 2110 +index_buffer: 2111 +index_buffer: 2114 +index_buffer: 2111 +index_buffer: 2115 +index_buffer: 2116 +index_buffer: 2109 +index_buffer: 2110 +index_buffer: 2116 +index_buffer: 2110 +index_buffer: 2114 +index_buffer: 2117 +index_buffer: 2116 +index_buffer: 2114 +index_buffer: 2117 +index_buffer: 2114 +index_buffer: 2118 +index_buffer: 2118 +index_buffer: 2114 +index_buffer: 2115 +index_buffer: 2118 +index_buffer: 2115 +index_buffer: 2119 +index_buffer: 2113 +index_buffer: 1973 +index_buffer: 1993 +index_buffer: 2113 +index_buffer: 1993 +index_buffer: 2120 +index_buffer: 2120 +index_buffer: 1993 +index_buffer: 1995 +index_buffer: 2120 +index_buffer: 1995 +index_buffer: 2121 +index_buffer: 2122 +index_buffer: 2118 +index_buffer: 2119 +index_buffer: 2122 +index_buffer: 2119 +index_buffer: 2123 +index_buffer: 2124 +index_buffer: 2117 +index_buffer: 2118 +index_buffer: 2124 +index_buffer: 2118 +index_buffer: 2122 +index_buffer: 2125 +index_buffer: 2126 +index_buffer: 2124 +index_buffer: 2125 +index_buffer: 2124 +index_buffer: 2122 +index_buffer: 2125 +index_buffer: 2122 +index_buffer: 2123 +index_buffer: 2125 +index_buffer: 2123 +index_buffer: 2127 +index_buffer: 2121 +index_buffer: 1995 +index_buffer: 2013 +index_buffer: 2121 +index_buffer: 2013 +index_buffer: 2128 +index_buffer: 2128 +index_buffer: 2013 +index_buffer: 2015 +index_buffer: 2128 +index_buffer: 2015 +index_buffer: 1927 +index_buffer: 1966 +index_buffer: 1971 +index_buffer: 2129 +index_buffer: 1966 +index_buffer: 2129 +index_buffer: 2130 +index_buffer: 1967 +index_buffer: 1966 +index_buffer: 2130 +index_buffer: 1967 +index_buffer: 2130 +index_buffer: 2131 +index_buffer: 2131 +index_buffer: 2130 +index_buffer: 2132 +index_buffer: 2131 +index_buffer: 2132 +index_buffer: 2133 +index_buffer: 2129 +index_buffer: 2134 +index_buffer: 2132 +index_buffer: 2129 +index_buffer: 2132 +index_buffer: 2130 +index_buffer: 2135 +index_buffer: 2136 +index_buffer: 2137 +index_buffer: 2135 +index_buffer: 2137 +index_buffer: 2138 +index_buffer: 2138 +index_buffer: 2137 +index_buffer: 2139 +index_buffer: 2138 +index_buffer: 2139 +index_buffer: 2140 +index_buffer: 2132 +index_buffer: 2134 +index_buffer: 2141 +index_buffer: 2132 +index_buffer: 2141 +index_buffer: 2142 +index_buffer: 2143 +index_buffer: 2133 +index_buffer: 2132 +index_buffer: 2143 +index_buffer: 2132 +index_buffer: 2142 +index_buffer: 2142 +index_buffer: 2144 +index_buffer: 2145 +index_buffer: 2142 +index_buffer: 2145 +index_buffer: 2143 +index_buffer: 2144 +index_buffer: 2142 +index_buffer: 2141 +index_buffer: 2144 +index_buffer: 2141 +index_buffer: 2146 +index_buffer: 2147 +index_buffer: 2148 +index_buffer: 2149 +index_buffer: 2147 +index_buffer: 2149 +index_buffer: 2150 +index_buffer: 2151 +index_buffer: 2152 +index_buffer: 2149 +index_buffer: 2151 +index_buffer: 2149 +index_buffer: 2148 +index_buffer: 2148 +index_buffer: 2138 +index_buffer: 2140 +index_buffer: 2148 +index_buffer: 2140 +index_buffer: 2151 +index_buffer: 2135 +index_buffer: 2138 +index_buffer: 2148 +index_buffer: 2135 +index_buffer: 2148 +index_buffer: 2147 +index_buffer: 2153 +index_buffer: 2125 +index_buffer: 2127 +index_buffer: 2153 +index_buffer: 2127 +index_buffer: 2154 +index_buffer: 2010 +index_buffer: 2155 +index_buffer: 2156 +index_buffer: 2010 +index_buffer: 2156 +index_buffer: 2008 +index_buffer: 2008 +index_buffer: 2156 +index_buffer: 2084 +index_buffer: 2008 +index_buffer: 2084 +index_buffer: 2009 +index_buffer: 2157 +index_buffer: 2158 +index_buffer: 2159 +index_buffer: 2157 +index_buffer: 2159 +index_buffer: 2160 +index_buffer: 2161 +index_buffer: 2162 +index_buffer: 2098 +index_buffer: 2161 +index_buffer: 2098 +index_buffer: 2097 +index_buffer: 2102 +index_buffer: 2163 +index_buffer: 2161 +index_buffer: 2102 +index_buffer: 2161 +index_buffer: 2097 +index_buffer: 1920 +index_buffer: 2078 +index_buffer: 2077 +index_buffer: 1920 +index_buffer: 2077 +index_buffer: 1921 +index_buffer: 2083 +index_buffer: 2078 +index_buffer: 1920 +index_buffer: 2083 +index_buffer: 1920 +index_buffer: 1922 +index_buffer: 1927 +index_buffer: 2015 +index_buffer: 2087 +index_buffer: 1927 +index_buffer: 2087 +index_buffer: 1928 +index_buffer: 1936 +index_buffer: 1935 +index_buffer: 2090 +index_buffer: 1936 +index_buffer: 2090 +index_buffer: 2089 +index_buffer: 1935 +index_buffer: 1937 +index_buffer: 2096 +index_buffer: 1935 +index_buffer: 2096 +index_buffer: 2090 +index_buffer: 1944 +index_buffer: 2099 +index_buffer: 2098 +index_buffer: 1944 +index_buffer: 2098 +index_buffer: 1945 +index_buffer: 2105 +index_buffer: 2099 +index_buffer: 1944 +index_buffer: 2105 +index_buffer: 1944 +index_buffer: 1946 +index_buffer: 1953 +index_buffer: 2106 +index_buffer: 2096 +index_buffer: 1953 +index_buffer: 2096 +index_buffer: 1937 +index_buffer: 2111 +index_buffer: 2106 +index_buffer: 1953 +index_buffer: 2111 +index_buffer: 1953 +index_buffer: 1955 +index_buffer: 2115 +index_buffer: 2111 +index_buffer: 1955 +index_buffer: 2115 +index_buffer: 1955 +index_buffer: 1981 +index_buffer: 2119 +index_buffer: 2115 +index_buffer: 1981 +index_buffer: 2119 +index_buffer: 1981 +index_buffer: 1982 +index_buffer: 2123 +index_buffer: 2119 +index_buffer: 1982 +index_buffer: 2123 +index_buffer: 1982 +index_buffer: 2001 +index_buffer: 2127 +index_buffer: 2123 +index_buffer: 2001 +index_buffer: 2127 +index_buffer: 2001 +index_buffer: 2002 +index_buffer: 1971 +index_buffer: 2024 +index_buffer: 2025 +index_buffer: 1971 +index_buffer: 2025 +index_buffer: 2129 +index_buffer: 2129 +index_buffer: 2025 +index_buffer: 2026 +index_buffer: 2129 +index_buffer: 2026 +index_buffer: 2134 +index_buffer: 2135 +index_buffer: 2045 +index_buffer: 2164 +index_buffer: 2135 +index_buffer: 2164 +index_buffer: 2136 +index_buffer: 2134 +index_buffer: 2026 +index_buffer: 2165 +index_buffer: 2134 +index_buffer: 2165 +index_buffer: 2141 +index_buffer: 2141 +index_buffer: 2165 +index_buffer: 2166 +index_buffer: 2141 +index_buffer: 2166 +index_buffer: 2146 +index_buffer: 2043 +index_buffer: 2147 +index_buffer: 2150 +index_buffer: 2043 +index_buffer: 2150 +index_buffer: 2044 +index_buffer: 2135 +index_buffer: 2147 +index_buffer: 2043 +index_buffer: 2135 +index_buffer: 2043 +index_buffer: 2045 +index_buffer: 2154 +index_buffer: 2127 +index_buffer: 2002 +index_buffer: 2154 +index_buffer: 2002 +index_buffer: 2053 +index_buffer: 2160 +index_buffer: 2159 +index_buffer: 2055 +index_buffer: 2160 +index_buffer: 2055 +index_buffer: 2054 +index_buffer: 2067 +index_buffer: 1945 +index_buffer: 2098 +index_buffer: 2067 +index_buffer: 2098 +index_buffer: 2162 +index_buffer: 2024 +index_buffer: 2112 +index_buffer: 2167 +index_buffer: 2024 +index_buffer: 2167 +index_buffer: 2023 +index_buffer: 1947 +index_buffer: 1909 +index_buffer: 2023 +index_buffer: 1947 +index_buffer: 2023 +index_buffer: 2167 +index_buffer: 2167 +index_buffer: 2168 +index_buffer: 1949 +index_buffer: 2167 +index_buffer: 1949 +index_buffer: 1947 +index_buffer: 2112 +index_buffer: 2113 +index_buffer: 2168 +index_buffer: 2112 +index_buffer: 2168 +index_buffer: 2167 +index_buffer: 2168 +index_buffer: 2113 +index_buffer: 2120 +index_buffer: 2168 +index_buffer: 2120 +index_buffer: 2169 +index_buffer: 1949 +index_buffer: 2168 +index_buffer: 2169 +index_buffer: 1949 +index_buffer: 2169 +index_buffer: 1975 +index_buffer: 1975 +index_buffer: 2169 +index_buffer: 2170 +index_buffer: 1975 +index_buffer: 2170 +index_buffer: 1977 +index_buffer: 2169 +index_buffer: 2120 +index_buffer: 2121 +index_buffer: 2169 +index_buffer: 2121 +index_buffer: 2170 +index_buffer: 2170 +index_buffer: 2121 +index_buffer: 2128 +index_buffer: 2170 +index_buffer: 2128 +index_buffer: 2171 +index_buffer: 1997 +index_buffer: 1977 +index_buffer: 2170 +index_buffer: 1997 +index_buffer: 2170 +index_buffer: 2171 +index_buffer: 1924 +index_buffer: 1923 +index_buffer: 1997 +index_buffer: 1924 +index_buffer: 1997 +index_buffer: 2171 +index_buffer: 2171 +index_buffer: 2128 +index_buffer: 1927 +index_buffer: 2171 +index_buffer: 1927 +index_buffer: 1924 +index_buffer: 1919 +index_buffer: 2034 +index_buffer: 2061 +index_buffer: 1919 +index_buffer: 2061 +index_buffer: 2036 +index_buffer: 2041 +index_buffer: 2040 +index_buffer: 2064 +index_buffer: 2041 +index_buffer: 2064 +index_buffer: 2172 +index_buffer: 2045 +index_buffer: 2041 +index_buffer: 2172 +index_buffer: 2045 +index_buffer: 2172 +index_buffer: 2164 +index_buffer: 2034 +index_buffer: 2033 +index_buffer: 2173 +index_buffer: 2034 +index_buffer: 2173 +index_buffer: 2019 +index_buffer: 2035 +index_buffer: 2166 +index_buffer: 2173 +index_buffer: 2035 +index_buffer: 2173 +index_buffer: 2033 +index_buffer: 2062 +index_buffer: 2174 +index_buffer: 2029 +index_buffer: 2062 +index_buffer: 2029 +index_buffer: 2064 +index_buffer: 2061 +index_buffer: 2020 +index_buffer: 2174 +index_buffer: 2061 +index_buffer: 2174 +index_buffer: 2062 +index_buffer: 2175 +index_buffer: 2176 +index_buffer: 2139 +index_buffer: 2175 +index_buffer: 2139 +index_buffer: 2137 +index_buffer: 2177 +index_buffer: 2175 +index_buffer: 2137 +index_buffer: 2177 +index_buffer: 2137 +index_buffer: 2136 +index_buffer: 2178 +index_buffer: 2179 +index_buffer: 2076 +index_buffer: 2178 +index_buffer: 2076 +index_buffer: 2079 +index_buffer: 2179 +index_buffer: 2180 +index_buffer: 2077 +index_buffer: 2179 +index_buffer: 2077 +index_buffer: 2076 +index_buffer: 2177 +index_buffer: 2136 +index_buffer: 2164 +index_buffer: 2177 +index_buffer: 2164 +index_buffer: 2031 +index_buffer: 2035 +index_buffer: 1921 +index_buffer: 2077 +index_buffer: 2035 +index_buffer: 2077 +index_buffer: 2180 +index_buffer: 2034 +index_buffer: 2019 +index_buffer: 2020 +index_buffer: 2034 +index_buffer: 2020 +index_buffer: 2061 +index_buffer: 2030 +index_buffer: 2172 +index_buffer: 2064 +index_buffer: 2030 +index_buffer: 2064 +index_buffer: 2029 +index_buffer: 2031 +index_buffer: 2164 +index_buffer: 2172 +index_buffer: 2031 +index_buffer: 2172 +index_buffer: 2030 +index_buffer: 2178 +index_buffer: 2145 +index_buffer: 2144 +index_buffer: 2178 +index_buffer: 2144 +index_buffer: 2179 +index_buffer: 2144 +index_buffer: 2146 +index_buffer: 2180 +index_buffer: 2144 +index_buffer: 2180 +index_buffer: 2179 +index_buffer: 2035 +index_buffer: 2180 +index_buffer: 2146 +index_buffer: 2035 +index_buffer: 2146 +index_buffer: 2166 +index_buffer: 2181 +index_buffer: 2017 +index_buffer: 2019 +index_buffer: 2181 +index_buffer: 2019 +index_buffer: 2173 +index_buffer: 2021 +index_buffer: 1913 +index_buffer: 2017 +index_buffer: 2021 +index_buffer: 2017 +index_buffer: 2181 +index_buffer: 2165 +index_buffer: 2026 +index_buffer: 2021 +index_buffer: 2165 +index_buffer: 2021 +index_buffer: 2181 +index_buffer: 2173 +index_buffer: 2166 +index_buffer: 2165 +index_buffer: 2173 +index_buffer: 2165 +index_buffer: 2181 +index_buffer: 2182 +index_buffer: 2028 +index_buffer: 2029 +index_buffer: 2182 +index_buffer: 2029 +index_buffer: 2174 +index_buffer: 2047 +index_buffer: 1933 +index_buffer: 2028 +index_buffer: 2047 +index_buffer: 2028 +index_buffer: 2182 +index_buffer: 2018 +index_buffer: 1912 +index_buffer: 2047 +index_buffer: 2018 +index_buffer: 2047 +index_buffer: 2182 +index_buffer: 2020 +index_buffer: 2018 +index_buffer: 2182 +index_buffer: 2020 +index_buffer: 2182 +index_buffer: 2174 +index_buffer: 2176 +index_buffer: 2175 +index_buffer: 2183 +index_buffer: 2176 +index_buffer: 2183 +index_buffer: 2184 +index_buffer: 2088 +index_buffer: 2093 +index_buffer: 2184 +index_buffer: 2088 +index_buffer: 2184 +index_buffer: 2183 +index_buffer: 2185 +index_buffer: 2089 +index_buffer: 2088 +index_buffer: 2185 +index_buffer: 2088 +index_buffer: 2183 +index_buffer: 2185 +index_buffer: 2183 +index_buffer: 2175 +index_buffer: 2185 +index_buffer: 2175 +index_buffer: 2177 +index_buffer: 2185 +index_buffer: 2177 +index_buffer: 2031 +index_buffer: 2185 +index_buffer: 2031 +index_buffer: 2032 +index_buffer: 2032 +index_buffer: 1936 +index_buffer: 2089 +index_buffer: 2032 +index_buffer: 2089 +index_buffer: 2185 +index_buffer: 2068 +index_buffer: 2186 +index_buffer: 2187 +index_buffer: 2068 +index_buffer: 2187 +index_buffer: 1962 +index_buffer: 1960 +index_buffer: 1962 +index_buffer: 2187 +index_buffer: 1960 +index_buffer: 2187 +index_buffer: 2188 +index_buffer: 2188 +index_buffer: 2187 +index_buffer: 2189 +index_buffer: 2188 +index_buffer: 2189 +index_buffer: 2190 +index_buffer: 2186 +index_buffer: 2191 +index_buffer: 2189 +index_buffer: 2186 +index_buffer: 2189 +index_buffer: 2187 +index_buffer: 2192 +index_buffer: 2190 +index_buffer: 2193 +index_buffer: 2192 +index_buffer: 2193 +index_buffer: 2194 +index_buffer: 2193 +index_buffer: 2195 +index_buffer: 2196 +index_buffer: 2193 +index_buffer: 2196 +index_buffer: 2194 +index_buffer: 2193 +index_buffer: 2197 +index_buffer: 2198 +index_buffer: 2193 +index_buffer: 2198 +index_buffer: 2195 +index_buffer: 2190 +index_buffer: 2189 +index_buffer: 2197 +index_buffer: 2190 +index_buffer: 2197 +index_buffer: 2193 +index_buffer: 2195 +index_buffer: 2198 +index_buffer: 2199 +index_buffer: 2195 +index_buffer: 2199 +index_buffer: 2200 +index_buffer: 2197 +index_buffer: 2201 +index_buffer: 2202 +index_buffer: 2197 +index_buffer: 2202 +index_buffer: 2198 +index_buffer: 2197 +index_buffer: 2189 +index_buffer: 2191 +index_buffer: 2197 +index_buffer: 2191 +index_buffer: 2201 +index_buffer: 1957 +index_buffer: 1960 +index_buffer: 2188 +index_buffer: 1957 +index_buffer: 2188 +index_buffer: 2203 +index_buffer: 2192 +index_buffer: 2203 +index_buffer: 2188 +index_buffer: 2192 +index_buffer: 2188 +index_buffer: 2190 +index_buffer: 2200 +index_buffer: 2199 +index_buffer: 2204 +index_buffer: 2200 +index_buffer: 2204 +index_buffer: 2205 +index_buffer: 2206 +index_buffer: 2207 +index_buffer: 2208 +index_buffer: 2206 +index_buffer: 2208 +index_buffer: 2209 +index_buffer: 2205 +index_buffer: 2204 +index_buffer: 2208 +index_buffer: 2205 +index_buffer: 2208 +index_buffer: 2207 +index_buffer: 2210 +index_buffer: 2211 +index_buffer: 2209 +index_buffer: 2210 +index_buffer: 2209 +index_buffer: 2208 +index_buffer: 2208 +index_buffer: 2204 +index_buffer: 2212 +index_buffer: 2208 +index_buffer: 2212 +index_buffer: 2210 +index_buffer: 2199 +index_buffer: 2213 +index_buffer: 2212 +index_buffer: 2199 +index_buffer: 2212 +index_buffer: 2204 +index_buffer: 2198 +index_buffer: 2202 +index_buffer: 2213 +index_buffer: 2198 +index_buffer: 2213 +index_buffer: 2199 +index_buffer: 2196 +index_buffer: 2195 +index_buffer: 2200 +index_buffer: 2196 +index_buffer: 2200 +index_buffer: 2214 +index_buffer: 2200 +index_buffer: 2205 +index_buffer: 2215 +index_buffer: 2200 +index_buffer: 2215 +index_buffer: 2214 +index_buffer: 2205 +index_buffer: 2207 +index_buffer: 2216 +index_buffer: 2205 +index_buffer: 2216 +index_buffer: 2215 +index_buffer: 2206 +index_buffer: 2217 +index_buffer: 2216 +index_buffer: 2206 +index_buffer: 2216 +index_buffer: 2207 +index_buffer: 1748 +index_buffer: 2218 +index_buffer: 2219 +index_buffer: 1748 +index_buffer: 2219 +index_buffer: 1749 +index_buffer: 1751 +index_buffer: 2220 +index_buffer: 2218 +index_buffer: 1751 +index_buffer: 2218 +index_buffer: 1748 +index_buffer: 2221 +index_buffer: 2222 +index_buffer: 2223 +index_buffer: 2221 +index_buffer: 2223 +index_buffer: 2224 +index_buffer: 2225 +index_buffer: 2226 +index_buffer: 2222 +index_buffer: 2225 +index_buffer: 2222 +index_buffer: 2221 +index_buffer: 2222 +index_buffer: 2227 +index_buffer: 2228 +index_buffer: 2222 +index_buffer: 2228 +index_buffer: 2223 +index_buffer: 2229 +index_buffer: 2227 +index_buffer: 2222 +index_buffer: 2229 +index_buffer: 2222 +index_buffer: 2226 +index_buffer: 2227 +index_buffer: 2230 +index_buffer: 2231 +index_buffer: 2227 +index_buffer: 2231 +index_buffer: 2228 +index_buffer: 2229 +index_buffer: 2232 +index_buffer: 2230 +index_buffer: 2229 +index_buffer: 2230 +index_buffer: 2227 +index_buffer: 2232 +index_buffer: 2233 +index_buffer: 2234 +index_buffer: 2232 +index_buffer: 2234 +index_buffer: 2230 +index_buffer: 2235 +index_buffer: 2231 +index_buffer: 2230 +index_buffer: 2235 +index_buffer: 2230 +index_buffer: 2234 +index_buffer: 2234 +index_buffer: 2236 +index_buffer: 2237 +index_buffer: 2234 +index_buffer: 2237 +index_buffer: 2235 +index_buffer: 2233 +index_buffer: 2238 +index_buffer: 2236 +index_buffer: 2233 +index_buffer: 2236 +index_buffer: 2234 +index_buffer: 2238 +index_buffer: 2239 +index_buffer: 2240 +index_buffer: 2238 +index_buffer: 2240 +index_buffer: 2236 +index_buffer: 2236 +index_buffer: 2240 +index_buffer: 2241 +index_buffer: 2236 +index_buffer: 2241 +index_buffer: 2237 +index_buffer: 2240 +index_buffer: 2242 +index_buffer: 2243 +index_buffer: 2240 +index_buffer: 2243 +index_buffer: 2241 +index_buffer: 2239 +index_buffer: 2244 +index_buffer: 2242 +index_buffer: 2239 +index_buffer: 2242 +index_buffer: 2240 +index_buffer: 2245 +index_buffer: 2242 +index_buffer: 2244 +index_buffer: 2245 +index_buffer: 2244 +index_buffer: 2246 +index_buffer: 2242 +index_buffer: 2245 +index_buffer: 2247 +index_buffer: 2242 +index_buffer: 2247 +index_buffer: 2243 +index_buffer: 2247 +index_buffer: 2245 +index_buffer: 2248 +index_buffer: 2247 +index_buffer: 2248 +index_buffer: 2249 +index_buffer: 2246 +index_buffer: 2250 +index_buffer: 2248 +index_buffer: 2246 +index_buffer: 2248 +index_buffer: 2245 +index_buffer: 2250 +index_buffer: 2251 +index_buffer: 2252 +index_buffer: 2250 +index_buffer: 2252 +index_buffer: 2248 +index_buffer: 2248 +index_buffer: 2252 +index_buffer: 2253 +index_buffer: 2248 +index_buffer: 2253 +index_buffer: 2249 +index_buffer: 2218 +index_buffer: 2221 +index_buffer: 2224 +index_buffer: 2218 +index_buffer: 2224 +index_buffer: 2219 +index_buffer: 2220 +index_buffer: 2225 +index_buffer: 2221 +index_buffer: 2220 +index_buffer: 2221 +index_buffer: 2218 +index_buffer: 2254 +index_buffer: 2253 +index_buffer: 2252 +index_buffer: 2254 +index_buffer: 2252 +index_buffer: 2255 +index_buffer: 2252 +index_buffer: 2251 +index_buffer: 2256 +index_buffer: 2252 +index_buffer: 2256 +index_buffer: 2255 +index_buffer: 2255 +index_buffer: 2256 +index_buffer: 2257 +index_buffer: 2255 +index_buffer: 2257 +index_buffer: 2258 +index_buffer: 2255 +index_buffer: 2258 +index_buffer: 2259 +index_buffer: 2255 +index_buffer: 2259 +index_buffer: 2254 +index_buffer: 1751 +index_buffer: 1792 +index_buffer: 2260 +index_buffer: 1751 +index_buffer: 2260 +index_buffer: 2220 +index_buffer: 2260 +index_buffer: 1792 +index_buffer: 1793 +index_buffer: 2260 +index_buffer: 1793 +index_buffer: 2261 +index_buffer: 2219 +index_buffer: 2262 +index_buffer: 1796 +index_buffer: 2219 +index_buffer: 1796 +index_buffer: 1749 +index_buffer: 1797 +index_buffer: 1796 +index_buffer: 2262 +index_buffer: 1797 +index_buffer: 2262 +index_buffer: 2263 +index_buffer: 2264 +index_buffer: 2226 +index_buffer: 2225 +index_buffer: 2264 +index_buffer: 2225 +index_buffer: 2265 +index_buffer: 2266 +index_buffer: 2264 +index_buffer: 2265 +index_buffer: 2266 +index_buffer: 2265 +index_buffer: 2267 +index_buffer: 2223 +index_buffer: 2268 +index_buffer: 2269 +index_buffer: 2223 +index_buffer: 2269 +index_buffer: 2224 +index_buffer: 2268 +index_buffer: 2270 +index_buffer: 2271 +index_buffer: 2268 +index_buffer: 2271 +index_buffer: 2269 +index_buffer: 2264 +index_buffer: 2272 +index_buffer: 2229 +index_buffer: 2264 +index_buffer: 2229 +index_buffer: 2226 +index_buffer: 2264 +index_buffer: 2266 +index_buffer: 2273 +index_buffer: 2264 +index_buffer: 2273 +index_buffer: 2272 +index_buffer: 2228 +index_buffer: 2274 +index_buffer: 2268 +index_buffer: 2228 +index_buffer: 2268 +index_buffer: 2223 +index_buffer: 2270 +index_buffer: 2268 +index_buffer: 2274 +index_buffer: 2270 +index_buffer: 2274 +index_buffer: 2275 +index_buffer: 2276 +index_buffer: 2233 +index_buffer: 2232 +index_buffer: 2276 +index_buffer: 2232 +index_buffer: 2277 +index_buffer: 2277 +index_buffer: 2232 +index_buffer: 2229 +index_buffer: 2277 +index_buffer: 2229 +index_buffer: 2272 +index_buffer: 2273 +index_buffer: 2278 +index_buffer: 2277 +index_buffer: 2273 +index_buffer: 2277 +index_buffer: 2272 +index_buffer: 2278 +index_buffer: 2279 +index_buffer: 2276 +index_buffer: 2278 +index_buffer: 2276 +index_buffer: 2277 +index_buffer: 2274 +index_buffer: 2228 +index_buffer: 2231 +index_buffer: 2274 +index_buffer: 2231 +index_buffer: 2280 +index_buffer: 2235 +index_buffer: 2281 +index_buffer: 2280 +index_buffer: 2235 +index_buffer: 2280 +index_buffer: 2231 +index_buffer: 2281 +index_buffer: 2282 +index_buffer: 2283 +index_buffer: 2281 +index_buffer: 2283 +index_buffer: 2280 +index_buffer: 2275 +index_buffer: 2274 +index_buffer: 2280 +index_buffer: 2275 +index_buffer: 2280 +index_buffer: 2283 +index_buffer: 2284 +index_buffer: 2285 +index_buffer: 2239 +index_buffer: 2284 +index_buffer: 2239 +index_buffer: 2238 +index_buffer: 2276 +index_buffer: 2284 +index_buffer: 2238 +index_buffer: 2276 +index_buffer: 2238 +index_buffer: 2233 +index_buffer: 2284 +index_buffer: 2276 +index_buffer: 2279 +index_buffer: 2284 +index_buffer: 2279 +index_buffer: 2286 +index_buffer: 2284 +index_buffer: 2286 +index_buffer: 2287 +index_buffer: 2284 +index_buffer: 2287 +index_buffer: 2285 +index_buffer: 2281 +index_buffer: 2235 +index_buffer: 2237 +index_buffer: 2281 +index_buffer: 2237 +index_buffer: 2288 +index_buffer: 2241 +index_buffer: 2289 +index_buffer: 2288 +index_buffer: 2241 +index_buffer: 2288 +index_buffer: 2237 +index_buffer: 2290 +index_buffer: 2288 +index_buffer: 2289 +index_buffer: 2290 +index_buffer: 2289 +index_buffer: 2291 +index_buffer: 2288 +index_buffer: 2290 +index_buffer: 2282 +index_buffer: 2288 +index_buffer: 2282 +index_buffer: 2281 +index_buffer: 2244 +index_buffer: 2292 +index_buffer: 2293 +index_buffer: 2244 +index_buffer: 2293 +index_buffer: 2246 +index_buffer: 2285 +index_buffer: 2292 +index_buffer: 2244 +index_buffer: 2285 +index_buffer: 2244 +index_buffer: 2239 +index_buffer: 2285 +index_buffer: 2287 +index_buffer: 2294 +index_buffer: 2285 +index_buffer: 2294 +index_buffer: 2292 +index_buffer: 2295 +index_buffer: 2293 +index_buffer: 2292 +index_buffer: 2295 +index_buffer: 2292 +index_buffer: 2294 +index_buffer: 2243 +index_buffer: 2296 +index_buffer: 2289 +index_buffer: 2243 +index_buffer: 2289 +index_buffer: 2241 +index_buffer: 2243 +index_buffer: 2247 +index_buffer: 2297 +index_buffer: 2243 +index_buffer: 2297 +index_buffer: 2296 +index_buffer: 2298 +index_buffer: 2299 +index_buffer: 2296 +index_buffer: 2298 +index_buffer: 2296 +index_buffer: 2297 +index_buffer: 2291 +index_buffer: 2289 +index_buffer: 2296 +index_buffer: 2291 +index_buffer: 2296 +index_buffer: 2299 +index_buffer: 2251 +index_buffer: 2250 +index_buffer: 2300 +index_buffer: 2251 +index_buffer: 2300 +index_buffer: 2301 +index_buffer: 2250 +index_buffer: 2246 +index_buffer: 2293 +index_buffer: 2250 +index_buffer: 2293 +index_buffer: 2300 +index_buffer: 2302 +index_buffer: 2300 +index_buffer: 2293 +index_buffer: 2302 +index_buffer: 2293 +index_buffer: 2295 +index_buffer: 2302 +index_buffer: 2303 +index_buffer: 2301 +index_buffer: 2302 +index_buffer: 2301 +index_buffer: 2300 +index_buffer: 2304 +index_buffer: 2297 +index_buffer: 2247 +index_buffer: 2304 +index_buffer: 2247 +index_buffer: 2249 +index_buffer: 2249 +index_buffer: 2253 +index_buffer: 2305 +index_buffer: 2249 +index_buffer: 2305 +index_buffer: 2304 +index_buffer: 2305 +index_buffer: 2306 +index_buffer: 2307 +index_buffer: 2305 +index_buffer: 2307 +index_buffer: 2304 +index_buffer: 2297 +index_buffer: 2304 +index_buffer: 2307 +index_buffer: 2297 +index_buffer: 2307 +index_buffer: 2298 +index_buffer: 2265 +index_buffer: 2225 +index_buffer: 2220 +index_buffer: 2265 +index_buffer: 2220 +index_buffer: 2260 +index_buffer: 2261 +index_buffer: 2267 +index_buffer: 2265 +index_buffer: 2261 +index_buffer: 2265 +index_buffer: 2260 +index_buffer: 2224 +index_buffer: 2269 +index_buffer: 2262 +index_buffer: 2224 +index_buffer: 2262 +index_buffer: 2219 +index_buffer: 2269 +index_buffer: 2271 +index_buffer: 2263 +index_buffer: 2269 +index_buffer: 2263 +index_buffer: 2262 +index_buffer: 2257 +index_buffer: 2256 +index_buffer: 2308 +index_buffer: 2257 +index_buffer: 2308 +index_buffer: 2309 +index_buffer: 2301 +index_buffer: 2308 +index_buffer: 2256 +index_buffer: 2301 +index_buffer: 2256 +index_buffer: 2251 +index_buffer: 2308 +index_buffer: 2301 +index_buffer: 2303 +index_buffer: 2308 +index_buffer: 2303 +index_buffer: 2310 +index_buffer: 2310 +index_buffer: 2311 +index_buffer: 2309 +index_buffer: 2310 +index_buffer: 2309 +index_buffer: 2308 +index_buffer: 2312 +index_buffer: 2305 +index_buffer: 2253 +index_buffer: 2312 +index_buffer: 2253 +index_buffer: 2254 +index_buffer: 2254 +index_buffer: 2259 +index_buffer: 2313 +index_buffer: 2254 +index_buffer: 2313 +index_buffer: 2312 +index_buffer: 2314 +index_buffer: 2312 +index_buffer: 2313 +index_buffer: 2314 +index_buffer: 2313 +index_buffer: 2315 +index_buffer: 2312 +index_buffer: 2314 +index_buffer: 2306 +index_buffer: 2312 +index_buffer: 2306 +index_buffer: 2305 +index_buffer: 2259 +index_buffer: 2258 +index_buffer: 2316 +index_buffer: 2259 +index_buffer: 2316 +index_buffer: 2317 +index_buffer: 2318 +index_buffer: 2316 +index_buffer: 2258 +index_buffer: 2318 +index_buffer: 2258 +index_buffer: 2257 +index_buffer: 2257 +index_buffer: 2309 +index_buffer: 2319 +index_buffer: 2257 +index_buffer: 2319 +index_buffer: 2318 +index_buffer: 2311 +index_buffer: 2320 +index_buffer: 2319 +index_buffer: 2311 +index_buffer: 2319 +index_buffer: 2309 +index_buffer: 2321 +index_buffer: 2322 +index_buffer: 2323 +index_buffer: 2321 +index_buffer: 2323 +index_buffer: 2315 +index_buffer: 2324 +index_buffer: 2325 +index_buffer: 2326 +index_buffer: 2324 +index_buffer: 2326 +index_buffer: 2327 +index_buffer: 2328 +index_buffer: 2329 +index_buffer: 2327 +index_buffer: 2328 +index_buffer: 2327 +index_buffer: 2326 +index_buffer: 2261 +index_buffer: 1793 +index_buffer: 1865 +index_buffer: 2261 +index_buffer: 1865 +index_buffer: 2330 +index_buffer: 1867 +index_buffer: 1797 +index_buffer: 2263 +index_buffer: 1867 +index_buffer: 2263 +index_buffer: 2331 +index_buffer: 2267 +index_buffer: 2332 +index_buffer: 2333 +index_buffer: 2267 +index_buffer: 2333 +index_buffer: 2266 +index_buffer: 2334 +index_buffer: 2335 +index_buffer: 2271 +index_buffer: 2334 +index_buffer: 2271 +index_buffer: 2270 +index_buffer: 2333 +index_buffer: 2336 +index_buffer: 2273 +index_buffer: 2333 +index_buffer: 2273 +index_buffer: 2266 +index_buffer: 2275 +index_buffer: 2337 +index_buffer: 2334 +index_buffer: 2275 +index_buffer: 2334 +index_buffer: 2270 +index_buffer: 2338 +index_buffer: 2278 +index_buffer: 2273 +index_buffer: 2338 +index_buffer: 2273 +index_buffer: 2336 +index_buffer: 2338 +index_buffer: 2339 +index_buffer: 2279 +index_buffer: 2338 +index_buffer: 2279 +index_buffer: 2278 +index_buffer: 2282 +index_buffer: 2340 +index_buffer: 2341 +index_buffer: 2282 +index_buffer: 2341 +index_buffer: 2283 +index_buffer: 2283 +index_buffer: 2341 +index_buffer: 2337 +index_buffer: 2283 +index_buffer: 2337 +index_buffer: 2275 +index_buffer: 2339 +index_buffer: 2342 +index_buffer: 2286 +index_buffer: 2339 +index_buffer: 2286 +index_buffer: 2279 +index_buffer: 2286 +index_buffer: 2342 +index_buffer: 2343 +index_buffer: 2286 +index_buffer: 2343 +index_buffer: 2287 +index_buffer: 2344 +index_buffer: 2345 +index_buffer: 2290 +index_buffer: 2344 +index_buffer: 2290 +index_buffer: 2291 +index_buffer: 2290 +index_buffer: 2345 +index_buffer: 2340 +index_buffer: 2290 +index_buffer: 2340 +index_buffer: 2282 +index_buffer: 2343 +index_buffer: 2346 +index_buffer: 2294 +index_buffer: 2343 +index_buffer: 2294 +index_buffer: 2287 +index_buffer: 2294 +index_buffer: 2346 +index_buffer: 2347 +index_buffer: 2294 +index_buffer: 2347 +index_buffer: 2295 +index_buffer: 2348 +index_buffer: 2299 +index_buffer: 2298 +index_buffer: 2348 +index_buffer: 2298 +index_buffer: 2349 +index_buffer: 2299 +index_buffer: 2348 +index_buffer: 2344 +index_buffer: 2299 +index_buffer: 2344 +index_buffer: 2291 +index_buffer: 2302 +index_buffer: 2295 +index_buffer: 2347 +index_buffer: 2302 +index_buffer: 2347 +index_buffer: 2350 +index_buffer: 2350 +index_buffer: 2351 +index_buffer: 2303 +index_buffer: 2350 +index_buffer: 2303 +index_buffer: 2302 +index_buffer: 2306 +index_buffer: 2352 +index_buffer: 2353 +index_buffer: 2306 +index_buffer: 2353 +index_buffer: 2307 +index_buffer: 2353 +index_buffer: 2349 +index_buffer: 2298 +index_buffer: 2353 +index_buffer: 2298 +index_buffer: 2307 +index_buffer: 2261 +index_buffer: 2330 +index_buffer: 2332 +index_buffer: 2261 +index_buffer: 2332 +index_buffer: 2267 +index_buffer: 2335 +index_buffer: 2331 +index_buffer: 2263 +index_buffer: 2335 +index_buffer: 2263 +index_buffer: 2271 +index_buffer: 2351 +index_buffer: 2354 +index_buffer: 2310 +index_buffer: 2351 +index_buffer: 2310 +index_buffer: 2303 +index_buffer: 2354 +index_buffer: 2355 +index_buffer: 2311 +index_buffer: 2354 +index_buffer: 2311 +index_buffer: 2310 +index_buffer: 2315 +index_buffer: 2323 +index_buffer: 2356 +index_buffer: 2315 +index_buffer: 2356 +index_buffer: 2314 +index_buffer: 2314 +index_buffer: 2356 +index_buffer: 2352 +index_buffer: 2314 +index_buffer: 2352 +index_buffer: 2306 +index_buffer: 2320 +index_buffer: 2311 +index_buffer: 2355 +index_buffer: 2320 +index_buffer: 2355 +index_buffer: 2357 +index_buffer: 2313 +index_buffer: 2358 +index_buffer: 2321 +index_buffer: 2313 +index_buffer: 2321 +index_buffer: 2315 +index_buffer: 2358 +index_buffer: 2313 +index_buffer: 2259 +index_buffer: 2358 +index_buffer: 2259 +index_buffer: 2317 +index_buffer: 2326 +index_buffer: 2325 +index_buffer: 2359 +index_buffer: 2326 +index_buffer: 2359 +index_buffer: 2360 +index_buffer: 2359 +index_buffer: 2361 +index_buffer: 2362 +index_buffer: 2359 +index_buffer: 2362 +index_buffer: 2360 +index_buffer: 2362 +index_buffer: 2363 +index_buffer: 2364 +index_buffer: 2362 +index_buffer: 2364 +index_buffer: 2360 +index_buffer: 2360 +index_buffer: 2364 +index_buffer: 2328 +index_buffer: 2360 +index_buffer: 2328 +index_buffer: 2326 +index_buffer: 2318 +index_buffer: 2363 +index_buffer: 2362 +index_buffer: 2318 +index_buffer: 2362 +index_buffer: 2316 +index_buffer: 2362 +index_buffer: 2361 +index_buffer: 2317 +index_buffer: 2362 +index_buffer: 2317 +index_buffer: 2316 +index_buffer: 2365 +index_buffer: 2366 +index_buffer: 2319 +index_buffer: 2365 +index_buffer: 2319 +index_buffer: 2320 +index_buffer: 2363 +index_buffer: 2318 +index_buffer: 2319 +index_buffer: 2363 +index_buffer: 2319 +index_buffer: 2366 +index_buffer: 2367 +index_buffer: 2368 +index_buffer: 2322 +index_buffer: 2367 +index_buffer: 2322 +index_buffer: 2321 +index_buffer: 2320 +index_buffer: 2357 +index_buffer: 2369 +index_buffer: 2320 +index_buffer: 2369 +index_buffer: 2365 +index_buffer: 2317 +index_buffer: 2361 +index_buffer: 2370 +index_buffer: 2317 +index_buffer: 2370 +index_buffer: 2358 +index_buffer: 2321 +index_buffer: 2358 +index_buffer: 2370 +index_buffer: 2321 +index_buffer: 2370 +index_buffer: 2367 +index_buffer: 2371 +index_buffer: 2372 +index_buffer: 2373 +index_buffer: 2371 +index_buffer: 2373 +index_buffer: 2374 +index_buffer: 2375 +index_buffer: 2374 +index_buffer: 2373 +index_buffer: 2375 +index_buffer: 2373 +index_buffer: 2376 +index_buffer: 2377 +index_buffer: 2378 +index_buffer: 2379 +index_buffer: 2377 +index_buffer: 2379 +index_buffer: 2380 +index_buffer: 2381 +index_buffer: 2380 +index_buffer: 2379 +index_buffer: 2381 +index_buffer: 2379 +index_buffer: 2382 +index_buffer: 2381 +index_buffer: 2383 +index_buffer: 2384 +index_buffer: 2381 +index_buffer: 2384 +index_buffer: 2380 +index_buffer: 2384 +index_buffer: 2385 +index_buffer: 2377 +index_buffer: 2384 +index_buffer: 2377 +index_buffer: 2380 +index_buffer: 2386 +index_buffer: 2387 +index_buffer: 2388 +index_buffer: 2386 +index_buffer: 2388 +index_buffer: 2389 +index_buffer: 2390 +index_buffer: 2391 +index_buffer: 2387 +index_buffer: 2390 +index_buffer: 2387 +index_buffer: 2386 +index_buffer: 2392 +index_buffer: 2393 +index_buffer: 2394 +index_buffer: 2392 +index_buffer: 2394 +index_buffer: 2395 +index_buffer: 2395 +index_buffer: 2394 +index_buffer: 2396 +index_buffer: 2395 +index_buffer: 2396 +index_buffer: 2397 +index_buffer: 2398 +index_buffer: 2395 +index_buffer: 2397 +index_buffer: 2398 +index_buffer: 2397 +index_buffer: 2399 +index_buffer: 2400 +index_buffer: 2392 +index_buffer: 2395 +index_buffer: 2400 +index_buffer: 2395 +index_buffer: 2398 +index_buffer: 2401 +index_buffer: 2402 +index_buffer: 2403 +index_buffer: 2401 +index_buffer: 2403 +index_buffer: 2404 +index_buffer: 2405 +index_buffer: 2406 +index_buffer: 2404 +index_buffer: 2405 +index_buffer: 2404 +index_buffer: 2403 +index_buffer: 2407 +index_buffer: 2404 +index_buffer: 2406 +index_buffer: 2407 +index_buffer: 2406 +index_buffer: 2408 +index_buffer: 2409 +index_buffer: 2401 +index_buffer: 2404 +index_buffer: 2409 +index_buffer: 2404 +index_buffer: 2407 +index_buffer: 2371 +index_buffer: 2410 +index_buffer: 2411 +index_buffer: 2371 +index_buffer: 2411 +index_buffer: 2372 +index_buffer: 2412 +index_buffer: 2411 +index_buffer: 2410 +index_buffer: 2412 +index_buffer: 2410 +index_buffer: 2413 +index_buffer: 2393 +index_buffer: 2392 +index_buffer: 2414 +index_buffer: 2393 +index_buffer: 2414 +index_buffer: 2415 +index_buffer: 2416 +index_buffer: 2414 +index_buffer: 2392 +index_buffer: 2416 +index_buffer: 2392 +index_buffer: 2400 +index_buffer: 2416 +index_buffer: 2417 +index_buffer: 2418 +index_buffer: 2416 +index_buffer: 2418 +index_buffer: 2414 +index_buffer: 2414 +index_buffer: 2418 +index_buffer: 2419 +index_buffer: 2414 +index_buffer: 2419 +index_buffer: 2415 +index_buffer: 2420 +index_buffer: 2421 +index_buffer: 2422 +index_buffer: 2420 +index_buffer: 2422 +index_buffer: 2423 +index_buffer: 2424 +index_buffer: 2425 +index_buffer: 2420 +index_buffer: 2424 +index_buffer: 2420 +index_buffer: 2423 +index_buffer: 2420 +index_buffer: 2425 +index_buffer: 2426 +index_buffer: 2420 +index_buffer: 2426 +index_buffer: 2427 +index_buffer: 2421 +index_buffer: 2420 +index_buffer: 2427 +index_buffer: 2421 +index_buffer: 2427 +index_buffer: 2428 +index_buffer: 2429 +index_buffer: 2430 +index_buffer: 2431 +index_buffer: 2429 +index_buffer: 2431 +index_buffer: 2432 +index_buffer: 2433 +index_buffer: 2434 +index_buffer: 2432 +index_buffer: 2433 +index_buffer: 2432 +index_buffer: 2431 +index_buffer: 2435 +index_buffer: 2432 +index_buffer: 2434 +index_buffer: 2435 +index_buffer: 2434 +index_buffer: 2436 +index_buffer: 2437 +index_buffer: 2429 +index_buffer: 2432 +index_buffer: 2437 +index_buffer: 2432 +index_buffer: 2435 +index_buffer: 2438 +index_buffer: 2439 +index_buffer: 2412 +index_buffer: 2438 +index_buffer: 2412 +index_buffer: 2413 +index_buffer: 2440 +index_buffer: 2441 +index_buffer: 2439 +index_buffer: 2440 +index_buffer: 2439 +index_buffer: 2438 +index_buffer: 2419 +index_buffer: 2418 +index_buffer: 2442 +index_buffer: 2419 +index_buffer: 2442 +index_buffer: 2443 +index_buffer: 2418 +index_buffer: 2417 +index_buffer: 2444 +index_buffer: 2418 +index_buffer: 2444 +index_buffer: 2442 +index_buffer: 2442 +index_buffer: 2444 +index_buffer: 2445 +index_buffer: 2442 +index_buffer: 2445 +index_buffer: 2446 +index_buffer: 2443 +index_buffer: 2442 +index_buffer: 2446 +index_buffer: 2443 +index_buffer: 2446 +index_buffer: 2447 +index_buffer: 2427 +index_buffer: 2448 +index_buffer: 2449 +index_buffer: 2427 +index_buffer: 2449 +index_buffer: 2428 +index_buffer: 2426 +index_buffer: 2450 +index_buffer: 2448 +index_buffer: 2426 +index_buffer: 2448 +index_buffer: 2427 +index_buffer: 2448 +index_buffer: 2450 +index_buffer: 2451 +index_buffer: 2448 +index_buffer: 2451 +index_buffer: 2452 +index_buffer: 2448 +index_buffer: 2452 +index_buffer: 2453 +index_buffer: 2448 +index_buffer: 2453 +index_buffer: 2449 +index_buffer: 2454 +index_buffer: 2437 +index_buffer: 2435 +index_buffer: 2454 +index_buffer: 2435 +index_buffer: 2455 +index_buffer: 2455 +index_buffer: 2435 +index_buffer: 2436 +index_buffer: 2455 +index_buffer: 2436 +index_buffer: 2456 +index_buffer: 2457 +index_buffer: 2455 +index_buffer: 2456 +index_buffer: 2457 +index_buffer: 2456 +index_buffer: 2458 +index_buffer: 2459 +index_buffer: 2454 +index_buffer: 2455 +index_buffer: 2459 +index_buffer: 2455 +index_buffer: 2457 +index_buffer: 2460 +index_buffer: 2441 +index_buffer: 2440 +index_buffer: 2460 +index_buffer: 2440 +index_buffer: 2461 +index_buffer: 2388 +index_buffer: 2460 +index_buffer: 2461 +index_buffer: 2388 +index_buffer: 2461 +index_buffer: 2389 +index_buffer: 2462 +index_buffer: 2447 +index_buffer: 2446 +index_buffer: 2462 +index_buffer: 2446 +index_buffer: 2463 +index_buffer: 2446 +index_buffer: 2445 +index_buffer: 2464 +index_buffer: 2446 +index_buffer: 2464 +index_buffer: 2463 +index_buffer: 2463 +index_buffer: 2464 +index_buffer: 2465 +index_buffer: 2463 +index_buffer: 2465 +index_buffer: 2466 +index_buffer: 2466 +index_buffer: 2467 +index_buffer: 2462 +index_buffer: 2466 +index_buffer: 2462 +index_buffer: 2463 +index_buffer: 2453 +index_buffer: 2452 +index_buffer: 2468 +index_buffer: 2453 +index_buffer: 2468 +index_buffer: 2469 +index_buffer: 2452 +index_buffer: 2451 +index_buffer: 2470 +index_buffer: 2452 +index_buffer: 2470 +index_buffer: 2468 +index_buffer: 2471 +index_buffer: 2472 +index_buffer: 2468 +index_buffer: 2471 +index_buffer: 2468 +index_buffer: 2470 +index_buffer: 2473 +index_buffer: 2469 +index_buffer: 2468 +index_buffer: 2473 +index_buffer: 2468 +index_buffer: 2472 +index_buffer: 2474 +index_buffer: 2459 +index_buffer: 2457 +index_buffer: 2474 +index_buffer: 2457 +index_buffer: 2475 +index_buffer: 2475 +index_buffer: 2457 +index_buffer: 2458 +index_buffer: 2475 +index_buffer: 2458 +index_buffer: 2476 +index_buffer: 2477 +index_buffer: 2475 +index_buffer: 2476 +index_buffer: 2477 +index_buffer: 2476 +index_buffer: 2478 +index_buffer: 2477 +index_buffer: 2479 +index_buffer: 2474 +index_buffer: 2477 +index_buffer: 2474 +index_buffer: 2475 +index_buffer: 2375 +index_buffer: 2376 +index_buffer: 2480 +index_buffer: 2375 +index_buffer: 2480 +index_buffer: 2481 +index_buffer: 2481 +index_buffer: 2480 +index_buffer: 2482 +index_buffer: 2481 +index_buffer: 2482 +index_buffer: 2483 +index_buffer: 2373 +index_buffer: 2484 +index_buffer: 2485 +index_buffer: 2373 +index_buffer: 2485 +index_buffer: 2376 +index_buffer: 2372 +index_buffer: 2486 +index_buffer: 2484 +index_buffer: 2372 +index_buffer: 2484 +index_buffer: 2373 +index_buffer: 2484 +index_buffer: 2486 +index_buffer: 2487 +index_buffer: 2484 +index_buffer: 2487 +index_buffer: 2488 +index_buffer: 2485 +index_buffer: 2484 +index_buffer: 2488 +index_buffer: 2485 +index_buffer: 2488 +index_buffer: 2489 +index_buffer: 2396 +index_buffer: 2490 +index_buffer: 2491 +index_buffer: 2396 +index_buffer: 2491 +index_buffer: 2397 +index_buffer: 2492 +index_buffer: 2491 +index_buffer: 2490 +index_buffer: 2492 +index_buffer: 2490 +index_buffer: 2493 +index_buffer: 2491 +index_buffer: 2492 +index_buffer: 2494 +index_buffer: 2491 +index_buffer: 2494 +index_buffer: 2495 +index_buffer: 2495 +index_buffer: 2399 +index_buffer: 2397 +index_buffer: 2495 +index_buffer: 2397 +index_buffer: 2491 +index_buffer: 2382 +index_buffer: 2496 +index_buffer: 2497 +index_buffer: 2382 +index_buffer: 2497 +index_buffer: 2381 +index_buffer: 2383 +index_buffer: 2381 +index_buffer: 2497 +index_buffer: 2383 +index_buffer: 2497 +index_buffer: 2498 +index_buffer: 2499 +index_buffer: 2500 +index_buffer: 2382 +index_buffer: 2499 +index_buffer: 2382 +index_buffer: 2379 +index_buffer: 2379 +index_buffer: 2378 +index_buffer: 2405 +index_buffer: 2379 +index_buffer: 2405 +index_buffer: 2499 +index_buffer: 2501 +index_buffer: 2502 +index_buffer: 2503 +index_buffer: 2501 +index_buffer: 2503 +index_buffer: 2504 +index_buffer: 2502 +index_buffer: 2402 +index_buffer: 2505 +index_buffer: 2502 +index_buffer: 2505 +index_buffer: 2503 +index_buffer: 2505 +index_buffer: 2506 +index_buffer: 2507 +index_buffer: 2505 +index_buffer: 2507 +index_buffer: 2503 +index_buffer: 2507 +index_buffer: 2508 +index_buffer: 2504 +index_buffer: 2507 +index_buffer: 2504 +index_buffer: 2503 +index_buffer: 2509 +index_buffer: 2374 +index_buffer: 2375 +index_buffer: 2509 +index_buffer: 2375 +index_buffer: 2510 +index_buffer: 2394 +index_buffer: 2509 +index_buffer: 2510 +index_buffer: 2394 +index_buffer: 2510 +index_buffer: 2396 +index_buffer: 2393 +index_buffer: 2511 +index_buffer: 2509 +index_buffer: 2393 +index_buffer: 2509 +index_buffer: 2394 +index_buffer: 2511 +index_buffer: 2371 +index_buffer: 2374 +index_buffer: 2511 +index_buffer: 2374 +index_buffer: 2509 +index_buffer: 2512 +index_buffer: 2513 +index_buffer: 2389 +index_buffer: 2512 +index_buffer: 2389 +index_buffer: 2514 +index_buffer: 2467 +index_buffer: 2466 +index_buffer: 2515 +index_buffer: 2467 +index_buffer: 2515 +index_buffer: 2514 +index_buffer: 2466 +index_buffer: 2465 +index_buffer: 2516 +index_buffer: 2466 +index_buffer: 2516 +index_buffer: 2515 +index_buffer: 2517 +index_buffer: 2513 +index_buffer: 2512 +index_buffer: 2517 +index_buffer: 2512 +index_buffer: 2518 +index_buffer: 2519 +index_buffer: 2410 +index_buffer: 2371 +index_buffer: 2519 +index_buffer: 2371 +index_buffer: 2511 +index_buffer: 2415 +index_buffer: 2519 +index_buffer: 2511 +index_buffer: 2415 +index_buffer: 2511 +index_buffer: 2393 +index_buffer: 2415 +index_buffer: 2419 +index_buffer: 2520 +index_buffer: 2415 +index_buffer: 2520 +index_buffer: 2519 +index_buffer: 2413 +index_buffer: 2410 +index_buffer: 2519 +index_buffer: 2413 +index_buffer: 2519 +index_buffer: 2520 +index_buffer: 2521 +index_buffer: 2438 +index_buffer: 2413 +index_buffer: 2521 +index_buffer: 2413 +index_buffer: 2520 +index_buffer: 2520 +index_buffer: 2419 +index_buffer: 2443 +index_buffer: 2520 +index_buffer: 2443 +index_buffer: 2521 +index_buffer: 2443 +index_buffer: 2447 +index_buffer: 2522 +index_buffer: 2443 +index_buffer: 2522 +index_buffer: 2521 +index_buffer: 2522 +index_buffer: 2440 +index_buffer: 2438 +index_buffer: 2522 +index_buffer: 2438 +index_buffer: 2521 +index_buffer: 2523 +index_buffer: 2461 +index_buffer: 2440 +index_buffer: 2523 +index_buffer: 2440 +index_buffer: 2522 +index_buffer: 2522 +index_buffer: 2447 +index_buffer: 2462 +index_buffer: 2522 +index_buffer: 2462 +index_buffer: 2523 +index_buffer: 2523 +index_buffer: 2462 +index_buffer: 2467 +index_buffer: 2523 +index_buffer: 2467 +index_buffer: 2514 +index_buffer: 2389 +index_buffer: 2461 +index_buffer: 2523 +index_buffer: 2389 +index_buffer: 2523 +index_buffer: 2514 +index_buffer: 2524 +index_buffer: 2525 +index_buffer: 2500 +index_buffer: 2524 +index_buffer: 2500 +index_buffer: 2526 +index_buffer: 2527 +index_buffer: 2524 +index_buffer: 2526 +index_buffer: 2527 +index_buffer: 2526 +index_buffer: 2501 +index_buffer: 2403 +index_buffer: 2528 +index_buffer: 2499 +index_buffer: 2403 +index_buffer: 2499 +index_buffer: 2405 +index_buffer: 2403 +index_buffer: 2402 +index_buffer: 2502 +index_buffer: 2403 +index_buffer: 2502 +index_buffer: 2528 +index_buffer: 2526 +index_buffer: 2528 +index_buffer: 2502 +index_buffer: 2526 +index_buffer: 2502 +index_buffer: 2501 +index_buffer: 2526 +index_buffer: 2500 +index_buffer: 2499 +index_buffer: 2526 +index_buffer: 2499 +index_buffer: 2528 +index_buffer: 2405 +index_buffer: 2378 +index_buffer: 2529 +index_buffer: 2405 +index_buffer: 2529 +index_buffer: 2406 +index_buffer: 2529 +index_buffer: 2530 +index_buffer: 2408 +index_buffer: 2529 +index_buffer: 2408 +index_buffer: 2406 +index_buffer: 2425 +index_buffer: 2424 +index_buffer: 2531 +index_buffer: 2425 +index_buffer: 2531 +index_buffer: 2532 +index_buffer: 2533 +index_buffer: 2426 +index_buffer: 2425 +index_buffer: 2533 +index_buffer: 2425 +index_buffer: 2532 +index_buffer: 2450 +index_buffer: 2426 +index_buffer: 2533 +index_buffer: 2450 +index_buffer: 2533 +index_buffer: 2534 +index_buffer: 2451 +index_buffer: 2450 +index_buffer: 2534 +index_buffer: 2451 +index_buffer: 2534 +index_buffer: 2535 +index_buffer: 2470 +index_buffer: 2451 +index_buffer: 2535 +index_buffer: 2470 +index_buffer: 2535 +index_buffer: 2536 +index_buffer: 2470 +index_buffer: 2536 +index_buffer: 2537 +index_buffer: 2470 +index_buffer: 2537 +index_buffer: 2471 +index_buffer: 2538 +index_buffer: 2539 +index_buffer: 2540 +index_buffer: 2538 +index_buffer: 2540 +index_buffer: 2541 +index_buffer: 2540 +index_buffer: 2539 +index_buffer: 2542 +index_buffer: 2540 +index_buffer: 2542 +index_buffer: 2543 +index_buffer: 2543 +index_buffer: 2544 +index_buffer: 2545 +index_buffer: 2543 +index_buffer: 2545 +index_buffer: 2540 +index_buffer: 2541 +index_buffer: 2540 +index_buffer: 2545 +index_buffer: 2541 +index_buffer: 2545 +index_buffer: 2546 +index_buffer: 2537 +index_buffer: 2547 +index_buffer: 2548 +index_buffer: 2537 +index_buffer: 2548 +index_buffer: 2471 +index_buffer: 2549 +index_buffer: 2477 +index_buffer: 2478 +index_buffer: 2549 +index_buffer: 2478 +index_buffer: 2550 +index_buffer: 2551 +index_buffer: 2552 +index_buffer: 2553 +index_buffer: 2551 +index_buffer: 2553 +index_buffer: 2554 +index_buffer: 2555 +index_buffer: 2554 +index_buffer: 2553 +index_buffer: 2555 +index_buffer: 2553 +index_buffer: 2556 +index_buffer: 2557 +index_buffer: 2558 +index_buffer: 2554 +index_buffer: 2557 +index_buffer: 2554 +index_buffer: 2555 +index_buffer: 2558 +index_buffer: 2559 +index_buffer: 2551 +index_buffer: 2558 +index_buffer: 2551 +index_buffer: 2554 +index_buffer: 2560 +index_buffer: 2561 +index_buffer: 2562 +index_buffer: 2560 +index_buffer: 2562 +index_buffer: 2563 +index_buffer: 2564 +index_buffer: 2565 +index_buffer: 2562 +index_buffer: 2564 +index_buffer: 2562 +index_buffer: 2561 +index_buffer: 2565 +index_buffer: 2566 +index_buffer: 2567 +index_buffer: 2565 +index_buffer: 2567 +index_buffer: 2562 +index_buffer: 2567 +index_buffer: 2568 +index_buffer: 2563 +index_buffer: 2567 +index_buffer: 2563 +index_buffer: 2562 +index_buffer: 2569 +index_buffer: 2570 +index_buffer: 2559 +index_buffer: 2569 +index_buffer: 2559 +index_buffer: 2558 +index_buffer: 2558 +index_buffer: 2557 +index_buffer: 2571 +index_buffer: 2558 +index_buffer: 2571 +index_buffer: 2569 +index_buffer: 2569 +index_buffer: 2571 +index_buffer: 2572 +index_buffer: 2569 +index_buffer: 2572 +index_buffer: 2573 +index_buffer: 2570 +index_buffer: 2569 +index_buffer: 2573 +index_buffer: 2570 +index_buffer: 2573 +index_buffer: 2574 +index_buffer: 2487 +index_buffer: 2575 +index_buffer: 2434 +index_buffer: 2487 +index_buffer: 2434 +index_buffer: 2433 +index_buffer: 2436 +index_buffer: 2434 +index_buffer: 2575 +index_buffer: 2436 +index_buffer: 2575 +index_buffer: 2576 +index_buffer: 2574 +index_buffer: 2573 +index_buffer: 2577 +index_buffer: 2574 +index_buffer: 2577 +index_buffer: 2578 +index_buffer: 2573 +index_buffer: 2572 +index_buffer: 2579 +index_buffer: 2573 +index_buffer: 2579 +index_buffer: 2577 +index_buffer: 2577 +index_buffer: 2579 +index_buffer: 2580 +index_buffer: 2577 +index_buffer: 2580 +index_buffer: 2581 +index_buffer: 2578 +index_buffer: 2577 +index_buffer: 2581 +index_buffer: 2578 +index_buffer: 2581 +index_buffer: 2582 +index_buffer: 2456 +index_buffer: 2436 +index_buffer: 2576 +index_buffer: 2456 +index_buffer: 2576 +index_buffer: 2583 +index_buffer: 2458 +index_buffer: 2456 +index_buffer: 2583 +index_buffer: 2458 +index_buffer: 2583 +index_buffer: 2584 +index_buffer: 2582 +index_buffer: 2581 +index_buffer: 2585 +index_buffer: 2582 +index_buffer: 2585 +index_buffer: 2586 +index_buffer: 2581 +index_buffer: 2580 +index_buffer: 2587 +index_buffer: 2581 +index_buffer: 2587 +index_buffer: 2585 +index_buffer: 2587 +index_buffer: 2588 +index_buffer: 2589 +index_buffer: 2587 +index_buffer: 2589 +index_buffer: 2585 +index_buffer: 2586 +index_buffer: 2585 +index_buffer: 2589 +index_buffer: 2586 +index_buffer: 2589 +index_buffer: 2590 +index_buffer: 2476 +index_buffer: 2458 +index_buffer: 2584 +index_buffer: 2476 +index_buffer: 2584 +index_buffer: 2591 +index_buffer: 2478 +index_buffer: 2476 +index_buffer: 2591 +index_buffer: 2478 +index_buffer: 2591 +index_buffer: 2391 +index_buffer: 2592 +index_buffer: 2433 +index_buffer: 2431 +index_buffer: 2592 +index_buffer: 2431 +index_buffer: 2593 +index_buffer: 2593 +index_buffer: 2431 +index_buffer: 2430 +index_buffer: 2593 +index_buffer: 2430 +index_buffer: 2594 +index_buffer: 2595 +index_buffer: 2593 +index_buffer: 2594 +index_buffer: 2595 +index_buffer: 2594 +index_buffer: 2596 +index_buffer: 2595 +index_buffer: 2597 +index_buffer: 2592 +index_buffer: 2595 +index_buffer: 2592 +index_buffer: 2593 +index_buffer: 2598 +index_buffer: 2599 +index_buffer: 2600 +index_buffer: 2598 +index_buffer: 2600 +index_buffer: 2601 +index_buffer: 2602 +index_buffer: 2598 +index_buffer: 2601 +index_buffer: 2602 +index_buffer: 2601 +index_buffer: 2603 +index_buffer: 2604 +index_buffer: 2597 +index_buffer: 2595 +index_buffer: 2604 +index_buffer: 2595 +index_buffer: 2605 +index_buffer: 2595 +index_buffer: 2596 +index_buffer: 2606 +index_buffer: 2595 +index_buffer: 2606 +index_buffer: 2605 +index_buffer: 2607 +index_buffer: 2608 +index_buffer: 2605 +index_buffer: 2607 +index_buffer: 2605 +index_buffer: 2606 +index_buffer: 2604 +index_buffer: 2605 +index_buffer: 2608 +index_buffer: 2604 +index_buffer: 2608 +index_buffer: 2609 +index_buffer: 2610 +index_buffer: 2611 +index_buffer: 2612 +index_buffer: 2610 +index_buffer: 2612 +index_buffer: 2613 +index_buffer: 2610 +index_buffer: 2614 +index_buffer: 2615 +index_buffer: 2610 +index_buffer: 2615 +index_buffer: 2611 +index_buffer: 2603 +index_buffer: 2601 +index_buffer: 2611 +index_buffer: 2603 +index_buffer: 2611 +index_buffer: 2615 +index_buffer: 2611 +index_buffer: 2601 +index_buffer: 2600 +index_buffer: 2611 +index_buffer: 2600 +index_buffer: 2612 +index_buffer: 2590 +index_buffer: 2589 +index_buffer: 2616 +index_buffer: 2590 +index_buffer: 2616 +index_buffer: 2617 +index_buffer: 2618 +index_buffer: 2619 +index_buffer: 2473 +index_buffer: 2618 +index_buffer: 2473 +index_buffer: 2472 +index_buffer: 2548 +index_buffer: 2618 +index_buffer: 2472 +index_buffer: 2548 +index_buffer: 2472 +index_buffer: 2471 +index_buffer: 2620 +index_buffer: 2621 +index_buffer: 2622 +index_buffer: 2620 +index_buffer: 2622 +index_buffer: 2623 +index_buffer: 2624 +index_buffer: 2625 +index_buffer: 2561 +index_buffer: 2624 +index_buffer: 2561 +index_buffer: 2560 +index_buffer: 2625 +index_buffer: 2626 +index_buffer: 2564 +index_buffer: 2625 +index_buffer: 2564 +index_buffer: 2561 +index_buffer: 2538 +index_buffer: 2541 +index_buffer: 2384 +index_buffer: 2538 +index_buffer: 2384 +index_buffer: 2383 +index_buffer: 2384 +index_buffer: 2541 +index_buffer: 2546 +index_buffer: 2384 +index_buffer: 2546 +index_buffer: 2385 +index_buffer: 2550 +index_buffer: 2478 +index_buffer: 2391 +index_buffer: 2550 +index_buffer: 2391 +index_buffer: 2390 +index_buffer: 2551 +index_buffer: 2398 +index_buffer: 2399 +index_buffer: 2551 +index_buffer: 2399 +index_buffer: 2552 +index_buffer: 2559 +index_buffer: 2400 +index_buffer: 2398 +index_buffer: 2559 +index_buffer: 2398 +index_buffer: 2551 +index_buffer: 2563 +index_buffer: 2407 +index_buffer: 2408 +index_buffer: 2563 +index_buffer: 2408 +index_buffer: 2560 +index_buffer: 2409 +index_buffer: 2407 +index_buffer: 2563 +index_buffer: 2409 +index_buffer: 2563 +index_buffer: 2568 +index_buffer: 2559 +index_buffer: 2570 +index_buffer: 2416 +index_buffer: 2559 +index_buffer: 2416 +index_buffer: 2400 +index_buffer: 2416 +index_buffer: 2570 +index_buffer: 2574 +index_buffer: 2416 +index_buffer: 2574 +index_buffer: 2417 +index_buffer: 2417 +index_buffer: 2574 +index_buffer: 2578 +index_buffer: 2417 +index_buffer: 2578 +index_buffer: 2444 +index_buffer: 2444 +index_buffer: 2578 +index_buffer: 2582 +index_buffer: 2444 +index_buffer: 2582 +index_buffer: 2445 +index_buffer: 2445 +index_buffer: 2582 +index_buffer: 2586 +index_buffer: 2445 +index_buffer: 2586 +index_buffer: 2464 +index_buffer: 2464 +index_buffer: 2586 +index_buffer: 2590 +index_buffer: 2464 +index_buffer: 2590 +index_buffer: 2465 +index_buffer: 2488 +index_buffer: 2487 +index_buffer: 2433 +index_buffer: 2488 +index_buffer: 2433 +index_buffer: 2592 +index_buffer: 2489 +index_buffer: 2488 +index_buffer: 2592 +index_buffer: 2489 +index_buffer: 2592 +index_buffer: 2597 +index_buffer: 2627 +index_buffer: 2508 +index_buffer: 2600 +index_buffer: 2627 +index_buffer: 2600 +index_buffer: 2599 +index_buffer: 2628 +index_buffer: 2489 +index_buffer: 2597 +index_buffer: 2628 +index_buffer: 2597 +index_buffer: 2604 +index_buffer: 2629 +index_buffer: 2628 +index_buffer: 2604 +index_buffer: 2629 +index_buffer: 2604 +index_buffer: 2609 +index_buffer: 2613 +index_buffer: 2612 +index_buffer: 2507 +index_buffer: 2613 +index_buffer: 2507 +index_buffer: 2506 +index_buffer: 2507 +index_buffer: 2612 +index_buffer: 2600 +index_buffer: 2507 +index_buffer: 2600 +index_buffer: 2508 +index_buffer: 2465 +index_buffer: 2590 +index_buffer: 2617 +index_buffer: 2465 +index_buffer: 2617 +index_buffer: 2516 +index_buffer: 2623 +index_buffer: 2622 +index_buffer: 2517 +index_buffer: 2623 +index_buffer: 2517 +index_buffer: 2518 +index_buffer: 2624 +index_buffer: 2560 +index_buffer: 2408 +index_buffer: 2624 +index_buffer: 2408 +index_buffer: 2530 +index_buffer: 2575 +index_buffer: 2487 +index_buffer: 2486 +index_buffer: 2575 +index_buffer: 2486 +index_buffer: 2630 +index_buffer: 2486 +index_buffer: 2372 +index_buffer: 2411 +index_buffer: 2486 +index_buffer: 2411 +index_buffer: 2630 +index_buffer: 2412 +index_buffer: 2631 +index_buffer: 2630 +index_buffer: 2412 +index_buffer: 2630 +index_buffer: 2411 +index_buffer: 2631 +index_buffer: 2576 +index_buffer: 2575 +index_buffer: 2631 +index_buffer: 2575 +index_buffer: 2630 +index_buffer: 2583 +index_buffer: 2576 +index_buffer: 2631 +index_buffer: 2583 +index_buffer: 2631 +index_buffer: 2632 +index_buffer: 2632 +index_buffer: 2631 +index_buffer: 2412 +index_buffer: 2632 +index_buffer: 2412 +index_buffer: 2439 +index_buffer: 2633 +index_buffer: 2632 +index_buffer: 2439 +index_buffer: 2633 +index_buffer: 2439 +index_buffer: 2441 +index_buffer: 2584 +index_buffer: 2583 +index_buffer: 2632 +index_buffer: 2584 +index_buffer: 2632 +index_buffer: 2633 +index_buffer: 2591 +index_buffer: 2584 +index_buffer: 2633 +index_buffer: 2591 +index_buffer: 2633 +index_buffer: 2634 +index_buffer: 2633 +index_buffer: 2441 +index_buffer: 2460 +index_buffer: 2633 +index_buffer: 2460 +index_buffer: 2634 +index_buffer: 2460 +index_buffer: 2388 +index_buffer: 2387 +index_buffer: 2460 +index_buffer: 2387 +index_buffer: 2634 +index_buffer: 2391 +index_buffer: 2591 +index_buffer: 2634 +index_buffer: 2391 +index_buffer: 2634 +index_buffer: 2387 +index_buffer: 2525 +index_buffer: 2496 +index_buffer: 2382 +index_buffer: 2525 +index_buffer: 2382 +index_buffer: 2500 +index_buffer: 2527 +index_buffer: 2501 +index_buffer: 2504 +index_buffer: 2527 +index_buffer: 2504 +index_buffer: 2635 +index_buffer: 2635 +index_buffer: 2504 +index_buffer: 2508 +index_buffer: 2635 +index_buffer: 2508 +index_buffer: 2627 +index_buffer: 2636 +index_buffer: 2497 +index_buffer: 2496 +index_buffer: 2636 +index_buffer: 2496 +index_buffer: 2482 +index_buffer: 2636 +index_buffer: 2629 +index_buffer: 2498 +index_buffer: 2636 +index_buffer: 2498 +index_buffer: 2497 +index_buffer: 2493 +index_buffer: 2637 +index_buffer: 2524 +index_buffer: 2493 +index_buffer: 2524 +index_buffer: 2527 +index_buffer: 2637 +index_buffer: 2483 +index_buffer: 2525 +index_buffer: 2637 +index_buffer: 2525 +index_buffer: 2524 +index_buffer: 2602 +index_buffer: 2638 +index_buffer: 2639 +index_buffer: 2602 +index_buffer: 2639 +index_buffer: 2598 +index_buffer: 2598 +index_buffer: 2639 +index_buffer: 2640 +index_buffer: 2598 +index_buffer: 2640 +index_buffer: 2599 +index_buffer: 2539 +index_buffer: 2641 +index_buffer: 2642 +index_buffer: 2539 +index_buffer: 2642 +index_buffer: 2542 +index_buffer: 2538 +index_buffer: 2643 +index_buffer: 2641 +index_buffer: 2538 +index_buffer: 2641 +index_buffer: 2539 +index_buffer: 2627 +index_buffer: 2599 +index_buffer: 2640 +index_buffer: 2627 +index_buffer: 2640 +index_buffer: 2494 +index_buffer: 2538 +index_buffer: 2383 +index_buffer: 2498 +index_buffer: 2538 +index_buffer: 2498 +index_buffer: 2643 +index_buffer: 2483 +index_buffer: 2482 +index_buffer: 2496 +index_buffer: 2483 +index_buffer: 2496 +index_buffer: 2525 +index_buffer: 2527 +index_buffer: 2635 +index_buffer: 2492 +index_buffer: 2527 +index_buffer: 2492 +index_buffer: 2493 +index_buffer: 2635 +index_buffer: 2627 +index_buffer: 2494 +index_buffer: 2635 +index_buffer: 2494 +index_buffer: 2492 +index_buffer: 2608 +index_buffer: 2607 +index_buffer: 2642 +index_buffer: 2608 +index_buffer: 2642 +index_buffer: 2641 +index_buffer: 2643 +index_buffer: 2609 +index_buffer: 2608 +index_buffer: 2643 +index_buffer: 2608 +index_buffer: 2641 +index_buffer: 2609 +index_buffer: 2643 +index_buffer: 2498 +index_buffer: 2609 +index_buffer: 2498 +index_buffer: 2629 +index_buffer: 2482 +index_buffer: 2480 +index_buffer: 2644 +index_buffer: 2482 +index_buffer: 2644 +index_buffer: 2636 +index_buffer: 2480 +index_buffer: 2376 +index_buffer: 2485 +index_buffer: 2480 +index_buffer: 2485 +index_buffer: 2644 +index_buffer: 2485 +index_buffer: 2489 +index_buffer: 2628 +index_buffer: 2485 +index_buffer: 2628 +index_buffer: 2644 +index_buffer: 2628 +index_buffer: 2629 +index_buffer: 2636 +index_buffer: 2628 +index_buffer: 2636 +index_buffer: 2644 +index_buffer: 2493 +index_buffer: 2490 +index_buffer: 2645 +index_buffer: 2493 +index_buffer: 2645 +index_buffer: 2637 +index_buffer: 2490 +index_buffer: 2396 +index_buffer: 2510 +index_buffer: 2490 +index_buffer: 2510 +index_buffer: 2645 +index_buffer: 2510 +index_buffer: 2375 +index_buffer: 2481 +index_buffer: 2510 +index_buffer: 2481 +index_buffer: 2645 +index_buffer: 2645 +index_buffer: 2481 +index_buffer: 2483 +index_buffer: 2645 +index_buffer: 2483 +index_buffer: 2637 +index_buffer: 2646 +index_buffer: 2639 +index_buffer: 2638 +index_buffer: 2646 +index_buffer: 2638 +index_buffer: 2647 +index_buffer: 2647 +index_buffer: 2556 +index_buffer: 2553 +index_buffer: 2647 +index_buffer: 2553 +index_buffer: 2646 +index_buffer: 2553 +index_buffer: 2552 +index_buffer: 2648 +index_buffer: 2553 +index_buffer: 2648 +index_buffer: 2646 +index_buffer: 2639 +index_buffer: 2646 +index_buffer: 2648 +index_buffer: 2639 +index_buffer: 2648 +index_buffer: 2640 +index_buffer: 2494 +index_buffer: 2640 +index_buffer: 2648 +index_buffer: 2494 +index_buffer: 2648 +index_buffer: 2495 +index_buffer: 2552 +index_buffer: 2399 +index_buffer: 2495 +index_buffer: 2552 +index_buffer: 2495 +index_buffer: 2648 +index_buffer: 2649 +index_buffer: 2650 +index_buffer: 2531 +index_buffer: 2649 +index_buffer: 2531 +index_buffer: 2424 +index_buffer: 2649 +index_buffer: 2424 +index_buffer: 2423 +index_buffer: 2649 +index_buffer: 2423 +index_buffer: 2651 +index_buffer: 2652 +index_buffer: 2649 +index_buffer: 2651 +index_buffer: 2652 +index_buffer: 2651 +index_buffer: 2653 +index_buffer: 2652 +index_buffer: 2654 +index_buffer: 2650 +index_buffer: 2652 +index_buffer: 2650 +index_buffer: 2649 +index_buffer: 2655 +index_buffer: 2653 +index_buffer: 2656 +index_buffer: 2655 +index_buffer: 2656 +index_buffer: 2657 +index_buffer: 2658 +index_buffer: 2659 +index_buffer: 2655 +index_buffer: 2658 +index_buffer: 2655 +index_buffer: 2657 +index_buffer: 2660 +index_buffer: 2661 +index_buffer: 2655 +index_buffer: 2660 +index_buffer: 2655 +index_buffer: 2659 +index_buffer: 2661 +index_buffer: 2652 +index_buffer: 2653 +index_buffer: 2661 +index_buffer: 2653 +index_buffer: 2655 +index_buffer: 2662 +index_buffer: 2660 +index_buffer: 2659 +index_buffer: 2662 +index_buffer: 2659 +index_buffer: 2663 +index_buffer: 2664 +index_buffer: 2665 +index_buffer: 2661 +index_buffer: 2664 +index_buffer: 2661 +index_buffer: 2660 +index_buffer: 2654 +index_buffer: 2652 +index_buffer: 2661 +index_buffer: 2654 +index_buffer: 2661 +index_buffer: 2665 +index_buffer: 2651 +index_buffer: 2423 +index_buffer: 2422 +index_buffer: 2651 +index_buffer: 2422 +index_buffer: 2666 +index_buffer: 2651 +index_buffer: 2666 +index_buffer: 2656 +index_buffer: 2651 +index_buffer: 2656 +index_buffer: 2653 +index_buffer: 2667 +index_buffer: 2662 +index_buffer: 2663 +index_buffer: 2667 +index_buffer: 2663 +index_buffer: 2668 +index_buffer: 2669 +index_buffer: 2670 +index_buffer: 2671 +index_buffer: 2669 +index_buffer: 2671 +index_buffer: 2672 +index_buffer: 2669 +index_buffer: 2667 +index_buffer: 2668 +index_buffer: 2669 +index_buffer: 2668 +index_buffer: 2670 +index_buffer: 2672 +index_buffer: 2673 +index_buffer: 2674 +index_buffer: 2672 +index_buffer: 2674 +index_buffer: 2669 +index_buffer: 2675 +index_buffer: 2667 +index_buffer: 2669 +index_buffer: 2675 +index_buffer: 2669 +index_buffer: 2674 +index_buffer: 2675 +index_buffer: 2676 +index_buffer: 2662 +index_buffer: 2675 +index_buffer: 2662 +index_buffer: 2667 +index_buffer: 2676 +index_buffer: 2664 +index_buffer: 2660 +index_buffer: 2676 +index_buffer: 2660 +index_buffer: 2662 +index_buffer: 2663 +index_buffer: 2659 +index_buffer: 2658 +index_buffer: 2663 +index_buffer: 2658 +index_buffer: 2677 +index_buffer: 2678 +index_buffer: 2668 +index_buffer: 2663 +index_buffer: 2678 +index_buffer: 2663 +index_buffer: 2677 +index_buffer: 2679 +index_buffer: 2670 +index_buffer: 2668 +index_buffer: 2679 +index_buffer: 2668 +index_buffer: 2678 +index_buffer: 2679 +index_buffer: 2680 +index_buffer: 2671 +index_buffer: 2679 +index_buffer: 2671 +index_buffer: 2670 diff --git a/mediapipe/graphs/face_effect/data/glasses.pngblob b/mediapipe/graphs/face_effect/data/glasses.pngblob new file mode 100644 index 000000000..865584bf8 Binary files /dev/null and b/mediapipe/graphs/face_effect/data/glasses.pngblob differ diff --git a/mediapipe/graphs/face_effect/face_effect_gpu.pbtxt b/mediapipe/graphs/face_effect/face_effect_gpu.pbtxt new file mode 100644 index 000000000..a7af2d571 --- /dev/null +++ b/mediapipe/graphs/face_effect/face_effect_gpu.pbtxt @@ -0,0 +1,145 @@ +# MediaPipe graph that applies a face effect to the input video stream. + +# GPU buffer. (GpuBuffer) +input_stream: "input_video" + +# Boolean flag, which indicates whether the Facepaint effect is selected. (bool) +# +# If `true`, the Facepaint effect will be rendered. +# If `false`, the Glasses effect will be rendered. +input_stream: "is_facepaint_effect_selected" + +# Output image with rendered results. (GpuBuffer) +output_stream: "output_video" + +# A list of geometry data for a single detected face. +# +# NOTE: there will not be an output packet in this stream for this particular +# timestamp if none of faces detected. +# +# (std::vector) +output_stream: "multi_face_geometry" + +# Throttles the images flowing downstream for flow control. It passes through +# the very first incoming image unaltered, and waits for downstream nodes +# (calculators and subgraphs) in the graph to finish their tasks before it +# passes through another image. All images that come in while waiting are +# dropped, limiting the number of in-flight images in most part of the graph to +# 1. This prevents the downstream nodes from queuing up incoming images and data +# excessively, which leads to increased latency and memory usage, unwanted in +# real-time mobile applications. It also eliminates unnecessarily computation, +# e.g., the output produced by a node may get dropped downstream if the +# subsequent nodes are still busy processing previous inputs. +node { + calculator: "FlowLimiterCalculator" + input_stream: "input_video" + input_stream: "FINISHED:output_video" + input_stream_info: { + tag_index: "FINISHED" + back_edge: true + } + output_stream: "throttled_input_video" +} + +# Generates an environment that describes the current virtual scene. +node { + calculator: "FaceGeometryEnvGeneratorCalculator" + output_side_packet: "ENVIRONMENT:environment" + node_options: { + [type.googleapis.com/mediapipe.FaceGeometryEnvGeneratorCalculatorOptions] { + environment: { + origin_point_location: TOP_LEFT_CORNER + perspective_camera: { + vertical_fov_degrees: 63.0 # 63 degrees + near: 1.0 # 1cm + far: 10000.0 # 100m + } + } + } + } +} + +# Subgraph that detects a single face and corresponding landmarks. The landmarks +# are also "smoothed" to achieve better visual results. +node { + calculator: "SingleFaceSmoothLandmarkGpu" + input_stream: "IMAGE:throttled_input_video" + output_stream: "LANDMARKS:multi_face_landmarks" +} + +# Extracts the throttled input video frame dimensions as a separate packet. +node { + calculator: "ImagePropertiesCalculator" + input_stream: "IMAGE_GPU:throttled_input_video" + output_stream: "SIZE:input_video_size" +} + +# Subgraph that computes face geometry from landmarks for a single face. +node { + calculator: "FaceGeometry" + input_stream: "MULTI_FACE_LANDMARKS:multi_face_landmarks" + input_stream: "IMAGE_SIZE:input_video_size" + input_side_packet: "ENVIRONMENT:environment" + output_stream: "MULTI_FACE_GEOMETRY:multi_face_geometry" +} + +# Decides whether to render the Facepaint effect based on the +# `is_facepaint_effect_selected` flag value. +node { + calculator: "GateCalculator" + input_stream: "throttled_input_video" + input_stream: "multi_face_geometry" + input_stream: "ALLOW:is_facepaint_effect_selected" + output_stream: "facepaint_effect_throttled_input_video" + output_stream: "facepaint_effect_multi_face_geometry" +} + +# Renders the Facepaint effect. +node { + calculator: "FaceGeometryEffectRendererCalculator" + input_side_packet: "ENVIRONMENT:environment" + input_stream: "IMAGE_GPU:facepaint_effect_throttled_input_video" + input_stream: "MULTI_FACE_GEOMETRY:facepaint_effect_multi_face_geometry" + output_stream: "IMAGE_GPU:facepaint_effect_output_video" + node_options: { + [type.googleapis.com/mediapipe.FaceGeometryEffectRendererCalculatorOptions] { + effect_texture_path: "mediapipe/graphs/face_effect/data/facepaint.pngblob" + } + } +} + +# Decides whether to render the Glasses effect based on the +# `is_facepaint_effect_selected` flag value. +node { + calculator: "GateCalculator" + input_stream: "throttled_input_video" + input_stream: "multi_face_geometry" + input_stream: "DISALLOW:is_facepaint_effect_selected" + output_stream: "glasses_effect_throttled_input_video" + output_stream: "glasses_effect_multi_face_geometry" +} + +# Renders the Glasses effect. +node { + calculator: "FaceGeometryEffectRendererCalculator" + input_side_packet: "ENVIRONMENT:environment" + input_stream: "IMAGE_GPU:glasses_effect_throttled_input_video" + input_stream: "MULTI_FACE_GEOMETRY:glasses_effect_multi_face_geometry" + output_stream: "IMAGE_GPU:glasses_effect_output_video" + node_options: { + [type.googleapis.com/mediapipe.FaceGeometryEffectRendererCalculatorOptions] { + effect_texture_path: "mediapipe/graphs/face_effect/data/glasses.pngblob" + effect_mesh_3d_path: "mediapipe/graphs/face_effect/data/glasses.binarypb" + } + } +} + +# Decides which of the Facepaint or the Glasses rendered results should be sent +# as the output GPU frame. +node { + calculator: "ImmediateMuxCalculator" + input_stream: "facepaint_effect_output_video" + input_stream: "glasses_effect_output_video" + output_stream: "output_video" +} + diff --git a/mediapipe/graphs/face_effect/subgraphs/BUILD b/mediapipe/graphs/face_effect/subgraphs/BUILD new file mode 100644 index 000000000..f7df8fb87 --- /dev/null +++ b/mediapipe/graphs/face_effect/subgraphs/BUILD @@ -0,0 +1,36 @@ +# Copyright 2020 The MediaPipe Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load( + "//mediapipe/framework/tool:mediapipe_graph.bzl", + "mediapipe_simple_subgraph", +) + +licenses(["notice"]) + +package(default_visibility = ["//visibility:public"]) + +mediapipe_simple_subgraph( + name = "single_face_smooth_landmark_gpu", + graph = "single_face_smooth_landmark_gpu.pbtxt", + register_as = "SingleFaceSmoothLandmarkGpu", + deps = [ + "//mediapipe/calculators/core:concatenate_vector_calculator", + "//mediapipe/calculators/core:constant_side_packet_calculator", + "//mediapipe/calculators/core:split_vector_calculator", + "//mediapipe/calculators/image:image_properties_calculator", + "//mediapipe/calculators/util:landmarks_smoothing_calculator", + "//mediapipe/modules/face_landmark:face_landmark_front_gpu", + ], +) diff --git a/mediapipe/graphs/face_effect/subgraphs/single_face_smooth_landmark_gpu.pbtxt b/mediapipe/graphs/face_effect/subgraphs/single_face_smooth_landmark_gpu.pbtxt new file mode 100644 index 000000000..e2e347103 --- /dev/null +++ b/mediapipe/graphs/face_effect/subgraphs/single_face_smooth_landmark_gpu.pbtxt @@ -0,0 +1,84 @@ +# MediaPipe subgraph that detects a single face and corresponding landmarks on +# a input GPU image. The landmarks are also "smoothed" to achieve better visual +# results. + +type: "SingleFaceSmoothLandmarkGpu" + +# GPU image. (GpuBuffer) +input_stream: "IMAGE:input_image" + +# Collection of detected/predicted faces, each represented as a list of face +# landmarks. However, the size of this collection is always 1 because of the +# single-face use in this graph. The decision to wrap the landmark list into a +# collection was made to simplify passing the result into the `FaceGeometry` +# subgraph. (std::vector) +# +# NOTE: there will not be an output packet in the LANDMARKS stream for this +# particular timestamp if none of faces detected. However, the MediaPipe +# framework will internally inform the downstream calculators of the absence of +# this packet so that they don't wait for it unnecessarily. +output_stream: "LANDMARKS:multi_face_smooth_landmarks" + +# Creates a packet to inform the `FaceLandmarkFrontGpu` subgraph to detect at +# most 1 face. +node { + calculator: "ConstantSidePacketCalculator" + output_side_packet: "PACKET:num_faces" + node_options: { + [type.googleapis.com/mediapipe.ConstantSidePacketCalculatorOptions]: { + packet { int_value: 1 } + } + } +} + +# Subgraph that detects faces and corresponding landmarks. +node { + calculator: "FaceLandmarkFrontGpu" + input_stream: "IMAGE:input_image" + input_side_packet: "NUM_FACES:num_faces" + output_stream: "LANDMARKS:multi_face_landmarks" +} + +# Extracts the detected face landmark list from a collection. +node { + calculator: "SplitNormalizedLandmarkListVectorCalculator" + input_stream: "multi_face_landmarks" + output_stream: "face_landmarks" + node_options: { + [type.googleapis.com/mediapipe.SplitVectorCalculatorOptions] { + ranges: { begin: 0 end: 1 } + element_only: true + } + } +} + +# Extracts the input image frame dimensions as a separate packet. +node { + calculator: "ImagePropertiesCalculator" + input_stream: "IMAGE_GPU:input_image" + output_stream: "SIZE:input_image_size" +} + +# Applies smoothing to the single face landmarks. +node { + calculator: "LandmarksSmoothingCalculator" + input_stream: "NORM_LANDMARKS:face_landmarks" + input_stream: "IMAGE_SIZE:input_image_size" + output_stream: "NORM_FILTERED_LANDMARKS:face_smooth_landmarks" + node_options: { + [type.googleapis.com/mediapipe.LandmarksSmoothingCalculatorOptions] { + velocity_filter: { + window_size: 5 + velocity_scale: 20.0 + } + } + } +} + +# Puts the single face smooth landmarks back into a collection to simplify +# passing the result into the `FaceGeometry` subgraph. +node { + calculator: "ConcatenateLandmarListVectorCalculator" + input_stream: "face_smooth_landmarks" + output_stream: "multi_face_smooth_landmarks" +} diff --git a/mediapipe/graphs/object_detection_3d/calculators/BUILD b/mediapipe/graphs/object_detection_3d/calculators/BUILD index b2ddc9dce..b126564f2 100644 --- a/mediapipe/graphs/object_detection_3d/calculators/BUILD +++ b/mediapipe/graphs/object_detection_3d/calculators/BUILD @@ -16,7 +16,7 @@ load("//mediapipe/framework/port:build_config.bzl", "mediapipe_cc_proto_library" licenses(["notice"]) -package(default_visibility = ["//visibility:private"]) +package(default_visibility = ["//visibility:public"]) proto_library( name = "object_proto", diff --git a/mediapipe/graphs/pose_tracking/BUILD b/mediapipe/graphs/pose_tracking/BUILD index 0fb6726ea..3669b0a24 100644 --- a/mediapipe/graphs/pose_tracking/BUILD +++ b/mediapipe/graphs/pose_tracking/BUILD @@ -26,7 +26,7 @@ cc_library( deps = [ "//mediapipe/calculators/core:flow_limiter_calculator", "//mediapipe/calculators/image:image_properties_calculator", - "//mediapipe/graphs/pose_tracking/calculators:landmarks_smoothing_calculator", + "//mediapipe/calculators/util:landmarks_smoothing_calculator", "//mediapipe/graphs/pose_tracking/subgraphs:upper_body_pose_renderer_gpu", "//mediapipe/modules/pose_landmark:pose_landmark_upper_body_gpu", ], @@ -44,7 +44,7 @@ cc_library( deps = [ "//mediapipe/calculators/core:flow_limiter_calculator", "//mediapipe/calculators/image:image_properties_calculator", - "//mediapipe/graphs/pose_tracking/calculators:landmarks_smoothing_calculator", + "//mediapipe/calculators/util:landmarks_smoothing_calculator", "//mediapipe/graphs/pose_tracking/subgraphs:upper_body_pose_renderer_cpu", "//mediapipe/modules/pose_landmark:pose_landmark_upper_body_cpu", ], diff --git a/mediapipe/java/com/google/mediapipe/components/FrameProcessor.java b/mediapipe/java/com/google/mediapipe/components/FrameProcessor.java index 2728eb1c7..26a28cc1c 100644 --- a/mediapipe/java/com/google/mediapipe/components/FrameProcessor.java +++ b/mediapipe/java/com/google/mediapipe/components/FrameProcessor.java @@ -233,19 +233,20 @@ public class FrameProcessor implements TextureFrameProcessor, AudioDataProcessor * * @param inputStream the graph input stream that will receive input audio samples. * @param outputStream the output stream from which output audio samples will be produced. - * @param numChannels the number of audio channels in the input audio stream. + * @param numInputChannels the number of audio channels in the input audio stream. + * @param numOutputChannels the number of audio channels in the output audio stream. If there is + * no output stream, set this to zero. * @param audioSampleRateInHz the sample rate for audio samples in hertz (Hz). */ public void addAudioStreams( @Nullable String inputStream, @Nullable String outputStream, - int numChannels, + int numInputChannels, + int numOutputChannels, double audioSampleRateInHz) { audioInputStream = inputStream; audioOutputStream = outputStream; - numAudioChannels = numChannels; - int audioChannelMask = - numAudioChannels == 2 ? AudioFormat.CHANNEL_IN_STEREO : AudioFormat.CHANNEL_IN_MONO; + numAudioChannels = numInputChannels; audioSampleRate = audioSampleRateInHz; if (audioInputStream != null) { @@ -254,11 +255,13 @@ public class FrameProcessor implements TextureFrameProcessor, AudioDataProcessor } if (audioOutputStream != null) { + int outputAudioChannelMask = + numOutputChannels == 2 ? AudioFormat.CHANNEL_IN_STEREO : AudioFormat.CHANNEL_IN_MONO; AudioFormat audioFormat = new AudioFormat.Builder() .setEncoding(AUDIO_ENCODING) .setSampleRate((int) audioSampleRate) - .setChannelMask(audioChannelMask) + .setChannelMask(outputAudioChannelMask) .build(); mediapipeGraph.addPacketCallback( audioOutputStream, diff --git a/mediapipe/java/com/google/mediapipe/mediapipe_aar.bzl b/mediapipe/java/com/google/mediapipe/mediapipe_aar.bzl index 5a428460d..90ad82aaf 100644 --- a/mediapipe/java/com/google/mediapipe/mediapipe_aar.bzl +++ b/mediapipe/java/com/google/mediapipe/mediapipe_aar.bzl @@ -1,3 +1,17 @@ +# Copyright 2019-2020 The MediaPipe Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + """Generate MediaPipe AAR including different variants of .so in jni folder. Usage: diff --git a/mediapipe/models/README.md b/mediapipe/models/README.md index 9aa3c4367..d8a609a19 100644 --- a/mediapipe/models/README.md +++ b/mediapipe/models/README.md @@ -1,69 +1 @@ -## MediaPipe Models - -### Face Detection - * For front-facing/selfie cameras: [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/models/face_detection_front.tflite) - * For back-facing cameras: [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/models/face_detection_back.tflite) - * [Model page](https://sites.google.com/corp/view/perception-cv4arvr/blazeface) - * Paper: ["BlazeFace: Sub-millisecond Neural Face Detection on Mobile GPUs"](https://arxiv.org/abs/1907.05047) - * [Model card](https://mediapipe.page.link/blazeface-mc) - -### Face Mesh - * Face detection: [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/models/face_detection_front.tflite) (see above) - * 3D face landmarks: [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/models/face_landmark.tflite), [TF.js model](https://tfhub.dev/mediapipe/facemesh/1) - * [Model page](https://sites.google.com/corp/view/perception-cv4arvr/facemesh) - * Paper: ["Real-time Facial Surface Geometry from Monocular Video on Mobile GPUs"](https://arxiv.org/abs/1907.06724) - * [Google AI Blog post](https://ai.googleblog.com/2019/03/real-time-ar-self-expression-with.html) - * [TensorFlow Blog post](https://blog.tensorflow.org/2020/03/face-and-hand-tracking-in-browser-with-mediapipe-and-tensorflowjs.html) - * [Model card](https://mediapipe.page.link/facemesh-mc) - -### Hand Detection and Tracking - * Palm detection: [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/models/palm_detection.tflite), [TF.js model](https://tfhub.dev/mediapipe/handdetector/1) - * 3D hand landmarks: [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/models/hand_landmark.tflite), [TF.js model](https://tfhub.dev/mediapipe/handskeleton/1) - * [Google AI Blog post](https://ai.googleblog.com/2019/08/on-device-real-time-hand-tracking-with.html) - * [TensorFlow Blog post](https://blog.tensorflow.org/2020/03/face-and-hand-tracking-in-browser-with-mediapipe-and-tensorflowjs.html) - * [Model card](https://mediapipe.page.link/handmc) - -### Iris - * Iris landmarks: - [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/models/iris_landmark.tflite) - * Paper: - [Real-time Pupil Tracking from Monocular Video for Digital Puppetry](https://arxiv.org/abs/2006.11341) - ([presentation](https://youtu.be/cIhXkiiapQI)) - * Google AI Blog: - [MediaPipe Iris: Real-time Eye Tracking and Depth Estimation](https://ai.googleblog.com/2020/08/mediapipe-iris-real-time-iris-tracking.html) - * [Model card](https://mediapipe.page.link/iris-mc) - -### Pose - * Pose detection: - [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/modules/pose_detection/pose_detection.tflite) - * Upper-body pose landmarks: - [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/modules/pose_landmark/pose_landmark_upper_body.tflite) - * Paper: - [BlazePose: On-device Real-time Body Pose Tracking](https://arxiv.org/abs/2006.10204) - ([presentation](https://youtu.be/YPpUOTRn5tA)) - * Google AI Blog: - [BlazePose - On-device Real-time Body Pose Tracking](https://ai.googleblog.com/2020/08/on-device-real-time-body-pose-tracking.html) - * [Model card](https://mediapipe.page.link/blazepose-mc) - -### Hair Segmentation - * [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/models/hair_segmentation.tflite) - * [Model page](https://sites.google.com/corp/view/perception-cv4arvr/hair-segmentation) - * Paper: ["Real-time Hair segmentation and recoloring on Mobile GPUs"](https://arxiv.org/abs/1907.06740) - * [Model card](https://mediapipe.page.link/hairsegmentation-mc) - -### Objectron (3D Object Detection) - * Shoes: [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/models/object_detection_3d_sneakers.tflite) - * Chairs: [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/models/object_detection_3d_chair.tflite) - * [Google AI Blog post](https://ai.googleblog.com/2020/03/real-time-3d-object-detection-on-mobile.html) - -### Object Detection -* [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/models/ssdlite_object_detection.tflite) -* See [here](object_detection_saved_model/README.md) for model details. - -### KNIFT (Keypoint Neural Invariant Feature Transform) - * Up to 200 keypoints: [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/models/knift_float.tflite) - * Up to 400 keypoints: [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/models/knift_float_400.tflite) - * Up to 1000 keypoints: [TFLite model](https://github.com/google/mediapipe/tree/master/mediapipe/models/knift_float_1k.tflite) - * [Google Developers Blog post](https://developers.googleblog.com/2020/04/mediapipe-knift-template-based-feature-matching.html) - * [Model card](https://mediapipe.page.link/knift-mc) - +Please see https://solutions.mediapipe.dev/models for more description and model cards. diff --git a/mediapipe/modules/face_geometry/BUILD b/mediapipe/modules/face_geometry/BUILD new file mode 100644 index 000000000..ce869b0f5 --- /dev/null +++ b/mediapipe/modules/face_geometry/BUILD @@ -0,0 +1,116 @@ +# Copyright 2020 The MediaPipe Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load("//mediapipe/framework/port:build_config.bzl", "mediapipe_proto_library") +load("//mediapipe/framework/tool:mediapipe_graph.bzl", "mediapipe_simple_subgraph") + +licenses(["notice"]) + +package(default_visibility = ["//visibility:public"]) + +mediapipe_simple_subgraph( + name = "face_geometry", + graph = "face_geometry.pbtxt", + register_as = "FaceGeometry", + deps = [ + ":geometry_pipeline_calculator", + ], +) + +mediapipe_proto_library( + name = "effect_renderer_calculator_proto", + srcs = ["effect_renderer_calculator.proto"], + deps = [ + "//mediapipe/framework:calculator_options_proto", + ], +) + +cc_library( + name = "effect_renderer_calculator", + srcs = ["effect_renderer_calculator.cc"], + deps = [ + ":effect_renderer_calculator_cc_proto", + "//mediapipe/framework:calculator_framework", + "//mediapipe/framework/formats:image_frame", + "//mediapipe/framework/formats:image_frame_opencv", + "//mediapipe/framework/port:opencv_core", + "//mediapipe/framework/port:opencv_imgcodecs", + "//mediapipe/framework/port:opencv_imgproc", + "//mediapipe/framework/port:ret_check", + "//mediapipe/framework/port:status", + "//mediapipe/framework/port:statusor", + "//mediapipe/gpu:gl_calculator_helper", + "//mediapipe/gpu:gpu_buffer", + "//mediapipe/modules/face_geometry/libs:effect_renderer", + "//mediapipe/modules/face_geometry/libs:validation_utils", + "//mediapipe/modules/face_geometry/protos:environment_cc_proto", + "//mediapipe/modules/face_geometry/protos:face_geometry_cc_proto", + "//mediapipe/modules/face_geometry/protos:mesh_3d_cc_proto", + "//mediapipe/util:resource_util", + "@com_google_absl//absl/types:optional", + ], + alwayslink = 1, +) + +mediapipe_proto_library( + name = "env_generator_calculator_proto", + srcs = ["env_generator_calculator.proto"], + deps = [ + "//mediapipe/framework:calculator_options_proto", + "//mediapipe/modules/face_geometry/protos:environment_proto", + ], +) + +cc_library( + name = "env_generator_calculator", + srcs = ["env_generator_calculator.cc"], + deps = [ + ":env_generator_calculator_cc_proto", + "//mediapipe/framework:calculator_framework", + "//mediapipe/framework/port:status", + "//mediapipe/modules/face_geometry/libs:validation_utils", + "//mediapipe/modules/face_geometry/protos:environment_cc_proto", + ], + alwayslink = 1, +) + +mediapipe_proto_library( + name = "geometry_pipeline_calculator_proto", + srcs = ["geometry_pipeline_calculator.proto"], + deps = [ + "//mediapipe/framework:calculator_options_proto", + ], +) + +cc_library( + name = "geometry_pipeline_calculator", + srcs = ["geometry_pipeline_calculator.cc"], + deps = [ + ":geometry_pipeline_calculator_cc_proto", + "//mediapipe/framework:calculator_framework", + "//mediapipe/framework/formats:landmark_cc_proto", + "//mediapipe/framework/port:logging", + "//mediapipe/framework/port:ret_check", + "//mediapipe/framework/port:status", + "//mediapipe/framework/port:statusor", + "//mediapipe/modules/face_geometry/libs:geometry_pipeline", + "//mediapipe/modules/face_geometry/libs:validation_utils", + "//mediapipe/modules/face_geometry/protos:environment_cc_proto", + "//mediapipe/modules/face_geometry/protos:face_geometry_cc_proto", + "//mediapipe/modules/face_geometry/protos:geometry_pipeline_metadata_cc_proto", + "//mediapipe/util:resource_util", + "@com_google_absl//absl/memory", + ], + alwayslink = 1, +) diff --git a/mediapipe/modules/face_geometry/README.md b/mediapipe/modules/face_geometry/README.md new file mode 100644 index 000000000..662cdd1cf --- /dev/null +++ b/mediapipe/modules/face_geometry/README.md @@ -0,0 +1,18 @@ +# face_geometry + +Protos|Details +:--- | :--- +[`face_geometry.Environment`](https://github.com/google/mediapipe/tree/master/mediapipe/modules/face_geometry/protos/environment.proto)| Describes an environment; includes the camera frame origin point location as well as virtual camera parameters. +[`face_geometry.GeometryPipelineMetadata`](https://github.com/google/mediapipe/tree/master/mediapipe/modules/face_geometry/protos/geometry_pipeline_metadata.proto)| Describes metadata needed to estimate face geometry based on the face landmark module result. +[`face_geometry.FaceGeometry`](https://github.com/google/mediapipe/tree/master/mediapipe/modules/face_geometry/protos/face_geometry.proto)| Describes geometry data for a single face; includes a face mesh surface and a face pose in a given environment. +[`face_geometry.Mesh3d`](https://github.com/google/mediapipe/tree/master/mediapipe/modules/face_geometry/protos/mesh_3d.proto)| Describes a 3D mesh surface. + +Calculators|Details +:--- | :--- +[`FaceGeometryEnvGeneratorCalculator`](https://github.com/google/mediapipe/tree/master/mediapipe/modules/face_geometry/env_generator_calculator.cc)| Generates an environment that describes a virtual scene. +[`FaceGeometryPipelineCalculator`](https://github.com/google/mediapipe/tree/master/mediapipe/modules/face_geometry/geometry_pipeline_calculator.cc)| Extracts face geometry for multiple faces from a vector of landmark lists. +[`FaceGeometryEffectRendererCalculator`](https://github.com/google/mediapipe/tree/master/mediapipe/modules/face_geometry/effect_renderer_calculator.cc)| Renders a face effect. + +Subgraphs|Details +:--- | :--- +[`FaceGeometry`](https://github.com/google/mediapipe/tree/master/mediapipe/modules/face_geometry/face_geometry.pbtxt)| Extracts face geometry from landmarks for multiple faces. diff --git a/mediapipe/modules/face_geometry/data/BUILD b/mediapipe/modules/face_geometry/data/BUILD new file mode 100644 index 000000000..5682e4e6f --- /dev/null +++ b/mediapipe/modules/face_geometry/data/BUILD @@ -0,0 +1,37 @@ +# Copyright 2020 The MediaPipe Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load("//mediapipe/framework:encode_binary_proto.bzl", "encode_binary_proto") + +licenses(["notice"]) + +package(default_visibility = ["//visibility:public"]) + +encode_binary_proto( + name = "geometry_pipeline_metadata", + input = "geometry_pipeline_metadata.pbtxt", + message_type = "mediapipe.face_geometry.GeometryPipelineMetadata", + output = "geometry_pipeline_metadata.binarypb", + deps = [ + "//mediapipe/modules/face_geometry/protos:geometry_pipeline_metadata_proto", + ], +) + +# These canonical face model files are not meant to be used in runtime, but rather for asset +# creation and/or reference. +exports_files([ + "canonical_face_model.fbx", + "canonical_face_model.obj", + "canonical_face_model_uv_visualization.png", +]) diff --git a/mediapipe/modules/face_geometry/data/canonical_face_model.fbx b/mediapipe/modules/face_geometry/data/canonical_face_model.fbx new file mode 100644 index 000000000..8e9d24ac9 Binary files /dev/null and b/mediapipe/modules/face_geometry/data/canonical_face_model.fbx differ diff --git a/mediapipe/modules/face_geometry/data/canonical_face_model.obj b/mediapipe/modules/face_geometry/data/canonical_face_model.obj new file mode 100644 index 000000000..0e666d1c4 --- /dev/null +++ b/mediapipe/modules/face_geometry/data/canonical_face_model.obj @@ -0,0 +1,1834 @@ +v 0.000000 -3.406404 5.979507 +v 0.000000 -1.126865 7.475604 +v 0.000000 -2.089024 6.058267 +v -0.463928 0.955357 6.633583 +v 0.000000 -0.463170 7.586580 +v 0.000000 0.365669 7.242870 +v 0.000000 2.473255 5.788627 +v -4.253081 2.577646 3.279702 +v 0.000000 4.019042 5.284764 +v 0.000000 4.885979 5.385258 +v 0.000000 8.261778 4.481535 +v 0.000000 -3.706811 5.864924 +v 0.000000 -3.918301 5.569430 +v 0.000000 -3.994436 5.219482 +v 0.000000 -4.542400 5.404754 +v 0.000000 -4.745577 5.529457 +v 0.000000 -5.019567 5.601448 +v 0.000000 -5.365123 5.535441 +v 0.000000 -6.149624 5.071372 +v 0.000000 -1.501095 7.112196 +v -0.416106 -1.466449 6.447657 +v -7.087960 5.434801 0.099620 +v -2.628639 2.035898 3.848121 +v -3.198363 1.985815 3.796952 +v -3.775151 2.039402 3.646194 +v -4.465819 2.422950 3.155168 +v -2.164289 2.189867 3.851822 +v -3.208229 3.223926 4.115822 +v -2.673803 3.205337 4.092203 +v -3.745193 3.165286 3.972409 +v -4.161018 3.059069 3.719554 +v -5.062006 1.934418 2.776093 +v -2.266659 -7.425768 4.389812 +v -4.445859 2.663991 3.173422 +v -7.214530 2.263009 0.073150 +v -5.799793 2.349546 2.204059 +v -2.844939 -0.720868 4.433130 +v -0.711452 -3.329355 5.877044 +v -0.606033 -3.924562 5.444923 +v -1.431615 -3.500953 5.496189 +v -1.914910 -3.803146 5.028930 +v -1.131043 -3.973937 5.189648 +v -1.563548 -4.082763 4.842263 +v -2.650112 -5.003649 4.188483 +v -0.427049 -1.094134 7.360529 +v -0.496396 -0.475659 7.440358 +v -5.253307 3.881582 3.363159 +v -1.718698 0.974609 4.558359 +v -1.608635 -0.942516 5.814193 +v -1.651267 -0.610868 5.581319 +v -4.765501 -0.701554 3.534632 +v -0.478306 0.295766 7.101013 +v -3.734964 4.508230 4.550454 +v -4.588603 4.302037 4.048484 +v -6.279331 6.615427 1.425850 +v -1.220941 4.142165 5.106035 +v -2.193489 3.100317 4.000575 +v -3.102642 -4.352984 4.095905 +v -6.719682 -4.788645 -1.745401 +v -1.193824 -1.306795 5.737747 +v -0.729766 -1.593712 5.833208 +v -2.456206 -4.342621 4.283884 +v -2.204823 -4.304508 4.162499 +v -4.985894 4.802461 3.751977 +v -1.592294 -1.257709 5.456949 +v -2.644548 4.524654 4.921559 +v -2.760292 5.100971 5.015990 +v -3.523964 8.005976 3.729163 +v -5.599763 5.715470 2.724259 +v -3.063932 6.566144 4.529981 +v -5.720968 4.254584 2.830852 +v -6.374393 4.785590 1.591691 +v -0.672728 -3.688016 5.737804 +v -1.262560 -3.787691 5.417779 +v -1.732553 -3.952767 5.000579 +v -1.043625 -1.464973 5.662455 +v -2.321234 -4.329069 4.258156 +v -2.056846 -4.477671 4.520883 +v -2.153084 -4.276322 4.038093 +v -0.946874 -1.035249 6.512274 +v -1.469132 -4.036351 4.604908 +v -1.024340 -3.989851 4.926693 +v -0.533422 -3.993222 5.138202 +v -0.769720 -6.095394 4.985883 +v -0.699606 -5.291850 5.448304 +v -0.669687 -4.949770 5.509612 +v -0.630947 -4.695101 5.449371 +v -0.583218 -4.517982 5.339869 +v -1.537170 -4.423206 4.745470 +v -1.615600 -4.475942 4.813632 +v -1.729053 -4.618680 4.854463 +v -1.838624 -4.828746 4.823737 +v -2.368250 -3.106237 4.868096 +v -7.542244 -1.049282 -2.431321 +v 0.000000 -1.724003 6.601390 +v -1.826614 -4.399531 4.399021 +v -1.929558 -4.411831 4.497052 +v -0.597442 -2.013686 5.866456 +v -1.405627 -1.714196 5.241087 +v -0.662449 -1.819321 5.863759 +v -2.342340 0.572222 4.294303 +v -3.327324 0.104863 4.113860 +v -1.726175 -0.919165 5.273355 +v -5.133204 7.485602 2.660442 +v -4.538641 6.319907 3.683424 +v -3.986562 5.109487 4.466315 +v -2.169681 -5.440433 4.455874 +v -1.395634 5.011963 5.316032 +v -1.619500 6.599217 4.921106 +v -1.891399 8.236377 4.274997 +v -4.195832 2.235205 3.375099 +v -5.733342 1.411738 2.431726 +v -1.859887 2.355757 3.843181 +v -4.988612 3.074654 3.083858 +v -1.303263 1.416453 4.831091 +v -1.305757 -0.672779 6.415959 +v -6.465170 0.937119 1.689873 +v -5.258659 0.945811 2.974312 +v -4.432338 0.722096 3.522615 +v -3.300681 0.861641 3.872784 +v -2.430178 1.131492 4.039035 +v -1.820731 1.467954 4.224124 +v -0.563221 2.307693 5.566789 +v -6.338145 -0.529279 1.881175 +v -5.587698 3.208071 2.687839 +v -0.242624 -1.462857 7.071491 +v -1.611251 0.339326 4.895421 +v -7.743095 2.364999 -2.005167 +v -1.391142 1.851048 4.448999 +v -1.785794 -0.978284 4.850470 +v -4.670959 2.664461 3.084075 +v -1.333970 -0.283761 6.097047 +v -7.270895 -2.890917 -2.252455 +v -1.856432 2.585245 3.757904 +v -0.923388 0.073076 6.671944 +v -5.000589 -6.135128 1.892523 +v -5.085276 -7.178590 0.714711 +v -7.159291 -0.811820 -0.072044 +v -5.843051 -5.248023 0.924091 +v -6.847258 3.662916 0.724695 +v -2.412942 -8.258853 4.119213 +v -0.179909 -1.689864 6.573301 +v -2.103655 -0.163946 4.566119 +v -6.407571 2.236021 1.560843 +v -3.670075 2.360153 3.635230 +v -3.177186 2.294265 3.775704 +v -2.196121 -4.598322 4.479786 +v -6.234883 -1.944430 1.663542 +v -1.292924 -9.295920 4.094063 +v -3.210651 -8.533278 2.802001 +v -4.068926 -7.993109 1.925119 +v 0.000000 6.545390 5.027311 +v 0.000000 -9.403378 4.264492 +v -2.724032 2.315802 3.777151 +v -2.288460 2.398891 3.697603 +v -1.998311 2.496547 3.689148 +v -6.130040 3.399261 2.038516 +v -2.288460 2.886504 3.775031 +v -2.724032 2.961810 3.871767 +v -3.177186 2.964136 3.876973 +v -3.670075 2.927714 3.724325 +v -4.018389 2.857357 3.482983 +v -7.555811 4.106811 -0.991917 +v -4.018389 2.483695 3.440898 +v 0.000000 -2.521945 5.932265 +v -1.776217 -2.683946 5.213116 +v -1.222237 -1.182444 5.952465 +v -0.731493 -2.536683 5.815343 +v 0.000000 3.271027 5.236015 +v -4.135272 -6.996638 2.671970 +v -3.311811 -7.660815 3.382963 +v -1.313701 -8.639995 4.702456 +v -5.940524 -6.223629 -0.631468 +v -1.998311 2.743838 3.744030 +v -0.901447 1.236992 5.754256 +v 0.000000 -8.765243 4.891441 +v -2.308977 -8.974196 3.609070 +v -6.954154 -2.439843 -0.131163 +v -1.098819 -4.458788 5.120727 +v -1.181124 -4.579996 5.189564 +v -1.255818 -4.787901 5.237051 +v -1.325085 -5.106507 5.205010 +v -1.546388 -5.819392 4.757893 +v -1.953754 -4.183892 4.431713 +v -2.117802 -4.137093 4.555096 +v -2.285339 -4.051196 4.582438 +v -2.850160 -3.665720 4.484994 +v -5.278538 -2.238942 2.861224 +v -0.946709 1.907628 5.196779 +v -1.314173 3.104912 4.231404 +v -1.780000 2.860000 3.881555 +v -1.845110 -4.098880 4.247264 +v -5.436187 -4.030482 2.109852 +v -0.766444 3.182131 4.861453 +v -1.938616 -6.614410 4.521085 +v 0.000000 1.059413 6.774605 +v -0.516573 1.583572 6.148363 +v 0.000000 1.728369 6.316750 +v -1.246815 0.230297 5.681036 +v 0.000000 -7.942194 5.181173 +v 0.000000 -6.991499 5.153478 +v -0.997827 -6.930921 4.979576 +v -3.288807 -5.382514 3.795752 +v -2.311631 -1.566237 4.590085 +v -2.680250 -6.111567 4.096152 +v -3.832928 -1.537326 4.137731 +v -2.961860 -2.274215 4.440943 +v -4.386901 -2.683286 3.643886 +v -1.217295 -7.834465 4.969286 +v -1.542374 -0.136843 5.201008 +v -3.878377 -6.041764 3.311079 +v -3.084037 -6.809842 3.814195 +v -3.747321 -4.503545 3.726453 +v -6.094129 -3.205991 1.473482 +v -4.588995 -4.728726 2.983221 +v -6.583231 -3.941269 0.070268 +v -3.492580 -3.195820 4.130198 +v -1.255543 0.802341 5.307551 +v -1.126122 -0.933602 6.538785 +v -1.443109 -1.142774 5.905127 +v -0.923043 -0.529042 7.003423 +v -1.755386 3.529117 4.327696 +v -2.632589 3.713828 4.364629 +v -3.388062 3.721976 4.309028 +v -4.075766 3.675413 4.076063 +v -4.622910 3.474691 3.646321 +v -5.171755 2.535753 2.670867 +v -7.297331 0.763172 -0.048769 +v -4.706828 1.651000 3.109532 +v -4.071712 1.476821 3.476944 +v -3.269817 1.470659 3.731945 +v -2.527572 1.617311 3.865444 +v -1.970894 1.858505 3.961782 +v -1.579543 2.097941 4.084996 +v -7.664182 0.673132 -2.435867 +v -1.397041 -1.340139 5.630378 +v -0.884838 0.658740 6.233232 +v -0.767097 -0.968035 7.077932 +v -0.460213 -1.334106 6.787447 +v -0.748618 -1.067994 6.798303 +v -1.236408 -1.585568 5.480490 +v -0.387306 -1.409990 6.957705 +v -0.319925 -1.607931 6.508676 +v -1.639633 2.556298 3.863736 +v -1.255645 2.467144 4.203800 +v -1.031362 2.382663 4.615849 +v -4.253081 2.772296 3.315305 +v -4.530000 2.910000 3.339685 +v 0.463928 0.955357 6.633583 +v 4.253081 2.577646 3.279702 +v 0.416106 -1.466449 6.447657 +v 7.087960 5.434801 0.099620 +v 2.628639 2.035898 3.848121 +v 3.198363 1.985815 3.796952 +v 3.775151 2.039402 3.646194 +v 4.465819 2.422950 3.155168 +v 2.164289 2.189867 3.851822 +v 3.208229 3.223926 4.115822 +v 2.673803 3.205337 4.092203 +v 3.745193 3.165286 3.972409 +v 4.161018 3.059069 3.719554 +v 5.062006 1.934418 2.776093 +v 2.266659 -7.425768 4.389812 +v 4.445859 2.663991 3.173422 +v 7.214530 2.263009 0.073150 +v 5.799793 2.349546 2.204059 +v 2.844939 -0.720868 4.433130 +v 0.711452 -3.329355 5.877044 +v 0.606033 -3.924562 5.444923 +v 1.431615 -3.500953 5.496189 +v 1.914910 -3.803146 5.028930 +v 1.131043 -3.973937 5.189648 +v 1.563548 -4.082763 4.842263 +v 2.650112 -5.003649 4.188483 +v 0.427049 -1.094134 7.360529 +v 0.496396 -0.475659 7.440358 +v 5.253307 3.881582 3.363159 +v 1.718698 0.974609 4.558359 +v 1.608635 -0.942516 5.814193 +v 1.651267 -0.610868 5.581319 +v 4.765501 -0.701554 3.534632 +v 0.478306 0.295766 7.101013 +v 3.734964 4.508230 4.550454 +v 4.588603 4.302037 4.048484 +v 6.279331 6.615427 1.425850 +v 1.220941 4.142165 5.106035 +v 2.193489 3.100317 4.000575 +v 3.102642 -4.352984 4.095905 +v 6.719682 -4.788645 -1.745401 +v 1.193824 -1.306795 5.737747 +v 0.729766 -1.593712 5.833208 +v 2.456206 -4.342621 4.283884 +v 2.204823 -4.304508 4.162499 +v 4.985894 4.802461 3.751977 +v 1.592294 -1.257709 5.456949 +v 2.644548 4.524654 4.921559 +v 2.760292 5.100971 5.015990 +v 3.523964 8.005976 3.729163 +v 5.599763 5.715470 2.724259 +v 3.063932 6.566144 4.529981 +v 5.720968 4.254584 2.830852 +v 6.374393 4.785590 1.591691 +v 0.672728 -3.688016 5.737804 +v 1.262560 -3.787691 5.417779 +v 1.732553 -3.952767 5.000579 +v 1.043625 -1.464973 5.662455 +v 2.321234 -4.329069 4.258156 +v 2.056846 -4.477671 4.520883 +v 2.153084 -4.276322 4.038093 +v 0.946874 -1.035249 6.512274 +v 1.469132 -4.036351 4.604908 +v 1.024340 -3.989851 4.926693 +v 0.533422 -3.993222 5.138202 +v 0.769720 -6.095394 4.985883 +v 0.699606 -5.291850 5.448304 +v 0.669687 -4.949770 5.509612 +v 0.630947 -4.695101 5.449371 +v 0.583218 -4.517982 5.339869 +v 1.537170 -4.423206 4.745470 +v 1.615600 -4.475942 4.813632 +v 1.729053 -4.618680 4.854463 +v 1.838624 -4.828746 4.823737 +v 2.368250 -3.106237 4.868096 +v 7.542244 -1.049282 -2.431321 +v 1.826614 -4.399531 4.399021 +v 1.929558 -4.411831 4.497052 +v 0.597442 -2.013686 5.866456 +v 1.405627 -1.714196 5.241087 +v 0.662449 -1.819321 5.863759 +v 2.342340 0.572222 4.294303 +v 3.327324 0.104863 4.113860 +v 1.726175 -0.919165 5.273355 +v 5.133204 7.485602 2.660442 +v 4.538641 6.319907 3.683424 +v 3.986562 5.109487 4.466315 +v 2.169681 -5.440433 4.455874 +v 1.395634 5.011963 5.316032 +v 1.619500 6.599217 4.921106 +v 1.891399 8.236377 4.274997 +v 4.195832 2.235205 3.375099 +v 5.733342 1.411738 2.431726 +v 1.859887 2.355757 3.843181 +v 4.988612 3.074654 3.083858 +v 1.303263 1.416453 4.831091 +v 1.305757 -0.672779 6.415959 +v 6.465170 0.937119 1.689873 +v 5.258659 0.945811 2.974312 +v 4.432338 0.722096 3.522615 +v 3.300681 0.861641 3.872784 +v 2.430178 1.131492 4.039035 +v 1.820731 1.467954 4.224124 +v 0.563221 2.307693 5.566789 +v 6.338145 -0.529279 1.881175 +v 5.587698 3.208071 2.687839 +v 0.242624 -1.462857 7.071491 +v 1.611251 0.339326 4.895421 +v 7.743095 2.364999 -2.005167 +v 1.391142 1.851048 4.448999 +v 1.785794 -0.978284 4.850470 +v 4.670959 2.664461 3.084075 +v 1.333970 -0.283761 6.097047 +v 7.270895 -2.890917 -2.252455 +v 1.856432 2.585245 3.757904 +v 0.923388 0.073076 6.671944 +v 5.000589 -6.135128 1.892523 +v 5.085276 -7.178590 0.714711 +v 7.159291 -0.811820 -0.072044 +v 5.843051 -5.248023 0.924091 +v 6.847258 3.662916 0.724695 +v 2.412942 -8.258853 4.119213 +v 0.179909 -1.689864 6.573301 +v 2.103655 -0.163946 4.566119 +v 6.407571 2.236021 1.560843 +v 3.670075 2.360153 3.635230 +v 3.177186 2.294265 3.775704 +v 2.196121 -4.598322 4.479786 +v 6.234883 -1.944430 1.663542 +v 1.292924 -9.295920 4.094063 +v 3.210651 -8.533278 2.802001 +v 4.068926 -7.993109 1.925119 +v 2.724032 2.315802 3.777151 +v 2.288460 2.398891 3.697603 +v 1.998311 2.496547 3.689148 +v 6.130040 3.399261 2.038516 +v 2.288460 2.886504 3.775031 +v 2.724032 2.961810 3.871767 +v 3.177186 2.964136 3.876973 +v 3.670075 2.927714 3.724325 +v 4.018389 2.857357 3.482983 +v 7.555811 4.106811 -0.991917 +v 4.018389 2.483695 3.440898 +v 1.776217 -2.683946 5.213116 +v 1.222237 -1.182444 5.952465 +v 0.731493 -2.536683 5.815343 +v 4.135272 -6.996638 2.671970 +v 3.311811 -7.660815 3.382963 +v 1.313701 -8.639995 4.702456 +v 5.940524 -6.223629 -0.631468 +v 1.998311 2.743838 3.744030 +v 0.901447 1.236992 5.754256 +v 2.308977 -8.974196 3.609070 +v 6.954154 -2.439843 -0.131163 +v 1.098819 -4.458788 5.120727 +v 1.181124 -4.579996 5.189564 +v 1.255818 -4.787901 5.237051 +v 1.325085 -5.106507 5.205010 +v 1.546388 -5.819392 4.757893 +v 1.953754 -4.183892 4.431713 +v 2.117802 -4.137093 4.555096 +v 2.285339 -4.051196 4.582438 +v 2.850160 -3.665720 4.484994 +v 5.278538 -2.238942 2.861224 +v 0.946709 1.907628 5.196779 +v 1.314173 3.104912 4.231404 +v 1.780000 2.860000 3.881555 +v 1.845110 -4.098880 4.247264 +v 5.436187 -4.030482 2.109852 +v 0.766444 3.182131 4.861453 +v 1.938616 -6.614410 4.521085 +v 0.516573 1.583572 6.148363 +v 1.246815 0.230297 5.681036 +v 0.997827 -6.930921 4.979576 +v 3.288807 -5.382514 3.795752 +v 2.311631 -1.566237 4.590085 +v 2.680250 -6.111567 4.096152 +v 3.832928 -1.537326 4.137731 +v 2.961860 -2.274215 4.440943 +v 4.386901 -2.683286 3.643886 +v 1.217295 -7.834465 4.969286 +v 1.542374 -0.136843 5.201008 +v 3.878377 -6.041764 3.311079 +v 3.084037 -6.809842 3.814195 +v 3.747321 -4.503545 3.726453 +v 6.094129 -3.205991 1.473482 +v 4.588995 -4.728726 2.983221 +v 6.583231 -3.941269 0.070268 +v 3.492580 -3.195820 4.130198 +v 1.255543 0.802341 5.307551 +v 1.126122 -0.933602 6.538785 +v 1.443109 -1.142774 5.905127 +v 0.923043 -0.529042 7.003423 +v 1.755386 3.529117 4.327696 +v 2.632589 3.713828 4.364629 +v 3.388062 3.721976 4.309028 +v 4.075766 3.675413 4.076063 +v 4.622910 3.474691 3.646321 +v 5.171755 2.535753 2.670867 +v 7.297331 0.763172 -0.048769 +v 4.706828 1.651000 3.109532 +v 4.071712 1.476821 3.476944 +v 3.269817 1.470659 3.731945 +v 2.527572 1.617311 3.865444 +v 1.970894 1.858505 3.961782 +v 1.579543 2.097941 4.084996 +v 7.664182 0.673132 -2.435867 +v 1.397041 -1.340139 5.630378 +v 0.884838 0.658740 6.233232 +v 0.767097 -0.968035 7.077932 +v 0.460213 -1.334106 6.787447 +v 0.748618 -1.067994 6.798303 +v 1.236408 -1.585568 5.480490 +v 0.387306 -1.409990 6.957705 +v 0.319925 -1.607931 6.508676 +v 1.639633 2.556298 3.863736 +v 1.255645 2.467144 4.203800 +v 1.031362 2.382663 4.615849 +v 4.253081 2.772296 3.315305 +v 4.530000 2.910000 3.339685 +vt 0.427942 0.304722 +vt 0.526878 0.295374 +vt 0.444832 0.269206 +vt 0.607600 0.322297 +vt 0.377046 0.677222 +vt 0.473033 0.304722 +vt 0.526913 0.282143 +vt 0.447112 0.284192 +vt 0.599262 0.318931 +vt 0.414712 0.664780 +vt 0.473122 0.295374 +vt 0.527671 0.263774 +vt 0.448020 0.295368 +vt 0.593203 0.314324 +vt 0.467288 0.470075 +vt 0.473087 0.282143 +vt 0.534090 0.220859 +vt 0.448662 0.304722 +vt 0.569944 0.232965 +vt 0.437114 0.441104 +vt 0.472329 0.263774 +vt 0.524613 0.307634 +vt 0.114210 0.384978 +vt 0.555168 0.269206 +vt 0.455528 0.451377 +vt 0.465828 0.220810 +vt 0.547818 0.307634 +vt 0.375437 0.075808 +vt 0.552888 0.284192 +vt 0.429884 0.533478 +vt 0.475387 0.307634 +vt 0.568842 0.307634 +vt 0.499877 0.091010 +vt 0.551980 0.295368 +vt 0.336768 0.355267 +vt 0.452182 0.307634 +vt 0.539958 0.442861 +vt 0.455607 0.548199 +vt 0.551338 0.304722 +vt 0.133823 0.317299 +vt 0.431158 0.307634 +vt 0.596371 0.306047 +vt 0.408772 0.626106 +vt 0.885770 0.384971 +vt 0.279777 0.285342 +vt 0.460042 0.442861 +vt 0.596961 0.293460 +vt 0.128294 0.208059 +vt 0.624563 0.075808 +vt 0.189096 0.353700 +vt 0.403629 0.306047 +vt 0.611897 0.306039 +vt 0.440512 0.097581 +vt 0.544341 0.548416 +vt 0.324548 0.296007 +vt 0.403039 0.293460 +vt 0.554692 0.419934 +vt 0.335279 0.147180 +vt 0.591234 0.626106 +vt 0.354128 0.187447 +vt 0.388103 0.306039 +vt 0.577238 0.326110 +vt 0.288719 0.180054 +vt 0.871706 0.208059 +vt 0.445308 0.419934 +vt 0.553172 0.331473 +vt 0.499923 0.648476 +vt 0.559100 0.097368 +vt 0.422762 0.326110 +vt 0.527121 0.333802 +vt 0.465844 0.379359 +vt 0.664630 0.147129 +vt 0.446828 0.331473 +vt 0.826722 0.721245 +vt 0.445682 0.433923 +vt 0.711218 0.180025 +vt 0.472879 0.333802 +vt 0.770391 0.700444 +vt 0.415838 0.375804 +vt 0.534154 0.379360 +vt 0.173287 0.721252 +vt 0.635536 0.810751 +vt 0.499988 0.381566 +vt 0.554318 0.433923 +vt 0.229622 0.700459 +vt 0.770092 0.767979 +vt 0.301415 0.612551 +vt 0.584177 0.375893 +vt 0.364501 0.810886 +vt 0.668509 0.880086 +vt 0.058133 0.680924 +vt 0.698585 0.612551 +vt 0.229924 0.767997 +vt 0.616907 0.744114 +vt 0.301415 0.636844 +vt 0.941867 0.680924 +vt 0.331431 0.880286 +vt 0.614083 0.718613 +vt 0.318785 0.641660 +vt 0.698585 0.636844 +vt 0.383103 0.744160 +vt 0.577414 0.436833 +vt 0.343364 0.644643 +vt 0.681215 0.641660 +vt 0.385919 0.718636 +vt 0.722943 0.728037 +vt 0.365962 0.644029 +vt 0.656636 0.644643 +vt 0.422552 0.436767 +vt 0.607591 0.305797 +vt 0.388665 0.637716 +vt 0.634038 0.644029 +vt 0.277076 0.728068 +vt 0.618026 0.305289 +vt 0.194993 0.657898 +vt 0.611335 0.637716 +vt 0.392389 0.305797 +vt 0.542902 0.415208 +vt 0.410373 0.608920 +vt 0.805016 0.657892 +vt 0.381974 0.305289 +vt 0.557261 0.427174 +vt 0.393207 0.604463 +vt 0.589660 0.608938 +vt 0.457098 0.415208 +vt 0.932695 0.269895 +vt 0.366170 0.601178 +vt 0.606793 0.604463 +vt 0.442739 0.427174 +vt 0.645429 0.303293 +vt 0.499977 0.045547 +vt 0.633830 0.601178 +vt 0.067305 0.269895 +vt 0.607610 0.646112 +vt 0.500023 0.809424 +vt 0.733752 0.130299 +vt 0.354490 0.303216 +vt 0.552386 0.697432 +vt 0.266248 0.130299 +vt 0.681008 0.101715 +vt 0.392390 0.646112 +vt 0.830705 0.806186 +vt 0.318993 0.101715 +vt 0.568013 0.055435 +vt 0.447580 0.697390 +vt 0.703624 0.706729 +vt 0.430987 0.055935 +vt 0.812086 0.411461 +vt 0.169295 0.806186 +vt 0.662801 0.717082 +vt 0.187885 0.411462 +vt 0.603900 0.289783 +vt 0.296392 0.706757 +vt 0.516446 0.500361 +vt 0.396100 0.289783 +vt 0.656636 0.599403 +vt 0.337212 0.717117 +vt 0.723330 0.636627 +vt 0.723087 0.467946 +vt 0.343364 0.599403 +vt 0.681215 0.603765 +vt 0.483370 0.500413 +vt 0.710288 0.631747 +vt 0.578632 0.466377 +vt 0.318785 0.603765 +vt 0.825608 0.602325 +vt 0.276896 0.467943 +vt 0.549756 0.600249 +vt 0.570338 0.451425 +vt 0.174399 0.602329 +vt 0.617942 0.491684 +vt 0.421352 0.466259 +vt 0.560698 0.604668 +vt 0.598631 0.545021 +vt 0.382385 0.491427 +vt 0.508953 0.420562 +vt 0.429819 0.451385 +vt 0.573595 0.610193 +vt 0.742247 0.685493 +vt 0.490967 0.420622 +vt 0.614074 0.116754 +vt 0.401223 0.544828 +vt 0.517472 0.422123 +vt 0.515097 0.472748 +vt 0.385764 0.116846 +vt 0.865595 0.666313 +vt 0.257765 0.685510 +vt 0.516311 0.436946 +vt 0.513050 0.452718 +vt 0.134410 0.666317 +vt 0.816351 0.259740 +vt 0.485301 0.472605 +vt 0.566036 0.417671 +vt 0.624852 0.271901 +vt 0.183610 0.259743 +vt 0.892441 0.459239 +vt 0.486717 0.452371 +vt 0.531529 0.444943 +vt 0.571228 0.317308 +vt 0.107550 0.459245 +vt 0.801779 0.168062 +vt 0.374971 0.272195 +vt 0.523913 0.436170 +vt 0.549626 0.319139 +vt 0.198221 0.168062 +vt 0.760966 0.220247 +vt 0.428771 0.317309 +vt 0.526564 0.453882 +vt 0.585384 0.333459 +vt 0.238979 0.220255 +vt 0.537728 0.494615 +vt 0.450374 0.319139 +vt 0.541366 0.521101 +vt 0.560215 0.342771 +vt 0.462783 0.494253 +vt 0.580985 0.612840 +vt 0.414617 0.333459 +vt 0.567192 0.430580 +vt 0.525850 0.319809 +vt 0.419054 0.612845 +vt 0.967686 0.355643 +vt 0.439785 0.342771 +vt 0.992440 0.519223 +vt 0.528249 0.349596 +vt 0.032314 0.355643 +vt 0.560611 0.480983 +vt 0.474155 0.319808 +vt 0.579658 0.590055 +vt 0.643998 0.465512 +vt 0.439121 0.481042 +vt 0.733530 0.623023 +vt 0.471751 0.349596 +vt 0.603876 0.583413 +vt 0.790082 0.608646 +vt 0.266470 0.623023 +vt 0.602995 0.451312 +vt 0.355808 0.465594 +vt 0.633505 0.573912 +vt 0.893693 0.600040 +vt 0.396993 0.451203 +vt 0.573500 0.580000 +vt 0.209925 0.608647 +vt 0.666525 0.566134 +vt 0.719902 0.624400 +vt 0.426243 0.579569 +vt 0.980531 0.598436 +vt 0.106310 0.600044 +vt 0.702114 0.566837 +vt 0.602918 0.157137 +vt 0.019469 0.598436 +vt 0.595293 0.514976 +vt 0.280098 0.624400 +vt 0.732392 0.575453 +vt 0.752212 0.589195 +vt 0.404670 0.514867 +vt 0.509127 0.437282 +vt 0.396889 0.157245 +vt 0.897013 0.531231 +vt 0.702097 0.646409 +vt 0.490726 0.437599 +vt 0.771046 0.651041 +vt 0.247792 0.589190 +vt 0.758757 0.617213 +vt 0.680678 0.652735 +vt 0.228962 0.651049 +vt 0.810748 0.476074 +vt 0.297903 0.646409 +vt 0.716482 0.666799 +vt 0.629906 0.653924 +vt 0.189241 0.476076 +vt 0.523481 0.594373 +vt 0.319322 0.652735 +vt 0.687132 0.677654 +vt 0.654766 0.655989 +vt 0.476410 0.594194 +vt 0.600862 0.567527 +vt 0.370094 0.653924 +vt 0.655896 0.679837 +vt 0.606630 0.596295 +vt 0.398964 0.567345 +vt 0.631101 0.552846 +vt 0.345234 0.655989 +vt 0.622953 0.677221 +vt 0.725342 0.610869 +vt 0.368756 0.552793 +vt 0.667113 0.539327 +vt 0.393362 0.596294 +vt 0.585271 0.664823 +vt 0.688880 0.590540 +vt 0.332828 0.539288 +vt 0.713757 0.532373 +vt 0.274658 0.610869 +vt 0.531987 0.469860 +vt 0.661242 0.586975 +vt 0.286267 0.532325 +vt 0.752702 0.542818 +vt 0.311120 0.590540 +vt 0.562759 0.441215 +vt 0.634070 0.590424 +vt 0.247308 0.542806 +vt 0.821442 0.542444 +vt 0.313951 0.224692 +vt 0.338758 0.586975 +vt 0.544562 0.451624 +vt 0.895093 0.745859 +vt 0.178560 0.542446 +vt 0.551868 0.463430 +vt 0.410986 0.491277 +vt 0.365930 0.590424 +vt 0.570082 0.533674 +vt 0.526227 0.426090 +vt 0.448340 0.463064 +vt 0.572156 0.562348 +vt 0.447750 0.137523 +vt 0.104907 0.745859 +vt 0.663187 0.355403 +vt 0.710288 0.619236 +vt 0.427685 0.562039 +vt 0.742870 0.644554 +vt 0.295284 0.378419 +vt 0.473773 0.426090 +vt 0.866152 0.317295 +vt 0.517862 0.528052 +vt 0.257135 0.644560 +vt 0.587247 0.601068 +vt 0.357155 0.395730 +vt 0.499816 0.437019 +vt 0.720122 0.285333 +vt 0.276670 0.636627 +vt 0.412782 0.601030 +vt 0.781070 0.564595 +vt 0.319688 0.429262 +vt 0.499968 0.218629 +vt 0.810858 0.353695 +vt 0.289712 0.631747 +vt 0.218937 0.564589 +vt 0.711045 0.601048 +vt 0.374293 0.219815 +vt 0.499977 0.262981 +vt 0.675343 0.296022 +vt 0.450067 0.599566 +vt 0.288955 0.601048 +vt 0.588166 0.890956 +vt 0.378909 0.425990 +vt 0.499977 0.280615 +vt 0.645735 0.187360 +vt 0.438999 0.603505 +vt 0.412198 0.891099 +vt 0.570304 0.812129 +vt 0.344549 0.254561 +vt 0.499977 0.294066 +vt 0.685945 0.224643 +vt 0.426450 0.610201 +vt 0.429765 0.812166 +vt 0.558266 0.738328 +vt 0.456549 0.180799 +vt 0.499977 0.304722 +vt 0.589072 0.491363 +vt 0.482483 0.422151 +vt 0.441728 0.738324 +vt 0.600409 0.250995 +vt 0.499913 0.178271 +vt 0.500023 0.307652 +vt 0.552012 0.137408 +vt 0.483518 0.437016 +vt 0.399510 0.251079 +vt 0.672684 0.743419 +vt 0.499886 0.133083 +vt 0.500016 0.320776 +vt 0.704663 0.378470 +vt 0.433991 0.417638 +vt 0.327338 0.743473 +vt 0.709250 0.798492 +vt 0.432112 0.506411 +vt 0.500023 0.333766 +vt 0.642764 0.395662 +vt 0.468472 0.444943 +vt 0.290777 0.798554 +vt 0.757824 0.852324 +vt 0.499974 0.560363 +vt 0.500023 0.892950 +vt 0.680198 0.429281 +vt 0.476088 0.436170 +vt 0.242176 0.852324 +vt 0.588354 0.453138 +vt 0.479154 0.557346 +vt 0.499987 0.730081 +vt 0.625560 0.219688 +vt 0.473466 0.454256 +vt 0.411671 0.453035 +vt 0.665586 0.504049 +vt 0.499989 0.530175 +vt 0.499955 0.687602 +vt 0.621009 0.425982 +vt 0.458639 0.520911 +vt 0.334562 0.503927 +vt 0.627543 0.526648 +vt 0.411362 0.195673 +vt 0.289712 0.619236 +vt 0.655317 0.254485 +vt 0.432949 0.430482 +vt 0.372120 0.526586 +vt 0.536915 0.406214 +vt 0.468268 0.647329 +vt 0.499523 0.598938 +vt 0.543283 0.180745 +vt 0.007561 0.519223 +vt 0.463080 0.406216 +vt 0.577268 0.414065 +vt 0.228018 0.316428 +vt 0.499910 0.501747 +vt 0.567985 0.506521 +vt 0.420121 0.589772 +vt 0.422729 0.414015 +vt 0.531915 0.398463 +vt 0.413386 0.307634 +vt 0.500151 0.472844 +vt 0.520797 0.557435 +vt 0.396012 0.583304 +vt 0.468080 0.398465 +vt 0.590372 0.298177 +vt 0.416164 0.631286 +vt 0.482113 0.528021 +vt 0.588371 0.195559 +vt 0.366427 0.573884 +vt 0.409626 0.298177 +vt 0.586800 0.304600 +vt 0.436392 0.640113 +vt 0.499974 0.397628 +vt 0.531597 0.647517 +vt 0.333434 0.566122 +vt 0.413200 0.304600 +vt 0.986046 0.439966 +vt 0.452770 0.579150 +vt 0.500026 0.452513 +vt 0.771915 0.316422 +vt 0.297879 0.566824 +vt 0.499914 0.419853 +vt 0.609945 0.360090 +vt 0.247923 0.398667 +vt 0.499977 0.347466 +vt 0.586614 0.307634 +vt 0.267612 0.575440 +vt 0.013954 0.439966 +vt 0.581691 0.279937 +vt 0.367856 0.336081 +vt 0.583841 0.631286 +vt 0.102986 0.531237 +vt 0.390095 0.360427 +vt 0.576838 0.288154 +vt 0.392400 0.322297 +vt 0.563544 0.640172 +vt 0.241246 0.617214 +vt 0.418309 0.279937 +vt 0.573521 0.296460 +vt 0.400738 0.318931 +vt 0.547226 0.579605 +vt 0.283526 0.666810 +vt 0.423162 0.288154 +vt 0.572058 0.304722 +vt 0.406787 0.314327 +vt 0.752033 0.398685 +vt 0.312876 0.677668 +vt 0.426479 0.296460 +vt 0.526967 0.304722 +vt 0.430012 0.233191 +vt 0.631938 0.336500 +vt 0.344108 0.679849 +f 174/43 156/119 134/220 +f 247/335 34/252 8/399 +f 383/124 399/59 363/216 +f 264/244 467/163 250/317 +f 309/42 416/442 325/427 +f 79/51 96/432 192/416 +f 357/246 390/96 265/239 +f 128/250 35/247 163/91 +f 369/186 265/239 390/96 +f 140/190 163/91 35/247 +f 268/224 1/441 303/70 +f 38/232 73/77 1/441 +f 12/375 303/70 1/441 +f 12/375 1/441 73/77 +f 350/281 452/238 351/276 +f 121/285 122/280 232/425 +f 453/233 351/276 452/238 +f 233/419 232/425 122/280 +f 268/224 303/70 270/214 +f 38/232 40/222 73/77 +f 304/66 270/214 303/70 +f 74/73 73/77 40/222 +f 358/241 344/313 351/276 +f 129/245 122/280 115/318 +f 278/174 351/276 344/313 +f 48/182 115/318 122/280 +f 351/276 453/233 358/241 +f 122/280 129/245 233/419 +f 454/228 358/241 453/233 +f 234/413 233/419 129/245 +f 300/82 334/373 298/90 +f 70/89 68/97 105/378 +f 333/379 298/90 334/373 +f 104/384 105/378 68/97 +f 176/33 153/131 397/68 +f 176/33 172/53 153/131 +f 378/144 397/68 153/131 +f 149/147 153/131 172/53 +f 382/128 385/116 383/124 +f 155/123 156/119 158/111 +f 399/59 383/124 385/116 +f 174/43 158/111 156/119 +f 281/159 348/291 331/391 +f 51/167 102/396 119/295 +f 349/286 331/391 348/291 +f 120/290 119/295 102/396 +f 270/214 304/66 271/209 +f 40/222 41/217 74/73 +f 305/62 271/209 304/66 +f 75/69 74/73 41/217 +f 10/387 337/355 152/135 +f 10/387 152/135 108/360 +f 338/349 152/135 337/355 +f 109/354 108/360 152/135 +f 345/307 279/169 361/226 +f 116/312 132/230 49/177 +f 280/164 361/226 279/169 +f 50/172 49/177 132/230 +f 263/249 432/346 419/424 +f 33/257 195/398 212/60 +f 425/388 419/424 432/346 +f 205/338 212/60 195/398 +f 305/62 409/9 271/209 +f 75/69 41/217 185/456 +f 410/4 271/209 409/9 +f 186/451 185/456 41/217 +f 273/199 311/32 408/14 +f 43/207 184/461 81/41 +f 416/442 408/14 311/32 +f 192/416 81/41 184/461 +f 323/439 271/209 411/467 +f 93/449 187/446 41/217 +f 410/4 411/467 271/209 +f 186/451 41/217 187/446 +f 348/291 450/248 349/286 +f 119/295 120/290 230/437 +f 451/243 349/286 450/248 +f 231/431 230/437 120/290 +f 435/328 433/340 431/352 +f 215/45 211/302 213/55 +f 423/400 431/352 433/340 +f 203/350 213/55 211/302 +f 314/17 315/12 19/333 +f 84/26 19/333 85/21 +f 18/339 19/333 315/12 +f 18/339 85/21 19/333 +f 308/47 376/152 307/52 +f 78/56 77/61 147/155 +f 292/114 307/52 376/152 +f 62/121 147/155 77/61 +f 260/264 388/104 261/259 +f 30/272 31/267 161/99 +f 389/100 261/259 388/104 +f 162/95 161/99 31/267 +f 287/134 415/447 385/116 +f 57/141 158/111 191/422 +f 399/59 385/116 415/447 +f 174/43 191/422 158/111 +f 419/424 425/388 407/19 +f 195/398 183/466 205/338 +f 336/361 407/19 425/388 +f 107/366 205/338 183/466 +f 368/191 417/436 365/206 +f 139/195 136/210 193/410 +f 435/328 365/206 417/436 +f 215/45 193/410 136/210 +f 392/88 424/394 328/409 +f 166/79 99/414 204/344 +f 359/236 328/409 424/394 +f 130/240 204/344 99/414 +f 299/86 302/74 285/142 +f 69/93 55/149 72/81 +f 252/305 285/142 302/74 +f 22/315 72/81 55/149 +f 5/417 276/184 6/411 +f 5/417 6/411 46/192 +f 282/154 6/411 276/184 +f 52/162 46/192 6/411 +f 255/289 374/161 254/294 +f 25/297 24/303 145/165 +f 375/156 254/294 374/161 +f 146/160 145/165 24/303 +f 321/450 322/445 308/47 +f 91/459 78/56 92/454 +f 376/152 308/47 322/445 +f 147/155 92/454 78/56 +f 281/159 426/382 412/462 +f 51/167 188/440 206/332 +f 428/370 412/462 426/382 +f 208/320 206/332 188/440 +f 422/406 314/17 201/362 +f 202/356 201/362 84/26 +f 19/333 201/362 314/17 +f 19/333 84/26 201/362 +f 336/361 322/445 407/19 +f 107/366 183/466 92/454 +f 406/24 407/19 322/445 +f 182/3 92/454 183/466 +f 406/24 322/445 405/29 +f 182/3 181/8 92/454 +f 321/450 405/29 322/445 +f 91/459 92/454 181/8 +f 18/339 315/12 17/345 +f 18/339 17/345 85/21 +f 316/7 17/345 315/12 +f 86/16 85/21 17/345 +f 426/382 267/229 427/376 +f 206/332 207/326 37/237 +f 424/394 427/376 267/229 +f 204/344 37/237 207/326 +f 370/181 397/68 401/49 +f 141/185 177/28 172/53 +f 378/144 401/49 397/68 +f 149/147 172/53 177/28 +f 392/88 270/214 323/439 +f 166/79 93/449 40/222 +f 271/209 323/439 270/214 +f 41/217 40/222 93/449 +f 418/430 466/168 414/452 +f 194/404 190/428 246/341 +f 465/173 414/452 466/168 +f 245/347 246/341 190/428 +f 258/274 259/269 387/108 +f 28/282 160/103 29/277 +f 386/112 387/108 259/269 +f 159/107 29/277 160/103 +f 261/259 389/100 468/158 +f 31/267 248/329 162/95 +f 467/163 468/158 389/100 +f 247/335 162/95 248/329 +f 249/323 457/213 420/418 +f 4/423 197/386 237/395 +f 400/54 420/418 457/213 +f 175/38 237/395 197/386 +f 334/373 299/86 333/379 +f 105/378 104/384 69/93 +f 285/142 333/379 299/86 +f 55/149 69/93 104/384 +f 286/138 9/393 418/430 +f 56/145 194/404 9/393 +f 169/67 418/430 9/393 +f 169/67 9/393 194/404 +f 341/331 262/254 347/296 +f 112/336 118/300 32/262 +f 449/253 347/296 262/254 +f 229/443 32/262 118/300 +f 286/138 418/430 442/288 +f 56/145 222/10 194/404 +f 414/452 442/288 418/430 +f 190/428 194/404 222/10 +f 328/409 461/193 327/415 +f 99/414 98/420 241/371 +f 329/403 327/415 461/193 +f 100/408 241/371 98/420 +f 278/174 356/251 330/397 +f 48/182 101/402 127/255 +f 372/171 330/397 356/251 +f 143/175 127/255 101/402 +f 310/37 393/84 439/304 +f 80/46 219/25 167/75 +f 440/298 439/304 393/84 +f 220/20 167/75 219/25 +f 382/128 383/124 257/279 +f 155/123 27/287 156/119 +f 342/325 257/279 383/124 +f 113/330 156/119 27/287 +f 361/226 280/164 421/412 +f 132/230 199/374 50/172 +f 430/358 421/412 280/164 +f 210/308 50/172 199/374 +f 366/201 365/206 380/136 +f 137/205 151/139 136/210 +f 395/76 380/136 365/206 +f 170/63 136/210 151/139 +f 356/251 278/174 438/310 +f 127/255 218/30 48/182 +f 344/313 438/310 278/174 +f 115/318 48/182 218/30 +f 444/278 445/273 283/150 +f 224/468 53/157 225/463 +f 284/146 283/150 445/273 +f 54/153 225/463 53/157 +f 282/154 276/184 364/211 +f 52/162 135/215 46/192 +f 441/293 364/211 276/184 +f 221/15 46/192 135/215 +f 432/346 263/249 396/72 +f 212/60 171/58 33/257 +f 370/181 396/72 263/249 +f 141/185 33/257 171/58 +f 338/349 300/82 339/343 +f 109/354 110/348 70/89 +f 298/90 339/343 300/82 +f 68/97 70/89 110/348 +f 336/361 274/194 322/445 +f 107/366 92/454 44/202 +f 376/152 322/445 274/194 +f 147/155 44/202 92/454 +f 349/286 451/243 350/281 +f 120/290 121/285 231/431 +f 452/238 350/281 451/243 +f 232/425 231/431 121/285 +f 468/158 360/231 343/319 +f 248/329 114/324 131/235 +f 447/263 343/319 360/231 +f 227/453 131/235 114/324 +f 283/150 284/146 335/367 +f 53/157 106/372 54/153 +f 294/106 335/367 284/146 +f 64/113 54/153 106/372 +f 251/311 459/203 463/183 +f 21/321 243/359 239/383 +f 462/188 463/183 459/203 +f 242/365 239/383 243/359 +f 277/179 354/261 301/78 +f 47/187 71/85 125/265 +f 384/120 301/78 354/261 +f 157/115 125/265 71/85 +f 326/421 293/110 325/427 +f 97/426 96/432 63/117 +f 309/42 325/427 293/110 +f 79/51 63/117 96/432 +f 284/146 277/179 294/106 +f 54/153 64/113 47/187 +f 301/78 294/106 277/179 +f 71/85 47/187 64/113 +f 448/258 265/239 346/301 +f 228/448 117/306 35/247 +f 373/166 346/301 265/239 +f 144/170 35/247 117/306 +f 353/266 346/301 347/296 +f 124/270 118/300 117/306 +f 341/331 347/296 346/301 +f 112/336 117/306 118/300 +f 2/435 20/327 275/189 +f 2/435 45/197 20/327 +f 355/256 275/189 20/327 +f 126/260 20/327 45/197 +f 249/323 282/154 457/213 +f 4/423 237/395 52/162 +f 364/211 457/213 282/154 +f 135/215 52/162 237/395 +f 426/382 427/376 428/370 +f 206/332 208/320 207/326 +f 437/316 428/370 427/376 +f 217/35 207/326 208/320 +f 381/132 382/128 253/299 +f 154/127 23/309 155/123 +f 257/279 253/299 382/128 +f 27/287 155/123 23/309 +f 392/88 394/80 270/214 +f 166/79 40/222 168/71 +f 268/224 270/214 394/80 +f 38/232 168/71 40/222 +f 200/368 429/364 201/362 +f 200/368 201/362 209/314 +f 422/406 201/362 429/364 +f 202/356 209/314 201/362 +f 331/391 330/397 267/229 +f 102/396 37/237 101/402 +f 372/171 267/229 330/397 +f 143/175 101/402 37/237 +f 423/400 433/340 274/194 +f 203/350 44/202 213/55 +f 288/130 274/194 433/340 +f 58/137 213/55 44/202 +f 291/118 251/311 329/403 +f 61/125 100/408 21/321 +f 463/183 329/403 251/311 +f 243/359 21/321 100/408 +f 259/269 287/134 386/112 +f 29/277 159/107 57/141 +f 385/116 386/112 287/134 +f 158/111 57/141 159/107 +f 343/319 447/263 354/261 +f 114/324 125/265 227/453 +f 266/234 354/261 447/263 +f 36/242 227/453 125/265 +f 258/274 387/108 260/264 +f 28/282 30/272 160/103 +f 388/104 260/264 387/108 +f 161/99 160/103 30/272 +f 431/352 423/400 432/346 +f 211/302 212/60 203/350 +f 425/388 432/346 423/400 +f 205/338 203/350 212/60 +f 446/268 343/319 277/179 +f 226/458 47/187 114/324 +f 354/261 277/179 343/319 +f 125/265 114/324 47/187 +f 425/388 423/400 336/361 +f 205/338 107/366 203/350 +f 274/194 336/361 423/400 +f 44/202 203/350 107/366 +f 307/52 293/110 308/47 +f 77/61 78/56 63/117 +f 326/421 308/47 293/110 +f 97/426 63/117 78/56 +f 367/196 448/258 353/266 +f 138/200 124/270 228/448 +f 346/301 353/266 448/258 +f 117/306 228/448 124/270 +f 303/70 269/219 304/66 +f 73/77 74/73 39/227 +f 272/204 304/66 269/219 +f 42/212 39/227 74/73 +f 372/171 359/236 267/229 +f 143/175 37/237 130/240 +f 424/394 267/229 359/236 +f 204/344 130/240 37/237 +f 328/409 295/102 461/193 +f 99/414 241/371 65/109 +f 456/218 461/193 295/102 +f 236/401 65/109 241/371 +f 295/102 332/385 279/169 +f 65/109 49/177 103/390 +f 280/164 279/169 332/385 +f 50/172 103/390 49/177 +f 304/66 272/204 305/62 +f 74/73 75/69 42/212 +f 273/199 305/62 272/204 +f 43/207 42/212 75/69 +f 428/370 437/316 435/328 +f 208/320 215/45 217/35 +f 433/340 435/328 437/316 +f 213/55 217/35 215/45 +f 305/62 273/199 409/9 +f 75/69 185/456 43/207 +f 408/14 409/9 273/199 +f 184/461 43/207 185/456 +f 395/76 431/352 396/72 +f 170/63 171/58 211/302 +f 432/346 396/72 431/352 +f 212/60 211/302 171/58 +f 396/72 370/181 379/140 +f 171/58 150/143 141/185 +f 401/49 379/140 370/181 +f 177/28 141/185 150/143 +f 297/94 335/367 300/82 +f 67/101 70/89 106/372 +f 334/373 300/82 335/367 +f 105/378 106/372 70/89 +f 418/430 169/67 352/271 +f 194/404 123/275 169/67 +f 7/405 352/271 169/67 +f 7/405 169/67 123/275 +f 281/159 412/462 353/266 +f 51/167 124/270 188/440 +f 377/148 353/266 412/462 +f 148/151 188/440 124/270 +f 320/455 321/450 326/421 +f 90/464 97/426 91/459 +f 308/47 326/421 321/450 +f 78/56 91/459 97/426 +f 286/138 296/98 337/355 +f 56/145 108/360 66/105 +f 297/94 337/355 296/98 +f 67/101 66/105 108/360 +f 405/29 321/450 404/34 +f 181/8 180/13 91/459 +f 320/455 404/34 321/450 +f 90/464 91/459 180/13 +f 331/391 349/286 330/397 +f 102/396 101/402 120/290 +f 350/281 330/397 349/286 +f 121/285 120/290 101/402 +f 335/367 294/106 334/373 +f 106/372 105/378 64/113 +f 299/86 334/373 294/106 +f 69/93 64/113 105/378 +f 324/433 455/223 367/196 +f 94/444 138/200 235/407 +f 448/258 367/196 455/223 +f 228/448 235/407 138/200 +f 17/345 316/7 16/351 +f 17/345 16/351 86/16 +f 317/2 16/351 316/7 +f 87/11 86/16 16/351 +f 430/358 280/164 359/236 +f 210/308 130/240 50/172 +f 332/385 359/236 280/164 +f 103/390 50/172 130/240 +f 16/351 317/2 15/357 +f 16/351 15/357 87/11 +f 318/465 15/357 317/2 +f 88/6 87/11 15/357 +f 9/393 286/138 10/387 +f 9/393 10/387 56/145 +f 337/355 10/387 286/138 +f 108/360 56/145 10/387 +f 330/397 350/281 278/174 +f 101/402 48/182 121/285 +f 351/276 278/174 350/281 +f 122/280 121/285 48/182 +f 253/299 254/294 381/132 +f 23/309 154/127 24/303 +f 375/156 381/132 254/294 +f 146/160 24/303 154/127 +f 403/39 404/34 319/460 +f 179/18 89/1 180/13 +f 320/455 319/460 404/34 +f 90/464 180/13 89/1 +f 352/271 7/405 420/418 +f 123/275 197/386 7/405 +f 198/380 420/418 7/405 +f 198/380 7/405 197/386 +f 325/427 319/460 326/421 +f 96/432 97/426 89/1 +f 320/455 326/421 319/460 +f 90/464 89/1 97/426 +f 398/64 368/191 366/201 +f 173/48 137/205 139/195 +f 365/206 366/201 368/191 +f 136/210 139/195 137/205 +f 289/126 436/322 398/64 +f 59/133 173/48 216/40 +f 368/191 398/64 436/322 +f 139/195 216/40 173/48 +f 439/304 440/298 345/307 +f 219/25 116/312 220/20 +f 279/169 345/307 440/298 +f 49/177 220/20 116/312 +f 272/204 312/27 273/199 +f 42/212 43/207 82/36 +f 311/32 273/199 312/27 +f 81/41 82/36 43/207 +f 6/411 282/154 196/392 +f 6/411 196/392 52/162 +f 249/323 196/392 282/154 +f 4/423 52/162 196/392 +f 274/194 288/130 376/152 +f 44/202 147/155 58/137 +f 292/114 376/152 288/130 +f 62/121 58/137 147/155 +f 397/68 429/364 176/33 +f 172/53 176/33 209/314 +f 200/368 176/33 429/364 +f 200/368 209/314 176/33 +f 269/219 313/22 272/204 +f 39/227 42/212 83/31 +f 312/27 272/204 313/22 +f 82/36 83/31 42/212 +f 445/273 446/268 284/146 +f 225/463 54/153 226/458 +f 277/179 284/146 446/268 +f 47/187 226/458 54/153 +f 255/289 340/337 374/161 +f 25/297 145/165 111/342 +f 391/92 374/161 340/337 +f 164/87 111/342 145/165 +f 296/98 283/150 297/94 +f 66/105 67/101 53/157 +f 335/367 297/94 283/150 +f 106/372 53/157 67/101 +f 347/296 449/253 348/291 +f 118/300 119/295 229/443 +f 450/248 348/291 449/253 +f 230/437 229/443 119/295 +f 455/223 357/246 448/258 +f 235/407 228/448 128/250 +f 265/239 448/258 357/246 +f 35/247 128/250 228/448 +f 337/355 297/94 338/349 +f 108/360 109/354 67/101 +f 300/82 338/349 297/94 +f 70/89 67/101 109/354 +f 152/135 338/349 11/381 +f 152/135 11/381 109/354 +f 339/343 11/381 338/349 +f 110/348 109/354 11/381 +f 279/169 440/298 295/102 +f 49/177 65/109 220/20 +f 456/218 295/102 440/298 +f 236/401 220/20 65/109 +f 408/14 416/442 293/110 +f 184/461 63/117 192/416 +f 309/42 293/110 416/442 +f 79/51 192/416 63/117 +f 359/236 372/171 430/358 +f 130/240 210/308 143/175 +f 356/251 430/358 372/171 +f 127/255 143/175 210/308 +f 346/301 373/166 341/331 +f 117/306 112/336 144/170 +f 266/234 341/331 373/166 +f 36/242 144/170 112/336 +f 389/100 391/92 467/163 +f 162/95 247/335 164/87 +f 250/317 467/163 391/92 +f 8/399 164/87 247/335 +f 353/266 347/296 281/159 +f 124/270 51/167 118/300 +f 348/291 281/159 347/296 +f 119/295 118/300 51/167 +f 296/98 443/283 283/150 +f 66/105 53/157 223/5 +f 444/278 283/150 443/283 +f 224/468 223/5 53/157 +f 20/327 95/438 355/256 +f 20/327 126/260 95/438 +f 371/176 355/256 95/438 +f 142/180 95/438 126/260 +f 296/98 286/138 443/283 +f 66/105 223/5 56/145 +f 442/288 443/283 286/138 +f 222/10 56/145 223/5 +f 420/418 198/380 249/323 +f 197/386 4/423 198/380 +f 196/392 249/323 198/380 +f 196/392 198/380 4/423 +f 360/231 264/244 256/284 +f 131/235 26/292 34/252 +f 250/317 256/284 264/244 +f 8/399 34/252 26/292 +f 276/184 275/189 441/293 +f 46/192 221/15 45/197 +f 458/208 441/293 275/189 +f 238/389 45/197 221/15 +f 301/78 384/120 302/74 +f 71/85 72/81 157/115 +f 369/186 302/74 384/120 +f 140/190 157/115 72/81 +f 418/430 352/271 466/168 +f 194/404 246/341 123/275 +f 413/457 466/168 352/271 +f 189/434 123/275 246/341 +f 467/163 264/244 468/158 +f 247/335 248/329 34/252 +f 360/231 468/158 264/244 +f 131/235 34/252 248/329 +f 390/96 252/305 369/186 +f 163/91 140/190 22/315 +f 302/74 369/186 252/305 +f 72/81 22/315 140/190 +f 375/156 387/108 381/132 +f 146/160 154/127 160/103 +f 386/112 381/132 387/108 +f 159/107 160/103 154/127 +f 380/136 395/76 379/140 +f 151/139 150/143 170/63 +f 396/72 379/140 395/76 +f 171/58 170/63 150/143 +f 352/271 420/418 413/457 +f 123/275 189/434 197/386 +f 400/54 413/457 420/418 +f 175/38 197/386 189/434 +f 427/376 323/439 437/316 +f 207/326 217/35 93/449 +f 411/467 437/316 323/439 +f 187/446 93/449 217/35 +f 388/104 374/161 389/100 +f 161/99 162/95 145/165 +f 391/92 389/100 374/161 +f 164/87 145/165 162/95 +f 394/80 327/415 165/83 +f 168/71 165/83 98/420 +f 3/429 165/83 327/415 +f 3/429 98/420 165/83 +f 355/256 371/176 462/188 +f 126/260 242/365 142/180 +f 463/183 462/188 371/176 +f 243/359 142/180 242/365 +f 1/441 268/224 165/83 +f 1/441 165/83 38/232 +f 394/80 165/83 268/224 +f 168/71 38/232 165/83 +f 12/375 13/369 303/70 +f 12/375 73/77 13/369 +f 269/219 303/70 13/369 +f 39/227 13/369 73/77 +f 387/108 375/156 388/104 +f 160/103 161/99 146/160 +f 374/161 388/104 375/156 +f 145/165 146/160 161/99 +f 13/369 14/363 269/219 +f 13/369 39/227 14/363 +f 313/22 269/219 14/363 +f 83/31 14/363 39/227 +f 294/106 301/78 299/86 +f 64/113 69/93 71/85 +f 302/74 299/86 301/78 +f 72/81 71/85 69/93 +f 341/331 266/234 262/254 +f 112/336 32/262 36/242 +f 447/263 262/254 266/234 +f 227/453 36/242 32/262 +f 381/132 386/112 382/128 +f 154/127 155/123 159/107 +f 385/116 382/128 386/112 +f 158/111 159/107 155/123 +f 281/159 331/391 426/382 +f 51/167 206/332 102/396 +f 267/229 426/382 331/391 +f 37/237 102/396 206/332 +f 424/394 392/88 427/376 +f 204/344 207/326 166/79 +f 323/439 427/376 392/88 +f 93/449 166/79 207/326 +f 430/358 356/251 421/412 +f 210/308 199/374 127/255 +f 438/310 421/412 356/251 +f 218/30 127/255 199/374 +f 392/88 328/409 394/80 +f 166/79 168/71 99/414 +f 327/415 394/80 328/409 +f 98/420 99/414 168/71 +f 458/208 439/304 441/293 +f 238/389 221/15 219/25 +f 345/307 441/293 439/304 +f 116/312 219/25 221/15 +f 383/124 363/216 342/325 +f 156/119 113/330 134/220 +f 464/178 342/325 363/216 +f 244/353 134/220 113/330 +f 458/208 462/188 460/198 +f 238/389 240/377 242/365 +f 459/203 460/198 462/188 +f 239/383 242/365 240/377 +f 435/328 431/352 365/206 +f 215/45 136/210 211/302 +f 395/76 365/206 431/352 +f 170/63 211/302 136/210 +f 415/447 464/178 399/59 +f 191/422 174/43 244/353 +f 363/216 399/59 464/178 +f 134/220 244/353 174/43 +f 263/249 429/364 370/181 +f 33/257 141/185 209/314 +f 397/68 370/181 429/364 +f 172/53 209/314 141/185 +f 458/208 275/189 462/188 +f 238/389 242/365 45/197 +f 355/256 462/188 275/189 +f 126/260 45/197 242/365 +f 317/2 404/34 318/465 +f 87/11 88/6 180/13 +f 403/39 318/465 404/34 +f 179/18 180/13 88/6 +f 316/7 405/29 317/2 +f 86/16 87/11 181/8 +f 404/34 317/2 405/29 +f 180/13 181/8 87/11 +f 315/12 406/24 316/7 +f 85/21 86/16 182/3 +f 405/29 316/7 406/24 +f 181/8 182/3 86/16 +f 314/17 407/19 315/12 +f 84/26 85/21 183/466 +f 406/24 315/12 407/19 +f 182/3 183/466 85/21 +f 419/424 407/19 422/406 +f 195/398 202/356 183/466 +f 314/17 422/406 407/19 +f 84/26 183/466 202/356 +f 367/196 402/44 324/433 +f 138/200 94/444 178/23 +f 362/221 324/433 402/44 +f 133/225 178/23 94/444 +f 409/9 408/14 307/52 +f 185/456 77/61 184/461 +f 293/110 307/52 408/14 +f 63/117 184/461 77/61 +f 409/9 307/52 410/4 +f 185/456 186/451 77/61 +f 292/114 410/4 307/52 +f 62/121 77/61 186/451 +f 411/467 410/4 288/130 +f 187/446 58/137 186/451 +f 292/114 288/130 410/4 +f 62/121 186/451 58/137 +f 437/316 411/467 433/340 +f 217/35 213/55 187/446 +f 288/130 433/340 411/467 +f 58/137 187/446 213/55 +f 435/328 417/436 428/370 +f 215/45 208/320 193/410 +f 412/462 428/370 417/436 +f 188/440 193/410 208/320 +f 265/239 369/186 373/166 +f 35/247 144/170 140/190 +f 384/120 373/166 369/186 +f 157/115 140/190 144/170 +f 458/208 460/198 439/304 +f 238/389 219/25 240/377 +f 310/37 439/304 460/198 +f 80/46 240/377 219/25 +f 353/266 377/148 367/196 +f 124/270 138/200 148/151 +f 402/44 367/196 377/148 +f 178/23 148/151 138/200 +f 5/417 2/435 276/184 +f 5/417 46/192 2/435 +f 275/189 276/184 2/435 +f 45/197 2/435 46/192 +f 429/364 263/249 422/406 +f 209/314 202/356 33/257 +f 419/424 422/406 263/249 +f 195/398 33/257 202/356 +f 328/409 359/236 295/102 +f 99/414 65/109 130/240 +f 332/385 295/102 359/236 +f 103/390 130/240 65/109 +f 368/191 436/322 417/436 +f 139/195 193/410 216/40 +f 434/334 417/436 436/322 +f 214/50 216/40 193/410 +f 456/218 440/298 290/122 +f 236/401 60/129 220/20 +f 393/84 290/122 440/298 +f 167/75 220/20 60/129 +f 329/403 463/183 327/415 +f 100/408 98/420 243/359 +f 371/176 327/415 463/183 +f 142/180 243/359 98/420 +f 327/415 371/176 3/429 +f 98/420 3/429 142/180 +f 95/438 3/429 371/176 +f 95/438 142/180 3/429 +f 461/193 456/218 306/57 +f 241/371 76/65 236/401 +f 290/122 306/57 456/218 +f 60/129 236/401 76/65 +f 449/253 340/337 450/248 +f 229/443 230/437 111/342 +f 255/289 450/248 340/337 +f 25/297 111/342 230/437 +f 262/254 447/263 256/284 +f 32/262 26/292 227/453 +f 360/231 256/284 447/263 +f 131/235 227/453 26/292 +f 450/248 255/289 451/243 +f 230/437 231/431 25/297 +f 254/294 451/243 255/289 +f 24/303 25/297 231/431 +f 451/243 254/294 452/238 +f 231/431 232/425 24/303 +f 253/299 452/238 254/294 +f 23/309 24/303 232/425 +f 452/238 253/299 453/233 +f 232/425 233/419 23/309 +f 257/279 453/233 253/299 +f 27/287 23/309 233/419 +f 257/279 342/325 453/233 +f 27/287 233/419 113/330 +f 454/228 453/233 342/325 +f 234/413 113/330 233/419 +f 414/452 465/173 415/447 +f 190/428 191/422 245/347 +f 464/178 415/447 465/173 +f 244/353 245/347 191/422 +f 442/288 414/452 287/134 +f 222/10 57/141 190/428 +f 415/447 287/134 414/452 +f 191/422 190/428 57/141 +f 442/288 287/134 443/283 +f 222/10 223/5 57/141 +f 259/269 443/283 287/134 +f 29/277 57/141 223/5 +f 443/283 259/269 444/278 +f 223/5 224/468 29/277 +f 258/274 444/278 259/269 +f 28/282 29/277 224/468 +f 445/273 444/278 260/264 +f 225/463 30/272 224/468 +f 258/274 260/264 444/278 +f 28/282 224/468 30/272 +f 260/264 261/259 445/273 +f 30/272 225/463 31/267 +f 446/268 445/273 261/259 +f 226/458 31/267 225/463 +f 261/259 468/158 446/268 +f 31/267 226/458 248/329 +f 343/319 446/268 468/158 +f 114/324 248/329 226/458 +f 251/311 310/37 459/203 +f 21/321 239/383 80/46 +f 460/198 459/203 310/37 +f 240/377 80/46 239/383 +f 291/118 306/57 393/84 +f 61/125 167/75 76/65 +f 290/122 393/84 306/57 +f 60/129 76/65 167/75 +f 461/193 306/57 329/403 +f 241/371 100/408 76/65 +f 291/118 329/403 306/57 +f 61/125 76/65 100/408 +f 377/148 434/334 402/44 +f 148/151 178/23 214/50 +f 436/322 402/44 434/334 +f 216/40 214/50 178/23 +f 251/311 291/118 310/37 +f 21/321 80/46 61/125 +f 393/84 310/37 291/118 +f 167/75 61/125 80/46 +f 412/462 417/436 377/148 +f 188/440 148/151 193/410 +f 434/334 377/148 417/436 +f 214/50 193/410 148/151 +f 342/325 464/178 454/228 +f 113/330 234/413 244/353 +f 465/173 454/228 464/178 +f 245/347 244/353 234/413 +f 454/228 465/173 358/241 +f 234/413 129/245 245/347 +f 466/168 358/241 465/173 +f 246/341 245/347 129/245 +f 413/457 344/313 466/168 +f 189/434 246/341 115/318 +f 358/241 466/168 344/313 +f 129/245 115/318 246/341 +f 438/310 344/313 400/54 +f 218/30 175/38 115/318 +f 413/457 400/54 344/313 +f 189/434 115/318 175/38 +f 364/211 441/293 361/226 +f 135/215 132/230 221/15 +f 345/307 361/226 441/293 +f 116/312 221/15 132/230 +f 457/213 421/412 400/54 +f 237/395 175/38 199/374 +f 438/310 400/54 421/412 +f 218/30 199/374 175/38 +f 457/213 364/211 421/412 +f 237/395 199/374 135/215 +f 361/226 421/412 364/211 +f 132/230 135/215 199/374 +f 362/221 402/44 289/126 +f 133/225 59/133 178/23 +f 436/322 289/126 402/44 +f 216/40 178/23 59/133 +f 354/261 266/234 384/120 +f 125/265 157/115 36/242 +f 373/166 384/120 266/234 +f 144/170 36/242 157/115 +f 256/284 250/317 340/337 +f 26/292 111/342 8/399 +f 391/92 340/337 250/317 +f 164/87 8/399 111/342 +f 262/254 256/284 449/253 +f 32/262 229/443 26/292 +f 340/337 449/253 256/284 +f 111/342 26/292 229/443 +f 15/357 318/465 14/363 +f 15/357 14/363 88/6 +f 313/22 14/363 318/465 +f 83/31 88/6 14/363 +f 318/465 403/39 313/22 +f 88/6 83/31 179/18 +f 312/27 313/22 403/39 +f 82/36 179/18 83/31 +f 403/39 319/460 312/27 +f 179/18 82/36 89/1 +f 311/32 312/27 319/460 +f 81/41 89/1 82/36 +f 319/460 325/427 311/32 +f 89/1 81/41 96/432 +f 416/442 311/32 325/427 +f 192/416 96/432 81/41 diff --git a/mediapipe/modules/face_geometry/data/canonical_face_model_uv_visualization.png b/mediapipe/modules/face_geometry/data/canonical_face_model_uv_visualization.png new file mode 100644 index 000000000..2acd991eb Binary files /dev/null and b/mediapipe/modules/face_geometry/data/canonical_face_model_uv_visualization.png differ diff --git a/mediapipe/modules/face_geometry/data/geometry_pipeline_metadata.pbtxt b/mediapipe/modules/face_geometry/data/geometry_pipeline_metadata.pbtxt new file mode 100644 index 000000000..ee06f2779 --- /dev/null +++ b/mediapipe/modules/face_geometry/data/geometry_pipeline_metadata.pbtxt @@ -0,0 +1,5085 @@ +# Copyright 2020 The MediaPipe Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +procrustes_landmark_basis { landmark_id: 4 weight: 0.070909939706326 } +procrustes_landmark_basis { landmark_id: 6 weight: 0.032100144773722 } +procrustes_landmark_basis { landmark_id: 10 weight: 0.008446550928056 } +procrustes_landmark_basis { landmark_id: 33 weight: 0.058724168688059 } +procrustes_landmark_basis { landmark_id: 54 weight: 0.007667080033571 } +procrustes_landmark_basis { landmark_id: 67 weight: 0.009078059345484 } +procrustes_landmark_basis { landmark_id: 117 weight: 0.009791937656701 } +procrustes_landmark_basis { landmark_id: 119 weight: 0.014565368182957 } +procrustes_landmark_basis { landmark_id: 121 weight: 0.018591361120343 } +procrustes_landmark_basis { landmark_id: 127 weight: 0.005197994410992 } +procrustes_landmark_basis { landmark_id: 129 weight: 0.120625205338001 } +procrustes_landmark_basis { landmark_id: 132 weight: 0.005560018587857 } +procrustes_landmark_basis { landmark_id: 133 weight: 0.05328618362546 } +procrustes_landmark_basis { landmark_id: 136 weight: 0.066890455782413 } +procrustes_landmark_basis { landmark_id: 143 weight: 0.014816547743976 } +procrustes_landmark_basis { landmark_id: 147 weight: 0.014262833632529 } +procrustes_landmark_basis { landmark_id: 198 weight: 0.025462191551924 } +procrustes_landmark_basis { landmark_id: 205 weight: 0.047252278774977 } +procrustes_landmark_basis { landmark_id: 263 weight: 0.058724168688059 } +procrustes_landmark_basis { landmark_id: 284 weight: 0.007667080033571 } +procrustes_landmark_basis { landmark_id: 297 weight: 0.009078059345484 } +procrustes_landmark_basis { landmark_id: 346 weight: 0.009791937656701 } +procrustes_landmark_basis { landmark_id: 348 weight: 0.014565368182957 } +procrustes_landmark_basis { landmark_id: 350 weight: 0.018591361120343 } +procrustes_landmark_basis { landmark_id: 356 weight: 0.005197994410992 } +procrustes_landmark_basis { landmark_id: 358 weight: 0.120625205338001 } +procrustes_landmark_basis { landmark_id: 361 weight: 0.005560018587857 } +procrustes_landmark_basis { landmark_id: 362 weight: 0.05328618362546 } +procrustes_landmark_basis { landmark_id: 365 weight: 0.066890455782413 } +procrustes_landmark_basis { landmark_id: 372 weight: 0.014816547743976 } +procrustes_landmark_basis { landmark_id: 376 weight: 0.014262833632529 } +procrustes_landmark_basis { landmark_id: 420 weight: 0.025462191551924 } +procrustes_landmark_basis { landmark_id: 425 weight: 0.047252278774977 } +canonical_mesh: { + vertex_type: VERTEX_PT + primitive_type: TRIANGLE + vertex_buffer: 0.000000 + vertex_buffer: -3.406404 + vertex_buffer: 5.979507 + vertex_buffer: 0.499977 + vertex_buffer: 0.652534 + vertex_buffer: 0.000000 + vertex_buffer: -1.126865 + vertex_buffer: 7.475604 + vertex_buffer: 0.500026 + vertex_buffer: 0.547487 + vertex_buffer: 0.000000 + vertex_buffer: -2.089024 + vertex_buffer: 6.058267 + vertex_buffer: 0.499974 + vertex_buffer: 0.602372 + vertex_buffer: -0.463928 + vertex_buffer: 0.955357 + vertex_buffer: 6.633583 + vertex_buffer: 0.482113 + vertex_buffer: 0.471979 + vertex_buffer: 0.000000 + vertex_buffer: -0.463170 + vertex_buffer: 7.586580 + vertex_buffer: 0.500151 + vertex_buffer: 0.527156 + vertex_buffer: 0.000000 + vertex_buffer: 0.365669 + vertex_buffer: 7.242870 + vertex_buffer: 0.499910 + vertex_buffer: 0.498253 + vertex_buffer: 0.000000 + vertex_buffer: 2.473255 + vertex_buffer: 5.788627 + vertex_buffer: 0.499523 + vertex_buffer: 0.401062 + vertex_buffer: -4.253081 + vertex_buffer: 2.577646 + vertex_buffer: 3.279702 + vertex_buffer: 0.289712 + vertex_buffer: 0.380764 + vertex_buffer: 0.000000 + vertex_buffer: 4.019042 + vertex_buffer: 5.284764 + vertex_buffer: 0.499955 + vertex_buffer: 0.312398 + vertex_buffer: 0.000000 + vertex_buffer: 4.885979 + vertex_buffer: 5.385258 + vertex_buffer: 0.499987 + vertex_buffer: 0.269919 + vertex_buffer: 0.000000 + vertex_buffer: 8.261778 + vertex_buffer: 4.481535 + vertex_buffer: 0.500023 + vertex_buffer: 0.107050 + vertex_buffer: 0.000000 + vertex_buffer: -3.706811 + vertex_buffer: 5.864924 + vertex_buffer: 0.500023 + vertex_buffer: 0.666234 + vertex_buffer: 0.000000 + vertex_buffer: -3.918301 + vertex_buffer: 5.569430 + vertex_buffer: 0.500016 + vertex_buffer: 0.679224 + vertex_buffer: 0.000000 + vertex_buffer: -3.994436 + vertex_buffer: 5.219482 + vertex_buffer: 0.500023 + vertex_buffer: 0.692348 + vertex_buffer: 0.000000 + vertex_buffer: -4.542400 + vertex_buffer: 5.404754 + vertex_buffer: 0.499977 + vertex_buffer: 0.695278 + vertex_buffer: 0.000000 + vertex_buffer: -4.745577 + vertex_buffer: 5.529457 + vertex_buffer: 0.499977 + vertex_buffer: 0.705934 + vertex_buffer: 0.000000 + vertex_buffer: -5.019567 + vertex_buffer: 5.601448 + vertex_buffer: 0.499977 + vertex_buffer: 0.719385 + vertex_buffer: 0.000000 + vertex_buffer: -5.365123 + vertex_buffer: 5.535441 + vertex_buffer: 0.499977 + vertex_buffer: 0.737019 + vertex_buffer: 0.000000 + vertex_buffer: -6.149624 + vertex_buffer: 5.071372 + vertex_buffer: 0.499968 + vertex_buffer: 0.781371 + vertex_buffer: 0.000000 + vertex_buffer: -1.501095 + vertex_buffer: 7.112196 + vertex_buffer: 0.499816 + vertex_buffer: 0.562981 + vertex_buffer: -0.416106 + vertex_buffer: -1.466449 + vertex_buffer: 6.447657 + vertex_buffer: 0.473773 + vertex_buffer: 0.573910 + vertex_buffer: -7.087960 + vertex_buffer: 5.434801 + vertex_buffer: 0.099620 + vertex_buffer: 0.104907 + vertex_buffer: 0.254141 + vertex_buffer: -2.628639 + vertex_buffer: 2.035898 + vertex_buffer: 3.848121 + vertex_buffer: 0.365930 + vertex_buffer: 0.409576 + vertex_buffer: -3.198363 + vertex_buffer: 1.985815 + vertex_buffer: 3.796952 + vertex_buffer: 0.338758 + vertex_buffer: 0.413025 + vertex_buffer: -3.775151 + vertex_buffer: 2.039402 + vertex_buffer: 3.646194 + vertex_buffer: 0.311120 + vertex_buffer: 0.409460 + vertex_buffer: -4.465819 + vertex_buffer: 2.422950 + vertex_buffer: 3.155168 + vertex_buffer: 0.274658 + vertex_buffer: 0.389131 + vertex_buffer: -2.164289 + vertex_buffer: 2.189867 + vertex_buffer: 3.851822 + vertex_buffer: 0.393362 + vertex_buffer: 0.403706 + vertex_buffer: -3.208229 + vertex_buffer: 3.223926 + vertex_buffer: 4.115822 + vertex_buffer: 0.345234 + vertex_buffer: 0.344011 + vertex_buffer: -2.673803 + vertex_buffer: 3.205337 + vertex_buffer: 4.092203 + vertex_buffer: 0.370094 + vertex_buffer: 0.346076 + vertex_buffer: -3.745193 + vertex_buffer: 3.165286 + vertex_buffer: 3.972409 + vertex_buffer: 0.319322 + vertex_buffer: 0.347265 + vertex_buffer: -4.161018 + vertex_buffer: 3.059069 + vertex_buffer: 3.719554 + vertex_buffer: 0.297903 + vertex_buffer: 0.353591 + vertex_buffer: -5.062006 + vertex_buffer: 1.934418 + vertex_buffer: 2.776093 + vertex_buffer: 0.247792 + vertex_buffer: 0.410810 + vertex_buffer: -2.266659 + vertex_buffer: -7.425768 + vertex_buffer: 4.389812 + vertex_buffer: 0.396889 + vertex_buffer: 0.842755 + vertex_buffer: -4.445859 + vertex_buffer: 2.663991 + vertex_buffer: 3.173422 + vertex_buffer: 0.280098 + vertex_buffer: 0.375600 + vertex_buffer: -7.214530 + vertex_buffer: 2.263009 + vertex_buffer: 0.073150 + vertex_buffer: 0.106310 + vertex_buffer: 0.399956 + vertex_buffer: -5.799793 + vertex_buffer: 2.349546 + vertex_buffer: 2.204059 + vertex_buffer: 0.209925 + vertex_buffer: 0.391353 + vertex_buffer: -2.844939 + vertex_buffer: -0.720868 + vertex_buffer: 4.433130 + vertex_buffer: 0.355808 + vertex_buffer: 0.534406 + vertex_buffer: -0.711452 + vertex_buffer: -3.329355 + vertex_buffer: 5.877044 + vertex_buffer: 0.471751 + vertex_buffer: 0.650404 + vertex_buffer: -0.606033 + vertex_buffer: -3.924562 + vertex_buffer: 5.444923 + vertex_buffer: 0.474155 + vertex_buffer: 0.680192 + vertex_buffer: -1.431615 + vertex_buffer: -3.500953 + vertex_buffer: 5.496189 + vertex_buffer: 0.439785 + vertex_buffer: 0.657229 + vertex_buffer: -1.914910 + vertex_buffer: -3.803146 + vertex_buffer: 5.028930 + vertex_buffer: 0.414617 + vertex_buffer: 0.666541 + vertex_buffer: -1.131043 + vertex_buffer: -3.973937 + vertex_buffer: 5.189648 + vertex_buffer: 0.450374 + vertex_buffer: 0.680861 + vertex_buffer: -1.563548 + vertex_buffer: -4.082763 + vertex_buffer: 4.842263 + vertex_buffer: 0.428771 + vertex_buffer: 0.682691 + vertex_buffer: -2.650112 + vertex_buffer: -5.003649 + vertex_buffer: 4.188483 + vertex_buffer: 0.374971 + vertex_buffer: 0.727805 + vertex_buffer: -0.427049 + vertex_buffer: -1.094134 + vertex_buffer: 7.360529 + vertex_buffer: 0.486717 + vertex_buffer: 0.547629 + vertex_buffer: -0.496396 + vertex_buffer: -0.475659 + vertex_buffer: 7.440358 + vertex_buffer: 0.485301 + vertex_buffer: 0.527395 + vertex_buffer: -5.253307 + vertex_buffer: 3.881582 + vertex_buffer: 3.363159 + vertex_buffer: 0.257765 + vertex_buffer: 0.314490 + vertex_buffer: -1.718698 + vertex_buffer: 0.974609 + vertex_buffer: 4.558359 + vertex_buffer: 0.401223 + vertex_buffer: 0.455172 + vertex_buffer: -1.608635 + vertex_buffer: -0.942516 + vertex_buffer: 5.814193 + vertex_buffer: 0.429819 + vertex_buffer: 0.548615 + vertex_buffer: -1.651267 + vertex_buffer: -0.610868 + vertex_buffer: 5.581319 + vertex_buffer: 0.421352 + vertex_buffer: 0.533741 + vertex_buffer: -4.765501 + vertex_buffer: -0.701554 + vertex_buffer: 3.534632 + vertex_buffer: 0.276896 + vertex_buffer: 0.532057 + vertex_buffer: -0.478306 + vertex_buffer: 0.295766 + vertex_buffer: 7.101013 + vertex_buffer: 0.483370 + vertex_buffer: 0.499587 + vertex_buffer: -3.734964 + vertex_buffer: 4.508230 + vertex_buffer: 4.550454 + vertex_buffer: 0.337212 + vertex_buffer: 0.282883 + vertex_buffer: -4.588603 + vertex_buffer: 4.302037 + vertex_buffer: 4.048484 + vertex_buffer: 0.296392 + vertex_buffer: 0.293243 + vertex_buffer: -6.279331 + vertex_buffer: 6.615427 + vertex_buffer: 1.425850 + vertex_buffer: 0.169295 + vertex_buffer: 0.193814 + vertex_buffer: -1.220941 + vertex_buffer: 4.142165 + vertex_buffer: 5.106035 + vertex_buffer: 0.447580 + vertex_buffer: 0.302610 + vertex_buffer: -2.193489 + vertex_buffer: 3.100317 + vertex_buffer: 4.000575 + vertex_buffer: 0.392390 + vertex_buffer: 0.353888 + vertex_buffer: -3.102642 + vertex_buffer: -4.352984 + vertex_buffer: 4.095905 + vertex_buffer: 0.354490 + vertex_buffer: 0.696784 + vertex_buffer: -6.719682 + vertex_buffer: -4.788645 + vertex_buffer: -1.745401 + vertex_buffer: 0.067305 + vertex_buffer: 0.730105 + vertex_buffer: -1.193824 + vertex_buffer: -1.306795 + vertex_buffer: 5.737747 + vertex_buffer: 0.442739 + vertex_buffer: 0.572826 + vertex_buffer: -0.729766 + vertex_buffer: -1.593712 + vertex_buffer: 5.833208 + vertex_buffer: 0.457098 + vertex_buffer: 0.584792 + vertex_buffer: -2.456206 + vertex_buffer: -4.342621 + vertex_buffer: 4.283884 + vertex_buffer: 0.381974 + vertex_buffer: 0.694711 + vertex_buffer: -2.204823 + vertex_buffer: -4.304508 + vertex_buffer: 4.162499 + vertex_buffer: 0.392389 + vertex_buffer: 0.694203 + vertex_buffer: -4.985894 + vertex_buffer: 4.802461 + vertex_buffer: 3.751977 + vertex_buffer: 0.277076 + vertex_buffer: 0.271932 + vertex_buffer: -1.592294 + vertex_buffer: -1.257709 + vertex_buffer: 5.456949 + vertex_buffer: 0.422552 + vertex_buffer: 0.563233 + vertex_buffer: -2.644548 + vertex_buffer: 4.524654 + vertex_buffer: 4.921559 + vertex_buffer: 0.385919 + vertex_buffer: 0.281364 + vertex_buffer: -2.760292 + vertex_buffer: 5.100971 + vertex_buffer: 5.015990 + vertex_buffer: 0.383103 + vertex_buffer: 0.255840 + vertex_buffer: -3.523964 + vertex_buffer: 8.005976 + vertex_buffer: 3.729163 + vertex_buffer: 0.331431 + vertex_buffer: 0.119714 + vertex_buffer: -5.599763 + vertex_buffer: 5.715470 + vertex_buffer: 2.724259 + vertex_buffer: 0.229924 + vertex_buffer: 0.232003 + vertex_buffer: -3.063932 + vertex_buffer: 6.566144 + vertex_buffer: 4.529981 + vertex_buffer: 0.364501 + vertex_buffer: 0.189114 + vertex_buffer: -5.720968 + vertex_buffer: 4.254584 + vertex_buffer: 2.830852 + vertex_buffer: 0.229622 + vertex_buffer: 0.299541 + vertex_buffer: -6.374393 + vertex_buffer: 4.785590 + vertex_buffer: 1.591691 + vertex_buffer: 0.173287 + vertex_buffer: 0.278748 + vertex_buffer: -0.672728 + vertex_buffer: -3.688016 + vertex_buffer: 5.737804 + vertex_buffer: 0.472879 + vertex_buffer: 0.666198 + vertex_buffer: -1.262560 + vertex_buffer: -3.787691 + vertex_buffer: 5.417779 + vertex_buffer: 0.446828 + vertex_buffer: 0.668527 + vertex_buffer: -1.732553 + vertex_buffer: -3.952767 + vertex_buffer: 5.000579 + vertex_buffer: 0.422762 + vertex_buffer: 0.673890 + vertex_buffer: -1.043625 + vertex_buffer: -1.464973 + vertex_buffer: 5.662455 + vertex_buffer: 0.445308 + vertex_buffer: 0.580066 + vertex_buffer: -2.321234 + vertex_buffer: -4.329069 + vertex_buffer: 4.258156 + vertex_buffer: 0.388103 + vertex_buffer: 0.693961 + vertex_buffer: -2.056846 + vertex_buffer: -4.477671 + vertex_buffer: 4.520883 + vertex_buffer: 0.403039 + vertex_buffer: 0.706540 + vertex_buffer: -2.153084 + vertex_buffer: -4.276322 + vertex_buffer: 4.038093 + vertex_buffer: 0.403629 + vertex_buffer: 0.693953 + vertex_buffer: -0.946874 + vertex_buffer: -1.035249 + vertex_buffer: 6.512274 + vertex_buffer: 0.460042 + vertex_buffer: 0.557139 + vertex_buffer: -1.469132 + vertex_buffer: -4.036351 + vertex_buffer: 4.604908 + vertex_buffer: 0.431158 + vertex_buffer: 0.692366 + vertex_buffer: -1.024340 + vertex_buffer: -3.989851 + vertex_buffer: 4.926693 + vertex_buffer: 0.452182 + vertex_buffer: 0.692366 + vertex_buffer: -0.533422 + vertex_buffer: -3.993222 + vertex_buffer: 5.138202 + vertex_buffer: 0.475387 + vertex_buffer: 0.692366 + vertex_buffer: -0.769720 + vertex_buffer: -6.095394 + vertex_buffer: 4.985883 + vertex_buffer: 0.465828 + vertex_buffer: 0.779190 + vertex_buffer: -0.699606 + vertex_buffer: -5.291850 + vertex_buffer: 5.448304 + vertex_buffer: 0.472329 + vertex_buffer: 0.736226 + vertex_buffer: -0.669687 + vertex_buffer: -4.949770 + vertex_buffer: 5.509612 + vertex_buffer: 0.473087 + vertex_buffer: 0.717857 + vertex_buffer: -0.630947 + vertex_buffer: -4.695101 + vertex_buffer: 5.449371 + vertex_buffer: 0.473122 + vertex_buffer: 0.704626 + vertex_buffer: -0.583218 + vertex_buffer: -4.517982 + vertex_buffer: 5.339869 + vertex_buffer: 0.473033 + vertex_buffer: 0.695278 + vertex_buffer: -1.537170 + vertex_buffer: -4.423206 + vertex_buffer: 4.745470 + vertex_buffer: 0.427942 + vertex_buffer: 0.695278 + vertex_buffer: -1.615600 + vertex_buffer: -4.475942 + vertex_buffer: 4.813632 + vertex_buffer: 0.426479 + vertex_buffer: 0.703540 + vertex_buffer: -1.729053 + vertex_buffer: -4.618680 + vertex_buffer: 4.854463 + vertex_buffer: 0.423162 + vertex_buffer: 0.711846 + vertex_buffer: -1.838624 + vertex_buffer: -4.828746 + vertex_buffer: 4.823737 + vertex_buffer: 0.418309 + vertex_buffer: 0.720063 + vertex_buffer: -2.368250 + vertex_buffer: -3.106237 + vertex_buffer: 4.868096 + vertex_buffer: 0.390095 + vertex_buffer: 0.639573 + vertex_buffer: -7.542244 + vertex_buffer: -1.049282 + vertex_buffer: -2.431321 + vertex_buffer: 0.013954 + vertex_buffer: 0.560034 + vertex_buffer: 0.000000 + vertex_buffer: -1.724003 + vertex_buffer: 6.601390 + vertex_buffer: 0.499914 + vertex_buffer: 0.580147 + vertex_buffer: -1.826614 + vertex_buffer: -4.399531 + vertex_buffer: 4.399021 + vertex_buffer: 0.413200 + vertex_buffer: 0.695400 + vertex_buffer: -1.929558 + vertex_buffer: -4.411831 + vertex_buffer: 4.497052 + vertex_buffer: 0.409626 + vertex_buffer: 0.701823 + vertex_buffer: -0.597442 + vertex_buffer: -2.013686 + vertex_buffer: 5.866456 + vertex_buffer: 0.468080 + vertex_buffer: 0.601535 + vertex_buffer: -1.405627 + vertex_buffer: -1.714196 + vertex_buffer: 5.241087 + vertex_buffer: 0.422729 + vertex_buffer: 0.585985 + vertex_buffer: -0.662449 + vertex_buffer: -1.819321 + vertex_buffer: 5.863759 + vertex_buffer: 0.463080 + vertex_buffer: 0.593784 + vertex_buffer: -2.342340 + vertex_buffer: 0.572222 + vertex_buffer: 4.294303 + vertex_buffer: 0.372120 + vertex_buffer: 0.473414 + vertex_buffer: -3.327324 + vertex_buffer: 0.104863 + vertex_buffer: 4.113860 + vertex_buffer: 0.334562 + vertex_buffer: 0.496073 + vertex_buffer: -1.726175 + vertex_buffer: -0.919165 + vertex_buffer: 5.273355 + vertex_buffer: 0.411671 + vertex_buffer: 0.546965 + vertex_buffer: -5.133204 + vertex_buffer: 7.485602 + vertex_buffer: 2.660442 + vertex_buffer: 0.242176 + vertex_buffer: 0.147676 + vertex_buffer: -4.538641 + vertex_buffer: 6.319907 + vertex_buffer: 3.683424 + vertex_buffer: 0.290777 + vertex_buffer: 0.201446 + vertex_buffer: -3.986562 + vertex_buffer: 5.109487 + vertex_buffer: 4.466315 + vertex_buffer: 0.327338 + vertex_buffer: 0.256527 + vertex_buffer: -2.169681 + vertex_buffer: -5.440433 + vertex_buffer: 4.455874 + vertex_buffer: 0.399510 + vertex_buffer: 0.748921 + vertex_buffer: -1.395634 + vertex_buffer: 5.011963 + vertex_buffer: 5.316032 + vertex_buffer: 0.441728 + vertex_buffer: 0.261676 + vertex_buffer: -1.619500 + vertex_buffer: 6.599217 + vertex_buffer: 4.921106 + vertex_buffer: 0.429765 + vertex_buffer: 0.187834 + vertex_buffer: -1.891399 + vertex_buffer: 8.236377 + vertex_buffer: 4.274997 + vertex_buffer: 0.412198 + vertex_buffer: 0.108901 + vertex_buffer: -4.195832 + vertex_buffer: 2.235205 + vertex_buffer: 3.375099 + vertex_buffer: 0.288955 + vertex_buffer: 0.398952 + vertex_buffer: -5.733342 + vertex_buffer: 1.411738 + vertex_buffer: 2.431726 + vertex_buffer: 0.218937 + vertex_buffer: 0.435411 + vertex_buffer: -1.859887 + vertex_buffer: 2.355757 + vertex_buffer: 3.843181 + vertex_buffer: 0.412782 + vertex_buffer: 0.398970 + vertex_buffer: -4.988612 + vertex_buffer: 3.074654 + vertex_buffer: 3.083858 + vertex_buffer: 0.257135 + vertex_buffer: 0.355440 + vertex_buffer: -1.303263 + vertex_buffer: 1.416453 + vertex_buffer: 4.831091 + vertex_buffer: 0.427685 + vertex_buffer: 0.437961 + vertex_buffer: -1.305757 + vertex_buffer: -0.672779 + vertex_buffer: 6.415959 + vertex_buffer: 0.448340 + vertex_buffer: 0.536936 + vertex_buffer: -6.465170 + vertex_buffer: 0.937119 + vertex_buffer: 1.689873 + vertex_buffer: 0.178560 + vertex_buffer: 0.457554 + vertex_buffer: -5.258659 + vertex_buffer: 0.945811 + vertex_buffer: 2.974312 + vertex_buffer: 0.247308 + vertex_buffer: 0.457194 + vertex_buffer: -4.432338 + vertex_buffer: 0.722096 + vertex_buffer: 3.522615 + vertex_buffer: 0.286267 + vertex_buffer: 0.467675 + vertex_buffer: -3.300681 + vertex_buffer: 0.861641 + vertex_buffer: 3.872784 + vertex_buffer: 0.332828 + vertex_buffer: 0.460712 + vertex_buffer: -2.430178 + vertex_buffer: 1.131492 + vertex_buffer: 4.039035 + vertex_buffer: 0.368756 + vertex_buffer: 0.447207 + vertex_buffer: -1.820731 + vertex_buffer: 1.467954 + vertex_buffer: 4.224124 + vertex_buffer: 0.398964 + vertex_buffer: 0.432655 + vertex_buffer: -0.563221 + vertex_buffer: 2.307693 + vertex_buffer: 5.566789 + vertex_buffer: 0.476410 + vertex_buffer: 0.405806 + vertex_buffer: -6.338145 + vertex_buffer: -0.529279 + vertex_buffer: 1.881175 + vertex_buffer: 0.189241 + vertex_buffer: 0.523924 + vertex_buffer: -5.587698 + vertex_buffer: 3.208071 + vertex_buffer: 2.687839 + vertex_buffer: 0.228962 + vertex_buffer: 0.348951 + vertex_buffer: -0.242624 + vertex_buffer: -1.462857 + vertex_buffer: 7.071491 + vertex_buffer: 0.490726 + vertex_buffer: 0.562401 + vertex_buffer: -1.611251 + vertex_buffer: 0.339326 + vertex_buffer: 4.895421 + vertex_buffer: 0.404670 + vertex_buffer: 0.485133 + vertex_buffer: -7.743095 + vertex_buffer: 2.364999 + vertex_buffer: -2.005167 + vertex_buffer: 0.019469 + vertex_buffer: 0.401564 + vertex_buffer: -1.391142 + vertex_buffer: 1.851048 + vertex_buffer: 4.448999 + vertex_buffer: 0.426243 + vertex_buffer: 0.420431 + vertex_buffer: -1.785794 + vertex_buffer: -0.978284 + vertex_buffer: 4.850470 + vertex_buffer: 0.396993 + vertex_buffer: 0.548797 + vertex_buffer: -4.670959 + vertex_buffer: 2.664461 + vertex_buffer: 3.084075 + vertex_buffer: 0.266470 + vertex_buffer: 0.376977 + vertex_buffer: -1.333970 + vertex_buffer: -0.283761 + vertex_buffer: 6.097047 + vertex_buffer: 0.439121 + vertex_buffer: 0.518958 + vertex_buffer: -7.270895 + vertex_buffer: -2.890917 + vertex_buffer: -2.252455 + vertex_buffer: 0.032314 + vertex_buffer: 0.644357 + vertex_buffer: -1.856432 + vertex_buffer: 2.585245 + vertex_buffer: 3.757904 + vertex_buffer: 0.419054 + vertex_buffer: 0.387155 + vertex_buffer: -0.923388 + vertex_buffer: 0.073076 + vertex_buffer: 6.671944 + vertex_buffer: 0.462783 + vertex_buffer: 0.505747 + vertex_buffer: -5.000589 + vertex_buffer: -6.135128 + vertex_buffer: 1.892523 + vertex_buffer: 0.238979 + vertex_buffer: 0.779745 + vertex_buffer: -5.085276 + vertex_buffer: -7.178590 + vertex_buffer: 0.714711 + vertex_buffer: 0.198221 + vertex_buffer: 0.831938 + vertex_buffer: -7.159291 + vertex_buffer: -0.811820 + vertex_buffer: -0.072044 + vertex_buffer: 0.107550 + vertex_buffer: 0.540755 + vertex_buffer: -5.843051 + vertex_buffer: -5.248023 + vertex_buffer: 0.924091 + vertex_buffer: 0.183610 + vertex_buffer: 0.740257 + vertex_buffer: -6.847258 + vertex_buffer: 3.662916 + vertex_buffer: 0.724695 + vertex_buffer: 0.134410 + vertex_buffer: 0.333683 + vertex_buffer: -2.412942 + vertex_buffer: -8.258853 + vertex_buffer: 4.119213 + vertex_buffer: 0.385764 + vertex_buffer: 0.883154 + vertex_buffer: -0.179909 + vertex_buffer: -1.689864 + vertex_buffer: 6.573301 + vertex_buffer: 0.490967 + vertex_buffer: 0.579378 + vertex_buffer: -2.103655 + vertex_buffer: -0.163946 + vertex_buffer: 4.566119 + vertex_buffer: 0.382385 + vertex_buffer: 0.508573 + vertex_buffer: -6.407571 + vertex_buffer: 2.236021 + vertex_buffer: 1.560843 + vertex_buffer: 0.174399 + vertex_buffer: 0.397671 + vertex_buffer: -3.670075 + vertex_buffer: 2.360153 + vertex_buffer: 3.635230 + vertex_buffer: 0.318785 + vertex_buffer: 0.396235 + vertex_buffer: -3.177186 + vertex_buffer: 2.294265 + vertex_buffer: 3.775704 + vertex_buffer: 0.343364 + vertex_buffer: 0.400597 + vertex_buffer: -2.196121 + vertex_buffer: -4.598322 + vertex_buffer: 4.479786 + vertex_buffer: 0.396100 + vertex_buffer: 0.710217 + vertex_buffer: -6.234883 + vertex_buffer: -1.944430 + vertex_buffer: 1.663542 + vertex_buffer: 0.187885 + vertex_buffer: 0.588538 + vertex_buffer: -1.292924 + vertex_buffer: -9.295920 + vertex_buffer: 4.094063 + vertex_buffer: 0.430987 + vertex_buffer: 0.944065 + vertex_buffer: -3.210651 + vertex_buffer: -8.533278 + vertex_buffer: 2.802001 + vertex_buffer: 0.318993 + vertex_buffer: 0.898285 + vertex_buffer: -4.068926 + vertex_buffer: -7.993109 + vertex_buffer: 1.925119 + vertex_buffer: 0.266248 + vertex_buffer: 0.869701 + vertex_buffer: 0.000000 + vertex_buffer: 6.545390 + vertex_buffer: 5.027311 + vertex_buffer: 0.500023 + vertex_buffer: 0.190576 + vertex_buffer: 0.000000 + vertex_buffer: -9.403378 + vertex_buffer: 4.264492 + vertex_buffer: 0.499977 + vertex_buffer: 0.954453 + vertex_buffer: -2.724032 + vertex_buffer: 2.315802 + vertex_buffer: 3.777151 + vertex_buffer: 0.366170 + vertex_buffer: 0.398822 + vertex_buffer: -2.288460 + vertex_buffer: 2.398891 + vertex_buffer: 3.697603 + vertex_buffer: 0.393207 + vertex_buffer: 0.395537 + vertex_buffer: -1.998311 + vertex_buffer: 2.496547 + vertex_buffer: 3.689148 + vertex_buffer: 0.410373 + vertex_buffer: 0.391080 + vertex_buffer: -6.130040 + vertex_buffer: 3.399261 + vertex_buffer: 2.038516 + vertex_buffer: 0.194993 + vertex_buffer: 0.342102 + vertex_buffer: -2.288460 + vertex_buffer: 2.886504 + vertex_buffer: 3.775031 + vertex_buffer: 0.388665 + vertex_buffer: 0.362284 + vertex_buffer: -2.724032 + vertex_buffer: 2.961810 + vertex_buffer: 3.871767 + vertex_buffer: 0.365962 + vertex_buffer: 0.355971 + vertex_buffer: -3.177186 + vertex_buffer: 2.964136 + vertex_buffer: 3.876973 + vertex_buffer: 0.343364 + vertex_buffer: 0.355357 + vertex_buffer: -3.670075 + vertex_buffer: 2.927714 + vertex_buffer: 3.724325 + vertex_buffer: 0.318785 + vertex_buffer: 0.358340 + vertex_buffer: -4.018389 + vertex_buffer: 2.857357 + vertex_buffer: 3.482983 + vertex_buffer: 0.301415 + vertex_buffer: 0.363156 + vertex_buffer: -7.555811 + vertex_buffer: 4.106811 + vertex_buffer: -0.991917 + vertex_buffer: 0.058133 + vertex_buffer: 0.319076 + vertex_buffer: -4.018389 + vertex_buffer: 2.483695 + vertex_buffer: 3.440898 + vertex_buffer: 0.301415 + vertex_buffer: 0.387449 + vertex_buffer: 0.000000 + vertex_buffer: -2.521945 + vertex_buffer: 5.932265 + vertex_buffer: 0.499988 + vertex_buffer: 0.618434 + vertex_buffer: -1.776217 + vertex_buffer: -2.683946 + vertex_buffer: 5.213116 + vertex_buffer: 0.415838 + vertex_buffer: 0.624196 + vertex_buffer: -1.222237 + vertex_buffer: -1.182444 + vertex_buffer: 5.952465 + vertex_buffer: 0.445682 + vertex_buffer: 0.566077 + vertex_buffer: -0.731493 + vertex_buffer: -2.536683 + vertex_buffer: 5.815343 + vertex_buffer: 0.465844 + vertex_buffer: 0.620641 + vertex_buffer: 0.000000 + vertex_buffer: 3.271027 + vertex_buffer: 5.236015 + vertex_buffer: 0.499923 + vertex_buffer: 0.351524 + vertex_buffer: -4.135272 + vertex_buffer: -6.996638 + vertex_buffer: 2.671970 + vertex_buffer: 0.288719 + vertex_buffer: 0.819946 + vertex_buffer: -3.311811 + vertex_buffer: -7.660815 + vertex_buffer: 3.382963 + vertex_buffer: 0.335279 + vertex_buffer: 0.852820 + vertex_buffer: -1.313701 + vertex_buffer: -8.639995 + vertex_buffer: 4.702456 + vertex_buffer: 0.440512 + vertex_buffer: 0.902419 + vertex_buffer: -5.940524 + vertex_buffer: -6.223629 + vertex_buffer: -0.631468 + vertex_buffer: 0.128294 + vertex_buffer: 0.791941 + vertex_buffer: -1.998311 + vertex_buffer: 2.743838 + vertex_buffer: 3.744030 + vertex_buffer: 0.408772 + vertex_buffer: 0.373894 + vertex_buffer: -0.901447 + vertex_buffer: 1.236992 + vertex_buffer: 5.754256 + vertex_buffer: 0.455607 + vertex_buffer: 0.451801 + vertex_buffer: 0.000000 + vertex_buffer: -8.765243 + vertex_buffer: 4.891441 + vertex_buffer: 0.499877 + vertex_buffer: 0.908990 + vertex_buffer: -2.308977 + vertex_buffer: -8.974196 + vertex_buffer: 3.609070 + vertex_buffer: 0.375437 + vertex_buffer: 0.924192 + vertex_buffer: -6.954154 + vertex_buffer: -2.439843 + vertex_buffer: -0.131163 + vertex_buffer: 0.114210 + vertex_buffer: 0.615022 + vertex_buffer: -1.098819 + vertex_buffer: -4.458788 + vertex_buffer: 5.120727 + vertex_buffer: 0.448662 + vertex_buffer: 0.695278 + vertex_buffer: -1.181124 + vertex_buffer: -4.579996 + vertex_buffer: 5.189564 + vertex_buffer: 0.448020 + vertex_buffer: 0.704632 + vertex_buffer: -1.255818 + vertex_buffer: -4.787901 + vertex_buffer: 5.237051 + vertex_buffer: 0.447112 + vertex_buffer: 0.715808 + vertex_buffer: -1.325085 + vertex_buffer: -5.106507 + vertex_buffer: 5.205010 + vertex_buffer: 0.444832 + vertex_buffer: 0.730794 + vertex_buffer: -1.546388 + vertex_buffer: -5.819392 + vertex_buffer: 4.757893 + vertex_buffer: 0.430012 + vertex_buffer: 0.766809 + vertex_buffer: -1.953754 + vertex_buffer: -4.183892 + vertex_buffer: 4.431713 + vertex_buffer: 0.406787 + vertex_buffer: 0.685673 + vertex_buffer: -2.117802 + vertex_buffer: -4.137093 + vertex_buffer: 4.555096 + vertex_buffer: 0.400738 + vertex_buffer: 0.681069 + vertex_buffer: -2.285339 + vertex_buffer: -4.051196 + vertex_buffer: 4.582438 + vertex_buffer: 0.392400 + vertex_buffer: 0.677703 + vertex_buffer: -2.850160 + vertex_buffer: -3.665720 + vertex_buffer: 4.484994 + vertex_buffer: 0.367856 + vertex_buffer: 0.663919 + vertex_buffer: -5.278538 + vertex_buffer: -2.238942 + vertex_buffer: 2.861224 + vertex_buffer: 0.247923 + vertex_buffer: 0.601333 + vertex_buffer: -0.946709 + vertex_buffer: 1.907628 + vertex_buffer: 5.196779 + vertex_buffer: 0.452770 + vertex_buffer: 0.420850 + vertex_buffer: -1.314173 + vertex_buffer: 3.104912 + vertex_buffer: 4.231404 + vertex_buffer: 0.436392 + vertex_buffer: 0.359887 + vertex_buffer: -1.780000 + vertex_buffer: 2.860000 + vertex_buffer: 3.881555 + vertex_buffer: 0.416164 + vertex_buffer: 0.368714 + vertex_buffer: -1.845110 + vertex_buffer: -4.098880 + vertex_buffer: 4.247264 + vertex_buffer: 0.413386 + vertex_buffer: 0.692366 + vertex_buffer: -5.436187 + vertex_buffer: -4.030482 + vertex_buffer: 2.109852 + vertex_buffer: 0.228018 + vertex_buffer: 0.683572 + vertex_buffer: -0.766444 + vertex_buffer: 3.182131 + vertex_buffer: 4.861453 + vertex_buffer: 0.468268 + vertex_buffer: 0.352671 + vertex_buffer: -1.938616 + vertex_buffer: -6.614410 + vertex_buffer: 4.521085 + vertex_buffer: 0.411362 + vertex_buffer: 0.804327 + vertex_buffer: 0.000000 + vertex_buffer: 1.059413 + vertex_buffer: 6.774605 + vertex_buffer: 0.499989 + vertex_buffer: 0.469825 + vertex_buffer: -0.516573 + vertex_buffer: 1.583572 + vertex_buffer: 6.148363 + vertex_buffer: 0.479154 + vertex_buffer: 0.442654 + vertex_buffer: 0.000000 + vertex_buffer: 1.728369 + vertex_buffer: 6.316750 + vertex_buffer: 0.499974 + vertex_buffer: 0.439637 + vertex_buffer: -1.246815 + vertex_buffer: 0.230297 + vertex_buffer: 5.681036 + vertex_buffer: 0.432112 + vertex_buffer: 0.493589 + vertex_buffer: 0.000000 + vertex_buffer: -7.942194 + vertex_buffer: 5.181173 + vertex_buffer: 0.499886 + vertex_buffer: 0.866917 + vertex_buffer: 0.000000 + vertex_buffer: -6.991499 + vertex_buffer: 5.153478 + vertex_buffer: 0.499913 + vertex_buffer: 0.821729 + vertex_buffer: -0.997827 + vertex_buffer: -6.930921 + vertex_buffer: 4.979576 + vertex_buffer: 0.456549 + vertex_buffer: 0.819201 + vertex_buffer: -3.288807 + vertex_buffer: -5.382514 + vertex_buffer: 3.795752 + vertex_buffer: 0.344549 + vertex_buffer: 0.745439 + vertex_buffer: -2.311631 + vertex_buffer: -1.566237 + vertex_buffer: 4.590085 + vertex_buffer: 0.378909 + vertex_buffer: 0.574010 + vertex_buffer: -2.680250 + vertex_buffer: -6.111567 + vertex_buffer: 4.096152 + vertex_buffer: 0.374293 + vertex_buffer: 0.780185 + vertex_buffer: -3.832928 + vertex_buffer: -1.537326 + vertex_buffer: 4.137731 + vertex_buffer: 0.319688 + vertex_buffer: 0.570738 + vertex_buffer: -2.961860 + vertex_buffer: -2.274215 + vertex_buffer: 4.440943 + vertex_buffer: 0.357155 + vertex_buffer: 0.604270 + vertex_buffer: -4.386901 + vertex_buffer: -2.683286 + vertex_buffer: 3.643886 + vertex_buffer: 0.295284 + vertex_buffer: 0.621581 + vertex_buffer: -1.217295 + vertex_buffer: -7.834465 + vertex_buffer: 4.969286 + vertex_buffer: 0.447750 + vertex_buffer: 0.862477 + vertex_buffer: -1.542374 + vertex_buffer: -0.136843 + vertex_buffer: 5.201008 + vertex_buffer: 0.410986 + vertex_buffer: 0.508723 + vertex_buffer: -3.878377 + vertex_buffer: -6.041764 + vertex_buffer: 3.311079 + vertex_buffer: 0.313951 + vertex_buffer: 0.775308 + vertex_buffer: -3.084037 + vertex_buffer: -6.809842 + vertex_buffer: 3.814195 + vertex_buffer: 0.354128 + vertex_buffer: 0.812553 + vertex_buffer: -3.747321 + vertex_buffer: -4.503545 + vertex_buffer: 3.726453 + vertex_buffer: 0.324548 + vertex_buffer: 0.703993 + vertex_buffer: -6.094129 + vertex_buffer: -3.205991 + vertex_buffer: 1.473482 + vertex_buffer: 0.189096 + vertex_buffer: 0.646300 + vertex_buffer: -4.588995 + vertex_buffer: -4.728726 + vertex_buffer: 2.983221 + vertex_buffer: 0.279777 + vertex_buffer: 0.714658 + vertex_buffer: -6.583231 + vertex_buffer: -3.941269 + vertex_buffer: 0.070268 + vertex_buffer: 0.133823 + vertex_buffer: 0.682701 + vertex_buffer: -3.492580 + vertex_buffer: -3.195820 + vertex_buffer: 4.130198 + vertex_buffer: 0.336768 + vertex_buffer: 0.644733 + vertex_buffer: -1.255543 + vertex_buffer: 0.802341 + vertex_buffer: 5.307551 + vertex_buffer: 0.429884 + vertex_buffer: 0.466522 + vertex_buffer: -1.126122 + vertex_buffer: -0.933602 + vertex_buffer: 6.538785 + vertex_buffer: 0.455528 + vertex_buffer: 0.548623 + vertex_buffer: -1.443109 + vertex_buffer: -1.142774 + vertex_buffer: 5.905127 + vertex_buffer: 0.437114 + vertex_buffer: 0.558896 + vertex_buffer: -0.923043 + vertex_buffer: -0.529042 + vertex_buffer: 7.003423 + vertex_buffer: 0.467288 + vertex_buffer: 0.529925 + vertex_buffer: -1.755386 + vertex_buffer: 3.529117 + vertex_buffer: 4.327696 + vertex_buffer: 0.414712 + vertex_buffer: 0.335220 + vertex_buffer: -2.632589 + vertex_buffer: 3.713828 + vertex_buffer: 4.364629 + vertex_buffer: 0.377046 + vertex_buffer: 0.322778 + vertex_buffer: -3.388062 + vertex_buffer: 3.721976 + vertex_buffer: 4.309028 + vertex_buffer: 0.344108 + vertex_buffer: 0.320151 + vertex_buffer: -4.075766 + vertex_buffer: 3.675413 + vertex_buffer: 4.076063 + vertex_buffer: 0.312876 + vertex_buffer: 0.322332 + vertex_buffer: -4.622910 + vertex_buffer: 3.474691 + vertex_buffer: 3.646321 + vertex_buffer: 0.283526 + vertex_buffer: 0.333190 + vertex_buffer: -5.171755 + vertex_buffer: 2.535753 + vertex_buffer: 2.670867 + vertex_buffer: 0.241246 + vertex_buffer: 0.382786 + vertex_buffer: -7.297331 + vertex_buffer: 0.763172 + vertex_buffer: -0.048769 + vertex_buffer: 0.102986 + vertex_buffer: 0.468763 + vertex_buffer: -4.706828 + vertex_buffer: 1.651000 + vertex_buffer: 3.109532 + vertex_buffer: 0.267612 + vertex_buffer: 0.424560 + vertex_buffer: -4.071712 + vertex_buffer: 1.476821 + vertex_buffer: 3.476944 + vertex_buffer: 0.297879 + vertex_buffer: 0.433176 + vertex_buffer: -3.269817 + vertex_buffer: 1.470659 + vertex_buffer: 3.731945 + vertex_buffer: 0.333434 + vertex_buffer: 0.433878 + vertex_buffer: -2.527572 + vertex_buffer: 1.617311 + vertex_buffer: 3.865444 + vertex_buffer: 0.366427 + vertex_buffer: 0.426116 + vertex_buffer: -1.970894 + vertex_buffer: 1.858505 + vertex_buffer: 3.961782 + vertex_buffer: 0.396012 + vertex_buffer: 0.416696 + vertex_buffer: -1.579543 + vertex_buffer: 2.097941 + vertex_buffer: 4.084996 + vertex_buffer: 0.420121 + vertex_buffer: 0.410228 + vertex_buffer: -7.664182 + vertex_buffer: 0.673132 + vertex_buffer: -2.435867 + vertex_buffer: 0.007561 + vertex_buffer: 0.480777 + vertex_buffer: -1.397041 + vertex_buffer: -1.340139 + vertex_buffer: 5.630378 + vertex_buffer: 0.432949 + vertex_buffer: 0.569518 + vertex_buffer: -0.884838 + vertex_buffer: 0.658740 + vertex_buffer: 6.233232 + vertex_buffer: 0.458639 + vertex_buffer: 0.479089 + vertex_buffer: -0.767097 + vertex_buffer: -0.968035 + vertex_buffer: 7.077932 + vertex_buffer: 0.473466 + vertex_buffer: 0.545744 + vertex_buffer: -0.460213 + vertex_buffer: -1.334106 + vertex_buffer: 6.787447 + vertex_buffer: 0.476088 + vertex_buffer: 0.563830 + vertex_buffer: -0.748618 + vertex_buffer: -1.067994 + vertex_buffer: 6.798303 + vertex_buffer: 0.468472 + vertex_buffer: 0.555057 + vertex_buffer: -1.236408 + vertex_buffer: -1.585568 + vertex_buffer: 5.480490 + vertex_buffer: 0.433991 + vertex_buffer: 0.582362 + vertex_buffer: -0.387306 + vertex_buffer: -1.409990 + vertex_buffer: 6.957705 + vertex_buffer: 0.483518 + vertex_buffer: 0.562984 + vertex_buffer: -0.319925 + vertex_buffer: -1.607931 + vertex_buffer: 6.508676 + vertex_buffer: 0.482483 + vertex_buffer: 0.577849 + vertex_buffer: -1.639633 + vertex_buffer: 2.556298 + vertex_buffer: 3.863736 + vertex_buffer: 0.426450 + vertex_buffer: 0.389799 + vertex_buffer: -1.255645 + vertex_buffer: 2.467144 + vertex_buffer: 4.203800 + vertex_buffer: 0.438999 + vertex_buffer: 0.396495 + vertex_buffer: -1.031362 + vertex_buffer: 2.382663 + vertex_buffer: 4.615849 + vertex_buffer: 0.450067 + vertex_buffer: 0.400434 + vertex_buffer: -4.253081 + vertex_buffer: 2.772296 + vertex_buffer: 3.315305 + vertex_buffer: 0.289712 + vertex_buffer: 0.368253 + vertex_buffer: -4.530000 + vertex_buffer: 2.910000 + vertex_buffer: 3.339685 + vertex_buffer: 0.276670 + vertex_buffer: 0.363373 + vertex_buffer: 0.463928 + vertex_buffer: 0.955357 + vertex_buffer: 6.633583 + vertex_buffer: 0.517862 + vertex_buffer: 0.471948 + vertex_buffer: 4.253081 + vertex_buffer: 2.577646 + vertex_buffer: 3.279702 + vertex_buffer: 0.710288 + vertex_buffer: 0.380764 + vertex_buffer: 0.416106 + vertex_buffer: -1.466449 + vertex_buffer: 6.447657 + vertex_buffer: 0.526227 + vertex_buffer: 0.573910 + vertex_buffer: 7.087960 + vertex_buffer: 5.434801 + vertex_buffer: 0.099620 + vertex_buffer: 0.895093 + vertex_buffer: 0.254141 + vertex_buffer: 2.628639 + vertex_buffer: 2.035898 + vertex_buffer: 3.848121 + vertex_buffer: 0.634070 + vertex_buffer: 0.409576 + vertex_buffer: 3.198363 + vertex_buffer: 1.985815 + vertex_buffer: 3.796952 + vertex_buffer: 0.661242 + vertex_buffer: 0.413025 + vertex_buffer: 3.775151 + vertex_buffer: 2.039402 + vertex_buffer: 3.646194 + vertex_buffer: 0.688880 + vertex_buffer: 0.409460 + vertex_buffer: 4.465819 + vertex_buffer: 2.422950 + vertex_buffer: 3.155168 + vertex_buffer: 0.725342 + vertex_buffer: 0.389131 + vertex_buffer: 2.164289 + vertex_buffer: 2.189867 + vertex_buffer: 3.851822 + vertex_buffer: 0.606630 + vertex_buffer: 0.403705 + vertex_buffer: 3.208229 + vertex_buffer: 3.223926 + vertex_buffer: 4.115822 + vertex_buffer: 0.654766 + vertex_buffer: 0.344011 + vertex_buffer: 2.673803 + vertex_buffer: 3.205337 + vertex_buffer: 4.092203 + vertex_buffer: 0.629906 + vertex_buffer: 0.346076 + vertex_buffer: 3.745193 + vertex_buffer: 3.165286 + vertex_buffer: 3.972409 + vertex_buffer: 0.680678 + vertex_buffer: 0.347265 + vertex_buffer: 4.161018 + vertex_buffer: 3.059069 + vertex_buffer: 3.719554 + vertex_buffer: 0.702097 + vertex_buffer: 0.353591 + vertex_buffer: 5.062006 + vertex_buffer: 1.934418 + vertex_buffer: 2.776093 + vertex_buffer: 0.752212 + vertex_buffer: 0.410805 + vertex_buffer: 2.266659 + vertex_buffer: -7.425768 + vertex_buffer: 4.389812 + vertex_buffer: 0.602918 + vertex_buffer: 0.842863 + vertex_buffer: 4.445859 + vertex_buffer: 2.663991 + vertex_buffer: 3.173422 + vertex_buffer: 0.719902 + vertex_buffer: 0.375600 + vertex_buffer: 7.214530 + vertex_buffer: 2.263009 + vertex_buffer: 0.073150 + vertex_buffer: 0.893693 + vertex_buffer: 0.399960 + vertex_buffer: 5.799793 + vertex_buffer: 2.349546 + vertex_buffer: 2.204059 + vertex_buffer: 0.790082 + vertex_buffer: 0.391354 + vertex_buffer: 2.844939 + vertex_buffer: -0.720868 + vertex_buffer: 4.433130 + vertex_buffer: 0.643998 + vertex_buffer: 0.534488 + vertex_buffer: 0.711452 + vertex_buffer: -3.329355 + vertex_buffer: 5.877044 + vertex_buffer: 0.528249 + vertex_buffer: 0.650404 + vertex_buffer: 0.606033 + vertex_buffer: -3.924562 + vertex_buffer: 5.444923 + vertex_buffer: 0.525850 + vertex_buffer: 0.680191 + vertex_buffer: 1.431615 + vertex_buffer: -3.500953 + vertex_buffer: 5.496189 + vertex_buffer: 0.560215 + vertex_buffer: 0.657229 + vertex_buffer: 1.914910 + vertex_buffer: -3.803146 + vertex_buffer: 5.028930 + vertex_buffer: 0.585384 + vertex_buffer: 0.666541 + vertex_buffer: 1.131043 + vertex_buffer: -3.973937 + vertex_buffer: 5.189648 + vertex_buffer: 0.549626 + vertex_buffer: 0.680861 + vertex_buffer: 1.563548 + vertex_buffer: -4.082763 + vertex_buffer: 4.842263 + vertex_buffer: 0.571228 + vertex_buffer: 0.682692 + vertex_buffer: 2.650112 + vertex_buffer: -5.003649 + vertex_buffer: 4.188483 + vertex_buffer: 0.624852 + vertex_buffer: 0.728099 + vertex_buffer: 0.427049 + vertex_buffer: -1.094134 + vertex_buffer: 7.360529 + vertex_buffer: 0.513050 + vertex_buffer: 0.547282 + vertex_buffer: 0.496396 + vertex_buffer: -0.475659 + vertex_buffer: 7.440358 + vertex_buffer: 0.515097 + vertex_buffer: 0.527252 + vertex_buffer: 5.253307 + vertex_buffer: 3.881582 + vertex_buffer: 3.363159 + vertex_buffer: 0.742247 + vertex_buffer: 0.314507 + vertex_buffer: 1.718698 + vertex_buffer: 0.974609 + vertex_buffer: 4.558359 + vertex_buffer: 0.598631 + vertex_buffer: 0.454979 + vertex_buffer: 1.608635 + vertex_buffer: -0.942516 + vertex_buffer: 5.814193 + vertex_buffer: 0.570338 + vertex_buffer: 0.548575 + vertex_buffer: 1.651267 + vertex_buffer: -0.610868 + vertex_buffer: 5.581319 + vertex_buffer: 0.578632 + vertex_buffer: 0.533623 + vertex_buffer: 4.765501 + vertex_buffer: -0.701554 + vertex_buffer: 3.534632 + vertex_buffer: 0.723087 + vertex_buffer: 0.532054 + vertex_buffer: 0.478306 + vertex_buffer: 0.295766 + vertex_buffer: 7.101013 + vertex_buffer: 0.516446 + vertex_buffer: 0.499639 + vertex_buffer: 3.734964 + vertex_buffer: 4.508230 + vertex_buffer: 4.550454 + vertex_buffer: 0.662801 + vertex_buffer: 0.282918 + vertex_buffer: 4.588603 + vertex_buffer: 4.302037 + vertex_buffer: 4.048484 + vertex_buffer: 0.703624 + vertex_buffer: 0.293271 + vertex_buffer: 6.279331 + vertex_buffer: 6.615427 + vertex_buffer: 1.425850 + vertex_buffer: 0.830705 + vertex_buffer: 0.193814 + vertex_buffer: 1.220941 + vertex_buffer: 4.142165 + vertex_buffer: 5.106035 + vertex_buffer: 0.552386 + vertex_buffer: 0.302568 + vertex_buffer: 2.193489 + vertex_buffer: 3.100317 + vertex_buffer: 4.000575 + vertex_buffer: 0.607610 + vertex_buffer: 0.353888 + vertex_buffer: 3.102642 + vertex_buffer: -4.352984 + vertex_buffer: 4.095905 + vertex_buffer: 0.645429 + vertex_buffer: 0.696707 + vertex_buffer: 6.719682 + vertex_buffer: -4.788645 + vertex_buffer: -1.745401 + vertex_buffer: 0.932695 + vertex_buffer: 0.730105 + vertex_buffer: 1.193824 + vertex_buffer: -1.306795 + vertex_buffer: 5.737747 + vertex_buffer: 0.557261 + vertex_buffer: 0.572826 + vertex_buffer: 0.729766 + vertex_buffer: -1.593712 + vertex_buffer: 5.833208 + vertex_buffer: 0.542902 + vertex_buffer: 0.584792 + vertex_buffer: 2.456206 + vertex_buffer: -4.342621 + vertex_buffer: 4.283884 + vertex_buffer: 0.618026 + vertex_buffer: 0.694711 + vertex_buffer: 2.204823 + vertex_buffer: -4.304508 + vertex_buffer: 4.162499 + vertex_buffer: 0.607591 + vertex_buffer: 0.694203 + vertex_buffer: 4.985894 + vertex_buffer: 4.802461 + vertex_buffer: 3.751977 + vertex_buffer: 0.722943 + vertex_buffer: 0.271963 + vertex_buffer: 1.592294 + vertex_buffer: -1.257709 + vertex_buffer: 5.456949 + vertex_buffer: 0.577414 + vertex_buffer: 0.563167 + vertex_buffer: 2.644548 + vertex_buffer: 4.524654 + vertex_buffer: 4.921559 + vertex_buffer: 0.614083 + vertex_buffer: 0.281387 + vertex_buffer: 2.760292 + vertex_buffer: 5.100971 + vertex_buffer: 5.015990 + vertex_buffer: 0.616907 + vertex_buffer: 0.255886 + vertex_buffer: 3.523964 + vertex_buffer: 8.005976 + vertex_buffer: 3.729163 + vertex_buffer: 0.668509 + vertex_buffer: 0.119914 + vertex_buffer: 5.599763 + vertex_buffer: 5.715470 + vertex_buffer: 2.724259 + vertex_buffer: 0.770092 + vertex_buffer: 0.232021 + vertex_buffer: 3.063932 + vertex_buffer: 6.566144 + vertex_buffer: 4.529981 + vertex_buffer: 0.635536 + vertex_buffer: 0.189249 + vertex_buffer: 5.720968 + vertex_buffer: 4.254584 + vertex_buffer: 2.830852 + vertex_buffer: 0.770391 + vertex_buffer: 0.299556 + vertex_buffer: 6.374393 + vertex_buffer: 4.785590 + vertex_buffer: 1.591691 + vertex_buffer: 0.826722 + vertex_buffer: 0.278755 + vertex_buffer: 0.672728 + vertex_buffer: -3.688016 + vertex_buffer: 5.737804 + vertex_buffer: 0.527121 + vertex_buffer: 0.666198 + vertex_buffer: 1.262560 + vertex_buffer: -3.787691 + vertex_buffer: 5.417779 + vertex_buffer: 0.553172 + vertex_buffer: 0.668527 + vertex_buffer: 1.732553 + vertex_buffer: -3.952767 + vertex_buffer: 5.000579 + vertex_buffer: 0.577238 + vertex_buffer: 0.673890 + vertex_buffer: 1.043625 + vertex_buffer: -1.464973 + vertex_buffer: 5.662455 + vertex_buffer: 0.554692 + vertex_buffer: 0.580066 + vertex_buffer: 2.321234 + vertex_buffer: -4.329069 + vertex_buffer: 4.258156 + vertex_buffer: 0.611897 + vertex_buffer: 0.693961 + vertex_buffer: 2.056846 + vertex_buffer: -4.477671 + vertex_buffer: 4.520883 + vertex_buffer: 0.596961 + vertex_buffer: 0.706540 + vertex_buffer: 2.153084 + vertex_buffer: -4.276322 + vertex_buffer: 4.038093 + vertex_buffer: 0.596371 + vertex_buffer: 0.693953 + vertex_buffer: 0.946874 + vertex_buffer: -1.035249 + vertex_buffer: 6.512274 + vertex_buffer: 0.539958 + vertex_buffer: 0.557139 + vertex_buffer: 1.469132 + vertex_buffer: -4.036351 + vertex_buffer: 4.604908 + vertex_buffer: 0.568842 + vertex_buffer: 0.692366 + vertex_buffer: 1.024340 + vertex_buffer: -3.989851 + vertex_buffer: 4.926693 + vertex_buffer: 0.547818 + vertex_buffer: 0.692366 + vertex_buffer: 0.533422 + vertex_buffer: -3.993222 + vertex_buffer: 5.138202 + vertex_buffer: 0.524613 + vertex_buffer: 0.692366 + vertex_buffer: 0.769720 + vertex_buffer: -6.095394 + vertex_buffer: 4.985883 + vertex_buffer: 0.534090 + vertex_buffer: 0.779141 + vertex_buffer: 0.699606 + vertex_buffer: -5.291850 + vertex_buffer: 5.448304 + vertex_buffer: 0.527671 + vertex_buffer: 0.736226 + vertex_buffer: 0.669687 + vertex_buffer: -4.949770 + vertex_buffer: 5.509612 + vertex_buffer: 0.526913 + vertex_buffer: 0.717857 + vertex_buffer: 0.630947 + vertex_buffer: -4.695101 + vertex_buffer: 5.449371 + vertex_buffer: 0.526878 + vertex_buffer: 0.704626 + vertex_buffer: 0.583218 + vertex_buffer: -4.517982 + vertex_buffer: 5.339869 + vertex_buffer: 0.526967 + vertex_buffer: 0.695278 + vertex_buffer: 1.537170 + vertex_buffer: -4.423206 + vertex_buffer: 4.745470 + vertex_buffer: 0.572058 + vertex_buffer: 0.695278 + vertex_buffer: 1.615600 + vertex_buffer: -4.475942 + vertex_buffer: 4.813632 + vertex_buffer: 0.573521 + vertex_buffer: 0.703540 + vertex_buffer: 1.729053 + vertex_buffer: -4.618680 + vertex_buffer: 4.854463 + vertex_buffer: 0.576838 + vertex_buffer: 0.711846 + vertex_buffer: 1.838624 + vertex_buffer: -4.828746 + vertex_buffer: 4.823737 + vertex_buffer: 0.581691 + vertex_buffer: 0.720063 + vertex_buffer: 2.368250 + vertex_buffer: -3.106237 + vertex_buffer: 4.868096 + vertex_buffer: 0.609945 + vertex_buffer: 0.639910 + vertex_buffer: 7.542244 + vertex_buffer: -1.049282 + vertex_buffer: -2.431321 + vertex_buffer: 0.986046 + vertex_buffer: 0.560034 + vertex_buffer: 1.826614 + vertex_buffer: -4.399531 + vertex_buffer: 4.399021 + vertex_buffer: 0.586800 + vertex_buffer: 0.695400 + vertex_buffer: 1.929558 + vertex_buffer: -4.411831 + vertex_buffer: 4.497052 + vertex_buffer: 0.590372 + vertex_buffer: 0.701823 + vertex_buffer: 0.597442 + vertex_buffer: -2.013686 + vertex_buffer: 5.866456 + vertex_buffer: 0.531915 + vertex_buffer: 0.601537 + vertex_buffer: 1.405627 + vertex_buffer: -1.714196 + vertex_buffer: 5.241087 + vertex_buffer: 0.577268 + vertex_buffer: 0.585935 + vertex_buffer: 0.662449 + vertex_buffer: -1.819321 + vertex_buffer: 5.863759 + vertex_buffer: 0.536915 + vertex_buffer: 0.593786 + vertex_buffer: 2.342340 + vertex_buffer: 0.572222 + vertex_buffer: 4.294303 + vertex_buffer: 0.627543 + vertex_buffer: 0.473352 + vertex_buffer: 3.327324 + vertex_buffer: 0.104863 + vertex_buffer: 4.113860 + vertex_buffer: 0.665586 + vertex_buffer: 0.495951 + vertex_buffer: 1.726175 + vertex_buffer: -0.919165 + vertex_buffer: 5.273355 + vertex_buffer: 0.588354 + vertex_buffer: 0.546862 + vertex_buffer: 5.133204 + vertex_buffer: 7.485602 + vertex_buffer: 2.660442 + vertex_buffer: 0.757824 + vertex_buffer: 0.147676 + vertex_buffer: 4.538641 + vertex_buffer: 6.319907 + vertex_buffer: 3.683424 + vertex_buffer: 0.709250 + vertex_buffer: 0.201508 + vertex_buffer: 3.986562 + vertex_buffer: 5.109487 + vertex_buffer: 4.466315 + vertex_buffer: 0.672684 + vertex_buffer: 0.256581 + vertex_buffer: 2.169681 + vertex_buffer: -5.440433 + vertex_buffer: 4.455874 + vertex_buffer: 0.600409 + vertex_buffer: 0.749005 + vertex_buffer: 1.395634 + vertex_buffer: 5.011963 + vertex_buffer: 5.316032 + vertex_buffer: 0.558266 + vertex_buffer: 0.261672 + vertex_buffer: 1.619500 + vertex_buffer: 6.599217 + vertex_buffer: 4.921106 + vertex_buffer: 0.570304 + vertex_buffer: 0.187871 + vertex_buffer: 1.891399 + vertex_buffer: 8.236377 + vertex_buffer: 4.274997 + vertex_buffer: 0.588166 + vertex_buffer: 0.109044 + vertex_buffer: 4.195832 + vertex_buffer: 2.235205 + vertex_buffer: 3.375099 + vertex_buffer: 0.711045 + vertex_buffer: 0.398952 + vertex_buffer: 5.733342 + vertex_buffer: 1.411738 + vertex_buffer: 2.431726 + vertex_buffer: 0.781070 + vertex_buffer: 0.435405 + vertex_buffer: 1.859887 + vertex_buffer: 2.355757 + vertex_buffer: 3.843181 + vertex_buffer: 0.587247 + vertex_buffer: 0.398932 + vertex_buffer: 4.988612 + vertex_buffer: 3.074654 + vertex_buffer: 3.083858 + vertex_buffer: 0.742870 + vertex_buffer: 0.355446 + vertex_buffer: 1.303263 + vertex_buffer: 1.416453 + vertex_buffer: 4.831091 + vertex_buffer: 0.572156 + vertex_buffer: 0.437652 + vertex_buffer: 1.305757 + vertex_buffer: -0.672779 + vertex_buffer: 6.415959 + vertex_buffer: 0.551868 + vertex_buffer: 0.536570 + vertex_buffer: 6.465170 + vertex_buffer: 0.937119 + vertex_buffer: 1.689873 + vertex_buffer: 0.821442 + vertex_buffer: 0.457556 + vertex_buffer: 5.258659 + vertex_buffer: 0.945811 + vertex_buffer: 2.974312 + vertex_buffer: 0.752702 + vertex_buffer: 0.457182 + vertex_buffer: 4.432338 + vertex_buffer: 0.722096 + vertex_buffer: 3.522615 + vertex_buffer: 0.713757 + vertex_buffer: 0.467627 + vertex_buffer: 3.300681 + vertex_buffer: 0.861641 + vertex_buffer: 3.872784 + vertex_buffer: 0.667113 + vertex_buffer: 0.460673 + vertex_buffer: 2.430178 + vertex_buffer: 1.131492 + vertex_buffer: 4.039035 + vertex_buffer: 0.631101 + vertex_buffer: 0.447154 + vertex_buffer: 1.820731 + vertex_buffer: 1.467954 + vertex_buffer: 4.224124 + vertex_buffer: 0.600862 + vertex_buffer: 0.432473 + vertex_buffer: 0.563221 + vertex_buffer: 2.307693 + vertex_buffer: 5.566789 + vertex_buffer: 0.523481 + vertex_buffer: 0.405627 + vertex_buffer: 6.338145 + vertex_buffer: -0.529279 + vertex_buffer: 1.881175 + vertex_buffer: 0.810748 + vertex_buffer: 0.523926 + vertex_buffer: 5.587698 + vertex_buffer: 3.208071 + vertex_buffer: 2.687839 + vertex_buffer: 0.771046 + vertex_buffer: 0.348959 + vertex_buffer: 0.242624 + vertex_buffer: -1.462857 + vertex_buffer: 7.071491 + vertex_buffer: 0.509127 + vertex_buffer: 0.562718 + vertex_buffer: 1.611251 + vertex_buffer: 0.339326 + vertex_buffer: 4.895421 + vertex_buffer: 0.595293 + vertex_buffer: 0.485024 + vertex_buffer: 7.743095 + vertex_buffer: 2.364999 + vertex_buffer: -2.005167 + vertex_buffer: 0.980531 + vertex_buffer: 0.401564 + vertex_buffer: 1.391142 + vertex_buffer: 1.851048 + vertex_buffer: 4.448999 + vertex_buffer: 0.573500 + vertex_buffer: 0.420000 + vertex_buffer: 1.785794 + vertex_buffer: -0.978284 + vertex_buffer: 4.850470 + vertex_buffer: 0.602995 + vertex_buffer: 0.548688 + vertex_buffer: 4.670959 + vertex_buffer: 2.664461 + vertex_buffer: 3.084075 + vertex_buffer: 0.733530 + vertex_buffer: 0.376977 + vertex_buffer: 1.333970 + vertex_buffer: -0.283761 + vertex_buffer: 6.097047 + vertex_buffer: 0.560611 + vertex_buffer: 0.519017 + vertex_buffer: 7.270895 + vertex_buffer: -2.890917 + vertex_buffer: -2.252455 + vertex_buffer: 0.967686 + vertex_buffer: 0.644357 + vertex_buffer: 1.856432 + vertex_buffer: 2.585245 + vertex_buffer: 3.757904 + vertex_buffer: 0.580985 + vertex_buffer: 0.387160 + vertex_buffer: 0.923388 + vertex_buffer: 0.073076 + vertex_buffer: 6.671944 + vertex_buffer: 0.537728 + vertex_buffer: 0.505385 + vertex_buffer: 5.000589 + vertex_buffer: -6.135128 + vertex_buffer: 1.892523 + vertex_buffer: 0.760966 + vertex_buffer: 0.779753 + vertex_buffer: 5.085276 + vertex_buffer: -7.178590 + vertex_buffer: 0.714711 + vertex_buffer: 0.801779 + vertex_buffer: 0.831938 + vertex_buffer: 7.159291 + vertex_buffer: -0.811820 + vertex_buffer: -0.072044 + vertex_buffer: 0.892441 + vertex_buffer: 0.540761 + vertex_buffer: 5.843051 + vertex_buffer: -5.248023 + vertex_buffer: 0.924091 + vertex_buffer: 0.816351 + vertex_buffer: 0.740260 + vertex_buffer: 6.847258 + vertex_buffer: 3.662916 + vertex_buffer: 0.724695 + vertex_buffer: 0.865595 + vertex_buffer: 0.333687 + vertex_buffer: 2.412942 + vertex_buffer: -8.258853 + vertex_buffer: 4.119213 + vertex_buffer: 0.614074 + vertex_buffer: 0.883246 + vertex_buffer: 0.179909 + vertex_buffer: -1.689864 + vertex_buffer: 6.573301 + vertex_buffer: 0.508953 + vertex_buffer: 0.579438 + vertex_buffer: 2.103655 + vertex_buffer: -0.163946 + vertex_buffer: 4.566119 + vertex_buffer: 0.617942 + vertex_buffer: 0.508316 + vertex_buffer: 6.407571 + vertex_buffer: 2.236021 + vertex_buffer: 1.560843 + vertex_buffer: 0.825608 + vertex_buffer: 0.397675 + vertex_buffer: 3.670075 + vertex_buffer: 2.360153 + vertex_buffer: 3.635230 + vertex_buffer: 0.681215 + vertex_buffer: 0.396235 + vertex_buffer: 3.177186 + vertex_buffer: 2.294265 + vertex_buffer: 3.775704 + vertex_buffer: 0.656636 + vertex_buffer: 0.400597 + vertex_buffer: 2.196121 + vertex_buffer: -4.598322 + vertex_buffer: 4.479786 + vertex_buffer: 0.603900 + vertex_buffer: 0.710217 + vertex_buffer: 6.234883 + vertex_buffer: -1.944430 + vertex_buffer: 1.663542 + vertex_buffer: 0.812086 + vertex_buffer: 0.588539 + vertex_buffer: 1.292924 + vertex_buffer: -9.295920 + vertex_buffer: 4.094063 + vertex_buffer: 0.568013 + vertex_buffer: 0.944565 + vertex_buffer: 3.210651 + vertex_buffer: -8.533278 + vertex_buffer: 2.802001 + vertex_buffer: 0.681008 + vertex_buffer: 0.898285 + vertex_buffer: 4.068926 + vertex_buffer: -7.993109 + vertex_buffer: 1.925119 + vertex_buffer: 0.733752 + vertex_buffer: 0.869701 + vertex_buffer: 2.724032 + vertex_buffer: 2.315802 + vertex_buffer: 3.777151 + vertex_buffer: 0.633830 + vertex_buffer: 0.398822 + vertex_buffer: 2.288460 + vertex_buffer: 2.398891 + vertex_buffer: 3.697603 + vertex_buffer: 0.606793 + vertex_buffer: 0.395537 + vertex_buffer: 1.998311 + vertex_buffer: 2.496547 + vertex_buffer: 3.689148 + vertex_buffer: 0.589660 + vertex_buffer: 0.391062 + vertex_buffer: 6.130040 + vertex_buffer: 3.399261 + vertex_buffer: 2.038516 + vertex_buffer: 0.805016 + vertex_buffer: 0.342108 + vertex_buffer: 2.288460 + vertex_buffer: 2.886504 + vertex_buffer: 3.775031 + vertex_buffer: 0.611335 + vertex_buffer: 0.362284 + vertex_buffer: 2.724032 + vertex_buffer: 2.961810 + vertex_buffer: 3.871767 + vertex_buffer: 0.634038 + vertex_buffer: 0.355971 + vertex_buffer: 3.177186 + vertex_buffer: 2.964136 + vertex_buffer: 3.876973 + vertex_buffer: 0.656636 + vertex_buffer: 0.355357 + vertex_buffer: 3.670075 + vertex_buffer: 2.927714 + vertex_buffer: 3.724325 + vertex_buffer: 0.681215 + vertex_buffer: 0.358340 + vertex_buffer: 4.018389 + vertex_buffer: 2.857357 + vertex_buffer: 3.482983 + vertex_buffer: 0.698585 + vertex_buffer: 0.363156 + vertex_buffer: 7.555811 + vertex_buffer: 4.106811 + vertex_buffer: -0.991917 + vertex_buffer: 0.941867 + vertex_buffer: 0.319076 + vertex_buffer: 4.018389 + vertex_buffer: 2.483695 + vertex_buffer: 3.440898 + vertex_buffer: 0.698585 + vertex_buffer: 0.387449 + vertex_buffer: 1.776217 + vertex_buffer: -2.683946 + vertex_buffer: 5.213116 + vertex_buffer: 0.584177 + vertex_buffer: 0.624107 + vertex_buffer: 1.222237 + vertex_buffer: -1.182444 + vertex_buffer: 5.952465 + vertex_buffer: 0.554318 + vertex_buffer: 0.566077 + vertex_buffer: 0.731493 + vertex_buffer: -2.536683 + vertex_buffer: 5.815343 + vertex_buffer: 0.534154 + vertex_buffer: 0.620640 + vertex_buffer: 4.135272 + vertex_buffer: -6.996638 + vertex_buffer: 2.671970 + vertex_buffer: 0.711218 + vertex_buffer: 0.819975 + vertex_buffer: 3.311811 + vertex_buffer: -7.660815 + vertex_buffer: 3.382963 + vertex_buffer: 0.664630 + vertex_buffer: 0.852871 + vertex_buffer: 1.313701 + vertex_buffer: -8.639995 + vertex_buffer: 4.702456 + vertex_buffer: 0.559100 + vertex_buffer: 0.902632 + vertex_buffer: 5.940524 + vertex_buffer: -6.223629 + vertex_buffer: -0.631468 + vertex_buffer: 0.871706 + vertex_buffer: 0.791941 + vertex_buffer: 1.998311 + vertex_buffer: 2.743838 + vertex_buffer: 3.744030 + vertex_buffer: 0.591234 + vertex_buffer: 0.373894 + vertex_buffer: 0.901447 + vertex_buffer: 1.236992 + vertex_buffer: 5.754256 + vertex_buffer: 0.544341 + vertex_buffer: 0.451584 + vertex_buffer: 2.308977 + vertex_buffer: -8.974196 + vertex_buffer: 3.609070 + vertex_buffer: 0.624563 + vertex_buffer: 0.924192 + vertex_buffer: 6.954154 + vertex_buffer: -2.439843 + vertex_buffer: -0.131163 + vertex_buffer: 0.885770 + vertex_buffer: 0.615029 + vertex_buffer: 1.098819 + vertex_buffer: -4.458788 + vertex_buffer: 5.120727 + vertex_buffer: 0.551338 + vertex_buffer: 0.695278 + vertex_buffer: 1.181124 + vertex_buffer: -4.579996 + vertex_buffer: 5.189564 + vertex_buffer: 0.551980 + vertex_buffer: 0.704632 + vertex_buffer: 1.255818 + vertex_buffer: -4.787901 + vertex_buffer: 5.237051 + vertex_buffer: 0.552888 + vertex_buffer: 0.715808 + vertex_buffer: 1.325085 + vertex_buffer: -5.106507 + vertex_buffer: 5.205010 + vertex_buffer: 0.555168 + vertex_buffer: 0.730794 + vertex_buffer: 1.546388 + vertex_buffer: -5.819392 + vertex_buffer: 4.757893 + vertex_buffer: 0.569944 + vertex_buffer: 0.767035 + vertex_buffer: 1.953754 + vertex_buffer: -4.183892 + vertex_buffer: 4.431713 + vertex_buffer: 0.593203 + vertex_buffer: 0.685676 + vertex_buffer: 2.117802 + vertex_buffer: -4.137093 + vertex_buffer: 4.555096 + vertex_buffer: 0.599262 + vertex_buffer: 0.681069 + vertex_buffer: 2.285339 + vertex_buffer: -4.051196 + vertex_buffer: 4.582438 + vertex_buffer: 0.607600 + vertex_buffer: 0.677703 + vertex_buffer: 2.850160 + vertex_buffer: -3.665720 + vertex_buffer: 4.484994 + vertex_buffer: 0.631938 + vertex_buffer: 0.663500 + vertex_buffer: 5.278538 + vertex_buffer: -2.238942 + vertex_buffer: 2.861224 + vertex_buffer: 0.752033 + vertex_buffer: 0.601315 + vertex_buffer: 0.946709 + vertex_buffer: 1.907628 + vertex_buffer: 5.196779 + vertex_buffer: 0.547226 + vertex_buffer: 0.420395 + vertex_buffer: 1.314173 + vertex_buffer: 3.104912 + vertex_buffer: 4.231404 + vertex_buffer: 0.563544 + vertex_buffer: 0.359828 + vertex_buffer: 1.780000 + vertex_buffer: 2.860000 + vertex_buffer: 3.881555 + vertex_buffer: 0.583841 + vertex_buffer: 0.368714 + vertex_buffer: 1.845110 + vertex_buffer: -4.098880 + vertex_buffer: 4.247264 + vertex_buffer: 0.586614 + vertex_buffer: 0.692366 + vertex_buffer: 5.436187 + vertex_buffer: -4.030482 + vertex_buffer: 2.109852 + vertex_buffer: 0.771915 + vertex_buffer: 0.683578 + vertex_buffer: 0.766444 + vertex_buffer: 3.182131 + vertex_buffer: 4.861453 + vertex_buffer: 0.531597 + vertex_buffer: 0.352483 + vertex_buffer: 1.938616 + vertex_buffer: -6.614410 + vertex_buffer: 4.521085 + vertex_buffer: 0.588371 + vertex_buffer: 0.804441 + vertex_buffer: 0.516573 + vertex_buffer: 1.583572 + vertex_buffer: 6.148363 + vertex_buffer: 0.520797 + vertex_buffer: 0.442565 + vertex_buffer: 1.246815 + vertex_buffer: 0.230297 + vertex_buffer: 5.681036 + vertex_buffer: 0.567985 + vertex_buffer: 0.493479 + vertex_buffer: 0.997827 + vertex_buffer: -6.930921 + vertex_buffer: 4.979576 + vertex_buffer: 0.543283 + vertex_buffer: 0.819255 + vertex_buffer: 3.288807 + vertex_buffer: -5.382514 + vertex_buffer: 3.795752 + vertex_buffer: 0.655317 + vertex_buffer: 0.745515 + vertex_buffer: 2.311631 + vertex_buffer: -1.566237 + vertex_buffer: 4.590085 + vertex_buffer: 0.621009 + vertex_buffer: 0.574018 + vertex_buffer: 2.680250 + vertex_buffer: -6.111567 + vertex_buffer: 4.096152 + vertex_buffer: 0.625560 + vertex_buffer: 0.780312 + vertex_buffer: 3.832928 + vertex_buffer: -1.537326 + vertex_buffer: 4.137731 + vertex_buffer: 0.680198 + vertex_buffer: 0.570719 + vertex_buffer: 2.961860 + vertex_buffer: -2.274215 + vertex_buffer: 4.440943 + vertex_buffer: 0.642764 + vertex_buffer: 0.604338 + vertex_buffer: 4.386901 + vertex_buffer: -2.683286 + vertex_buffer: 3.643886 + vertex_buffer: 0.704663 + vertex_buffer: 0.621530 + vertex_buffer: 1.217295 + vertex_buffer: -7.834465 + vertex_buffer: 4.969286 + vertex_buffer: 0.552012 + vertex_buffer: 0.862592 + vertex_buffer: 1.542374 + vertex_buffer: -0.136843 + vertex_buffer: 5.201008 + vertex_buffer: 0.589072 + vertex_buffer: 0.508637 + vertex_buffer: 3.878377 + vertex_buffer: -6.041764 + vertex_buffer: 3.311079 + vertex_buffer: 0.685945 + vertex_buffer: 0.775357 + vertex_buffer: 3.084037 + vertex_buffer: -6.809842 + vertex_buffer: 3.814195 + vertex_buffer: 0.645735 + vertex_buffer: 0.812640 + vertex_buffer: 3.747321 + vertex_buffer: -4.503545 + vertex_buffer: 3.726453 + vertex_buffer: 0.675343 + vertex_buffer: 0.703978 + vertex_buffer: 6.094129 + vertex_buffer: -3.205991 + vertex_buffer: 1.473482 + vertex_buffer: 0.810858 + vertex_buffer: 0.646305 + vertex_buffer: 4.588995 + vertex_buffer: -4.728726 + vertex_buffer: 2.983221 + vertex_buffer: 0.720122 + vertex_buffer: 0.714667 + vertex_buffer: 6.583231 + vertex_buffer: -3.941269 + vertex_buffer: 0.070268 + vertex_buffer: 0.866152 + vertex_buffer: 0.682705 + vertex_buffer: 3.492580 + vertex_buffer: -3.195820 + vertex_buffer: 4.130198 + vertex_buffer: 0.663187 + vertex_buffer: 0.644597 + vertex_buffer: 1.255543 + vertex_buffer: 0.802341 + vertex_buffer: 5.307551 + vertex_buffer: 0.570082 + vertex_buffer: 0.466326 + vertex_buffer: 1.126122 + vertex_buffer: -0.933602 + vertex_buffer: 6.538785 + vertex_buffer: 0.544562 + vertex_buffer: 0.548376 + vertex_buffer: 1.443109 + vertex_buffer: -1.142774 + vertex_buffer: 5.905127 + vertex_buffer: 0.562759 + vertex_buffer: 0.558785 + vertex_buffer: 0.923043 + vertex_buffer: -0.529042 + vertex_buffer: 7.003423 + vertex_buffer: 0.531987 + vertex_buffer: 0.530140 + vertex_buffer: 1.755386 + vertex_buffer: 3.529117 + vertex_buffer: 4.327696 + vertex_buffer: 0.585271 + vertex_buffer: 0.335177 + vertex_buffer: 2.632589 + vertex_buffer: 3.713828 + vertex_buffer: 4.364629 + vertex_buffer: 0.622953 + vertex_buffer: 0.322779 + vertex_buffer: 3.388062 + vertex_buffer: 3.721976 + vertex_buffer: 4.309028 + vertex_buffer: 0.655896 + vertex_buffer: 0.320163 + vertex_buffer: 4.075766 + vertex_buffer: 3.675413 + vertex_buffer: 4.076063 + vertex_buffer: 0.687132 + vertex_buffer: 0.322346 + vertex_buffer: 4.622910 + vertex_buffer: 3.474691 + vertex_buffer: 3.646321 + vertex_buffer: 0.716482 + vertex_buffer: 0.333201 + vertex_buffer: 5.171755 + vertex_buffer: 2.535753 + vertex_buffer: 2.670867 + vertex_buffer: 0.758757 + vertex_buffer: 0.382787 + vertex_buffer: 7.297331 + vertex_buffer: 0.763172 + vertex_buffer: -0.048769 + vertex_buffer: 0.897013 + vertex_buffer: 0.468769 + vertex_buffer: 4.706828 + vertex_buffer: 1.651000 + vertex_buffer: 3.109532 + vertex_buffer: 0.732392 + vertex_buffer: 0.424547 + vertex_buffer: 4.071712 + vertex_buffer: 1.476821 + vertex_buffer: 3.476944 + vertex_buffer: 0.702114 + vertex_buffer: 0.433163 + vertex_buffer: 3.269817 + vertex_buffer: 1.470659 + vertex_buffer: 3.731945 + vertex_buffer: 0.666525 + vertex_buffer: 0.433866 + vertex_buffer: 2.527572 + vertex_buffer: 1.617311 + vertex_buffer: 3.865444 + vertex_buffer: 0.633505 + vertex_buffer: 0.426088 + vertex_buffer: 1.970894 + vertex_buffer: 1.858505 + vertex_buffer: 3.961782 + vertex_buffer: 0.603876 + vertex_buffer: 0.416587 + vertex_buffer: 1.579543 + vertex_buffer: 2.097941 + vertex_buffer: 4.084996 + vertex_buffer: 0.579658 + vertex_buffer: 0.409945 + vertex_buffer: 7.664182 + vertex_buffer: 0.673132 + vertex_buffer: -2.435867 + vertex_buffer: 0.992440 + vertex_buffer: 0.480777 + vertex_buffer: 1.397041 + vertex_buffer: -1.340139 + vertex_buffer: 5.630378 + vertex_buffer: 0.567192 + vertex_buffer: 0.569420 + vertex_buffer: 0.884838 + vertex_buffer: 0.658740 + vertex_buffer: 6.233232 + vertex_buffer: 0.541366 + vertex_buffer: 0.478899 + vertex_buffer: 0.767097 + vertex_buffer: -0.968035 + vertex_buffer: 7.077932 + vertex_buffer: 0.526564 + vertex_buffer: 0.546118 + vertex_buffer: 0.460213 + vertex_buffer: -1.334106 + vertex_buffer: 6.787447 + vertex_buffer: 0.523913 + vertex_buffer: 0.563830 + vertex_buffer: 0.748618 + vertex_buffer: -1.067994 + vertex_buffer: 6.798303 + vertex_buffer: 0.531529 + vertex_buffer: 0.555057 + vertex_buffer: 1.236408 + vertex_buffer: -1.585568 + vertex_buffer: 5.480490 + vertex_buffer: 0.566036 + vertex_buffer: 0.582329 + vertex_buffer: 0.387306 + vertex_buffer: -1.409990 + vertex_buffer: 6.957705 + vertex_buffer: 0.516311 + vertex_buffer: 0.563054 + vertex_buffer: 0.319925 + vertex_buffer: -1.607931 + vertex_buffer: 6.508676 + vertex_buffer: 0.517472 + vertex_buffer: 0.577877 + vertex_buffer: 1.639633 + vertex_buffer: 2.556298 + vertex_buffer: 3.863736 + vertex_buffer: 0.573595 + vertex_buffer: 0.389807 + vertex_buffer: 1.255645 + vertex_buffer: 2.467144 + vertex_buffer: 4.203800 + vertex_buffer: 0.560698 + vertex_buffer: 0.395332 + vertex_buffer: 1.031362 + vertex_buffer: 2.382663 + vertex_buffer: 4.615849 + vertex_buffer: 0.549756 + vertex_buffer: 0.399751 + vertex_buffer: 4.253081 + vertex_buffer: 2.772296 + vertex_buffer: 3.315305 + vertex_buffer: 0.710288 + vertex_buffer: 0.368253 + vertex_buffer: 4.530000 + vertex_buffer: 2.910000 + vertex_buffer: 3.339685 + vertex_buffer: 0.723330 + vertex_buffer: 0.363373 + index_buffer: 173 + index_buffer: 155 + index_buffer: 133 + index_buffer: 246 + index_buffer: 33 + index_buffer: 7 + index_buffer: 382 + index_buffer: 398 + index_buffer: 362 + index_buffer: 263 + index_buffer: 466 + index_buffer: 249 + index_buffer: 308 + index_buffer: 415 + index_buffer: 324 + index_buffer: 78 + index_buffer: 95 + index_buffer: 191 + index_buffer: 356 + index_buffer: 389 + index_buffer: 264 + index_buffer: 127 + index_buffer: 34 + index_buffer: 162 + index_buffer: 368 + index_buffer: 264 + index_buffer: 389 + index_buffer: 139 + index_buffer: 162 + index_buffer: 34 + index_buffer: 267 + index_buffer: 0 + index_buffer: 302 + index_buffer: 37 + index_buffer: 72 + index_buffer: 0 + index_buffer: 11 + index_buffer: 302 + index_buffer: 0 + index_buffer: 11 + index_buffer: 0 + index_buffer: 72 + index_buffer: 349 + index_buffer: 451 + index_buffer: 350 + index_buffer: 120 + index_buffer: 121 + index_buffer: 231 + index_buffer: 452 + index_buffer: 350 + index_buffer: 451 + index_buffer: 232 + index_buffer: 231 + index_buffer: 121 + index_buffer: 267 + index_buffer: 302 + index_buffer: 269 + index_buffer: 37 + index_buffer: 39 + index_buffer: 72 + index_buffer: 303 + index_buffer: 269 + index_buffer: 302 + index_buffer: 73 + index_buffer: 72 + index_buffer: 39 + index_buffer: 357 + index_buffer: 343 + index_buffer: 350 + index_buffer: 128 + index_buffer: 121 + index_buffer: 114 + index_buffer: 277 + index_buffer: 350 + index_buffer: 343 + index_buffer: 47 + index_buffer: 114 + index_buffer: 121 + index_buffer: 350 + index_buffer: 452 + index_buffer: 357 + index_buffer: 121 + index_buffer: 128 + index_buffer: 232 + index_buffer: 453 + index_buffer: 357 + index_buffer: 452 + index_buffer: 233 + index_buffer: 232 + index_buffer: 128 + index_buffer: 299 + index_buffer: 333 + index_buffer: 297 + index_buffer: 69 + index_buffer: 67 + index_buffer: 104 + index_buffer: 332 + index_buffer: 297 + index_buffer: 333 + index_buffer: 103 + index_buffer: 104 + index_buffer: 67 + index_buffer: 175 + index_buffer: 152 + index_buffer: 396 + index_buffer: 175 + index_buffer: 171 + index_buffer: 152 + index_buffer: 377 + index_buffer: 396 + index_buffer: 152 + index_buffer: 148 + index_buffer: 152 + index_buffer: 171 + index_buffer: 381 + index_buffer: 384 + index_buffer: 382 + index_buffer: 154 + index_buffer: 155 + index_buffer: 157 + index_buffer: 398 + index_buffer: 382 + index_buffer: 384 + index_buffer: 173 + index_buffer: 157 + index_buffer: 155 + index_buffer: 280 + index_buffer: 347 + index_buffer: 330 + index_buffer: 50 + index_buffer: 101 + index_buffer: 118 + index_buffer: 348 + index_buffer: 330 + index_buffer: 347 + index_buffer: 119 + index_buffer: 118 + index_buffer: 101 + index_buffer: 269 + index_buffer: 303 + index_buffer: 270 + index_buffer: 39 + index_buffer: 40 + index_buffer: 73 + index_buffer: 304 + index_buffer: 270 + index_buffer: 303 + index_buffer: 74 + index_buffer: 73 + index_buffer: 40 + index_buffer: 9 + index_buffer: 336 + index_buffer: 151 + index_buffer: 9 + index_buffer: 151 + index_buffer: 107 + index_buffer: 337 + index_buffer: 151 + index_buffer: 336 + index_buffer: 108 + index_buffer: 107 + index_buffer: 151 + index_buffer: 344 + index_buffer: 278 + index_buffer: 360 + index_buffer: 115 + index_buffer: 131 + index_buffer: 48 + index_buffer: 279 + index_buffer: 360 + index_buffer: 278 + index_buffer: 49 + index_buffer: 48 + index_buffer: 131 + index_buffer: 262 + index_buffer: 431 + index_buffer: 418 + index_buffer: 32 + index_buffer: 194 + index_buffer: 211 + index_buffer: 424 + index_buffer: 418 + index_buffer: 431 + index_buffer: 204 + index_buffer: 211 + index_buffer: 194 + index_buffer: 304 + index_buffer: 408 + index_buffer: 270 + index_buffer: 74 + index_buffer: 40 + index_buffer: 184 + index_buffer: 409 + index_buffer: 270 + index_buffer: 408 + index_buffer: 185 + index_buffer: 184 + index_buffer: 40 + index_buffer: 272 + index_buffer: 310 + index_buffer: 407 + index_buffer: 42 + index_buffer: 183 + index_buffer: 80 + index_buffer: 415 + index_buffer: 407 + index_buffer: 310 + index_buffer: 191 + index_buffer: 80 + index_buffer: 183 + index_buffer: 322 + index_buffer: 270 + index_buffer: 410 + index_buffer: 92 + index_buffer: 186 + index_buffer: 40 + index_buffer: 409 + index_buffer: 410 + index_buffer: 270 + index_buffer: 185 + index_buffer: 40 + index_buffer: 186 + index_buffer: 347 + index_buffer: 449 + index_buffer: 348 + index_buffer: 118 + index_buffer: 119 + index_buffer: 229 + index_buffer: 450 + index_buffer: 348 + index_buffer: 449 + index_buffer: 230 + index_buffer: 229 + index_buffer: 119 + index_buffer: 434 + index_buffer: 432 + index_buffer: 430 + index_buffer: 214 + index_buffer: 210 + index_buffer: 212 + index_buffer: 422 + index_buffer: 430 + index_buffer: 432 + index_buffer: 202 + index_buffer: 212 + index_buffer: 210 + index_buffer: 313 + index_buffer: 314 + index_buffer: 18 + index_buffer: 83 + index_buffer: 18 + index_buffer: 84 + index_buffer: 17 + index_buffer: 18 + index_buffer: 314 + index_buffer: 17 + index_buffer: 84 + index_buffer: 18 + index_buffer: 307 + index_buffer: 375 + index_buffer: 306 + index_buffer: 77 + index_buffer: 76 + index_buffer: 146 + index_buffer: 291 + index_buffer: 306 + index_buffer: 375 + index_buffer: 61 + index_buffer: 146 + index_buffer: 76 + index_buffer: 259 + index_buffer: 387 + index_buffer: 260 + index_buffer: 29 + index_buffer: 30 + index_buffer: 160 + index_buffer: 388 + index_buffer: 260 + index_buffer: 387 + index_buffer: 161 + index_buffer: 160 + index_buffer: 30 + index_buffer: 286 + index_buffer: 414 + index_buffer: 384 + index_buffer: 56 + index_buffer: 157 + index_buffer: 190 + index_buffer: 398 + index_buffer: 384 + index_buffer: 414 + index_buffer: 173 + index_buffer: 190 + index_buffer: 157 + index_buffer: 418 + index_buffer: 424 + index_buffer: 406 + index_buffer: 194 + index_buffer: 182 + index_buffer: 204 + index_buffer: 335 + index_buffer: 406 + index_buffer: 424 + index_buffer: 106 + index_buffer: 204 + index_buffer: 182 + index_buffer: 367 + index_buffer: 416 + index_buffer: 364 + index_buffer: 138 + index_buffer: 135 + index_buffer: 192 + index_buffer: 434 + index_buffer: 364 + index_buffer: 416 + index_buffer: 214 + index_buffer: 192 + index_buffer: 135 + index_buffer: 391 + index_buffer: 423 + index_buffer: 327 + index_buffer: 165 + index_buffer: 98 + index_buffer: 203 + index_buffer: 358 + index_buffer: 327 + index_buffer: 423 + index_buffer: 129 + index_buffer: 203 + index_buffer: 98 + index_buffer: 298 + index_buffer: 301 + index_buffer: 284 + index_buffer: 68 + index_buffer: 54 + index_buffer: 71 + index_buffer: 251 + index_buffer: 284 + index_buffer: 301 + index_buffer: 21 + index_buffer: 71 + index_buffer: 54 + index_buffer: 4 + index_buffer: 275 + index_buffer: 5 + index_buffer: 4 + index_buffer: 5 + index_buffer: 45 + index_buffer: 281 + index_buffer: 5 + index_buffer: 275 + index_buffer: 51 + index_buffer: 45 + index_buffer: 5 + index_buffer: 254 + index_buffer: 373 + index_buffer: 253 + index_buffer: 24 + index_buffer: 23 + index_buffer: 144 + index_buffer: 374 + index_buffer: 253 + index_buffer: 373 + index_buffer: 145 + index_buffer: 144 + index_buffer: 23 + index_buffer: 320 + index_buffer: 321 + index_buffer: 307 + index_buffer: 90 + index_buffer: 77 + index_buffer: 91 + index_buffer: 375 + index_buffer: 307 + index_buffer: 321 + index_buffer: 146 + index_buffer: 91 + index_buffer: 77 + index_buffer: 280 + index_buffer: 425 + index_buffer: 411 + index_buffer: 50 + index_buffer: 187 + index_buffer: 205 + index_buffer: 427 + index_buffer: 411 + index_buffer: 425 + index_buffer: 207 + index_buffer: 205 + index_buffer: 187 + index_buffer: 421 + index_buffer: 313 + index_buffer: 200 + index_buffer: 201 + index_buffer: 200 + index_buffer: 83 + index_buffer: 18 + index_buffer: 200 + index_buffer: 313 + index_buffer: 18 + index_buffer: 83 + index_buffer: 200 + index_buffer: 335 + index_buffer: 321 + index_buffer: 406 + index_buffer: 106 + index_buffer: 182 + index_buffer: 91 + index_buffer: 405 + index_buffer: 406 + index_buffer: 321 + index_buffer: 181 + index_buffer: 91 + index_buffer: 182 + index_buffer: 405 + index_buffer: 321 + index_buffer: 404 + index_buffer: 181 + index_buffer: 180 + index_buffer: 91 + index_buffer: 320 + index_buffer: 404 + index_buffer: 321 + index_buffer: 90 + index_buffer: 91 + index_buffer: 180 + index_buffer: 17 + index_buffer: 314 + index_buffer: 16 + index_buffer: 17 + index_buffer: 16 + index_buffer: 84 + index_buffer: 315 + index_buffer: 16 + index_buffer: 314 + index_buffer: 85 + index_buffer: 84 + index_buffer: 16 + index_buffer: 425 + index_buffer: 266 + index_buffer: 426 + index_buffer: 205 + index_buffer: 206 + index_buffer: 36 + index_buffer: 423 + index_buffer: 426 + index_buffer: 266 + index_buffer: 203 + index_buffer: 36 + index_buffer: 206 + index_buffer: 369 + index_buffer: 396 + index_buffer: 400 + index_buffer: 140 + index_buffer: 176 + index_buffer: 171 + index_buffer: 377 + index_buffer: 400 + index_buffer: 396 + index_buffer: 148 + index_buffer: 171 + index_buffer: 176 + index_buffer: 391 + index_buffer: 269 + index_buffer: 322 + index_buffer: 165 + index_buffer: 92 + index_buffer: 39 + index_buffer: 270 + index_buffer: 322 + index_buffer: 269 + index_buffer: 40 + index_buffer: 39 + index_buffer: 92 + index_buffer: 417 + index_buffer: 465 + index_buffer: 413 + index_buffer: 193 + index_buffer: 189 + index_buffer: 245 + index_buffer: 464 + index_buffer: 413 + index_buffer: 465 + index_buffer: 244 + index_buffer: 245 + index_buffer: 189 + index_buffer: 257 + index_buffer: 258 + index_buffer: 386 + index_buffer: 27 + index_buffer: 159 + index_buffer: 28 + index_buffer: 385 + index_buffer: 386 + index_buffer: 258 + index_buffer: 158 + index_buffer: 28 + index_buffer: 159 + index_buffer: 260 + index_buffer: 388 + index_buffer: 467 + index_buffer: 30 + index_buffer: 247 + index_buffer: 161 + index_buffer: 466 + index_buffer: 467 + index_buffer: 388 + index_buffer: 246 + index_buffer: 161 + index_buffer: 247 + index_buffer: 248 + index_buffer: 456 + index_buffer: 419 + index_buffer: 3 + index_buffer: 196 + index_buffer: 236 + index_buffer: 399 + index_buffer: 419 + index_buffer: 456 + index_buffer: 174 + index_buffer: 236 + index_buffer: 196 + index_buffer: 333 + index_buffer: 298 + index_buffer: 332 + index_buffer: 104 + index_buffer: 103 + index_buffer: 68 + index_buffer: 284 + index_buffer: 332 + index_buffer: 298 + index_buffer: 54 + index_buffer: 68 + index_buffer: 103 + index_buffer: 285 + index_buffer: 8 + index_buffer: 417 + index_buffer: 55 + index_buffer: 193 + index_buffer: 8 + index_buffer: 168 + index_buffer: 417 + index_buffer: 8 + index_buffer: 168 + index_buffer: 8 + index_buffer: 193 + index_buffer: 340 + index_buffer: 261 + index_buffer: 346 + index_buffer: 111 + index_buffer: 117 + index_buffer: 31 + index_buffer: 448 + index_buffer: 346 + index_buffer: 261 + index_buffer: 228 + index_buffer: 31 + index_buffer: 117 + index_buffer: 285 + index_buffer: 417 + index_buffer: 441 + index_buffer: 55 + index_buffer: 221 + index_buffer: 193 + index_buffer: 413 + index_buffer: 441 + index_buffer: 417 + index_buffer: 189 + index_buffer: 193 + index_buffer: 221 + index_buffer: 327 + index_buffer: 460 + index_buffer: 326 + index_buffer: 98 + index_buffer: 97 + index_buffer: 240 + index_buffer: 328 + index_buffer: 326 + index_buffer: 460 + index_buffer: 99 + index_buffer: 240 + index_buffer: 97 + index_buffer: 277 + index_buffer: 355 + index_buffer: 329 + index_buffer: 47 + index_buffer: 100 + index_buffer: 126 + index_buffer: 371 + index_buffer: 329 + index_buffer: 355 + index_buffer: 142 + index_buffer: 126 + index_buffer: 100 + index_buffer: 309 + index_buffer: 392 + index_buffer: 438 + index_buffer: 79 + index_buffer: 218 + index_buffer: 166 + index_buffer: 439 + index_buffer: 438 + index_buffer: 392 + index_buffer: 219 + index_buffer: 166 + index_buffer: 218 + index_buffer: 381 + index_buffer: 382 + index_buffer: 256 + index_buffer: 154 + index_buffer: 26 + index_buffer: 155 + index_buffer: 341 + index_buffer: 256 + index_buffer: 382 + index_buffer: 112 + index_buffer: 155 + index_buffer: 26 + index_buffer: 360 + index_buffer: 279 + index_buffer: 420 + index_buffer: 131 + index_buffer: 198 + index_buffer: 49 + index_buffer: 429 + index_buffer: 420 + index_buffer: 279 + index_buffer: 209 + index_buffer: 49 + index_buffer: 198 + index_buffer: 365 + index_buffer: 364 + index_buffer: 379 + index_buffer: 136 + index_buffer: 150 + index_buffer: 135 + index_buffer: 394 + index_buffer: 379 + index_buffer: 364 + index_buffer: 169 + index_buffer: 135 + index_buffer: 150 + index_buffer: 355 + index_buffer: 277 + index_buffer: 437 + index_buffer: 126 + index_buffer: 217 + index_buffer: 47 + index_buffer: 343 + index_buffer: 437 + index_buffer: 277 + index_buffer: 114 + index_buffer: 47 + index_buffer: 217 + index_buffer: 443 + index_buffer: 444 + index_buffer: 282 + index_buffer: 223 + index_buffer: 52 + index_buffer: 224 + index_buffer: 283 + index_buffer: 282 + index_buffer: 444 + index_buffer: 53 + index_buffer: 224 + index_buffer: 52 + index_buffer: 281 + index_buffer: 275 + index_buffer: 363 + index_buffer: 51 + index_buffer: 134 + index_buffer: 45 + index_buffer: 440 + index_buffer: 363 + index_buffer: 275 + index_buffer: 220 + index_buffer: 45 + index_buffer: 134 + index_buffer: 431 + index_buffer: 262 + index_buffer: 395 + index_buffer: 211 + index_buffer: 170 + index_buffer: 32 + index_buffer: 369 + index_buffer: 395 + index_buffer: 262 + index_buffer: 140 + index_buffer: 32 + index_buffer: 170 + index_buffer: 337 + index_buffer: 299 + index_buffer: 338 + index_buffer: 108 + index_buffer: 109 + index_buffer: 69 + index_buffer: 297 + index_buffer: 338 + index_buffer: 299 + index_buffer: 67 + index_buffer: 69 + index_buffer: 109 + index_buffer: 335 + index_buffer: 273 + index_buffer: 321 + index_buffer: 106 + index_buffer: 91 + index_buffer: 43 + index_buffer: 375 + index_buffer: 321 + index_buffer: 273 + index_buffer: 146 + index_buffer: 43 + index_buffer: 91 + index_buffer: 348 + index_buffer: 450 + index_buffer: 349 + index_buffer: 119 + index_buffer: 120 + index_buffer: 230 + index_buffer: 451 + index_buffer: 349 + index_buffer: 450 + index_buffer: 231 + index_buffer: 230 + index_buffer: 120 + index_buffer: 467 + index_buffer: 359 + index_buffer: 342 + index_buffer: 247 + index_buffer: 113 + index_buffer: 130 + index_buffer: 446 + index_buffer: 342 + index_buffer: 359 + index_buffer: 226 + index_buffer: 130 + index_buffer: 113 + index_buffer: 282 + index_buffer: 283 + index_buffer: 334 + index_buffer: 52 + index_buffer: 105 + index_buffer: 53 + index_buffer: 293 + index_buffer: 334 + index_buffer: 283 + index_buffer: 63 + index_buffer: 53 + index_buffer: 105 + index_buffer: 250 + index_buffer: 458 + index_buffer: 462 + index_buffer: 20 + index_buffer: 242 + index_buffer: 238 + index_buffer: 461 + index_buffer: 462 + index_buffer: 458 + index_buffer: 241 + index_buffer: 238 + index_buffer: 242 + index_buffer: 276 + index_buffer: 353 + index_buffer: 300 + index_buffer: 46 + index_buffer: 70 + index_buffer: 124 + index_buffer: 383 + index_buffer: 300 + index_buffer: 353 + index_buffer: 156 + index_buffer: 124 + index_buffer: 70 + index_buffer: 325 + index_buffer: 292 + index_buffer: 324 + index_buffer: 96 + index_buffer: 95 + index_buffer: 62 + index_buffer: 308 + index_buffer: 324 + index_buffer: 292 + index_buffer: 78 + index_buffer: 62 + index_buffer: 95 + index_buffer: 283 + index_buffer: 276 + index_buffer: 293 + index_buffer: 53 + index_buffer: 63 + index_buffer: 46 + index_buffer: 300 + index_buffer: 293 + index_buffer: 276 + index_buffer: 70 + index_buffer: 46 + index_buffer: 63 + index_buffer: 447 + index_buffer: 264 + index_buffer: 345 + index_buffer: 227 + index_buffer: 116 + index_buffer: 34 + index_buffer: 372 + index_buffer: 345 + index_buffer: 264 + index_buffer: 143 + index_buffer: 34 + index_buffer: 116 + index_buffer: 352 + index_buffer: 345 + index_buffer: 346 + index_buffer: 123 + index_buffer: 117 + index_buffer: 116 + index_buffer: 340 + index_buffer: 346 + index_buffer: 345 + index_buffer: 111 + index_buffer: 116 + index_buffer: 117 + index_buffer: 1 + index_buffer: 19 + index_buffer: 274 + index_buffer: 1 + index_buffer: 44 + index_buffer: 19 + index_buffer: 354 + index_buffer: 274 + index_buffer: 19 + index_buffer: 125 + index_buffer: 19 + index_buffer: 44 + index_buffer: 248 + index_buffer: 281 + index_buffer: 456 + index_buffer: 3 + index_buffer: 236 + index_buffer: 51 + index_buffer: 363 + index_buffer: 456 + index_buffer: 281 + index_buffer: 134 + index_buffer: 51 + index_buffer: 236 + index_buffer: 425 + index_buffer: 426 + index_buffer: 427 + index_buffer: 205 + index_buffer: 207 + index_buffer: 206 + index_buffer: 436 + index_buffer: 427 + index_buffer: 426 + index_buffer: 216 + index_buffer: 206 + index_buffer: 207 + index_buffer: 380 + index_buffer: 381 + index_buffer: 252 + index_buffer: 153 + index_buffer: 22 + index_buffer: 154 + index_buffer: 256 + index_buffer: 252 + index_buffer: 381 + index_buffer: 26 + index_buffer: 154 + index_buffer: 22 + index_buffer: 391 + index_buffer: 393 + index_buffer: 269 + index_buffer: 165 + index_buffer: 39 + index_buffer: 167 + index_buffer: 267 + index_buffer: 269 + index_buffer: 393 + index_buffer: 37 + index_buffer: 167 + index_buffer: 39 + index_buffer: 199 + index_buffer: 428 + index_buffer: 200 + index_buffer: 199 + index_buffer: 200 + index_buffer: 208 + index_buffer: 421 + index_buffer: 200 + index_buffer: 428 + index_buffer: 201 + index_buffer: 208 + index_buffer: 200 + index_buffer: 330 + index_buffer: 329 + index_buffer: 266 + index_buffer: 101 + index_buffer: 36 + index_buffer: 100 + index_buffer: 371 + index_buffer: 266 + index_buffer: 329 + index_buffer: 142 + index_buffer: 100 + index_buffer: 36 + index_buffer: 422 + index_buffer: 432 + index_buffer: 273 + index_buffer: 202 + index_buffer: 43 + index_buffer: 212 + index_buffer: 287 + index_buffer: 273 + index_buffer: 432 + index_buffer: 57 + index_buffer: 212 + index_buffer: 43 + index_buffer: 290 + index_buffer: 250 + index_buffer: 328 + index_buffer: 60 + index_buffer: 99 + index_buffer: 20 + index_buffer: 462 + index_buffer: 328 + index_buffer: 250 + index_buffer: 242 + index_buffer: 20 + index_buffer: 99 + index_buffer: 258 + index_buffer: 286 + index_buffer: 385 + index_buffer: 28 + index_buffer: 158 + index_buffer: 56 + index_buffer: 384 + index_buffer: 385 + index_buffer: 286 + index_buffer: 157 + index_buffer: 56 + index_buffer: 158 + index_buffer: 342 + index_buffer: 446 + index_buffer: 353 + index_buffer: 113 + index_buffer: 124 + index_buffer: 226 + index_buffer: 265 + index_buffer: 353 + index_buffer: 446 + index_buffer: 35 + index_buffer: 226 + index_buffer: 124 + index_buffer: 257 + index_buffer: 386 + index_buffer: 259 + index_buffer: 27 + index_buffer: 29 + index_buffer: 159 + index_buffer: 387 + index_buffer: 259 + index_buffer: 386 + index_buffer: 160 + index_buffer: 159 + index_buffer: 29 + index_buffer: 430 + index_buffer: 422 + index_buffer: 431 + index_buffer: 210 + index_buffer: 211 + index_buffer: 202 + index_buffer: 424 + index_buffer: 431 + index_buffer: 422 + index_buffer: 204 + index_buffer: 202 + index_buffer: 211 + index_buffer: 445 + index_buffer: 342 + index_buffer: 276 + index_buffer: 225 + index_buffer: 46 + index_buffer: 113 + index_buffer: 353 + index_buffer: 276 + index_buffer: 342 + index_buffer: 124 + index_buffer: 113 + index_buffer: 46 + index_buffer: 424 + index_buffer: 422 + index_buffer: 335 + index_buffer: 204 + index_buffer: 106 + index_buffer: 202 + index_buffer: 273 + index_buffer: 335 + index_buffer: 422 + index_buffer: 43 + index_buffer: 202 + index_buffer: 106 + index_buffer: 306 + index_buffer: 292 + index_buffer: 307 + index_buffer: 76 + index_buffer: 77 + index_buffer: 62 + index_buffer: 325 + index_buffer: 307 + index_buffer: 292 + index_buffer: 96 + index_buffer: 62 + index_buffer: 77 + index_buffer: 366 + index_buffer: 447 + index_buffer: 352 + index_buffer: 137 + index_buffer: 123 + index_buffer: 227 + index_buffer: 345 + index_buffer: 352 + index_buffer: 447 + index_buffer: 116 + index_buffer: 227 + index_buffer: 123 + index_buffer: 302 + index_buffer: 268 + index_buffer: 303 + index_buffer: 72 + index_buffer: 73 + index_buffer: 38 + index_buffer: 271 + index_buffer: 303 + index_buffer: 268 + index_buffer: 41 + index_buffer: 38 + index_buffer: 73 + index_buffer: 371 + index_buffer: 358 + index_buffer: 266 + index_buffer: 142 + index_buffer: 36 + index_buffer: 129 + index_buffer: 423 + index_buffer: 266 + index_buffer: 358 + index_buffer: 203 + index_buffer: 129 + index_buffer: 36 + index_buffer: 327 + index_buffer: 294 + index_buffer: 460 + index_buffer: 98 + index_buffer: 240 + index_buffer: 64 + index_buffer: 455 + index_buffer: 460 + index_buffer: 294 + index_buffer: 235 + index_buffer: 64 + index_buffer: 240 + index_buffer: 294 + index_buffer: 331 + index_buffer: 278 + index_buffer: 64 + index_buffer: 48 + index_buffer: 102 + index_buffer: 279 + index_buffer: 278 + index_buffer: 331 + index_buffer: 49 + index_buffer: 102 + index_buffer: 48 + index_buffer: 303 + index_buffer: 271 + index_buffer: 304 + index_buffer: 73 + index_buffer: 74 + index_buffer: 41 + index_buffer: 272 + index_buffer: 304 + index_buffer: 271 + index_buffer: 42 + index_buffer: 41 + index_buffer: 74 + index_buffer: 427 + index_buffer: 436 + index_buffer: 434 + index_buffer: 207 + index_buffer: 214 + index_buffer: 216 + index_buffer: 432 + index_buffer: 434 + index_buffer: 436 + index_buffer: 212 + index_buffer: 216 + index_buffer: 214 + index_buffer: 304 + index_buffer: 272 + index_buffer: 408 + index_buffer: 74 + index_buffer: 184 + index_buffer: 42 + index_buffer: 407 + index_buffer: 408 + index_buffer: 272 + index_buffer: 183 + index_buffer: 42 + index_buffer: 184 + index_buffer: 394 + index_buffer: 430 + index_buffer: 395 + index_buffer: 169 + index_buffer: 170 + index_buffer: 210 + index_buffer: 431 + index_buffer: 395 + index_buffer: 430 + index_buffer: 211 + index_buffer: 210 + index_buffer: 170 + index_buffer: 395 + index_buffer: 369 + index_buffer: 378 + index_buffer: 170 + index_buffer: 149 + index_buffer: 140 + index_buffer: 400 + index_buffer: 378 + index_buffer: 369 + index_buffer: 176 + index_buffer: 140 + index_buffer: 149 + index_buffer: 296 + index_buffer: 334 + index_buffer: 299 + index_buffer: 66 + index_buffer: 69 + index_buffer: 105 + index_buffer: 333 + index_buffer: 299 + index_buffer: 334 + index_buffer: 104 + index_buffer: 105 + index_buffer: 69 + index_buffer: 417 + index_buffer: 168 + index_buffer: 351 + index_buffer: 193 + index_buffer: 122 + index_buffer: 168 + index_buffer: 6 + index_buffer: 351 + index_buffer: 168 + index_buffer: 6 + index_buffer: 168 + index_buffer: 122 + index_buffer: 280 + index_buffer: 411 + index_buffer: 352 + index_buffer: 50 + index_buffer: 123 + index_buffer: 187 + index_buffer: 376 + index_buffer: 352 + index_buffer: 411 + index_buffer: 147 + index_buffer: 187 + index_buffer: 123 + index_buffer: 319 + index_buffer: 320 + index_buffer: 325 + index_buffer: 89 + index_buffer: 96 + index_buffer: 90 + index_buffer: 307 + index_buffer: 325 + index_buffer: 320 + index_buffer: 77 + index_buffer: 90 + index_buffer: 96 + index_buffer: 285 + index_buffer: 295 + index_buffer: 336 + index_buffer: 55 + index_buffer: 107 + index_buffer: 65 + index_buffer: 296 + index_buffer: 336 + index_buffer: 295 + index_buffer: 66 + index_buffer: 65 + index_buffer: 107 + index_buffer: 404 + index_buffer: 320 + index_buffer: 403 + index_buffer: 180 + index_buffer: 179 + index_buffer: 90 + index_buffer: 319 + index_buffer: 403 + index_buffer: 320 + index_buffer: 89 + index_buffer: 90 + index_buffer: 179 + index_buffer: 330 + index_buffer: 348 + index_buffer: 329 + index_buffer: 101 + index_buffer: 100 + index_buffer: 119 + index_buffer: 349 + index_buffer: 329 + index_buffer: 348 + index_buffer: 120 + index_buffer: 119 + index_buffer: 100 + index_buffer: 334 + index_buffer: 293 + index_buffer: 333 + index_buffer: 105 + index_buffer: 104 + index_buffer: 63 + index_buffer: 298 + index_buffer: 333 + index_buffer: 293 + index_buffer: 68 + index_buffer: 63 + index_buffer: 104 + index_buffer: 323 + index_buffer: 454 + index_buffer: 366 + index_buffer: 93 + index_buffer: 137 + index_buffer: 234 + index_buffer: 447 + index_buffer: 366 + index_buffer: 454 + index_buffer: 227 + index_buffer: 234 + index_buffer: 137 + index_buffer: 16 + index_buffer: 315 + index_buffer: 15 + index_buffer: 16 + index_buffer: 15 + index_buffer: 85 + index_buffer: 316 + index_buffer: 15 + index_buffer: 315 + index_buffer: 86 + index_buffer: 85 + index_buffer: 15 + index_buffer: 429 + index_buffer: 279 + index_buffer: 358 + index_buffer: 209 + index_buffer: 129 + index_buffer: 49 + index_buffer: 331 + index_buffer: 358 + index_buffer: 279 + index_buffer: 102 + index_buffer: 49 + index_buffer: 129 + index_buffer: 15 + index_buffer: 316 + index_buffer: 14 + index_buffer: 15 + index_buffer: 14 + index_buffer: 86 + index_buffer: 317 + index_buffer: 14 + index_buffer: 316 + index_buffer: 87 + index_buffer: 86 + index_buffer: 14 + index_buffer: 8 + index_buffer: 285 + index_buffer: 9 + index_buffer: 8 + index_buffer: 9 + index_buffer: 55 + index_buffer: 336 + index_buffer: 9 + index_buffer: 285 + index_buffer: 107 + index_buffer: 55 + index_buffer: 9 + index_buffer: 329 + index_buffer: 349 + index_buffer: 277 + index_buffer: 100 + index_buffer: 47 + index_buffer: 120 + index_buffer: 350 + index_buffer: 277 + index_buffer: 349 + index_buffer: 121 + index_buffer: 120 + index_buffer: 47 + index_buffer: 252 + index_buffer: 253 + index_buffer: 380 + index_buffer: 22 + index_buffer: 153 + index_buffer: 23 + index_buffer: 374 + index_buffer: 380 + index_buffer: 253 + index_buffer: 145 + index_buffer: 23 + index_buffer: 153 + index_buffer: 402 + index_buffer: 403 + index_buffer: 318 + index_buffer: 178 + index_buffer: 88 + index_buffer: 179 + index_buffer: 319 + index_buffer: 318 + index_buffer: 403 + index_buffer: 89 + index_buffer: 179 + index_buffer: 88 + index_buffer: 351 + index_buffer: 6 + index_buffer: 419 + index_buffer: 122 + index_buffer: 196 + index_buffer: 6 + index_buffer: 197 + index_buffer: 419 + index_buffer: 6 + index_buffer: 197 + index_buffer: 6 + index_buffer: 196 + index_buffer: 324 + index_buffer: 318 + index_buffer: 325 + index_buffer: 95 + index_buffer: 96 + index_buffer: 88 + index_buffer: 319 + index_buffer: 325 + index_buffer: 318 + index_buffer: 89 + index_buffer: 88 + index_buffer: 96 + index_buffer: 397 + index_buffer: 367 + index_buffer: 365 + index_buffer: 172 + index_buffer: 136 + index_buffer: 138 + index_buffer: 364 + index_buffer: 365 + index_buffer: 367 + index_buffer: 135 + index_buffer: 138 + index_buffer: 136 + index_buffer: 288 + index_buffer: 435 + index_buffer: 397 + index_buffer: 58 + index_buffer: 172 + index_buffer: 215 + index_buffer: 367 + index_buffer: 397 + index_buffer: 435 + index_buffer: 138 + index_buffer: 215 + index_buffer: 172 + index_buffer: 438 + index_buffer: 439 + index_buffer: 344 + index_buffer: 218 + index_buffer: 115 + index_buffer: 219 + index_buffer: 278 + index_buffer: 344 + index_buffer: 439 + index_buffer: 48 + index_buffer: 219 + index_buffer: 115 + index_buffer: 271 + index_buffer: 311 + index_buffer: 272 + index_buffer: 41 + index_buffer: 42 + index_buffer: 81 + index_buffer: 310 + index_buffer: 272 + index_buffer: 311 + index_buffer: 80 + index_buffer: 81 + index_buffer: 42 + index_buffer: 5 + index_buffer: 281 + index_buffer: 195 + index_buffer: 5 + index_buffer: 195 + index_buffer: 51 + index_buffer: 248 + index_buffer: 195 + index_buffer: 281 + index_buffer: 3 + index_buffer: 51 + index_buffer: 195 + index_buffer: 273 + index_buffer: 287 + index_buffer: 375 + index_buffer: 43 + index_buffer: 146 + index_buffer: 57 + index_buffer: 291 + index_buffer: 375 + index_buffer: 287 + index_buffer: 61 + index_buffer: 57 + index_buffer: 146 + index_buffer: 396 + index_buffer: 428 + index_buffer: 175 + index_buffer: 171 + index_buffer: 175 + index_buffer: 208 + index_buffer: 199 + index_buffer: 175 + index_buffer: 428 + index_buffer: 199 + index_buffer: 208 + index_buffer: 175 + index_buffer: 268 + index_buffer: 312 + index_buffer: 271 + index_buffer: 38 + index_buffer: 41 + index_buffer: 82 + index_buffer: 311 + index_buffer: 271 + index_buffer: 312 + index_buffer: 81 + index_buffer: 82 + index_buffer: 41 + index_buffer: 444 + index_buffer: 445 + index_buffer: 283 + index_buffer: 224 + index_buffer: 53 + index_buffer: 225 + index_buffer: 276 + index_buffer: 283 + index_buffer: 445 + index_buffer: 46 + index_buffer: 225 + index_buffer: 53 + index_buffer: 254 + index_buffer: 339 + index_buffer: 373 + index_buffer: 24 + index_buffer: 144 + index_buffer: 110 + index_buffer: 390 + index_buffer: 373 + index_buffer: 339 + index_buffer: 163 + index_buffer: 110 + index_buffer: 144 + index_buffer: 295 + index_buffer: 282 + index_buffer: 296 + index_buffer: 65 + index_buffer: 66 + index_buffer: 52 + index_buffer: 334 + index_buffer: 296 + index_buffer: 282 + index_buffer: 105 + index_buffer: 52 + index_buffer: 66 + index_buffer: 346 + index_buffer: 448 + index_buffer: 347 + index_buffer: 117 + index_buffer: 118 + index_buffer: 228 + index_buffer: 449 + index_buffer: 347 + index_buffer: 448 + index_buffer: 229 + index_buffer: 228 + index_buffer: 118 + index_buffer: 454 + index_buffer: 356 + index_buffer: 447 + index_buffer: 234 + index_buffer: 227 + index_buffer: 127 + index_buffer: 264 + index_buffer: 447 + index_buffer: 356 + index_buffer: 34 + index_buffer: 127 + index_buffer: 227 + index_buffer: 336 + index_buffer: 296 + index_buffer: 337 + index_buffer: 107 + index_buffer: 108 + index_buffer: 66 + index_buffer: 299 + index_buffer: 337 + index_buffer: 296 + index_buffer: 69 + index_buffer: 66 + index_buffer: 108 + index_buffer: 151 + index_buffer: 337 + index_buffer: 10 + index_buffer: 151 + index_buffer: 10 + index_buffer: 108 + index_buffer: 338 + index_buffer: 10 + index_buffer: 337 + index_buffer: 109 + index_buffer: 108 + index_buffer: 10 + index_buffer: 278 + index_buffer: 439 + index_buffer: 294 + index_buffer: 48 + index_buffer: 64 + index_buffer: 219 + index_buffer: 455 + index_buffer: 294 + index_buffer: 439 + index_buffer: 235 + index_buffer: 219 + index_buffer: 64 + index_buffer: 407 + index_buffer: 415 + index_buffer: 292 + index_buffer: 183 + index_buffer: 62 + index_buffer: 191 + index_buffer: 308 + index_buffer: 292 + index_buffer: 415 + index_buffer: 78 + index_buffer: 191 + index_buffer: 62 + index_buffer: 358 + index_buffer: 371 + index_buffer: 429 + index_buffer: 129 + index_buffer: 209 + index_buffer: 142 + index_buffer: 355 + index_buffer: 429 + index_buffer: 371 + index_buffer: 126 + index_buffer: 142 + index_buffer: 209 + index_buffer: 345 + index_buffer: 372 + index_buffer: 340 + index_buffer: 116 + index_buffer: 111 + index_buffer: 143 + index_buffer: 265 + index_buffer: 340 + index_buffer: 372 + index_buffer: 35 + index_buffer: 143 + index_buffer: 111 + index_buffer: 388 + index_buffer: 390 + index_buffer: 466 + index_buffer: 161 + index_buffer: 246 + index_buffer: 163 + index_buffer: 249 + index_buffer: 466 + index_buffer: 390 + index_buffer: 7 + index_buffer: 163 + index_buffer: 246 + index_buffer: 352 + index_buffer: 346 + index_buffer: 280 + index_buffer: 123 + index_buffer: 50 + index_buffer: 117 + index_buffer: 347 + index_buffer: 280 + index_buffer: 346 + index_buffer: 118 + index_buffer: 117 + index_buffer: 50 + index_buffer: 295 + index_buffer: 442 + index_buffer: 282 + index_buffer: 65 + index_buffer: 52 + index_buffer: 222 + index_buffer: 443 + index_buffer: 282 + index_buffer: 442 + index_buffer: 223 + index_buffer: 222 + index_buffer: 52 + index_buffer: 19 + index_buffer: 94 + index_buffer: 354 + index_buffer: 19 + index_buffer: 125 + index_buffer: 94 + index_buffer: 370 + index_buffer: 354 + index_buffer: 94 + index_buffer: 141 + index_buffer: 94 + index_buffer: 125 + index_buffer: 295 + index_buffer: 285 + index_buffer: 442 + index_buffer: 65 + index_buffer: 222 + index_buffer: 55 + index_buffer: 441 + index_buffer: 442 + index_buffer: 285 + index_buffer: 221 + index_buffer: 55 + index_buffer: 222 + index_buffer: 419 + index_buffer: 197 + index_buffer: 248 + index_buffer: 196 + index_buffer: 3 + index_buffer: 197 + index_buffer: 195 + index_buffer: 248 + index_buffer: 197 + index_buffer: 195 + index_buffer: 197 + index_buffer: 3 + index_buffer: 359 + index_buffer: 263 + index_buffer: 255 + index_buffer: 130 + index_buffer: 25 + index_buffer: 33 + index_buffer: 249 + index_buffer: 255 + index_buffer: 263 + index_buffer: 7 + index_buffer: 33 + index_buffer: 25 + index_buffer: 275 + index_buffer: 274 + index_buffer: 440 + index_buffer: 45 + index_buffer: 220 + index_buffer: 44 + index_buffer: 457 + index_buffer: 440 + index_buffer: 274 + index_buffer: 237 + index_buffer: 44 + index_buffer: 220 + index_buffer: 300 + index_buffer: 383 + index_buffer: 301 + index_buffer: 70 + index_buffer: 71 + index_buffer: 156 + index_buffer: 368 + index_buffer: 301 + index_buffer: 383 + index_buffer: 139 + index_buffer: 156 + index_buffer: 71 + index_buffer: 417 + index_buffer: 351 + index_buffer: 465 + index_buffer: 193 + index_buffer: 245 + index_buffer: 122 + index_buffer: 412 + index_buffer: 465 + index_buffer: 351 + index_buffer: 188 + index_buffer: 122 + index_buffer: 245 + index_buffer: 466 + index_buffer: 263 + index_buffer: 467 + index_buffer: 246 + index_buffer: 247 + index_buffer: 33 + index_buffer: 359 + index_buffer: 467 + index_buffer: 263 + index_buffer: 130 + index_buffer: 33 + index_buffer: 247 + index_buffer: 389 + index_buffer: 251 + index_buffer: 368 + index_buffer: 162 + index_buffer: 139 + index_buffer: 21 + index_buffer: 301 + index_buffer: 368 + index_buffer: 251 + index_buffer: 71 + index_buffer: 21 + index_buffer: 139 + index_buffer: 374 + index_buffer: 386 + index_buffer: 380 + index_buffer: 145 + index_buffer: 153 + index_buffer: 159 + index_buffer: 385 + index_buffer: 380 + index_buffer: 386 + index_buffer: 158 + index_buffer: 159 + index_buffer: 153 + index_buffer: 379 + index_buffer: 394 + index_buffer: 378 + index_buffer: 150 + index_buffer: 149 + index_buffer: 169 + index_buffer: 395 + index_buffer: 378 + index_buffer: 394 + index_buffer: 170 + index_buffer: 169 + index_buffer: 149 + index_buffer: 351 + index_buffer: 419 + index_buffer: 412 + index_buffer: 122 + index_buffer: 188 + index_buffer: 196 + index_buffer: 399 + index_buffer: 412 + index_buffer: 419 + index_buffer: 174 + index_buffer: 196 + index_buffer: 188 + index_buffer: 426 + index_buffer: 322 + index_buffer: 436 + index_buffer: 206 + index_buffer: 216 + index_buffer: 92 + index_buffer: 410 + index_buffer: 436 + index_buffer: 322 + index_buffer: 186 + index_buffer: 92 + index_buffer: 216 + index_buffer: 387 + index_buffer: 373 + index_buffer: 388 + index_buffer: 160 + index_buffer: 161 + index_buffer: 144 + index_buffer: 390 + index_buffer: 388 + index_buffer: 373 + index_buffer: 163 + index_buffer: 144 + index_buffer: 161 + index_buffer: 393 + index_buffer: 326 + index_buffer: 164 + index_buffer: 167 + index_buffer: 164 + index_buffer: 97 + index_buffer: 2 + index_buffer: 164 + index_buffer: 326 + index_buffer: 2 + index_buffer: 97 + index_buffer: 164 + index_buffer: 354 + index_buffer: 370 + index_buffer: 461 + index_buffer: 125 + index_buffer: 241 + index_buffer: 141 + index_buffer: 462 + index_buffer: 461 + index_buffer: 370 + index_buffer: 242 + index_buffer: 141 + index_buffer: 241 + index_buffer: 0 + index_buffer: 267 + index_buffer: 164 + index_buffer: 0 + index_buffer: 164 + index_buffer: 37 + index_buffer: 393 + index_buffer: 164 + index_buffer: 267 + index_buffer: 167 + index_buffer: 37 + index_buffer: 164 + index_buffer: 11 + index_buffer: 12 + index_buffer: 302 + index_buffer: 11 + index_buffer: 72 + index_buffer: 12 + index_buffer: 268 + index_buffer: 302 + index_buffer: 12 + index_buffer: 38 + index_buffer: 12 + index_buffer: 72 + index_buffer: 386 + index_buffer: 374 + index_buffer: 387 + index_buffer: 159 + index_buffer: 160 + index_buffer: 145 + index_buffer: 373 + index_buffer: 387 + index_buffer: 374 + index_buffer: 144 + index_buffer: 145 + index_buffer: 160 + index_buffer: 12 + index_buffer: 13 + index_buffer: 268 + index_buffer: 12 + index_buffer: 38 + index_buffer: 13 + index_buffer: 312 + index_buffer: 268 + index_buffer: 13 + index_buffer: 82 + index_buffer: 13 + index_buffer: 38 + index_buffer: 293 + index_buffer: 300 + index_buffer: 298 + index_buffer: 63 + index_buffer: 68 + index_buffer: 70 + index_buffer: 301 + index_buffer: 298 + index_buffer: 300 + index_buffer: 71 + index_buffer: 70 + index_buffer: 68 + index_buffer: 340 + index_buffer: 265 + index_buffer: 261 + index_buffer: 111 + index_buffer: 31 + index_buffer: 35 + index_buffer: 446 + index_buffer: 261 + index_buffer: 265 + index_buffer: 226 + index_buffer: 35 + index_buffer: 31 + index_buffer: 380 + index_buffer: 385 + index_buffer: 381 + index_buffer: 153 + index_buffer: 154 + index_buffer: 158 + index_buffer: 384 + index_buffer: 381 + index_buffer: 385 + index_buffer: 157 + index_buffer: 158 + index_buffer: 154 + index_buffer: 280 + index_buffer: 330 + index_buffer: 425 + index_buffer: 50 + index_buffer: 205 + index_buffer: 101 + index_buffer: 266 + index_buffer: 425 + index_buffer: 330 + index_buffer: 36 + index_buffer: 101 + index_buffer: 205 + index_buffer: 423 + index_buffer: 391 + index_buffer: 426 + index_buffer: 203 + index_buffer: 206 + index_buffer: 165 + index_buffer: 322 + index_buffer: 426 + index_buffer: 391 + index_buffer: 92 + index_buffer: 165 + index_buffer: 206 + index_buffer: 429 + index_buffer: 355 + index_buffer: 420 + index_buffer: 209 + index_buffer: 198 + index_buffer: 126 + index_buffer: 437 + index_buffer: 420 + index_buffer: 355 + index_buffer: 217 + index_buffer: 126 + index_buffer: 198 + index_buffer: 391 + index_buffer: 327 + index_buffer: 393 + index_buffer: 165 + index_buffer: 167 + index_buffer: 98 + index_buffer: 326 + index_buffer: 393 + index_buffer: 327 + index_buffer: 97 + index_buffer: 98 + index_buffer: 167 + index_buffer: 457 + index_buffer: 438 + index_buffer: 440 + index_buffer: 237 + index_buffer: 220 + index_buffer: 218 + index_buffer: 344 + index_buffer: 440 + index_buffer: 438 + index_buffer: 115 + index_buffer: 218 + index_buffer: 220 + index_buffer: 382 + index_buffer: 362 + index_buffer: 341 + index_buffer: 155 + index_buffer: 112 + index_buffer: 133 + index_buffer: 463 + index_buffer: 341 + index_buffer: 362 + index_buffer: 243 + index_buffer: 133 + index_buffer: 112 + index_buffer: 457 + index_buffer: 461 + index_buffer: 459 + index_buffer: 237 + index_buffer: 239 + index_buffer: 241 + index_buffer: 458 + index_buffer: 459 + index_buffer: 461 + index_buffer: 238 + index_buffer: 241 + index_buffer: 239 + index_buffer: 434 + index_buffer: 430 + index_buffer: 364 + index_buffer: 214 + index_buffer: 135 + index_buffer: 210 + index_buffer: 394 + index_buffer: 364 + index_buffer: 430 + index_buffer: 169 + index_buffer: 210 + index_buffer: 135 + index_buffer: 414 + index_buffer: 463 + index_buffer: 398 + index_buffer: 190 + index_buffer: 173 + index_buffer: 243 + index_buffer: 362 + index_buffer: 398 + index_buffer: 463 + index_buffer: 133 + index_buffer: 243 + index_buffer: 173 + index_buffer: 262 + index_buffer: 428 + index_buffer: 369 + index_buffer: 32 + index_buffer: 140 + index_buffer: 208 + index_buffer: 396 + index_buffer: 369 + index_buffer: 428 + index_buffer: 171 + index_buffer: 208 + index_buffer: 140 + index_buffer: 457 + index_buffer: 274 + index_buffer: 461 + index_buffer: 237 + index_buffer: 241 + index_buffer: 44 + index_buffer: 354 + index_buffer: 461 + index_buffer: 274 + index_buffer: 125 + index_buffer: 44 + index_buffer: 241 + index_buffer: 316 + index_buffer: 403 + index_buffer: 317 + index_buffer: 86 + index_buffer: 87 + index_buffer: 179 + index_buffer: 402 + index_buffer: 317 + index_buffer: 403 + index_buffer: 178 + index_buffer: 179 + index_buffer: 87 + index_buffer: 315 + index_buffer: 404 + index_buffer: 316 + index_buffer: 85 + index_buffer: 86 + index_buffer: 180 + index_buffer: 403 + index_buffer: 316 + index_buffer: 404 + index_buffer: 179 + index_buffer: 180 + index_buffer: 86 + index_buffer: 314 + index_buffer: 405 + index_buffer: 315 + index_buffer: 84 + index_buffer: 85 + index_buffer: 181 + index_buffer: 404 + index_buffer: 315 + index_buffer: 405 + index_buffer: 180 + index_buffer: 181 + index_buffer: 85 + index_buffer: 313 + index_buffer: 406 + index_buffer: 314 + index_buffer: 83 + index_buffer: 84 + index_buffer: 182 + index_buffer: 405 + index_buffer: 314 + index_buffer: 406 + index_buffer: 181 + index_buffer: 182 + index_buffer: 84 + index_buffer: 418 + index_buffer: 406 + index_buffer: 421 + index_buffer: 194 + index_buffer: 201 + index_buffer: 182 + index_buffer: 313 + index_buffer: 421 + index_buffer: 406 + index_buffer: 83 + index_buffer: 182 + index_buffer: 201 + index_buffer: 366 + index_buffer: 401 + index_buffer: 323 + index_buffer: 137 + index_buffer: 93 + index_buffer: 177 + index_buffer: 361 + index_buffer: 323 + index_buffer: 401 + index_buffer: 132 + index_buffer: 177 + index_buffer: 93 + index_buffer: 408 + index_buffer: 407 + index_buffer: 306 + index_buffer: 184 + index_buffer: 76 + index_buffer: 183 + index_buffer: 292 + index_buffer: 306 + index_buffer: 407 + index_buffer: 62 + index_buffer: 183 + index_buffer: 76 + index_buffer: 408 + index_buffer: 306 + index_buffer: 409 + index_buffer: 184 + index_buffer: 185 + index_buffer: 76 + index_buffer: 291 + index_buffer: 409 + index_buffer: 306 + index_buffer: 61 + index_buffer: 76 + index_buffer: 185 + index_buffer: 410 + index_buffer: 409 + index_buffer: 287 + index_buffer: 186 + index_buffer: 57 + index_buffer: 185 + index_buffer: 291 + index_buffer: 287 + index_buffer: 409 + index_buffer: 61 + index_buffer: 185 + index_buffer: 57 + index_buffer: 436 + index_buffer: 410 + index_buffer: 432 + index_buffer: 216 + index_buffer: 212 + index_buffer: 186 + index_buffer: 287 + index_buffer: 432 + index_buffer: 410 + index_buffer: 57 + index_buffer: 186 + index_buffer: 212 + index_buffer: 434 + index_buffer: 416 + index_buffer: 427 + index_buffer: 214 + index_buffer: 207 + index_buffer: 192 + index_buffer: 411 + index_buffer: 427 + index_buffer: 416 + index_buffer: 187 + index_buffer: 192 + index_buffer: 207 + index_buffer: 264 + index_buffer: 368 + index_buffer: 372 + index_buffer: 34 + index_buffer: 143 + index_buffer: 139 + index_buffer: 383 + index_buffer: 372 + index_buffer: 368 + index_buffer: 156 + index_buffer: 139 + index_buffer: 143 + index_buffer: 457 + index_buffer: 459 + index_buffer: 438 + index_buffer: 237 + index_buffer: 218 + index_buffer: 239 + index_buffer: 309 + index_buffer: 438 + index_buffer: 459 + index_buffer: 79 + index_buffer: 239 + index_buffer: 218 + index_buffer: 352 + index_buffer: 376 + index_buffer: 366 + index_buffer: 123 + index_buffer: 137 + index_buffer: 147 + index_buffer: 401 + index_buffer: 366 + index_buffer: 376 + index_buffer: 177 + index_buffer: 147 + index_buffer: 137 + index_buffer: 4 + index_buffer: 1 + index_buffer: 275 + index_buffer: 4 + index_buffer: 45 + index_buffer: 1 + index_buffer: 274 + index_buffer: 275 + index_buffer: 1 + index_buffer: 44 + index_buffer: 1 + index_buffer: 45 + index_buffer: 428 + index_buffer: 262 + index_buffer: 421 + index_buffer: 208 + index_buffer: 201 + index_buffer: 32 + index_buffer: 418 + index_buffer: 421 + index_buffer: 262 + index_buffer: 194 + index_buffer: 32 + index_buffer: 201 + index_buffer: 327 + index_buffer: 358 + index_buffer: 294 + index_buffer: 98 + index_buffer: 64 + index_buffer: 129 + index_buffer: 331 + index_buffer: 294 + index_buffer: 358 + index_buffer: 102 + index_buffer: 129 + index_buffer: 64 + index_buffer: 367 + index_buffer: 435 + index_buffer: 416 + index_buffer: 138 + index_buffer: 192 + index_buffer: 215 + index_buffer: 433 + index_buffer: 416 + index_buffer: 435 + index_buffer: 213 + index_buffer: 215 + index_buffer: 192 + index_buffer: 455 + index_buffer: 439 + index_buffer: 289 + index_buffer: 235 + index_buffer: 59 + index_buffer: 219 + index_buffer: 392 + index_buffer: 289 + index_buffer: 439 + index_buffer: 166 + index_buffer: 219 + index_buffer: 59 + index_buffer: 328 + index_buffer: 462 + index_buffer: 326 + index_buffer: 99 + index_buffer: 97 + index_buffer: 242 + index_buffer: 370 + index_buffer: 326 + index_buffer: 462 + index_buffer: 141 + index_buffer: 242 + index_buffer: 97 + index_buffer: 326 + index_buffer: 370 + index_buffer: 2 + index_buffer: 97 + index_buffer: 2 + index_buffer: 141 + index_buffer: 94 + index_buffer: 2 + index_buffer: 370 + index_buffer: 94 + index_buffer: 141 + index_buffer: 2 + index_buffer: 460 + index_buffer: 455 + index_buffer: 305 + index_buffer: 240 + index_buffer: 75 + index_buffer: 235 + index_buffer: 289 + index_buffer: 305 + index_buffer: 455 + index_buffer: 59 + index_buffer: 235 + index_buffer: 75 + index_buffer: 448 + index_buffer: 339 + index_buffer: 449 + index_buffer: 228 + index_buffer: 229 + index_buffer: 110 + index_buffer: 254 + index_buffer: 449 + index_buffer: 339 + index_buffer: 24 + index_buffer: 110 + index_buffer: 229 + index_buffer: 261 + index_buffer: 446 + index_buffer: 255 + index_buffer: 31 + index_buffer: 25 + index_buffer: 226 + index_buffer: 359 + index_buffer: 255 + index_buffer: 446 + index_buffer: 130 + index_buffer: 226 + index_buffer: 25 + index_buffer: 449 + index_buffer: 254 + index_buffer: 450 + index_buffer: 229 + index_buffer: 230 + index_buffer: 24 + index_buffer: 253 + index_buffer: 450 + index_buffer: 254 + index_buffer: 23 + index_buffer: 24 + index_buffer: 230 + index_buffer: 450 + index_buffer: 253 + index_buffer: 451 + index_buffer: 230 + index_buffer: 231 + index_buffer: 23 + index_buffer: 252 + index_buffer: 451 + index_buffer: 253 + index_buffer: 22 + index_buffer: 23 + index_buffer: 231 + index_buffer: 451 + index_buffer: 252 + index_buffer: 452 + index_buffer: 231 + index_buffer: 232 + index_buffer: 22 + index_buffer: 256 + index_buffer: 452 + index_buffer: 252 + index_buffer: 26 + index_buffer: 22 + index_buffer: 232 + index_buffer: 256 + index_buffer: 341 + index_buffer: 452 + index_buffer: 26 + index_buffer: 232 + index_buffer: 112 + index_buffer: 453 + index_buffer: 452 + index_buffer: 341 + index_buffer: 233 + index_buffer: 112 + index_buffer: 232 + index_buffer: 413 + index_buffer: 464 + index_buffer: 414 + index_buffer: 189 + index_buffer: 190 + index_buffer: 244 + index_buffer: 463 + index_buffer: 414 + index_buffer: 464 + index_buffer: 243 + index_buffer: 244 + index_buffer: 190 + index_buffer: 441 + index_buffer: 413 + index_buffer: 286 + index_buffer: 221 + index_buffer: 56 + index_buffer: 189 + index_buffer: 414 + index_buffer: 286 + index_buffer: 413 + index_buffer: 190 + index_buffer: 189 + index_buffer: 56 + index_buffer: 441 + index_buffer: 286 + index_buffer: 442 + index_buffer: 221 + index_buffer: 222 + index_buffer: 56 + index_buffer: 258 + index_buffer: 442 + index_buffer: 286 + index_buffer: 28 + index_buffer: 56 + index_buffer: 222 + index_buffer: 442 + index_buffer: 258 + index_buffer: 443 + index_buffer: 222 + index_buffer: 223 + index_buffer: 28 + index_buffer: 257 + index_buffer: 443 + index_buffer: 258 + index_buffer: 27 + index_buffer: 28 + index_buffer: 223 + index_buffer: 444 + index_buffer: 443 + index_buffer: 259 + index_buffer: 224 + index_buffer: 29 + index_buffer: 223 + index_buffer: 257 + index_buffer: 259 + index_buffer: 443 + index_buffer: 27 + index_buffer: 223 + index_buffer: 29 + index_buffer: 259 + index_buffer: 260 + index_buffer: 444 + index_buffer: 29 + index_buffer: 224 + index_buffer: 30 + index_buffer: 445 + index_buffer: 444 + index_buffer: 260 + index_buffer: 225 + index_buffer: 30 + index_buffer: 224 + index_buffer: 260 + index_buffer: 467 + index_buffer: 445 + index_buffer: 30 + index_buffer: 225 + index_buffer: 247 + index_buffer: 342 + index_buffer: 445 + index_buffer: 467 + index_buffer: 113 + index_buffer: 247 + index_buffer: 225 + index_buffer: 250 + index_buffer: 309 + index_buffer: 458 + index_buffer: 20 + index_buffer: 238 + index_buffer: 79 + index_buffer: 459 + index_buffer: 458 + index_buffer: 309 + index_buffer: 239 + index_buffer: 79 + index_buffer: 238 + index_buffer: 290 + index_buffer: 305 + index_buffer: 392 + index_buffer: 60 + index_buffer: 166 + index_buffer: 75 + index_buffer: 289 + index_buffer: 392 + index_buffer: 305 + index_buffer: 59 + index_buffer: 75 + index_buffer: 166 + index_buffer: 460 + index_buffer: 305 + index_buffer: 328 + index_buffer: 240 + index_buffer: 99 + index_buffer: 75 + index_buffer: 290 + index_buffer: 328 + index_buffer: 305 + index_buffer: 60 + index_buffer: 75 + index_buffer: 99 + index_buffer: 376 + index_buffer: 433 + index_buffer: 401 + index_buffer: 147 + index_buffer: 177 + index_buffer: 213 + index_buffer: 435 + index_buffer: 401 + index_buffer: 433 + index_buffer: 215 + index_buffer: 213 + index_buffer: 177 + index_buffer: 250 + index_buffer: 290 + index_buffer: 309 + index_buffer: 20 + index_buffer: 79 + index_buffer: 60 + index_buffer: 392 + index_buffer: 309 + index_buffer: 290 + index_buffer: 166 + index_buffer: 60 + index_buffer: 79 + index_buffer: 411 + index_buffer: 416 + index_buffer: 376 + index_buffer: 187 + index_buffer: 147 + index_buffer: 192 + index_buffer: 433 + index_buffer: 376 + index_buffer: 416 + index_buffer: 213 + index_buffer: 192 + index_buffer: 147 + index_buffer: 341 + index_buffer: 463 + index_buffer: 453 + index_buffer: 112 + index_buffer: 233 + index_buffer: 243 + index_buffer: 464 + index_buffer: 453 + index_buffer: 463 + index_buffer: 244 + index_buffer: 243 + index_buffer: 233 + index_buffer: 453 + index_buffer: 464 + index_buffer: 357 + index_buffer: 233 + index_buffer: 128 + index_buffer: 244 + index_buffer: 465 + index_buffer: 357 + index_buffer: 464 + index_buffer: 245 + index_buffer: 244 + index_buffer: 128 + index_buffer: 412 + index_buffer: 343 + index_buffer: 465 + index_buffer: 188 + index_buffer: 245 + index_buffer: 114 + index_buffer: 357 + index_buffer: 465 + index_buffer: 343 + index_buffer: 128 + index_buffer: 114 + index_buffer: 245 + index_buffer: 437 + index_buffer: 343 + index_buffer: 399 + index_buffer: 217 + index_buffer: 174 + index_buffer: 114 + index_buffer: 412 + index_buffer: 399 + index_buffer: 343 + index_buffer: 188 + index_buffer: 114 + index_buffer: 174 + index_buffer: 363 + index_buffer: 440 + index_buffer: 360 + index_buffer: 134 + index_buffer: 131 + index_buffer: 220 + index_buffer: 344 + index_buffer: 360 + index_buffer: 440 + index_buffer: 115 + index_buffer: 220 + index_buffer: 131 + index_buffer: 456 + index_buffer: 420 + index_buffer: 399 + index_buffer: 236 + index_buffer: 174 + index_buffer: 198 + index_buffer: 437 + index_buffer: 399 + index_buffer: 420 + index_buffer: 217 + index_buffer: 198 + index_buffer: 174 + index_buffer: 456 + index_buffer: 363 + index_buffer: 420 + index_buffer: 236 + index_buffer: 198 + index_buffer: 134 + index_buffer: 360 + index_buffer: 420 + index_buffer: 363 + index_buffer: 131 + index_buffer: 134 + index_buffer: 198 + index_buffer: 361 + index_buffer: 401 + index_buffer: 288 + index_buffer: 132 + index_buffer: 58 + index_buffer: 177 + index_buffer: 435 + index_buffer: 288 + index_buffer: 401 + index_buffer: 215 + index_buffer: 177 + index_buffer: 58 + index_buffer: 353 + index_buffer: 265 + index_buffer: 383 + index_buffer: 124 + index_buffer: 156 + index_buffer: 35 + index_buffer: 372 + index_buffer: 383 + index_buffer: 265 + index_buffer: 143 + index_buffer: 35 + index_buffer: 156 + index_buffer: 255 + index_buffer: 249 + index_buffer: 339 + index_buffer: 25 + index_buffer: 110 + index_buffer: 7 + index_buffer: 390 + index_buffer: 339 + index_buffer: 249 + index_buffer: 163 + index_buffer: 7 + index_buffer: 110 + index_buffer: 261 + index_buffer: 255 + index_buffer: 448 + index_buffer: 31 + index_buffer: 228 + index_buffer: 25 + index_buffer: 339 + index_buffer: 448 + index_buffer: 255 + index_buffer: 110 + index_buffer: 25 + index_buffer: 228 + index_buffer: 14 + index_buffer: 317 + index_buffer: 13 + index_buffer: 14 + index_buffer: 13 + index_buffer: 87 + index_buffer: 312 + index_buffer: 13 + index_buffer: 317 + index_buffer: 82 + index_buffer: 87 + index_buffer: 13 + index_buffer: 317 + index_buffer: 402 + index_buffer: 312 + index_buffer: 87 + index_buffer: 82 + index_buffer: 178 + index_buffer: 311 + index_buffer: 312 + index_buffer: 402 + index_buffer: 81 + index_buffer: 178 + index_buffer: 82 + index_buffer: 402 + index_buffer: 318 + index_buffer: 311 + index_buffer: 178 + index_buffer: 81 + index_buffer: 88 + index_buffer: 310 + index_buffer: 311 + index_buffer: 318 + index_buffer: 80 + index_buffer: 88 + index_buffer: 81 + index_buffer: 318 + index_buffer: 324 + index_buffer: 310 + index_buffer: 88 + index_buffer: 80 + index_buffer: 95 + index_buffer: 415 + index_buffer: 310 + index_buffer: 324 + index_buffer: 191 + index_buffer: 95 + index_buffer: 80 +} diff --git a/mediapipe/modules/face_geometry/effect_renderer_calculator.cc b/mediapipe/modules/face_geometry/effect_renderer_calculator.cc new file mode 100644 index 000000000..fba714905 --- /dev/null +++ b/mediapipe/modules/face_geometry/effect_renderer_calculator.cc @@ -0,0 +1,284 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include + +#include "absl/types/optional.h" +#include "mediapipe/framework/calculator_framework.h" +#include "mediapipe/framework/formats/image_frame.h" +#include "mediapipe/framework/formats/image_frame_opencv.h" +#include "mediapipe/framework/port/opencv_core_inc.h" // NOTYPO +#include "mediapipe/framework/port/opencv_imgcodecs_inc.h" // NOTYPO +#include "mediapipe/framework/port/opencv_imgproc_inc.h" // NOTYPO +#include "mediapipe/framework/port/ret_check.h" +#include "mediapipe/framework/port/status.h" +#include "mediapipe/framework/port/status_macros.h" +#include "mediapipe/framework/port/statusor.h" +#include "mediapipe/gpu/gl_calculator_helper.h" +#include "mediapipe/gpu/gpu_buffer.h" +#include "mediapipe/modules/face_geometry/effect_renderer_calculator.pb.h" +#include "mediapipe/modules/face_geometry/libs/effect_renderer.h" +#include "mediapipe/modules/face_geometry/libs/validation_utils.h" +#include "mediapipe/modules/face_geometry/protos/environment.pb.h" +#include "mediapipe/modules/face_geometry/protos/face_geometry.pb.h" +#include "mediapipe/modules/face_geometry/protos/mesh_3d.pb.h" +#include "mediapipe/util/resource_util.h" + +namespace mediapipe { +namespace { + +static constexpr char kEnvironmentTag[] = "ENVIRONMENT"; +static constexpr char kImageGpuTag[] = "IMAGE_GPU"; +static constexpr char kMultiFaceGeometryTag[] = "MULTI_FACE_GEOMETRY"; + +// A calculator that renders a visual effect for multiple faces. +// +// Inputs: +// IMAGE_GPU (`GpuBuffer`, required): +// A buffer containing input image. +// +// MULTI_FACE_GEOMETRY (`std::vector`, optional): +// A vector of face geometry data. +// +// If absent, the input GPU buffer is copied over into the output GPU buffer +// without any effect being rendered. +// +// Input side packets: +// ENVIRONMENT (`face_geometry::Environment`, required) +// Describes an environment; includes the camera frame origin point location +// as well as virtual camera parameters. +// +// Output: +// IMAGE_GPU (`GpuBuffer`, required): +// A buffer with a visual effect being rendered for multiple faces. +// +// Options: +// effect_texture_path (`string`, required): +// Defines a path for the visual effect texture file. The effect texture is +// later rendered on top of the effect mesh. +// +// The texture file format must be supported by the OpenCV image decoder. It +// must also define either an RGB or an RGBA texture. +// +// effect_mesh_3d_path (`string`, optional): +// Defines a path for the visual effect mesh 3D file. The effect mesh is +// later "attached" to the face and is driven by the face pose +// transformation matrix. +// +// The mesh 3D file format must be the binary `face_geometry.Mesh3d` proto. +// +// If is not present, the runtime face mesh will be used as the effect mesh +// - this mode is handy for facepaint effects. +// +class EffectRendererCalculator : public CalculatorBase { + public: + static mediapipe::Status GetContract(CalculatorContract* cc) { + MP_RETURN_IF_ERROR(mediapipe::GlCalculatorHelper::UpdateContract(cc)) + << "Failed to update contract for the GPU helper!"; + + cc->InputSidePackets() + .Tag(kEnvironmentTag) + .Set(); + cc->Inputs().Tag(kImageGpuTag).Set(); + cc->Inputs() + .Tag(kMultiFaceGeometryTag) + .Set>(); + cc->Outputs().Tag(kImageGpuTag).Set(); + + return mediapipe::GlCalculatorHelper::UpdateContract(cc); + } + + mediapipe::Status Open(CalculatorContext* cc) override { + cc->SetOffset(mediapipe::TimestampDiff(0)); + + MP_RETURN_IF_ERROR(gpu_helper_.Open(cc)) + << "Failed to open the GPU helper!"; + return gpu_helper_.RunInGlContext([&]() -> mediapipe::Status { + const auto& options = + cc->Options(); + + const auto& environment = cc->InputSidePackets() + .Tag(kEnvironmentTag) + .Get(); + + MP_RETURN_IF_ERROR(face_geometry::ValidateEnvironment(environment)) + << "Invalid environment!"; + + absl::optional effect_mesh_3d; + if (options.has_effect_mesh_3d_path()) { + ASSIGN_OR_RETURN(effect_mesh_3d, + ReadMesh3dFromFile(options.effect_mesh_3d_path()), + _ << "Failed to read the effect 3D mesh from file!"); + + MP_RETURN_IF_ERROR(face_geometry::ValidateMesh3d(*effect_mesh_3d)) + << "Invalid effect 3D mesh!"; + } + + ASSIGN_OR_RETURN(ImageFrame effect_texture, + ReadTextureFromFile(options.effect_texture_path()), + _ << "Failed to read the effect texture from file!"); + + ASSIGN_OR_RETURN(effect_renderer_, + CreateEffectRenderer(environment, effect_mesh_3d, + std::move(effect_texture)), + _ << "Failed to create the effect renderer!"); + + return mediapipe::OkStatus(); + }); + } + + mediapipe::Status Process(CalculatorContext* cc) override { + // The `IMAGE_GPU` stream is required to have a non-empty packet. In case + // this requirement is not met, there's nothing to be processed at the + // current timestamp. + if (cc->Inputs().Tag(kImageGpuTag).IsEmpty()) { + return mediapipe::OkStatus(); + } + + return gpu_helper_.RunInGlContext([this, cc]() -> mediapipe::Status { + const auto& input_gpu_buffer = + cc->Inputs().Tag(kImageGpuTag).Get(); + + GlTexture input_gl_texture = + gpu_helper_.CreateSourceTexture(input_gpu_buffer); + + GlTexture output_gl_texture = gpu_helper_.CreateDestinationTexture( + input_gl_texture.width(), input_gl_texture.height()); + + std::vector empty_multi_face_geometry; + const auto& multi_face_geometry = + cc->Inputs().Tag(kMultiFaceGeometryTag).IsEmpty() + ? empty_multi_face_geometry + : cc->Inputs() + .Tag(kMultiFaceGeometryTag) + .Get>(); + + // Validate input multi face geometry data. + for (const face_geometry::FaceGeometry& face_geometry : + multi_face_geometry) { + MP_RETURN_IF_ERROR(face_geometry::ValidateFaceGeometry(face_geometry)) + << "Invalid face geometry!"; + } + + MP_RETURN_IF_ERROR(effect_renderer_->RenderEffect( + multi_face_geometry, input_gl_texture.width(), + input_gl_texture.height(), input_gl_texture.target(), + input_gl_texture.name(), output_gl_texture.target(), + output_gl_texture.name())) + << "Failed to render the effect!"; + + std::unique_ptr output_gpu_buffer = + output_gl_texture.GetFrame(); + + cc->Outputs() + .Tag(kImageGpuTag) + .AddPacket(mediapipe::Adopt(output_gpu_buffer.release()) + .At(cc->InputTimestamp())); + + output_gl_texture.Release(); + input_gl_texture.Release(); + + return mediapipe::OkStatus(); + }); + } + + ~EffectRendererCalculator() { + gpu_helper_.RunInGlContext([this]() { effect_renderer_.reset(); }); + } + + private: + static mediapipe::StatusOr ReadTextureFromFile( + const std::string& texture_path) { + ASSIGN_OR_RETURN(std::string texture_blob, + ReadContentBlobFromFile(texture_path), + _ << "Failed to read texture blob from file!"); + + // Use OpenCV image decoding functionality to finish reading the texture. + std::vector texture_blob_vector(texture_blob.begin(), + texture_blob.end()); + cv::Mat decoded_mat = + cv::imdecode(texture_blob_vector, cv::IMREAD_UNCHANGED); + + RET_CHECK(decoded_mat.type() == CV_8UC3 || decoded_mat.type() == CV_8UC4) + << "Texture must have `char` as the underlying type and " + "must have either 3 or 4 channels!"; + + ImageFormat::Format image_format = ImageFormat::UNKNOWN; + cv::Mat output_mat; + switch (decoded_mat.channels()) { + case 3: + image_format = ImageFormat::SRGB; + cv::cvtColor(decoded_mat, output_mat, cv::COLOR_BGR2RGB); + break; + + case 4: + image_format = ImageFormat::SRGBA; + cv::cvtColor(decoded_mat, output_mat, cv::COLOR_BGRA2RGBA); + break; + + default: + RET_CHECK_FAIL() + << "Unexpected number of channels; expected 3 or 4, got " + << decoded_mat.channels() << "!"; + } + + ImageFrame output_image_frame(image_format, output_mat.size().width, + output_mat.size().height, + ImageFrame::kGlDefaultAlignmentBoundary); + + output_mat.copyTo(formats::MatView(&output_image_frame)); + + return output_image_frame; + } + + static mediapipe::StatusOr ReadMesh3dFromFile( + const std::string& mesh_3d_path) { + ASSIGN_OR_RETURN(std::string mesh_3d_blob, + ReadContentBlobFromFile(mesh_3d_path), + _ << "Failed to read mesh 3D blob from file!"); + + face_geometry::Mesh3d mesh_3d; + RET_CHECK(mesh_3d.ParseFromString(mesh_3d_blob)) + << "Failed to parse a mesh 3D proto from a binary blob!"; + + return mesh_3d; + } + + static mediapipe::StatusOr ReadContentBlobFromFile( + const std::string& unresolved_path) { + ASSIGN_OR_RETURN(std::string resolved_path, + mediapipe::PathToResourceAsFile(unresolved_path), + _ << "Failed to resolve path! Path = " << unresolved_path); + + std::string content_blob; + MP_RETURN_IF_ERROR( + mediapipe::GetResourceContents(resolved_path, &content_blob)) + << "Failed to read content blob! Resolved path = " << resolved_path; + + return content_blob; + } + + mediapipe::GlCalculatorHelper gpu_helper_; + std::unique_ptr effect_renderer_; +}; + +} // namespace + +using FaceGeometryEffectRendererCalculator = EffectRendererCalculator; + +REGISTER_CALCULATOR(FaceGeometryEffectRendererCalculator); + +} // namespace mediapipe diff --git a/mediapipe/modules/face_geometry/effect_renderer_calculator.proto b/mediapipe/modules/face_geometry/effect_renderer_calculator.proto new file mode 100644 index 000000000..6c23903fc --- /dev/null +++ b/mediapipe/modules/face_geometry/effect_renderer_calculator.proto @@ -0,0 +1,46 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto2"; + +package mediapipe; + +import "mediapipe/framework/calculator_options.proto"; + +message FaceGeometryEffectRendererCalculatorOptions { + extend CalculatorOptions { + optional FaceGeometryEffectRendererCalculatorOptions ext = 323693808; + } + + // Defines a path for the visual effect texture file. The effect texture is + // later rendered on top of the effect mesh. + // + // Please be aware about the difference between the CPU texture memory layout + // and the GPU texture sampler coordinate space. This renderer follows + // conventions discussed here: https://open.gl/textures + // + // The texture file format must be supported by the OpenCV image decoder. It + // must also define either an RGB or an RGBA texture. + optional string effect_texture_path = 1; + + // Defines a path for the visual effect mesh 3D file. The effect mesh is later + // "attached" to the face and is driven by the face pose transformation + // matrix. + // + // The mesh 3D file format must be the binary `face_system.Mesh3d` proto. + // + // If is not present, the runtime face mesh will be used as the effect mesh + // - this mode is handy for facepaint effects. + optional string effect_mesh_3d_path = 2; +} diff --git a/mediapipe/modules/face_geometry/env_generator_calculator.cc b/mediapipe/modules/face_geometry/env_generator_calculator.cc new file mode 100644 index 000000000..2464998de --- /dev/null +++ b/mediapipe/modules/face_geometry/env_generator_calculator.cc @@ -0,0 +1,81 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "mediapipe/framework/calculator_framework.h" +#include "mediapipe/framework/port/status.h" +#include "mediapipe/framework/port/status_macros.h" +#include "mediapipe/modules/face_geometry/env_generator_calculator.pb.h" +#include "mediapipe/modules/face_geometry/libs/validation_utils.h" +#include "mediapipe/modules/face_geometry/protos/environment.pb.h" + +namespace mediapipe { +namespace { + +static constexpr char kEnvironmentTag[] = "ENVIRONMENT"; + +// A calculator that generates an environment, which describes a virtual scene. +// +// Output side packets: +// ENVIRONMENT (`face_geometry::Environment`, required) +// Describes an environment; includes the camera frame origin point location +// as well as virtual camera parameters. +// +// Options: +// environment (`face_geometry.Environment`, required): +// Defines an environment to be packed as the output side packet. +// +// Must be valid (for details, please refer to the proto message definition +// comments and/or `modules/face_geometry/libs/validation_utils.h/cc`) +// +class EnvGeneratorCalculator : public CalculatorBase { + public: + static mediapipe::Status GetContract(CalculatorContract* cc) { + cc->OutputSidePackets() + .Tag(kEnvironmentTag) + .Set(); + return mediapipe::OkStatus(); + } + + mediapipe::Status Open(CalculatorContext* cc) override { + cc->SetOffset(mediapipe::TimestampDiff(0)); + + const face_geometry::Environment& environment = + cc->Options().environment(); + + MP_RETURN_IF_ERROR(face_geometry::ValidateEnvironment(environment)) + << "Invalid environment!"; + + cc->OutputSidePackets() + .Tag(kEnvironmentTag) + .Set(mediapipe::MakePacket(environment)); + + return mediapipe::OkStatus(); + } + + mediapipe::Status Process(CalculatorContext* cc) override { + return mediapipe::OkStatus(); + } + + mediapipe::Status Close(CalculatorContext* cc) override { + return mediapipe::OkStatus(); + } +}; + +} // namespace + +using FaceGeometryEnvGeneratorCalculator = EnvGeneratorCalculator; + +REGISTER_CALCULATOR(FaceGeometryEnvGeneratorCalculator); + +} // namespace mediapipe diff --git a/mediapipe/modules/face_geometry/env_generator_calculator.proto b/mediapipe/modules/face_geometry/env_generator_calculator.proto new file mode 100644 index 000000000..dea2ae0af --- /dev/null +++ b/mediapipe/modules/face_geometry/env_generator_calculator.proto @@ -0,0 +1,32 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto2"; + +package mediapipe; + +import "mediapipe/framework/calculator_options.proto"; +import "mediapipe/modules/face_geometry/protos/environment.proto"; + +message FaceGeometryEnvGeneratorCalculatorOptions { + extend CalculatorOptions { + optional FaceGeometryEnvGeneratorCalculatorOptions ext = 323693810; + } + + // Defines an environment to be packed as the output side packet. + // + // Must be valid (for details, please refer to the proto message definition + // comments and/or `modules/face_geometry/libs/validation_utils.h/cc`) + optional face_geometry.Environment environment = 1; +} diff --git a/mediapipe/modules/face_geometry/face_geometry.pbtxt b/mediapipe/modules/face_geometry/face_geometry.pbtxt new file mode 100644 index 000000000..41ad9810b --- /dev/null +++ b/mediapipe/modules/face_geometry/face_geometry.pbtxt @@ -0,0 +1,52 @@ +# MediaPipe graph to extract face geometry from landmarks for multiple faces. +# +# It is required that "geometry_pipeline_metadata.binarypb" is available at +# "mediapipe/modules/face_geometry/data/geometry_pipeline_metadata.binarypb" +# path during execution. +# +# EXAMPLE: +# node { +# calculator: "FaceGeometry" +# input_stream: "IMAGE_SIZE:image_size" +# input_stream: "MULTI_FACE_LANDMARKS:multi_face_landmarks" +# input_side_packet: "ENVIRONMENT:environment" +# output_stream: "MULTI_FACE_GEOMETRY:multi_face_geometry" +# } + +type: "FaceGeometry" + +# The size of the input frame. The first element of the pair is the frame width; +# the other one is the frame height. +# +# The face landmarks should have been detected on a frame with the same +# ratio. If used as-is, the resulting face geometry visualization should be +# happening on a frame with the same ratio as well. +# +# (std::pair) +input_stream: "IMAGE_SIZE:image_size" + +# Collection of detected/predicted faces, each represented as a list of face +# landmarks. (std::vector) +input_stream: "MULTI_FACE_LANDMARKS:multi_face_landmarks" + +# Environment that describes the current virtual scene. +# (face_geometry::Environment) +input_side_packet: "ENVIRONMENT:environment" + +# A list of geometry data for each detected face. +# (std::vector) +output_stream: "MULTI_FACE_GEOMETRY:multi_face_geometry" + +# Extracts face geometry for multiple faces from a vector of landmark lists. +node { + calculator: "FaceGeometryPipelineCalculator" + input_side_packet: "ENVIRONMENT:environment" + input_stream: "IMAGE_SIZE:image_size" + input_stream: "MULTI_FACE_LANDMARKS:multi_face_landmarks" + output_stream: "MULTI_FACE_GEOMETRY:multi_face_geometry" + options: { + [mediapipe.FaceGeometryPipelineCalculatorOptions.ext] { + metadata_path: "mediapipe/modules/face_geometry/data/geometry_pipeline_metadata.binarypb" + } + } +} diff --git a/mediapipe/modules/face_geometry/geometry_pipeline_calculator.cc b/mediapipe/modules/face_geometry/geometry_pipeline_calculator.cc new file mode 100644 index 000000000..600c9d428 --- /dev/null +++ b/mediapipe/modules/face_geometry/geometry_pipeline_calculator.cc @@ -0,0 +1,197 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include +#include + +#include "absl/memory/memory.h" +#include "mediapipe/framework/calculator_framework.h" +#include "mediapipe/framework/formats/landmark.pb.h" +#include "mediapipe/framework/port/ret_check.h" +#include "mediapipe/framework/port/status.h" +#include "mediapipe/framework/port/status_macros.h" +#include "mediapipe/framework/port/statusor.h" +#include "mediapipe/modules/face_geometry/geometry_pipeline_calculator.pb.h" +#include "mediapipe/modules/face_geometry/libs/geometry_pipeline.h" +#include "mediapipe/modules/face_geometry/libs/validation_utils.h" +#include "mediapipe/modules/face_geometry/protos/environment.pb.h" +#include "mediapipe/modules/face_geometry/protos/face_geometry.pb.h" +#include "mediapipe/modules/face_geometry/protos/geometry_pipeline_metadata.pb.h" +#include "mediapipe/util/resource_util.h" + +namespace mediapipe { +namespace { + +static constexpr char kEnvironmentTag[] = "ENVIRONMENT"; +static constexpr char kImageSizeTag[] = "IMAGE_SIZE"; +static constexpr char kMultiFaceGeometryTag[] = "MULTI_FACE_GEOMETRY"; +static constexpr char kMultiFaceLandmarksTag[] = "MULTI_FACE_LANDMARKS"; + +// A calculator that renders a visual effect for multiple faces. +// +// Inputs: +// IMAGE_SIZE (`std::pair`, required): +// The size of the current frame. The first element of the pair is the frame +// width; the other one is the frame height. +// +// The face landmarks should have been detected on a frame with the same +// ratio. If used as-is, the resulting face geometry visualization should be +// happening on a frame with the same ratio as well. +// +// MULTI_FACE_LANDMARKS (`std::vector`, required): +// A vector of face landmark lists. +// +// Input side packets: +// ENVIRONMENT (`face_geometry::Environment`, required) +// Describes an environment; includes the camera frame origin point location +// as well as virtual camera parameters. +// +// Output: +// MULTI_FACE_GEOMETRY (`std::vector`, required): +// A vector of face geometry data. +// +// Options: +// metadata_path (`string`, optional): +// Defines a path for the geometry pipeline metadata file. +// +// The geometry pipeline metadata file format must be the binary +// `face_geometry.GeometryPipelineMetadata` proto. +// +class GeometryPipelineCalculator : public CalculatorBase { + public: + static mediapipe::Status GetContract(CalculatorContract* cc) { + cc->InputSidePackets() + .Tag(kEnvironmentTag) + .Set(); + cc->Inputs().Tag(kImageSizeTag).Set>(); + cc->Inputs() + .Tag(kMultiFaceLandmarksTag) + .Set>(); + cc->Outputs() + .Tag(kMultiFaceGeometryTag) + .Set>(); + + return mediapipe::OkStatus(); + } + + mediapipe::Status Open(CalculatorContext* cc) override { + cc->SetOffset(mediapipe::TimestampDiff(0)); + + const auto& options = cc->Options(); + + ASSIGN_OR_RETURN( + face_geometry::GeometryPipelineMetadata metadata, + ReadMetadataFromFile(options.metadata_path()), + _ << "Failed to read the geometry pipeline metadata from file!"); + + MP_RETURN_IF_ERROR( + face_geometry::ValidateGeometryPipelineMetadata(metadata)) + << "Invalid geometry pipeline metadata!"; + + const face_geometry::Environment& environment = + cc->InputSidePackets() + .Tag(kEnvironmentTag) + .Get(); + + MP_RETURN_IF_ERROR(face_geometry::ValidateEnvironment(environment)) + << "Invalid environment!"; + + ASSIGN_OR_RETURN( + geometry_pipeline_, + face_geometry::CreateGeometryPipeline(environment, metadata), + _ << "Failed to create a geometry pipeline!"); + + return mediapipe::OkStatus(); + } + + mediapipe::Status Process(CalculatorContext* cc) override { + // Both the `IMAGE_SIZE` and the `MULTI_FACE_LANDMARKS` streams are required + // to have a non-empty packet. In case this requirement is not met, there's + // nothing to be processed at the current timestamp. + if (cc->Inputs().Tag(kImageSizeTag).IsEmpty() || + cc->Inputs().Tag(kMultiFaceLandmarksTag).IsEmpty()) { + return mediapipe::OkStatus(); + } + + const auto& image_size = + cc->Inputs().Tag(kImageSizeTag).Get>(); + const auto& multi_face_landmarks = + cc->Inputs() + .Tag(kMultiFaceLandmarksTag) + .Get>(); + + auto multi_face_geometry = + absl::make_unique>(); + + ASSIGN_OR_RETURN( + *multi_face_geometry, + geometry_pipeline_->EstimateFaceGeometry( + multi_face_landmarks, // + /*frame_width*/ image_size.first, + /*frame_height*/ image_size.second), + _ << "Failed to estimate face geometry for multiple faces!"); + + cc->Outputs() + .Tag(kMultiFaceGeometryTag) + .AddPacket(mediapipe::Adopt>( + multi_face_geometry.release()) + .At(cc->InputTimestamp())); + + return mediapipe::OkStatus(); + } + + mediapipe::Status Close(CalculatorContext* cc) override { + return mediapipe::OkStatus(); + } + + private: + static mediapipe::StatusOr + ReadMetadataFromFile(const std::string& metadata_path) { + ASSIGN_OR_RETURN(std::string metadata_blob, + ReadContentBlobFromFile(metadata_path), + _ << "Failed to read a metadata blob from file!"); + + face_geometry::GeometryPipelineMetadata metadata; + RET_CHECK(metadata.ParseFromString(metadata_blob)) + << "Failed to parse a metadata proto from a binary blob!"; + + return metadata; + } + + static mediapipe::StatusOr ReadContentBlobFromFile( + const std::string& unresolved_path) { + ASSIGN_OR_RETURN(std::string resolved_path, + mediapipe::PathToResourceAsFile(unresolved_path), + _ << "Failed to resolve path! Path = " << unresolved_path); + + std::string content_blob; + MP_RETURN_IF_ERROR( + mediapipe::GetResourceContents(resolved_path, &content_blob)) + << "Failed to read content blob! Resolved path = " << resolved_path; + + return content_blob; + } + + std::unique_ptr geometry_pipeline_; +}; + +} // namespace + +using FaceGeometryPipelineCalculator = GeometryPipelineCalculator; + +REGISTER_CALCULATOR(FaceGeometryPipelineCalculator); + +} // namespace mediapipe diff --git a/mediapipe/modules/face_geometry/geometry_pipeline_calculator.proto b/mediapipe/modules/face_geometry/geometry_pipeline_calculator.proto new file mode 100644 index 000000000..638bb4502 --- /dev/null +++ b/mediapipe/modules/face_geometry/geometry_pipeline_calculator.proto @@ -0,0 +1,27 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto2"; + +package mediapipe; + +import "mediapipe/framework/calculator_options.proto"; + +message FaceGeometryPipelineCalculatorOptions { + extend CalculatorOptions { + optional FaceGeometryPipelineCalculatorOptions ext = 323693812; + } + + optional string metadata_path = 1; +} diff --git a/mediapipe/modules/face_geometry/libs/BUILD b/mediapipe/modules/face_geometry/libs/BUILD new file mode 100644 index 000000000..6d807d12f --- /dev/null +++ b/mediapipe/modules/face_geometry/libs/BUILD @@ -0,0 +1,103 @@ +# Copyright 2020 The MediaPipe Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +licenses(["notice"]) + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "effect_renderer", + srcs = ["effect_renderer.cc"], + hdrs = ["effect_renderer.h"], + deps = [ + ":mesh_3d_utils", + ":validation_utils", + "//mediapipe/framework/formats:image_format_cc_proto", + "//mediapipe/framework/formats:image_frame", + "//mediapipe/framework/formats:matrix_data_cc_proto", + "//mediapipe/framework/port:ret_check", + "//mediapipe/framework/port:status", + "//mediapipe/framework/port:statusor", + "//mediapipe/gpu:gl_base", + "//mediapipe/gpu:shader_util", + "//mediapipe/modules/face_geometry/protos:environment_cc_proto", + "//mediapipe/modules/face_geometry/protos:face_geometry_cc_proto", + "//mediapipe/modules/face_geometry/protos:mesh_3d_cc_proto", + "@com_google_absl//absl/memory", + "@com_google_absl//absl/types:optional", + ], +) + +cc_library( + name = "geometry_pipeline", + srcs = ["geometry_pipeline.cc"], + hdrs = ["geometry_pipeline.h"], + deps = [ + ":mesh_3d_utils", + ":procrustes_solver", + ":validation_utils", + "//mediapipe/framework/formats:landmark_cc_proto", + "//mediapipe/framework/formats:matrix", + "//mediapipe/framework/formats:matrix_data_cc_proto", + "//mediapipe/framework/port:ret_check", + "//mediapipe/framework/port:status", + "//mediapipe/framework/port:statusor", + "//mediapipe/modules/face_geometry/protos:environment_cc_proto", + "//mediapipe/modules/face_geometry/protos:face_geometry_cc_proto", + "//mediapipe/modules/face_geometry/protos:geometry_pipeline_metadata_cc_proto", + "//mediapipe/modules/face_geometry/protos:mesh_3d_cc_proto", + "@com_google_absl//absl/memory", + "@eigen_archive//:eigen", + ], +) + +cc_library( + name = "mesh_3d_utils", + srcs = ["mesh_3d_utils.cc"], + hdrs = ["mesh_3d_utils.h"], + deps = [ + "//mediapipe/framework/port:ret_check", + "//mediapipe/framework/port:statusor", + "//mediapipe/modules/face_geometry/protos:mesh_3d_cc_proto", + ], +) + +cc_library( + name = "procrustes_solver", + srcs = ["procrustes_solver.cc"], + hdrs = ["procrustes_solver.h"], + deps = [ + "//mediapipe/framework/port:ret_check", + "//mediapipe/framework/port:status", + "//mediapipe/framework/port:statusor", + "@com_google_absl//absl/memory", + "@eigen_archive//:eigen", + ], +) + +cc_library( + name = "validation_utils", + srcs = ["validation_utils.cc"], + hdrs = ["validation_utils.h"], + deps = [ + ":mesh_3d_utils", + "//mediapipe/framework/formats:matrix_data_cc_proto", + "//mediapipe/framework/port:ret_check", + "//mediapipe/framework/port:status", + "//mediapipe/modules/face_geometry/protos:environment_cc_proto", + "//mediapipe/modules/face_geometry/protos:face_geometry_cc_proto", + "//mediapipe/modules/face_geometry/protos:geometry_pipeline_metadata_cc_proto", + "//mediapipe/modules/face_geometry/protos:mesh_3d_cc_proto", + ], +) diff --git a/mediapipe/modules/face_geometry/libs/effect_renderer.cc b/mediapipe/modules/face_geometry/libs/effect_renderer.cc new file mode 100644 index 000000000..31ee47ef7 --- /dev/null +++ b/mediapipe/modules/face_geometry/libs/effect_renderer.cc @@ -0,0 +1,734 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "mediapipe/modules/face_geometry/libs/effect_renderer.h" + +#include +#include +#include +#include +#include +#include + +#include "absl/memory/memory.h" +#include "absl/types/optional.h" +#include "mediapipe/framework/formats/image_format.pb.h" +#include "mediapipe/framework/formats/image_frame.h" +#include "mediapipe/framework/formats/matrix_data.pb.h" +#include "mediapipe/framework/port/ret_check.h" +#include "mediapipe/framework/port/status.h" +#include "mediapipe/framework/port/status_macros.h" +#include "mediapipe/framework/port/statusor.h" +#include "mediapipe/gpu/gl_base.h" +#include "mediapipe/gpu/shader_util.h" +#include "mediapipe/modules/face_geometry/libs/mesh_3d_utils.h" +#include "mediapipe/modules/face_geometry/libs/validation_utils.h" +#include "mediapipe/modules/face_geometry/protos/environment.pb.h" +#include "mediapipe/modules/face_geometry/protos/face_geometry.pb.h" +#include "mediapipe/modules/face_geometry/protos/mesh_3d.pb.h" + +namespace mediapipe::face_geometry { +namespace { + +struct RenderableMesh3d { + static mediapipe::StatusOr CreateFromProtoMesh3d( + const Mesh3d& proto_mesh_3d) { + Mesh3d::VertexType vertex_type = proto_mesh_3d.vertex_type(); + + RenderableMesh3d renderable_mesh_3d; + renderable_mesh_3d.vertex_size = GetVertexSize(vertex_type); + ASSIGN_OR_RETURN( + renderable_mesh_3d.vertex_position_size, + GetVertexComponentSize(vertex_type, VertexComponent::POSITION), + _ << "Failed to get the position vertex size!"); + ASSIGN_OR_RETURN( + renderable_mesh_3d.tex_coord_position_size, + GetVertexComponentSize(vertex_type, VertexComponent::TEX_COORD), + _ << "Failed to get the tex coord vertex size!"); + ASSIGN_OR_RETURN( + renderable_mesh_3d.vertex_position_offset, + GetVertexComponentOffset(vertex_type, VertexComponent::POSITION), + _ << "Failed to get the position vertex offset!"); + ASSIGN_OR_RETURN( + renderable_mesh_3d.tex_coord_position_offset, + GetVertexComponentOffset(vertex_type, VertexComponent::TEX_COORD), + _ << "Failed to get the tex coord vertex offset!"); + + switch (proto_mesh_3d.primitive_type()) { + case Mesh3d::TRIANGLE: + renderable_mesh_3d.primitive_type = GL_TRIANGLES; + break; + + default: + RET_CHECK_FAIL() << "Only triangle primitive types are supported!"; + } + + renderable_mesh_3d.vertex_buffer.reserve( + proto_mesh_3d.vertex_buffer_size()); + for (float vertex_element : proto_mesh_3d.vertex_buffer()) { + renderable_mesh_3d.vertex_buffer.push_back(vertex_element); + } + + renderable_mesh_3d.index_buffer.reserve(proto_mesh_3d.index_buffer_size()); + for (uint32_t index_element : proto_mesh_3d.index_buffer()) { + RET_CHECK_LE(index_element, std::numeric_limits::max()) + << "Index buffer elements must fit into the `uint16` type in order " + "to be renderable!"; + + renderable_mesh_3d.index_buffer.push_back( + static_cast(index_element)); + } + + return renderable_mesh_3d; + } + + uint32_t vertex_size; + uint32_t vertex_position_size; + uint32_t tex_coord_position_size; + uint32_t vertex_position_offset; + uint32_t tex_coord_position_offset; + uint32_t primitive_type; + + std::vector vertex_buffer; + std::vector index_buffer; +}; + +class Texture { + public: + static mediapipe::StatusOr> WrapExternalTexture( + GLuint handle, GLenum target, int width, int height) { + RET_CHECK(handle) << "External texture must have a non-null handle!"; + return absl::WrapUnique(new Texture(handle, target, width, height, + /*is_owned*/ false)); + } + + static mediapipe::StatusOr> CreateFromImageFrame( + const ImageFrame& image_frame) { + RET_CHECK(image_frame.IsAligned(ImageFrame::kGlDefaultAlignmentBoundary)) + << "Image frame memory must be aligned for GL usage!"; + + RET_CHECK(image_frame.Width() > 0 && image_frame.Height() > 0) + << "Image frame must have positive dimensions!"; + + RET_CHECK(image_frame.Format() == ImageFormat::SRGB || + image_frame.Format() == ImageFormat::SRGBA) + << "Image frame format must be either SRGB or SRGBA!"; + + GLint image_format; + switch (image_frame.NumberOfChannels()) { + case 3: + image_format = GL_RGB; + break; + case 4: + image_format = GL_RGBA; + break; + default: + RET_CHECK_FAIL() + << "Unexpected number of channels; expected 3 or 4, got " + << image_frame.NumberOfChannels() << "!"; + } + + GLuint handle; + glGenTextures(1, &handle); + RET_CHECK(handle) << "Failed to initialize an OpenGL texture!"; + + glBindTexture(GL_TEXTURE_2D, handle); + glTexParameteri(GL_TEXTURE_2D, GL_NEAREST_MIPMAP_LINEAR, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glTexImage2D(GL_TEXTURE_2D, 0, image_format, image_frame.Width(), + image_frame.Height(), 0, image_format, GL_UNSIGNED_BYTE, + image_frame.PixelData()); + glGenerateMipmap(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, 0); + + return absl::WrapUnique(new Texture( + handle, GL_TEXTURE_2D, image_frame.Width(), image_frame.Height(), + /*is_owned*/ true)); + } + + ~Texture() { + if (is_owned_) { + glDeleteProgram(handle_); + } + } + + GLuint handle() const { return handle_; } + GLenum target() const { return target_; } + int width() const { return width_; } + int height() const { return height_; } + + private: + Texture(GLuint handle, GLenum target, int width, int height, bool is_owned) + : handle_(handle), + target_(target), + width_(width), + height_(height), + is_owned_(is_owned) {} + + GLuint handle_; + GLenum target_; + int width_; + int height_; + bool is_owned_; +}; + +class RenderTarget { + public: + static mediapipe::StatusOr> Create() { + GLuint framebuffer_handle; + glGenFramebuffers(1, &framebuffer_handle); + RET_CHECK(framebuffer_handle) + << "Failed to initialize an OpenGL framebuffer!"; + + return absl::WrapUnique(new RenderTarget(framebuffer_handle)); + } + + ~RenderTarget() { + glDeleteFramebuffers(1, &framebuffer_handle_); + // Renderbuffer handle might have never been created if this render target + // is destroyed before `SetColorbuffer()` is called for the first time. + if (renderbuffer_handle_) { + glDeleteFramebuffers(1, &renderbuffer_handle_); + } + } + + mediapipe::Status SetColorbuffer(const Texture& colorbuffer_texture) { + glBindFramebuffer(GL_FRAMEBUFFER, framebuffer_handle_); + glViewport(0, 0, colorbuffer_texture.width(), colorbuffer_texture.height()); + + glActiveTexture(GL_TEXTURE0); + glBindTexture(colorbuffer_texture.target(), colorbuffer_texture.handle()); + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, + colorbuffer_texture.target(), + colorbuffer_texture.handle(), + /*level*/ 0); + glBindTexture(colorbuffer_texture.target(), 0); + + // If the existing depth buffer has different dimensions, delete it. + if (renderbuffer_handle_ && + (viewport_width_ != colorbuffer_texture.width() || + viewport_height_ != colorbuffer_texture.height())) { + glDeleteRenderbuffers(1, &renderbuffer_handle_); + renderbuffer_handle_ = 0; + } + + // If there is no depth buffer, create one. + if (!renderbuffer_handle_) { + glGenRenderbuffers(1, &renderbuffer_handle_); + RET_CHECK(renderbuffer_handle_) + << "Failed to initialize an OpenGL renderbuffer!"; + glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer_handle_); + glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, + colorbuffer_texture.width(), + colorbuffer_texture.height()); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, + GL_RENDERBUFFER, renderbuffer_handle_); + glBindRenderbuffer(GL_RENDERBUFFER, 0); + } + + viewport_width_ = colorbuffer_texture.width(); + viewport_height_ = colorbuffer_texture.height(); + + glBindFramebuffer(GL_FRAMEBUFFER, 0); + glFlush(); + + return mediapipe::OkStatus(); + } + + void Bind() const { + glBindFramebuffer(GL_FRAMEBUFFER, framebuffer_handle_); + glViewport(0, 0, viewport_width_, viewport_height_); + } + + void Unbind() const { glBindFramebuffer(GL_FRAMEBUFFER, 0); } + + void Clear() const { + Bind(); + glEnable(GL_DEPTH_TEST); + glDepthMask(GL_TRUE); + + glClearColor(0.f, 0.f, 0.f, 0.f); + glClearDepthf(1.f); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glDepthMask(GL_FALSE); + glDisable(GL_DEPTH_TEST); + + Unbind(); + glFlush(); + } + + private: + explicit RenderTarget(GLuint framebuffer_handle) + : framebuffer_handle_(framebuffer_handle), + renderbuffer_handle_(0), + viewport_width_(-1), + viewport_height_(-1) {} + + GLuint framebuffer_handle_; + GLuint renderbuffer_handle_; + int viewport_width_; + int viewport_height_; +}; + +class Renderer { + public: + enum class RenderMode { OPAQUE, OVERDRAW, OCCLUSION }; + + static mediapipe::StatusOr> Create() { + static const GLint kAttrLocation[NUM_ATTRIBUTES] = { + ATTRIB_VERTEX, + ATTRIB_TEXTURE_POSITION, + }; + static const GLchar* kAttrName[NUM_ATTRIBUTES] = { + "position", + "tex_coord", + }; + + static const GLchar* kVertSrc = R"( + uniform mat4 projection_mat; + uniform mat4 model_mat; + + attribute vec4 position; + attribute vec4 tex_coord; + + varying vec2 v_tex_coord; + + void main() { + v_tex_coord = tex_coord.xy; + gl_Position = projection_mat * model_mat * position; + } + )"; + + static const GLchar* kFragSrc = R"( + precision mediump float; + + varying vec2 v_tex_coord; + uniform sampler2D texture; + + void main() { + gl_FragColor = texture2D(texture, v_tex_coord); + } + )"; + + GLuint program_handle = 0; + GlhCreateProgram(kVertSrc, kFragSrc, NUM_ATTRIBUTES, + (const GLchar**)&kAttrName[0], kAttrLocation, + &program_handle); + RET_CHECK(program_handle) << "Problem initializing the texture program!"; + GLint projection_mat_uniform = + glGetUniformLocation(program_handle, "projection_mat"); + GLint model_mat_uniform = glGetUniformLocation(program_handle, "model_mat"); + GLint texture_uniform = glGetUniformLocation(program_handle, "texture"); + + RET_CHECK_NE(projection_mat_uniform, -1) + << "Failed to find `projection_mat` uniform!"; + RET_CHECK_NE(model_mat_uniform, -1) + << "Failed to find `model_mat` uniform!"; + RET_CHECK_NE(texture_uniform, -1) << "Failed to find `texture` uniform!"; + + return absl::WrapUnique(new Renderer(program_handle, projection_mat_uniform, + model_mat_uniform, texture_uniform)); + } + + ~Renderer() { glDeleteProgram(program_handle_); } + + mediapipe::Status Render(const RenderTarget& render_target, + const Texture& texture, + const RenderableMesh3d& mesh_3d, + const std::array& projection_mat, + const std::array& model_mat, + RenderMode render_mode) const { + glUseProgram(program_handle_); + // Set up the GL state. + glEnable(GL_BLEND); + glFrontFace(GL_CCW); + switch (render_mode) { + case RenderMode::OPAQUE: + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_DEPTH_TEST); + glDepthMask(GL_TRUE); + break; + + case RenderMode::OVERDRAW: + glBlendFunc(GL_ONE, GL_ZERO); + glDisable(GL_DEPTH_TEST); + glDepthMask(GL_FALSE); + break; + + case RenderMode::OCCLUSION: + glBlendFunc(GL_ZERO, GL_ONE); + glEnable(GL_DEPTH_TEST); + glDepthMask(GL_TRUE); + break; + } + + render_target.Bind(); + // Set up vertex attributes. + glVertexAttribPointer( + ATTRIB_VERTEX, mesh_3d.vertex_position_size, GL_FLOAT, 0, + mesh_3d.vertex_size * sizeof(float), + mesh_3d.vertex_buffer.data() + mesh_3d.vertex_position_offset); + glEnableVertexAttribArray(ATTRIB_VERTEX); + glVertexAttribPointer( + ATTRIB_TEXTURE_POSITION, mesh_3d.tex_coord_position_size, GL_FLOAT, 0, + mesh_3d.vertex_size * sizeof(float), + mesh_3d.vertex_buffer.data() + mesh_3d.tex_coord_position_offset); + glEnableVertexAttribArray(ATTRIB_TEXTURE_POSITION); + // Set up textures and uniforms. + glActiveTexture(GL_TEXTURE1); + glBindTexture(texture.target(), texture.handle()); + glUniform1i(texture_uniform_, 1); + glUniformMatrix4fv(projection_mat_uniform_, 1, GL_FALSE, + projection_mat.data()); + glUniformMatrix4fv(model_mat_uniform_, 1, GL_FALSE, model_mat.data()); + // Draw the mesh. + glDrawElements(mesh_3d.primitive_type, mesh_3d.index_buffer.size(), + GL_UNSIGNED_SHORT, mesh_3d.index_buffer.data()); + // Unbind textures and uniforms. + glActiveTexture(GL_TEXTURE1); + glBindTexture(texture.target(), 0); + render_target.Unbind(); + // Unbind vertex attributes. + glDisableVertexAttribArray(ATTRIB_TEXTURE_POSITION); + glDisableVertexAttribArray(ATTRIB_VERTEX); + // Restore the GL state. + glDepthMask(GL_FALSE); + glDisable(GL_DEPTH_TEST); + glDisable(GL_BLEND); + + glUseProgram(0); + glFlush(); + + return mediapipe::OkStatus(); + } + + private: + enum { ATTRIB_VERTEX, ATTRIB_TEXTURE_POSITION, NUM_ATTRIBUTES }; + + Renderer(GLuint program_handle, GLint projection_mat_uniform, + GLint model_mat_uniform, GLint texture_uniform) + : program_handle_(program_handle), + projection_mat_uniform_(projection_mat_uniform), + model_mat_uniform_(model_mat_uniform), + texture_uniform_(texture_uniform) {} + + GLuint program_handle_; + GLint projection_mat_uniform_; + GLint model_mat_uniform_; + GLint texture_uniform_; +}; + +class EffectRendererImpl : public EffectRenderer { + public: + EffectRendererImpl( + const Environment& environment, + std::unique_ptr render_target, + std::unique_ptr renderer, + RenderableMesh3d&& renderable_quad_mesh_3d, + absl::optional&& renderable_effect_mesh_3d, + std::unique_ptr empty_color_texture, + std::unique_ptr effect_texture) + : environment_(environment), + render_target_(std::move(render_target)), + renderer_(std::move(renderer)), + renderable_quad_mesh_3d_(std::move(renderable_quad_mesh_3d)), + renderable_effect_mesh_3d_(std::move(renderable_effect_mesh_3d)), + empty_color_texture_(std::move(empty_color_texture)), + effect_texture_(std::move(effect_texture)), + identity_matrix_(Create4x4IdentityMatrix()) {} + + mediapipe::Status RenderEffect( + const std::vector& multi_face_geometry, + int frame_width, // + int frame_height, // + GLenum src_texture_target, // + GLuint src_texture_name, // + GLenum dst_texture_target, // + GLuint dst_texture_name) { + // Validate input arguments. + MP_RETURN_IF_ERROR(ValidateFrameDimensions(frame_width, frame_height)) + << "Invalid frame dimensions!"; + RET_CHECK(src_texture_name > 0 && dst_texture_name > 0) + << "Both source and destination texture names must be non-null!"; + RET_CHECK_NE(src_texture_name, dst_texture_name) + << "Source and destination texture names must be different!"; + + // Validate all input face geometries. + for (const FaceGeometry& face_geometry : multi_face_geometry) { + MP_RETURN_IF_ERROR(ValidateFaceGeometry(face_geometry)) + << "Invalid face geometry!"; + } + + // Wrap both source and destination textures. + ASSIGN_OR_RETURN( + std::unique_ptr src_texture, + Texture::WrapExternalTexture(src_texture_name, src_texture_target, + frame_width, frame_height), + _ << "Failed to wrap the external source texture"); + ASSIGN_OR_RETURN( + std::unique_ptr dst_texture, + Texture::WrapExternalTexture(dst_texture_name, dst_texture_target, + frame_width, frame_height), + _ << "Failed to wrap the external destination texture"); + + // Set the destination texture as the color buffer. Then, clear both the + // color and the depth buffers for the render target. + MP_RETURN_IF_ERROR(render_target_->SetColorbuffer(*dst_texture)) + << "Failed to set the destination texture as the colorbuffer!"; + render_target_->Clear(); + + // Render the source texture on top of the quad mesh (i.e. make a copy) + // into the render target. + MP_RETURN_IF_ERROR(renderer_->Render( + *render_target_, *src_texture, renderable_quad_mesh_3d_, + identity_matrix_, identity_matrix_, Renderer::RenderMode::OVERDRAW)) + << "Failed to render the source texture on top of the quad mesh!"; + + // Extract pose transform matrices and meshes from the face geometry data; + const int num_faces = multi_face_geometry.size(); + + std::vector> face_pose_transform_matrices(num_faces); + std::vector renderable_face_meshes(num_faces); + for (int i = 0; i < num_faces; ++i) { + const FaceGeometry& face_geometry = multi_face_geometry[i]; + + // Extract the face pose transformation matrix. + ASSIGN_OR_RETURN( + face_pose_transform_matrices[i], + Convert4x4MatrixDataToArrayFormat( + face_geometry.pose_transform_matrix()), + _ << "Failed to extract the face pose transformation matrix!"); + + // Extract the face mesh as a renderable. + ASSIGN_OR_RETURN( + renderable_face_meshes[i], + RenderableMesh3d::CreateFromProtoMesh3d(face_geometry.mesh()), + _ << "Failed to extract a renderable face mesh!"); + } + + // Create a perspective matrix using the frame aspect ratio. + std::array perspective_matrix = CreatePerspectiveMatrix( + /*aspect_ratio*/ static_cast(frame_width) / frame_height); + + // Render a face mesh occluder for each face. + for (int i = 0; i < num_faces; ++i) { + const std::array& face_pose_transform_matrix = + face_pose_transform_matrices[i]; + const RenderableMesh3d& renderable_face_mesh = renderable_face_meshes[i]; + + // Render the face mesh using the empty color texture, i.e. the face + // mesh occluder. + // + // For occlusion, the pose transformation is moved ~1mm away from camera + // in order to allow the face mesh texture to be rendered without + // failing the depth test. + std::array occlusion_face_pose_transform_matrix = + face_pose_transform_matrix; + occlusion_face_pose_transform_matrix[14] -= 0.1f; // ~ 1mm + MP_RETURN_IF_ERROR(renderer_->Render( + *render_target_, *empty_color_texture_, renderable_face_mesh, + perspective_matrix, occlusion_face_pose_transform_matrix, + Renderer::RenderMode::OCCLUSION)) + << "Failed to render the face mesh occluder!"; + } + + // Render the main face mesh effect component for each face. + for (int i = 0; i < num_faces; ++i) { + const std::array& face_pose_transform_matrix = + face_pose_transform_matrices[i]; + + // If there is no effect 3D mesh provided, then the face mesh itself is + // used as a topology for rendering (for example, this can be used for + // facepaint effects or AR makeup). + const RenderableMesh3d& main_effect_mesh_3d = + renderable_effect_mesh_3d_ ? *renderable_effect_mesh_3d_ + : renderable_face_meshes[i]; + + MP_RETURN_IF_ERROR(renderer_->Render( + *render_target_, *effect_texture_, main_effect_mesh_3d, + perspective_matrix, face_pose_transform_matrix, + Renderer::RenderMode::OPAQUE)) + << "Failed to render the main effect pass!"; + } + + // At this point in the code, the destination texture must contain the + // correctly renderer effect, so we should just return. + return mediapipe::OkStatus(); + } + + private: + std::array CreatePerspectiveMatrix(float aspect_ratio) const { + static constexpr float kDegreesToRadians = M_PI / 180.f; + + std::array perspective_matrix; + perspective_matrix.fill(0.f); + + const auto& env_camera = environment_.perspective_camera(); + // Standard perspective projection matrix calculations. + const float f = 1.0f / std::tan(kDegreesToRadians * + env_camera.vertical_fov_degrees() / 2.f); + + const float denom = 1.0f / (env_camera.near() - env_camera.far()); + perspective_matrix[0] = f / aspect_ratio; + perspective_matrix[5] = f; + perspective_matrix[10] = (env_camera.near() + env_camera.far()) * denom; + perspective_matrix[11] = -1.f; + perspective_matrix[14] = 2.f * env_camera.far() * env_camera.near() * denom; + + // If the environment's origin point location is in the top left corner, + // then skip additional flip along Y-axis is required to render correctly. + if (environment_.origin_point_location() == + OriginPointLocation::TOP_LEFT_CORNER) { + perspective_matrix[5] *= -1.f; + } + + return perspective_matrix; + } + + static std::array Create4x4IdentityMatrix() { + return {1.f, 0.f, 0.f, 0.f, // + 0.f, 1.f, 0.f, 0.f, // + 0.f, 0.f, 1.f, 0.f, // + 0.f, 0.f, 0.f, 1.f}; + } + + static mediapipe::StatusOr> + Convert4x4MatrixDataToArrayFormat(const MatrixData& matrix_data) { + RET_CHECK(matrix_data.rows() == 4 && // + matrix_data.cols() == 4 && // + matrix_data.packed_data_size() == 16) + << "The matrix data must define a 4x4 matrix!"; + + std::array matrix_array; + for (int i = 0; i < 16; i++) { + matrix_array[i] = matrix_data.packed_data(i); + } + + // Matrix array must be in the OpenGL-friendly column-major order. If + // `matrix_data` is in the row-major order, then transpose. + if (matrix_data.layout() == MatrixData::ROW_MAJOR) { + std::swap(matrix_array[1], matrix_array[4]); + std::swap(matrix_array[2], matrix_array[8]); + std::swap(matrix_array[3], matrix_array[12]); + std::swap(matrix_array[6], matrix_array[9]); + std::swap(matrix_array[7], matrix_array[13]); + std::swap(matrix_array[11], matrix_array[14]); + } + + return matrix_array; + } + + Environment environment_; + + std::unique_ptr render_target_; + std::unique_ptr renderer_; + + RenderableMesh3d renderable_quad_mesh_3d_; + absl::optional renderable_effect_mesh_3d_; + + std::unique_ptr empty_color_texture_; + std::unique_ptr effect_texture_; + + std::array identity_matrix_; +}; + +Mesh3d CreateQuadMesh3d() { + static constexpr float kQuadMesh3dVertexBuffer[] = { + -1.f, -1.f, 0.f, 0.f, 0.f, // + 1.f, -1.f, 0.f, 1.f, 0.f, // + -1.f, 1.f, 0.f, 0.f, 1.f, // + 1.f, 1.f, 0.f, 1.f, 1.f, // + }; + static constexpr uint16_t kQuadMesh3dIndexBuffer[] = {0, 1, 2, 1, 3, 2}; + + static constexpr int kQuadMesh3dVertexBufferSize = + sizeof(kQuadMesh3dVertexBuffer) / sizeof(float); + static constexpr int kQuadMesh3dIndexBufferSize = + sizeof(kQuadMesh3dIndexBuffer) / sizeof(uint16_t); + + Mesh3d quad_mesh_3d; + quad_mesh_3d.set_vertex_type(Mesh3d::VERTEX_PT); + quad_mesh_3d.set_primitive_type(Mesh3d::TRIANGLE); + for (int i = 0; i < kQuadMesh3dVertexBufferSize; ++i) { + quad_mesh_3d.add_vertex_buffer(kQuadMesh3dVertexBuffer[i]); + } + for (int i = 0; i < kQuadMesh3dIndexBufferSize; ++i) { + quad_mesh_3d.add_index_buffer(kQuadMesh3dIndexBuffer[i]); + } + + return quad_mesh_3d; +} + +ImageFrame CreateEmptyColorTexture() { + static constexpr ImageFormat::Format kEmptyColorTextureFormat = + ImageFormat::SRGBA; + static constexpr int kEmptyColorTextureWidth = 1; + static constexpr int kEmptyColorTextureHeight = 1; + + ImageFrame empty_color_texture( + kEmptyColorTextureFormat, kEmptyColorTextureWidth, + kEmptyColorTextureHeight, ImageFrame::kGlDefaultAlignmentBoundary); + empty_color_texture.SetToZero(); + + return empty_color_texture; +} + +} // namespace + +mediapipe::StatusOr> CreateEffectRenderer( + const Environment& environment, // + const absl::optional& effect_mesh_3d, // + ImageFrame&& effect_texture) { + MP_RETURN_IF_ERROR(ValidateEnvironment(environment)) + << "Invalid environment!"; + if (effect_mesh_3d) { + MP_RETURN_IF_ERROR(ValidateMesh3d(*effect_mesh_3d)) + << "Invalid effect 3D mesh!"; + } + + ASSIGN_OR_RETURN(std::unique_ptr render_target, + RenderTarget::Create(), + _ << "Failed to create a render target!"); + ASSIGN_OR_RETURN(std::unique_ptr renderer, Renderer::Create(), + _ << "Failed to create a renderer!"); + ASSIGN_OR_RETURN(RenderableMesh3d renderable_quad_mesh_3d, + RenderableMesh3d::CreateFromProtoMesh3d(CreateQuadMesh3d()), + _ << "Failed to create a renderable quad mesh!"); + absl::optional renderable_effect_mesh_3d; + if (effect_mesh_3d) { + ASSIGN_OR_RETURN(renderable_effect_mesh_3d, + RenderableMesh3d::CreateFromProtoMesh3d(*effect_mesh_3d), + _ << "Failed to create a renderable effect mesh!"); + } + ASSIGN_OR_RETURN(std::unique_ptr empty_color_gl_texture, + Texture::CreateFromImageFrame(CreateEmptyColorTexture()), + _ << "Failed to create an empty color texture!"); + ASSIGN_OR_RETURN(std::unique_ptr effect_gl_texture, + Texture::CreateFromImageFrame(effect_texture), + _ << "Failed to create an effect texture!"); + + std::unique_ptr result = + absl::make_unique( + environment, std::move(render_target), std::move(renderer), + std::move(renderable_quad_mesh_3d), + std::move(renderable_effect_mesh_3d), + std::move(empty_color_gl_texture), std::move(effect_gl_texture)); + + return result; +} + +} // namespace mediapipe::face_geometry diff --git a/mediapipe/modules/face_geometry/libs/effect_renderer.h b/mediapipe/modules/face_geometry/libs/effect_renderer.h new file mode 100644 index 000000000..ea989d449 --- /dev/null +++ b/mediapipe/modules/face_geometry/libs/effect_renderer.h @@ -0,0 +1,92 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef MEDIAPIPE_MODULES_FACE_GEOMETRY_LIBS_EFFECT_RENDERER_H_ +#define MEDIAPIPE_MODULES_FACE_GEOMETRY_LIBS_EFFECT_RENDERER_H_ + +#include +#include + +#include "absl/types/optional.h" +#include "mediapipe/framework/formats/image_frame.h" +#include "mediapipe/framework/port/status.h" +#include "mediapipe/framework/port/statusor.h" +#include "mediapipe/gpu/gl_base.h" +#include "mediapipe/modules/face_geometry/protos/environment.pb.h" +#include "mediapipe/modules/face_geometry/protos/face_geometry.pb.h" +#include "mediapipe/modules/face_geometry/protos/mesh_3d.pb.h" + +namespace mediapipe::face_geometry { + +// Encapsulates a stateful face effect renderer. +class EffectRenderer { + public: + virtual ~EffectRenderer() = default; + + // Renders a face effect based on the multiple facial geometries. + // + // Must be called in the same GL context as was used upon initialization. + // + // Each of the `multi_face_geometry` must be valid (for details, please refer + // to the proto message definition comments and/or `validation_utils.h/cc`). + // Additionally, all face mesh index buffer elements must fit into the + // `uint16` type in order to be renderable. + // + // Both `frame_width` and `frame_height` must be positive. + // + // Both `src_texture_name` and `dst_texture_name` must be positive and + // reference existing OpenGL textures in the current context. They should also + // reference different textures as the in-place effect rendering is not yet + // supported. + virtual mediapipe::Status RenderEffect( + const std::vector& multi_face_geometry, + int frame_width, // + int frame_height, // + GLenum src_texture_target, // + GLuint src_texture_name, // + GLenum dst_texture_target, // + GLuint dst_texture_name) = 0; +}; + +// Creates an instance of `EffectRenderer`. +// +// `effect_mesh_3d` defines a rigid 3d mesh which is "attached" to the face and +// is driven by the face pose transformation matrix. If is not present, the +// runtime face mesh will be used as the effect mesh - this mode is handy for +// facepaint effects. In both rendering modes, the face mesh is first rendered +// as an occluder straight into the depth buffer. This step helps to create a +// more believable effect via hiding invisible elements behind the face surface. +// +// `effect_texture` defines the color texture to be rendered on top of the +// effect mesh. Please be aware about the difference between the CPU texture +// memory layout and the GPU texture sampler coordinate space. This renderer +// follows conventions discussed here: https://open.gl/textures +// +// Must be called in the same GL context as will be used for rendering. +// +// Both `environment` and `effect_mesh_3d` (is present) must be valid (for +// details, please refer to the proto message definition comments and/or +// `validation_utils.h/cc`). Additionally, `effect_mesh_3d`s index buffer +// elements must fit into the `uint16` type in order to be renderable. +// +// `effect_texture` must have positive dimensions. Its format must be either +// `SRGB` or `SRGBA`. Its memory must be aligned for GL usage. +mediapipe::StatusOr> CreateEffectRenderer( + const Environment& environment, // + const absl::optional& effect_mesh_3d, // + ImageFrame&& effect_texture); + +} // namespace mediapipe::face_geometry + +#endif // MEDIAPIPE_MODULES_FACE_GEOMETRY_LIBS_EFFECT_RENDERER_H_ diff --git a/mediapipe/modules/face_geometry/libs/geometry_pipeline.cc b/mediapipe/modules/face_geometry/libs/geometry_pipeline.cc new file mode 100644 index 000000000..309e31903 --- /dev/null +++ b/mediapipe/modules/face_geometry/libs/geometry_pipeline.cc @@ -0,0 +1,434 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "mediapipe/modules/face_geometry/libs/geometry_pipeline.h" + +#include +#include +#include +#include +#include + +#include "Eigen/Core" +#include "absl/memory/memory.h" +#include "mediapipe/framework/formats/landmark.pb.h" +#include "mediapipe/framework/formats/matrix.h" +#include "mediapipe/framework/formats/matrix_data.pb.h" +#include "mediapipe/framework/port/ret_check.h" +#include "mediapipe/framework/port/status.h" +#include "mediapipe/framework/port/status_macros.h" +#include "mediapipe/framework/port/statusor.h" +#include "mediapipe/modules/face_geometry/libs/mesh_3d_utils.h" +#include "mediapipe/modules/face_geometry/libs/procrustes_solver.h" +#include "mediapipe/modules/face_geometry/libs/validation_utils.h" +#include "mediapipe/modules/face_geometry/protos/environment.pb.h" +#include "mediapipe/modules/face_geometry/protos/face_geometry.pb.h" +#include "mediapipe/modules/face_geometry/protos/geometry_pipeline_metadata.pb.h" +#include "mediapipe/modules/face_geometry/protos/mesh_3d.pb.h" + +namespace mediapipe::face_geometry { +namespace { + +struct PerspectiveCameraFrustum { + // NOTE: all arguments must be validated prior to calling this constructor. + PerspectiveCameraFrustum(const PerspectiveCamera& perspective_camera, + int frame_width, int frame_height) { + static constexpr float kDegreesToRadians = 3.14159265358979323846f / 180.f; + + const float height_at_near = + 2.f * perspective_camera.near() * + std::tan(0.5f * kDegreesToRadians * + perspective_camera.vertical_fov_degrees()); + + const float width_at_near = frame_width * height_at_near / frame_height; + + left = -0.5f * width_at_near; + right = 0.5f * width_at_near; + bottom = -0.5f * height_at_near; + top = 0.5f * height_at_near; + near = perspective_camera.near(); + far = perspective_camera.far(); + } + + float left; + float right; + float bottom; + float top; + float near; + float far; +}; + +class ScreenToMetricSpaceConverter { + public: + ScreenToMetricSpaceConverter( + OriginPointLocation origin_point_location, // + Eigen::Matrix3Xf&& canonical_metric_landmarks, // + Eigen::VectorXf&& landmark_weights, // + std::unique_ptr procrustes_solver) + : origin_point_location_(origin_point_location), + canonical_metric_landmarks_(std::move(canonical_metric_landmarks)), + landmark_weights_(std::move(landmark_weights)), + procrustes_solver_(std::move(procrustes_solver)) {} + + // Converts `screen_landmark_list` into `metric_landmark_list` and estimates + // the `pose_transform_mat`. + // + // Here's the algorithm summary: + // + // (1) Project X- and Y- screen landmark coordinates at the Z near plane. + // + // (2) Estimate a canonical-to-runtime landmark set scale by running the + // Procrustes solver using the screen runtime landmarks. + // + // On this iteration, screen landmarks are used instead of unprojected + // metric landmarks as it is not safe to unproject due to the relative + // nature of the input screen landmark Z coordinate. + // + // (3) Use the canonical-to-runtime scale from (2) to unproject the screen + // landmarks. The result is referenced as "intermediate landmarks" because + // they are the first estimation of the resuling metric landmarks, but are + // not quite there yet. + // + // (4) Estimate a canonical-to-runtime landmark set scale by running the + // Procrustes solver using the intermediate runtime landmarks. + // + // (5) Use the product of the scale factors from (2) and (4) to unproject + // the screen landmarks the second time. This is the second and the final + // estimation of the metric landmarks. + // + // (6) Multiply each of the metric landmarks by the inverse pose + // transformation matrix to align the runtime metric face landmarks with + // the canonical metric face landmarks. + // + // Note: the input screen landmarks are in the left-handed coordinate system, + // however any metric landmarks - including the canonical metric + // landmarks, the final runtime metric landmarks and any intermediate + // runtime metric landmarks - are in the right-handed coordinate system. + // + // To keep the logic correct, the landmark set handedness is changed any + // time the screen-to-metric semantic barrier is passed. + mediapipe::Status Convert( + const NormalizedLandmarkList& screen_landmark_list, // + const PerspectiveCameraFrustum& pcf, // + LandmarkList& metric_landmark_list, // + Eigen::Matrix4f& pose_transform_mat) const { + RET_CHECK_EQ(screen_landmark_list.landmark_size(), + canonical_metric_landmarks_.cols()) + << "The number of landmarks doesn't match the number passed upon " + "initialization!"; + + Eigen::Matrix3Xf screen_landmarks; + ConvertLandmarkListToEigenMatrix(screen_landmark_list, screen_landmarks); + + ProjectXY(pcf, screen_landmarks); + const float depth_offset = screen_landmarks.row(2).mean(); + + // 1st iteration: don't unproject XY because it's unsafe to do so due to + // the relative nature of the Z coordinate. Instead, run the + // first estimation on the projected XY and use that scale to + // unproject for the 2nd iteration. + Eigen::Matrix3Xf intermediate_landmarks(screen_landmarks); + ChangeHandedness(intermediate_landmarks); + + ASSIGN_OR_RETURN(const float first_iteration_scale, + EstimateScale(intermediate_landmarks), + _ << "Failed to estimate first iteration scale!"); + + // 2nd iteration: unproject XY using the scale from the 1st iteration. + intermediate_landmarks = screen_landmarks; + MoveAndRescaleZ(pcf, depth_offset, first_iteration_scale, + intermediate_landmarks); + UnprojectXY(pcf, intermediate_landmarks); + ChangeHandedness(intermediate_landmarks); + ASSIGN_OR_RETURN(const float second_iteration_scale, + EstimateScale(intermediate_landmarks), + _ << "Failed to estimate second iteration scale!"); + + // Use the total scale to unproject the screen landmarks. + float total_scale = first_iteration_scale * second_iteration_scale; + MoveAndRescaleZ(pcf, depth_offset, total_scale, screen_landmarks); + UnprojectXY(pcf, screen_landmarks); + ChangeHandedness(screen_landmarks); + + // At this point, screen landmarks are converted into metric landmarks. + Eigen::Matrix3Xf& metric_landmarks = screen_landmarks; + + MP_RETURN_IF_ERROR(procrustes_solver_->SolveWeightedOrthogonalProblem( + canonical_metric_landmarks_, metric_landmarks, landmark_weights_, + pose_transform_mat)) + << "Failed to estimate pose transform matrix!"; + + // Multiply each of the metric landmarks by the inverse pose transformation + // matrix to align the runtime metric face landmarks with the canonical + // metric face landmarks. + Eigen::Matrix4f inv_pose_transform_mat = pose_transform_mat.inverse(); + auto inv_pose_rotation = inv_pose_transform_mat.leftCols(3).topRows(3); + auto inv_pose_translation = inv_pose_transform_mat.col(3).topRows(3); + metric_landmarks = + (inv_pose_rotation * metric_landmarks).colwise() + inv_pose_translation; + + ConvertEigenMatrixToLandmarkList(metric_landmarks, metric_landmark_list); + + return mediapipe::OkStatus(); + } + + private: + void ProjectXY(const PerspectiveCameraFrustum& pcf, + Eigen::Matrix3Xf& landmarks) const { + float x_scale = pcf.right - pcf.left; + float y_scale = pcf.top - pcf.bottom; + float x_translation = pcf.left; + float y_translation = pcf.bottom; + + if (origin_point_location_ == OriginPointLocation::TOP_LEFT_CORNER) { + landmarks.row(1) = 1.f - landmarks.row(1).array(); + } + + landmarks = + landmarks.array().colwise() * Eigen::Array3f(x_scale, y_scale, x_scale); + landmarks.colwise() += Eigen::Vector3f(x_translation, y_translation, 0.f); + } + + mediapipe::StatusOr EstimateScale(Eigen::Matrix3Xf& landmarks) const { + Eigen::Matrix4f transform_mat; + MP_RETURN_IF_ERROR(procrustes_solver_->SolveWeightedOrthogonalProblem( + canonical_metric_landmarks_, landmarks, landmark_weights_, + transform_mat)) + << "Failed to estimate canonical-to-runtime landmark set transform!"; + + return transform_mat.col(0).norm(); + } + + static void MoveAndRescaleZ(const PerspectiveCameraFrustum& pcf, + float depth_offset, float scale, + Eigen::Matrix3Xf& landmarks) { + landmarks.row(2) = + (landmarks.array().row(2) - depth_offset + pcf.near) / scale; + } + + static void UnprojectXY(const PerspectiveCameraFrustum& pcf, + Eigen::Matrix3Xf& landmarks) { + landmarks.row(0) = + landmarks.row(0).cwiseProduct(landmarks.row(2)) / pcf.near; + landmarks.row(1) = + landmarks.row(1).cwiseProduct(landmarks.row(2)) / pcf.near; + } + + static void ChangeHandedness(Eigen::Matrix3Xf& landmarks) { + landmarks.row(2) *= -1.f; + } + + static void ConvertLandmarkListToEigenMatrix( + const NormalizedLandmarkList& landmark_list, + Eigen::Matrix3Xf& eigen_matrix) { + eigen_matrix = Eigen::Matrix3Xf(3, landmark_list.landmark_size()); + for (int i = 0; i < landmark_list.landmark_size(); ++i) { + const auto& landmark = landmark_list.landmark(i); + eigen_matrix(0, i) = landmark.x(); + eigen_matrix(1, i) = landmark.y(); + eigen_matrix(2, i) = landmark.z(); + } + } + + static void ConvertEigenMatrixToLandmarkList( + const Eigen::Matrix3Xf& eigen_matrix, LandmarkList& landmark_list) { + landmark_list.Clear(); + + for (int i = 0; i < eigen_matrix.cols(); ++i) { + auto& landmark = *landmark_list.add_landmark(); + landmark.set_x(eigen_matrix(0, i)); + landmark.set_y(eigen_matrix(1, i)); + landmark.set_z(eigen_matrix(2, i)); + } + } + + OriginPointLocation origin_point_location_; + Eigen::Matrix3Xf canonical_metric_landmarks_; + Eigen::VectorXf landmark_weights_; + + std::unique_ptr procrustes_solver_; +}; + +class GeometryPipelineImpl : public GeometryPipeline { + public: + GeometryPipelineImpl( + const PerspectiveCamera& perspective_camera, // + const Mesh3d& canonical_mesh, // + uint32_t canonical_mesh_vertex_size, // + uint32_t canonical_mesh_num_vertices, + uint32_t canonical_mesh_vertex_position_offset, + std::unique_ptr space_converter) + : perspective_camera_(perspective_camera), + canonical_mesh_(canonical_mesh), + canonical_mesh_vertex_size_(canonical_mesh_vertex_size), + canonical_mesh_num_vertices_(canonical_mesh_num_vertices), + canonical_mesh_vertex_position_offset_( + canonical_mesh_vertex_position_offset), + space_converter_(std::move(space_converter)) {} + + mediapipe::StatusOr> EstimateFaceGeometry( + const std::vector& multi_face_landmarks, + int frame_width, int frame_height) const override { + MP_RETURN_IF_ERROR(ValidateFrameDimensions(frame_width, frame_height)) + << "Invalid frame dimensions!"; + + // Create a perspective camera frustum to be shared for geometry estimation + // per each face. + PerspectiveCameraFrustum pcf(perspective_camera_, frame_width, + frame_height); + + std::vector multi_face_geometry; + + // From this point, the meaning of "face landmarks" is clarified further as + // "screen face landmarks". This is done do distinguish from "metric face + // landmarks" that are derived during the face geometry estimation process. + for (const NormalizedLandmarkList& screen_face_landmarks : + multi_face_landmarks) { + // Having a too compact screen landmark list will result in numerical + // instabilities, therefore such faces are filtered. + if (IsScreenLandmarkListTooCompact(screen_face_landmarks)) { + continue; + } + + // Convert the screen landmarks into the metric landmarks and + // get the pose transformation matrix. + LandmarkList metric_face_landmarks; + Eigen::Matrix4f pose_transform_mat; + MP_RETURN_IF_ERROR(space_converter_->Convert(screen_face_landmarks, pcf, + metric_face_landmarks, + pose_transform_mat)) + << "Failed to convert landmarks from the screen to the metric space!"; + + // Pack geometry data for this face. + FaceGeometry face_geometry; + Mesh3d* mutable_mesh = face_geometry.mutable_mesh(); + // Copy the canonical face mesh as the face geometry mesh. + mutable_mesh->CopyFrom(canonical_mesh_); + // Replace XYZ vertex mesh coodinates with the metric landmark positions. + for (int i = 0; i < canonical_mesh_num_vertices_; ++i) { + uint32_t vertex_buffer_offset = canonical_mesh_vertex_size_ * i + + canonical_mesh_vertex_position_offset_; + + mutable_mesh->set_vertex_buffer(vertex_buffer_offset, + metric_face_landmarks.landmark(i).x()); + mutable_mesh->set_vertex_buffer(vertex_buffer_offset + 1, + metric_face_landmarks.landmark(i).y()); + mutable_mesh->set_vertex_buffer(vertex_buffer_offset + 2, + metric_face_landmarks.landmark(i).z()); + } + // Populate the face pose transformation matrix. + mediapipe::MatrixDataProtoFromMatrix( + pose_transform_mat, face_geometry.mutable_pose_transform_matrix()); + + multi_face_geometry.push_back(face_geometry); + } + + return multi_face_geometry; + } + + private: + static bool IsScreenLandmarkListTooCompact( + const NormalizedLandmarkList& screen_landmarks) { + float mean_x = 0.f; + float mean_y = 0.f; + for (int i = 0; i < screen_landmarks.landmark_size(); ++i) { + const auto& landmark = screen_landmarks.landmark(i); + mean_x += (landmark.x() - mean_x) / static_cast(i + 1); + mean_y += (landmark.y() - mean_y) / static_cast(i + 1); + } + + float max_sq_dist = 0.f; + for (const auto& landmark : screen_landmarks.landmark()) { + const float d_x = landmark.x() - mean_x; + const float d_y = landmark.y() - mean_y; + max_sq_dist = std::max(max_sq_dist, d_x * d_x + d_y * d_y); + } + + static constexpr float kIsScreenLandmarkListTooCompactThreshold = 1e-3f; + return std::sqrt(max_sq_dist) <= kIsScreenLandmarkListTooCompactThreshold; + } + + const PerspectiveCamera perspective_camera_; + const Mesh3d canonical_mesh_; + const uint32_t canonical_mesh_vertex_size_; + const uint32_t canonical_mesh_num_vertices_; + const uint32_t canonical_mesh_vertex_position_offset_; + + std::unique_ptr space_converter_; +}; + +} // namespace + +mediapipe::StatusOr> CreateGeometryPipeline( + const Environment& environment, const GeometryPipelineMetadata& metadata) { + MP_RETURN_IF_ERROR(ValidateEnvironment(environment)) + << "Invalid environment!"; + MP_RETURN_IF_ERROR(ValidateGeometryPipelineMetadata(metadata)) + << "Invalid geometry pipeline metadata!"; + + const auto& canonical_mesh = metadata.canonical_mesh(); + RET_CHECK(HasVertexComponent(canonical_mesh.vertex_type(), + VertexComponent::POSITION)) + << "Canonical face mesh must have the `POSITION` vertex component!"; + RET_CHECK(HasVertexComponent(canonical_mesh.vertex_type(), + VertexComponent::TEX_COORD)) + << "Canonical face mesh must have the `TEX_COORD` vertex component!"; + + uint32_t canonical_mesh_vertex_size = + GetVertexSize(canonical_mesh.vertex_type()); + uint32_t canonical_mesh_num_vertices = + canonical_mesh.vertex_buffer_size() / canonical_mesh_vertex_size; + uint32_t canonical_mesh_vertex_position_offset = + GetVertexComponentOffset(canonical_mesh.vertex_type(), + VertexComponent::POSITION) + .ValueOrDie(); + + // Put the Procrustes landmark basis into Eigen matrices for an easier access. + Eigen::Matrix3Xf canonical_metric_landmarks = + Eigen::Matrix3Xf::Zero(3, canonical_mesh_num_vertices); + Eigen::VectorXf landmark_weights = + Eigen::VectorXf::Zero(canonical_mesh_num_vertices); + + for (int i = 0; i < canonical_mesh_num_vertices; ++i) { + uint32_t vertex_buffer_offset = + canonical_mesh_vertex_size * i + canonical_mesh_vertex_position_offset; + + canonical_metric_landmarks(0, i) = + canonical_mesh.vertex_buffer(vertex_buffer_offset); + canonical_metric_landmarks(1, i) = + canonical_mesh.vertex_buffer(vertex_buffer_offset + 1); + canonical_metric_landmarks(2, i) = + canonical_mesh.vertex_buffer(vertex_buffer_offset + 2); + } + + for (const WeightedLandmarkRef& wlr : metadata.procrustes_landmark_basis()) { + uint32_t landmark_id = wlr.landmark_id(); + landmark_weights(landmark_id) = wlr.weight(); + } + + std::unique_ptr result = + absl::make_unique( + environment.perspective_camera(), canonical_mesh, + canonical_mesh_vertex_size, canonical_mesh_num_vertices, + canonical_mesh_vertex_position_offset, + absl::make_unique( + environment.origin_point_location(), + std::move(canonical_metric_landmarks), + std::move(landmark_weights), + CreateFloatPrecisionProcrustesSolver())); + + return result; +} + +} // namespace mediapipe::face_geometry diff --git a/mediapipe/modules/face_geometry/libs/geometry_pipeline.h b/mediapipe/modules/face_geometry/libs/geometry_pipeline.h new file mode 100644 index 000000000..da530966b --- /dev/null +++ b/mediapipe/modules/face_geometry/libs/geometry_pipeline.h @@ -0,0 +1,67 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef MEDIAPIPE_FACE_GEOMETRY_LIBS_GEOMETRY_PIPELINE_H_ +#define MEDIAPIPE_FACE_GEOMETRY_LIBS_GEOMETRY_PIPELINE_H_ + +#include +#include + +#include "mediapipe/framework/formats/landmark.pb.h" +#include "mediapipe/framework/port/statusor.h" +#include "mediapipe/modules/face_geometry/protos/environment.pb.h" +#include "mediapipe/modules/face_geometry/protos/face_geometry.pb.h" +#include "mediapipe/modules/face_geometry/protos/geometry_pipeline_metadata.pb.h" + +namespace mediapipe::face_geometry { + +// Encapsulates a stateless estimator of facial geometry in a Metric space based +// on the normalized face landmarks in the Screen space. +class GeometryPipeline { + public: + virtual ~GeometryPipeline() = default; + + // Estimates geometry data for multiple faces. + // + // Returns an error status if any of the passed arguments is invalid. + // + // The result includes face geometry data for a subset of the input faces, + // however geometry data for some faces might be missing. This may happen if + // it'd be unstable to estimate the facial geometry based on a corresponding + // face landmark list for any reason (for example, if the landmark list is too + // compact). + // + // Each face landmark list must have the same number of landmarks as was + // passed upon initialization via the canonical face mesh (as a part of the + // geometry pipeline metadata). + // + // Both `frame_width` and `frame_height` must be positive. + virtual mediapipe::StatusOr> EstimateFaceGeometry( + const std::vector& multi_face_landmarks, + int frame_width, int frame_height) const = 0; +}; + +// Creates an instance of `GeometryPipeline`. +// +// Both `environment` and `metadata` must be valid (for details, please refer to +// the proto message definition comments and/or `validation_utils.h/cc`). +// +// Canonical face mesh (defined as a part of `metadata`) must have the +// `POSITION` and the `TEX_COORD` vertex components. +mediapipe::StatusOr> CreateGeometryPipeline( + const Environment& environment, const GeometryPipelineMetadata& metadata); + +} // namespace mediapipe::face_geometry + +#endif // MEDIAPIPE_FACE_GEOMETRY_LIBS_GEOMETRY_PIPELINE_H_ diff --git a/mediapipe/modules/face_geometry/libs/mesh_3d_utils.cc b/mediapipe/modules/face_geometry/libs/mesh_3d_utils.cc new file mode 100644 index 000000000..80510818d --- /dev/null +++ b/mediapipe/modules/face_geometry/libs/mesh_3d_utils.cc @@ -0,0 +1,103 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "mediapipe/modules/face_geometry/libs/mesh_3d_utils.h" + +#include +#include + +#include "mediapipe/framework/port/ret_check.h" +#include "mediapipe/framework/port/statusor.h" +#include "mediapipe/modules/face_geometry/protos/mesh_3d.pb.h" + +namespace mediapipe::face_geometry { +namespace { + +bool HasVertexComponentVertexPT(VertexComponent vertex_component) { + switch (vertex_component) { + case VertexComponent::POSITION: + case VertexComponent::TEX_COORD: + return true; + + default: + return false; + } +} + +uint32_t GetVertexComponentSizeVertexPT(VertexComponent vertex_component) { + switch (vertex_component) { + case VertexComponent::POSITION: + return 3; + case VertexComponent::TEX_COORD: + return 2; + } +} + +uint32_t GetVertexComponentOffsetVertexPT(VertexComponent vertex_component) { + switch (vertex_component) { + case VertexComponent::POSITION: + return 0; + case VertexComponent::TEX_COORD: + return GetVertexComponentSizeVertexPT(VertexComponent::POSITION); + } +} + +} // namespace + +std::size_t GetVertexSize(Mesh3d::VertexType vertex_type) { + switch (vertex_type) { + case Mesh3d::VERTEX_PT: + return GetVertexComponentSizeVertexPT(VertexComponent::POSITION) + + GetVertexComponentSizeVertexPT(VertexComponent::TEX_COORD); + } +} + +std::size_t GetPrimitiveSize(Mesh3d::PrimitiveType primitive_type) { + switch (primitive_type) { + case Mesh3d::TRIANGLE: + return 3; + } +} + +bool HasVertexComponent(Mesh3d::VertexType vertex_type, + VertexComponent vertex_component) { + switch (vertex_type) { + case Mesh3d::VERTEX_PT: + return HasVertexComponentVertexPT(vertex_component); + } +} + +mediapipe::StatusOr GetVertexComponentOffset( + Mesh3d::VertexType vertex_type, VertexComponent vertex_component) { + RET_CHECK(HasVertexComponentVertexPT(vertex_component)) + << "A given vertex type doesn't have the requested component!"; + + switch (vertex_type) { + case Mesh3d::VERTEX_PT: + return GetVertexComponentOffsetVertexPT(vertex_component); + } +} + +mediapipe::StatusOr GetVertexComponentSize( + Mesh3d::VertexType vertex_type, VertexComponent vertex_component) { + RET_CHECK(HasVertexComponentVertexPT(vertex_component)) + << "A given vertex type doesn't have the requested component!"; + + switch (vertex_type) { + case Mesh3d::VERTEX_PT: + return GetVertexComponentSizeVertexPT(vertex_component); + } +} + +} // namespace mediapipe::face_geometry diff --git a/mediapipe/modules/face_geometry/libs/mesh_3d_utils.h b/mediapipe/modules/face_geometry/libs/mesh_3d_utils.h new file mode 100644 index 000000000..e6e76d3a6 --- /dev/null +++ b/mediapipe/modules/face_geometry/libs/mesh_3d_utils.h @@ -0,0 +1,51 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef MEDIAPIPE_FACE_GEOMETRY_LIBS_MESH_3D_UTILS_H_ +#define MEDIAPIPE_FACE_GEOMETRY_LIBS_MESH_3D_UTILS_H_ + +#include +#include + +#include "mediapipe/framework/port/statusor.h" +#include "mediapipe/modules/face_geometry/protos/mesh_3d.pb.h" + +namespace mediapipe::face_geometry { + +enum class VertexComponent { POSITION, TEX_COORD }; + +std::size_t GetVertexSize(Mesh3d::VertexType vertex_type); + +std::size_t GetPrimitiveSize(Mesh3d::PrimitiveType primitive_type); + +bool HasVertexComponent(Mesh3d::VertexType vertex_type, + VertexComponent vertex_component); + +// Computes the vertex component offset. +// +// Returns an error status if a given vertex type doesn't have the requested +// component. +mediapipe::StatusOr GetVertexComponentOffset( + Mesh3d::VertexType vertex_type, VertexComponent vertex_component); + +// Computes the vertex component size. +// +// Returns an error status if a given vertex type doesn't have the requested +// component. +mediapipe::StatusOr GetVertexComponentSize( + Mesh3d::VertexType vertex_type, VertexComponent vertex_component); + +} // namespace mediapipe::face_geometry + +#endif // MEDIAPIPE_FACE_GEOMETRY_LIBS_MESH_3D_UTILS_H_ diff --git a/mediapipe/modules/face_geometry/libs/procrustes_solver.cc b/mediapipe/modules/face_geometry/libs/procrustes_solver.cc new file mode 100644 index 000000000..0004ac229 --- /dev/null +++ b/mediapipe/modules/face_geometry/libs/procrustes_solver.cc @@ -0,0 +1,266 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "mediapipe/modules/face_geometry/libs/procrustes_solver.h" + +#include +#include + +#include "Eigen/Dense" +#include "absl/memory/memory.h" +#include "mediapipe/framework/port/ret_check.h" +#include "mediapipe/framework/port/status.h" +#include "mediapipe/framework/port/status_macros.h" +#include "mediapipe/framework/port/statusor.h" + +namespace mediapipe { +namespace face_geometry { +namespace { + +class FloatPrecisionProcrustesSolver : public ProcrustesSolver { + public: + FloatPrecisionProcrustesSolver() = default; + + mediapipe::Status SolveWeightedOrthogonalProblem( + const Eigen::Matrix3Xf& source_points, // + const Eigen::Matrix3Xf& target_points, // + const Eigen::VectorXf& point_weights, + Eigen::Matrix4f& transform_mat) const override { + // Validate inputs. + MP_RETURN_IF_ERROR(ValidateInputPoints(source_points, target_points)) + << "Failed to validate weighted orthogonal problem input points!"; + MP_RETURN_IF_ERROR( + ValidatePointWeights(source_points.cols(), point_weights)) + << "Failed to validate weighted orthogonal problem point weights!"; + + // Extract square root from the point weights. + Eigen::VectorXf sqrt_weights = ExtractSquareRoot(point_weights); + + // Try to solve the WEOP problem. + MP_RETURN_IF_ERROR(InternalSolveWeightedOrthogonalProblem( + source_points, target_points, sqrt_weights, transform_mat)) + << "Failed to solve the WEOP problem!"; + + return mediapipe::OkStatus(); + } + + private: + static constexpr float kAbsoluteErrorEps = 1e-9f; + + static mediapipe::Status ValidateInputPoints( + const Eigen::Matrix3Xf& source_points, + const Eigen::Matrix3Xf& target_points) { + RET_CHECK_GT(source_points.cols(), 0) + << "The number of source points must be positive!"; + + RET_CHECK_EQ(source_points.cols(), target_points.cols()) + << "The number of source and target points must be equal!"; + + return mediapipe::OkStatus(); + } + + static mediapipe::Status ValidatePointWeights( + int num_points, const Eigen::VectorXf& point_weights) { + RET_CHECK_GT(point_weights.size(), 0) + << "The number of point weights must be positive!"; + + RET_CHECK_EQ(point_weights.size(), num_points) + << "The number of points and point weights must be equal!"; + + float total_weight = 0.f; + for (int i = 0; i < num_points; ++i) { + RET_CHECK_GE(point_weights(i), 0.f) + << "Each point weight must be non-negative!"; + + total_weight += point_weights(i); + } + + RET_CHECK_GT(total_weight, kAbsoluteErrorEps) + << "The total point weight is too small!"; + + return mediapipe::OkStatus(); + } + + static Eigen::VectorXf ExtractSquareRoot( + const Eigen::VectorXf& point_weights) { + Eigen::VectorXf sqrt_weights(point_weights); + for (int i = 0; i < sqrt_weights.size(); ++i) { + sqrt_weights(i) = std::sqrt(sqrt_weights(i)); + } + + return sqrt_weights; + } + + // Combines a 3x3 rotation-and-scale matrix and a 3x1 translation vector into + // a single 4x4 transformation matrix. + static Eigen::Matrix4f CombineTransformMatrix(const Eigen::Matrix3f& r_and_s, + const Eigen::Vector3f& t) { + Eigen::Matrix4f result = Eigen::Matrix4f::Identity(); + result.leftCols(3).topRows(3) = r_and_s; + result.col(3).topRows(3) = t; + + return result; + } + + // The weighted problem is thoroughly addressed in Section 2.4 of: + // D. Akca, Generalized Procrustes analysis and its applications + // in photogrammetry, 2003, https://doi.org/10.3929/ethz-a-004656648 + // + // Notable differences in the code presented here are: + // + // * In the paper, the weights matrix W_p is Cholesky-decomposed as Q^T Q. + // Our W_p is diagonal (equal to diag(sqrt_weights^2)), + // so we can just set Q = diag(sqrt_weights) instead. + // + // * In the paper, the problem is presented as + // (for W_k = I and W_p = tranposed(Q) Q): + // || Q (c A T + j tranposed(t) - B) || -> min. + // + // We reformulate it as an equivalent minimization of the transpose's + // norm: + // || (c tranposed(T) tranposed(A) - tranposed(B)) tranposed(Q) || -> min, + // where tranposed(A) and tranposed(B) are the source and the target point + // clouds, respectively, c tranposed(T) is the rotation+scaling R sought + // for, and Q is diag(sqrt_weights). + // + // Most of the derivations are therefore transposed. + // + // Note: the output `transform_mat` argument is used instead of `StatusOr<>` + // return type in order to avoid Eigen memory alignment issues. Details: + // https://eigen.tuxfamily.org/dox/group__TopicStructHavingEigenMembers.html + static mediapipe::Status InternalSolveWeightedOrthogonalProblem( + const Eigen::Matrix3Xf& sources, const Eigen::Matrix3Xf& targets, + const Eigen::VectorXf& sqrt_weights, Eigen::Matrix4f& transform_mat) { + // tranposed(A_w). + Eigen::Matrix3Xf weighted_sources = + sources.array().rowwise() * sqrt_weights.array().transpose(); + // tranposed(B_w). + Eigen::Matrix3Xf weighted_targets = + targets.array().rowwise() * sqrt_weights.array().transpose(); + + // w = tranposed(j_w) j_w. + float total_weight = sqrt_weights.cwiseProduct(sqrt_weights).sum(); + + // Let C = (j_w tranposed(j_w)) / (tranposed(j_w) j_w). + // Note that C = tranposed(C), hence (I - C) = tranposed(I - C). + // + // tranposed(A_w) C = tranposed(A_w) j_w tranposed(j_w) / w = + // (tranposed(A_w) j_w) tranposed(j_w) / w = c_w tranposed(j_w), + // + // where c_w = tranposed(A_w) j_w / w is a k x 1 vector calculated here: + Eigen::Matrix3Xf twice_weighted_sources = + weighted_sources.array().rowwise() * sqrt_weights.array().transpose(); + Eigen::Vector3f source_center_of_mass = + twice_weighted_sources.rowwise().sum() / total_weight; + // tranposed((I - C) A_w) = tranposed(A_w) (I - C) = + // tranposed(A_w) - tranposed(A_w) C = tranposed(A_w) - c_w tranposed(j_w). + Eigen::Matrix3Xf centered_weighted_sources = + weighted_sources - source_center_of_mass * sqrt_weights.transpose(); + + Eigen::Matrix3f rotation; + MP_RETURN_IF_ERROR(ComputeOptimalRotation( + weighted_targets * centered_weighted_sources.transpose(), rotation)) + << "Failed to compute the optimal rotation!"; + ASSIGN_OR_RETURN( + float scale, + ComputeOptimalScale(centered_weighted_sources, weighted_sources, + weighted_targets, rotation), + _ << "Failed to compute the optimal scale!"); + + // R = c tranposed(T). + Eigen::Matrix3f rotation_and_scale = scale * rotation; + + // Compute optimal translation for the weighted problem. + + // tranposed(B_w - c A_w T) = tranposed(B_w) - R tranposed(A_w) in (54). + const auto pointwise_diffs = + weighted_targets - rotation_and_scale * weighted_sources; + // Multiplication by j_w is a respectively weighted column sum. + // (54) from the paper. + const auto weighted_pointwise_diffs = + pointwise_diffs.array().rowwise() * sqrt_weights.array().transpose(); + Eigen::Vector3f translation = + weighted_pointwise_diffs.rowwise().sum() / total_weight; + + transform_mat = CombineTransformMatrix(rotation_and_scale, translation); + + return mediapipe::OkStatus(); + } + + // `design_matrix` is a transposed LHS of (51) in the paper. + // + // Note: the output `rotation` argument is used instead of `StatusOr<>` + // return type in order to avoid Eigen memory alignment issues. Details: + // https://eigen.tuxfamily.org/dox/group__TopicStructHavingEigenMembers.html + static mediapipe::Status ComputeOptimalRotation( + const Eigen::Matrix3f& design_matrix, Eigen::Matrix3f& rotation) { + RET_CHECK_GT(design_matrix.norm(), kAbsoluteErrorEps) + << "Design matrix norm is too small!"; + + Eigen::JacobiSVD svd( + design_matrix, Eigen::ComputeFullU | Eigen::ComputeFullV); + + Eigen::Matrix3f postrotation = svd.matrixU(); + Eigen::Matrix3f prerotation = svd.matrixV().transpose(); + + // Disallow reflection by ensuring that det(`rotation`) = +1 (and not -1), + // see "4.6 Constrained orthogonal Procrustes problems" + // in the Gower & Dijksterhuis's book "Procrustes Analysis". + // We flip the sign of the least singular value along with a column in W. + // + // Note that now the sum of singular values doesn't work for scale + // estimation due to this sign flip. + if (postrotation.determinant() * prerotation.determinant() < + static_cast(0)) { + postrotation.col(2) *= static_cast(-1); + } + + // Transposed (52) from the paper. + rotation = postrotation * prerotation; + return mediapipe::OkStatus(); + } + + static mediapipe::StatusOr ComputeOptimalScale( + const Eigen::Matrix3Xf& centered_weighted_sources, + const Eigen::Matrix3Xf& weighted_sources, + const Eigen::Matrix3Xf& weighted_targets, + const Eigen::Matrix3f& rotation) { + // tranposed(T) tranposed(A_w) (I - C). + const auto rotated_centered_weighted_sources = + rotation * centered_weighted_sources; + // Use the identity trace(A B) = sum(A * B^T) + // to avoid building large intermediate matrices (* is Hadamard product). + // (53) from the paper. + float numerator = + rotated_centered_weighted_sources.cwiseProduct(weighted_targets).sum(); + float denominator = + centered_weighted_sources.cwiseProduct(weighted_sources).sum(); + + RET_CHECK_GT(denominator, kAbsoluteErrorEps) + << "Scale expression denominator is too small!"; + RET_CHECK_GT(numerator / denominator, kAbsoluteErrorEps) + << "Scale is too small!"; + + return numerator / denominator; + } +}; + +} // namespace + +std::unique_ptr CreateFloatPrecisionProcrustesSolver() { + return absl::make_unique(); +} + +} // namespace face_geometry +} // namespace mediapipe diff --git a/mediapipe/modules/face_geometry/libs/procrustes_solver.h b/mediapipe/modules/face_geometry/libs/procrustes_solver.h new file mode 100644 index 000000000..4147a21c7 --- /dev/null +++ b/mediapipe/modules/face_geometry/libs/procrustes_solver.h @@ -0,0 +1,70 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef MEDIAPIPE_FACE_GEOMETRY_LIBS_PROCRUSTES_SOLVER_H_ +#define MEDIAPIPE_FACE_GEOMETRY_LIBS_PROCRUSTES_SOLVER_H_ + +#include + +#include "Eigen/Dense" +#include "mediapipe/framework/port/status.h" + +namespace mediapipe::face_geometry { + +// Encapsulates a stateless solver for the Weighted Extended Orthogonal +// Procrustes (WEOP) Problem, as defined in Section 2.4 of +// https://doi.org/10.3929/ethz-a-004656648. +// +// Given the source and the target point clouds, the algorithm estimates +// a 4x4 transformation matrix featuring the following semantic components: +// +// * Uniform scale +// * Rotation +// * Translation +// +// The matrix maps the source point cloud into the target point cloud minimizing +// the Mean Squared Error. +class ProcrustesSolver { + public: + virtual ~ProcrustesSolver() = default; + + // Solves the Weighted Extended Orthogonal Procrustes (WEOP) Problem. + // + // All `source_points`, `target_points` and `point_weights` must define the + // same number of points. Elements of `point_weights` must be non-negative. + // + // A too small diameter of either of the point clouds will likely lead to + // numerical instabilities and failure to estimate the transformation. + // + // A too small point cloud total weight will likely lead to numerical + // instabilities and failure to estimate the transformation too. + // + // Small point coordinate deviation for either of the point cloud will likely + // result in a failure as it will make the solution very unstable if possible. + // + // Note: the output `transform_mat` argument is used instead of `StatusOr<>` + // return type in order to avoid Eigen memory alignment issues. Details: + // https://eigen.tuxfamily.org/dox/group__TopicStructHavingEigenMembers.html + virtual mediapipe::Status SolveWeightedOrthogonalProblem( + const Eigen::Matrix3Xf& source_points, // + const Eigen::Matrix3Xf& target_points, // + const Eigen::VectorXf& point_weights, // + Eigen::Matrix4f& transform_mat) const = 0; +}; + +std::unique_ptr CreateFloatPrecisionProcrustesSolver(); + +} // namespace mediapipe::face_geometry + +#endif // MEDIAPIPE_FACE_GEOMETRY_LIBS_PROCRUSTES_SOLVER_H_ diff --git a/mediapipe/modules/face_geometry/libs/validation_utils.cc b/mediapipe/modules/face_geometry/libs/validation_utils.cc new file mode 100644 index 000000000..eceaebce1 --- /dev/null +++ b/mediapipe/modules/face_geometry/libs/validation_utils.cc @@ -0,0 +1,126 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "mediapipe/modules/face_geometry/libs/validation_utils.h" + +#include +#include + +#include "mediapipe/framework/formats/matrix_data.pb.h" +#include "mediapipe/framework/port/ret_check.h" +#include "mediapipe/framework/port/status.h" +#include "mediapipe/framework/port/status_macros.h" +#include "mediapipe/modules/face_geometry/libs/mesh_3d_utils.h" +#include "mediapipe/modules/face_geometry/protos/environment.pb.h" +#include "mediapipe/modules/face_geometry/protos/geometry_pipeline_metadata.pb.h" +#include "mediapipe/modules/face_geometry/protos/mesh_3d.pb.h" + +namespace mediapipe::face_geometry { + +mediapipe::Status ValidatePerspectiveCamera( + const PerspectiveCamera& perspective_camera) { + static constexpr float kAbsoluteErrorEps = 1e-9f; + + RET_CHECK_GT(perspective_camera.near(), kAbsoluteErrorEps) + << "Near Z must be greater than 0 with a margin of 10^{-9}!"; + + RET_CHECK_GT(perspective_camera.far(), + perspective_camera.near() + kAbsoluteErrorEps) + << "Far Z must be greater than Near Z with a margin of 10^{-9}!"; + + RET_CHECK_GT(perspective_camera.vertical_fov_degrees(), kAbsoluteErrorEps) + << "Vertical FOV must be positive with a margin of 10^{-9}!"; + + RET_CHECK_LT(perspective_camera.vertical_fov_degrees() + kAbsoluteErrorEps, + 180.f) + << "Vertical FOV must be less than 180 degrees with a margin of 10^{-9}"; + + return mediapipe::OkStatus(); +} + +mediapipe::Status ValidateEnvironment(const Environment& environment) { + MP_RETURN_IF_ERROR( + ValidatePerspectiveCamera(environment.perspective_camera())) + << "Invalid perspective camera!"; + + return mediapipe::OkStatus(); +} + +mediapipe::Status ValidateMesh3d(const Mesh3d& mesh_3d) { + const std::size_t vertex_size = GetVertexSize(mesh_3d.vertex_type()); + const std::size_t primitive_type = GetPrimitiveSize(mesh_3d.primitive_type()); + + RET_CHECK_EQ(mesh_3d.vertex_buffer_size() % vertex_size, 0) + << "Vertex buffer size must a multiple of the vertex size!"; + + RET_CHECK_EQ(mesh_3d.index_buffer_size() % primitive_type, 0) + << "Index buffer size must a multiple of the primitive size!"; + + const int num_vertices = mesh_3d.vertex_buffer_size() / vertex_size; + for (uint32_t idx : mesh_3d.index_buffer()) { + RET_CHECK_LT(idx, num_vertices) + << "All mesh indices must refer to an existing vertex!"; + } + + return mediapipe::OkStatus(); +} + +mediapipe::Status ValidateFaceGeometry(const FaceGeometry& face_geometry) { + MP_RETURN_IF_ERROR(ValidateMesh3d(face_geometry.mesh())) << "Invalid mesh!"; + + static constexpr char kInvalid4x4MatrixMessage[] = + "Pose transformation matrix must be a 4x4 matrix!"; + + const MatrixData& pose_transform_matrix = + face_geometry.pose_transform_matrix(); + RET_CHECK_EQ(pose_transform_matrix.rows(), 4) << kInvalid4x4MatrixMessage; + RET_CHECK_EQ(pose_transform_matrix.rows(), 4) << kInvalid4x4MatrixMessage; + RET_CHECK_EQ(pose_transform_matrix.packed_data_size(), 16) + << kInvalid4x4MatrixMessage; + + return mediapipe::OkStatus(); +} + +mediapipe::Status ValidateGeometryPipelineMetadata( + const GeometryPipelineMetadata& metadata) { + MP_RETURN_IF_ERROR(ValidateMesh3d(metadata.canonical_mesh())) + << "Invalid canonical mesh!"; + + RET_CHECK_GT(metadata.procrustes_landmark_basis_size(), 0) + + << "Procrustes landmark basis must be non-empty!"; + + const int num_vertices = + metadata.canonical_mesh().vertex_buffer_size() / + GetVertexSize(metadata.canonical_mesh().vertex_type()); + for (const WeightedLandmarkRef& wlr : metadata.procrustes_landmark_basis()) { + RET_CHECK_LT(wlr.landmark_id(), num_vertices) + << "All Procrustes basis indices must refer to an existing canonical " + "mesh vertex!"; + + RET_CHECK_GE(wlr.weight(), 0.f) + << "All Procrustes basis landmarks must have a non-negative weight!"; + } + + return mediapipe::OkStatus(); +} + +mediapipe::Status ValidateFrameDimensions(int frame_width, int frame_height) { + RET_CHECK_GT(frame_width, 0) << "Frame width must be positive!"; + RET_CHECK_GT(frame_height, 0) << "Frame height must be positive!"; + + return mediapipe::OkStatus(); +} + +} // namespace mediapipe::face_geometry diff --git a/mediapipe/modules/face_geometry/libs/validation_utils.h b/mediapipe/modules/face_geometry/libs/validation_utils.h new file mode 100644 index 000000000..b633d38b0 --- /dev/null +++ b/mediapipe/modules/face_geometry/libs/validation_utils.h @@ -0,0 +1,70 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef MEDIAPIPE_FACE_GEOMETRY_LIBS_VALIDATION_UTILS_H_ +#define MEDIAPIPE_FACE_GEOMETRY_LIBS_VALIDATION_UTILS_H_ + +#include "mediapipe/framework/port/status.h" +#include "mediapipe/modules/face_geometry/protos/environment.pb.h" +#include "mediapipe/modules/face_geometry/protos/face_geometry.pb.h" +#include "mediapipe/modules/face_geometry/protos/geometry_pipeline_metadata.pb.h" +#include "mediapipe/modules/face_geometry/protos/mesh_3d.pb.h" + +namespace mediapipe::face_geometry { + +// Validates `perspective_camera`. +// +// Near Z must be greater than 0 with a margin of `1e-9`. +// Far Z must be greater than Near Z with a margin of `1e-9`. +// Vertical FOV must be in range (0, 180) with a margin of `1e-9` on the range +// edges. +mediapipe::Status ValidatePerspectiveCamera( + const PerspectiveCamera& perspective_camera); + +// Validates `environment`. +// +// Environment's perspective camera must be valid. +mediapipe::Status ValidateEnvironment(const Environment& environment); + +// Validates `mesh_3d`. +// +// Mesh vertex buffer size must a multiple of the vertex size. +// Mesh index buffer size must a multiple of the primitive size. +// All mesh indices must reference an existing mesh vertex. +mediapipe::Status ValidateMesh3d(const Mesh3d& mesh_3d); + +// Validates `face_geometry`. +// +// Face mesh must be valid. +// Face pose transformation matrix must be a 4x4 matrix. +mediapipe::Status ValidateFaceGeometry(const FaceGeometry& face_geometry); + +// Validates `metadata`. +// +// Canonical face mesh must be valid. +// Procrustes landmark basis must be non-empty. +// All Procrustes basis indices must reference an existing canonical mesh +// vertex. +// All Procrustes basis landmarks must have a non-negative weight. +mediapipe::Status ValidateGeometryPipelineMetadata( + const GeometryPipelineMetadata& metadata); + +// Validates frame dimensions. +// +// Both frame width and frame height must be positive. +mediapipe::Status ValidateFrameDimensions(int frame_width, int frame_height); + +} // namespace mediapipe::face_geometry + +#endif // MEDIAPIPE_FACE_GEOMETRY_LIBS_VALIDATION_UTILS_H_ diff --git a/mediapipe/modules/face_geometry/protos/BUILD b/mediapipe/modules/face_geometry/protos/BUILD new file mode 100644 index 000000000..48b7b66ce --- /dev/null +++ b/mediapipe/modules/face_geometry/protos/BUILD @@ -0,0 +1,46 @@ +# Copyright 2020 The MediaPipe Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load("//mediapipe/framework/port:build_config.bzl", "mediapipe_proto_library") + +licenses(["notice"]) + +package(default_visibility = ["//visibility:public"]) + +mediapipe_proto_library( + name = "environment_proto", + srcs = ["environment.proto"], +) + +mediapipe_proto_library( + name = "face_geometry_proto", + srcs = ["face_geometry.proto"], + deps = [ + ":mesh_3d_proto", + "//mediapipe/framework/formats:matrix_data_proto", + ], +) + +mediapipe_proto_library( + name = "geometry_pipeline_metadata_proto", + srcs = ["geometry_pipeline_metadata.proto"], + deps = [ + ":mesh_3d_proto", + ], +) + +mediapipe_proto_library( + name = "mesh_3d_proto", + srcs = ["mesh_3d.proto"], +) diff --git a/mediapipe/modules/face_geometry/protos/environment.proto b/mediapipe/modules/face_geometry/protos/environment.proto new file mode 100644 index 000000000..cca3f29ab --- /dev/null +++ b/mediapipe/modules/face_geometry/protos/environment.proto @@ -0,0 +1,84 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto2"; + +package mediapipe.face_geometry; + +option java_package = "com.google.mediapipe.modules.facegeometry"; +option java_outer_classname = "EnvironmentProto"; + +// Defines the (0, 0) origin point location of the environment. +// +// The variation in the origin point location can be traced back to the memory +// layout of the camera video frame buffers. +// +// Usually, the memory layout for most CPU (and also some GPU) camera video +// frame buffers results in having the (0, 0) origin point located in the +// Top Left corner. +// +// On the contrary, the memory layout for most GPU camera video frame buffers +// results in having the (0, 0) origin point located in the Bottom Left corner. +// +// Let's consider the following example: +// +// (A) ---------------+ +// ___ | +// | (1) | | | +// | / \ | | | +// | |---|===|-| | +// | |---| | | | +// | / \ | | | +// | | | | | | +// | | (2) |=| | | +// | | | | | | +// | |_______| |_| | +// | |@| |@| | | | +// | ___________|_|_ | +// | +// (B) ---------------+ +// +// On this example, (1) and (2) have the same X coordinate regardless of the +// origin point location. However, having the origin point located at (A) +// (Top Left corner) results in (1) having a smaller Y coordinate if compared to +// (2). Similarly, having the origin point located at (B) (Bottom Left corner) +// results in (1) having a greater Y coordinate if compared to (2). +// +// Providing the correct origin point location for your environment and making +// sure all the input landmarks are in-sync with this location is crucial +// for receiving the correct output face geometry and visual renders. +enum OriginPointLocation { + BOTTOM_LEFT_CORNER = 1; + TOP_LEFT_CORNER = 2; +} + +// The perspective camera is defined through its vertical FOV angle and the +// Z-clipping planes. The aspect ratio is a runtime variable for the face +// geometry module and should be provided alongside the face landmarks in order +// to estimate the face geometry on a given frame. +// +// More info on Perspective Cameras: +// http://www.songho.ca/opengl/gl_projectionmatrix.html#perspective +message PerspectiveCamera { + // `0 < vertical_fov_degrees < 180`. + optional float vertical_fov_degrees = 1; + // `0 < near < far`. + optional float near = 2; + optional float far = 3; +} + +message Environment { + optional OriginPointLocation origin_point_location = 1; + optional PerspectiveCamera perspective_camera = 2; +} diff --git a/mediapipe/modules/face_geometry/protos/face_geometry.proto b/mediapipe/modules/face_geometry/protos/face_geometry.proto new file mode 100644 index 000000000..459861b29 --- /dev/null +++ b/mediapipe/modules/face_geometry/protos/face_geometry.proto @@ -0,0 +1,51 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto2"; + +package mediapipe.face_geometry; + +import "mediapipe/framework/formats/matrix_data.proto"; +import "mediapipe/modules/face_geometry/protos/mesh_3d.proto"; + +option java_package = "com.google.mediapipe.modules.facegeometry"; +option java_outer_classname = "FaceGeometryProto"; + +// Defines the face geometry pipeline estimation result format. +message FaceGeometry { + // Defines a mesh surface for a face. The face mesh vertex IDs are the same as + // the face landmark IDs. + // + // XYZ coordinates exist in the right-handed Metric 3D space configured by an + // environment. UV coodinates are taken from the canonical face mesh model. + // + // XY coordinates are guaranteed to match the screen positions of + // the input face landmarks after (1) being multiplied by the face pose + // transformation matrix and then (2) being projected with a perspective + // camera matrix of the same environment. + optional Mesh3d mesh = 1; + + // Defines a face pose transformation matrix, which provides mapping from + // the static canonical face model to the runtime face. Tries to distinguish + // a head pose change from a facial expression change and to only reflect the + // former. + // + // Is a 4x4 matrix and contains only the following components: + // * Uniform scale + // * Rotation + // * Translation + // + // The last row is guaranteed to be `[0 0 0 1]`. + optional MatrixData pose_transform_matrix = 2; +} diff --git a/mediapipe/modules/face_geometry/protos/geometry_pipeline_metadata.proto b/mediapipe/modules/face_geometry/protos/geometry_pipeline_metadata.proto new file mode 100644 index 000000000..ab9906c0b --- /dev/null +++ b/mediapipe/modules/face_geometry/protos/geometry_pipeline_metadata.proto @@ -0,0 +1,46 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto2"; + +package mediapipe.face_geometry; + +import "mediapipe/modules/face_geometry/protos/mesh_3d.proto"; + +option java_package = "com.google.mediapipe.modules.facegeometry"; +option java_outer_classname = "GeometryPipelineMetadataProto"; + +message WeightedLandmarkRef { + // Defines the landmark ID. References an existing face landmark ID. + optional uint32 landmark_id = 1; + // Defines the landmark weight. The larger the weight the more influence this + // landmark has in the basis. + // + // Is positive. + optional float weight = 2; +} + +message GeometryPipelineMetadata { + // Defines a mesh surface for a canonical face. The canonical face mesh vertex + // IDs are the same as the face landmark IDs. + // + // XYZ coordinates are defined in centimeter units. + optional Mesh3d canonical_mesh = 1; + // Defines a weighted landmark basis for running the Procrustes solver + // algorithm inside the geometry pipeline. + // + // A good basis sets face landmark weights in way to distinguish a head pose + // change from a facial expression change and to only respond to the former. + repeated WeightedLandmarkRef procrustes_landmark_basis = 2; +} diff --git a/mediapipe/modules/face_geometry/protos/mesh_3d.proto b/mediapipe/modules/face_geometry/protos/mesh_3d.proto new file mode 100644 index 000000000..4db45c1d1 --- /dev/null +++ b/mediapipe/modules/face_geometry/protos/mesh_3d.proto @@ -0,0 +1,41 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto2"; + +package mediapipe.face_geometry; + +option java_package = "com.google.mediapipe.modules.facegeometry"; +option java_outer_classname = "Mesh3dProto"; + +message Mesh3d { + enum VertexType { + // Is defined by 5 coordinates: Position (XYZ) + Texture coordinate (UV). + VERTEX_PT = 0; + } + + enum PrimitiveType { + // Is defined by 3 indices: triangle vertex IDs. + TRIANGLE = 0; + } + + optional VertexType vertex_type = 1; + optional PrimitiveType primitive_type = 2; + // Vertex buffer size is a multiple of the vertex size (e.g., 5 for + // VERTEX_PT). + repeated float vertex_buffer = 3; + // Index buffer size is a multiple of the primitive size (e.g., 3 for + // TRIANGLE). + repeated uint32 index_buffer = 4; +} diff --git a/mediapipe/python/BUILD b/mediapipe/python/BUILD index a48e7911d..1e54d56ee 100644 --- a/mediapipe/python/BUILD +++ b/mediapipe/python/BUILD @@ -49,5 +49,6 @@ pybind_extension( "//mediapipe/python/pybind:packet_getter", "//mediapipe/python/pybind:resource_util", "//mediapipe/python/pybind:timestamp", + "//mediapipe/python/pybind:validated_graph_config", ], ) diff --git a/mediapipe/python/__init__.py b/mediapipe/python/__init__.py index 197288743..5cc9c8155 100644 --- a/mediapipe/python/__init__.py +++ b/mediapipe/python/__init__.py @@ -22,5 +22,6 @@ from mediapipe.python._framework_bindings.image_frame import ImageFrame from mediapipe.python._framework_bindings.matrix import Matrix from mediapipe.python._framework_bindings.packet import Packet from mediapipe.python._framework_bindings.timestamp import Timestamp +from mediapipe.python._framework_bindings.validated_graph_config import ValidatedGraphConfig import mediapipe.python.packet_creator import mediapipe.python.packet_getter diff --git a/mediapipe/python/calculator_graph_test.py b/mediapipe/python/calculator_graph_test.py index 0ee790a89..622b18a40 100644 --- a/mediapipe/python/calculator_graph_test.py +++ b/mediapipe/python/calculator_graph_test.py @@ -127,6 +127,43 @@ class GraphTest(absltest.TestCase): self.assertEqual(mp.packet_getter.get_str(out[0]), 'hello world') self.assertEqual(mp.packet_getter.get_str(out[1]), 'hello world') + def testGraphValidationAndInitialization(self): + text_config = """ + max_queue_size: 1 + input_stream: 'in' + output_stream: 'out' + node { + calculator: 'PassThroughCalculator' + input_stream: 'in' + output_stream: 'out' + } + """ + + hello_world_packet = mp.packet_creator.create_string('hello world') + out = [] + validated_graph_config = mp.ValidatedGraphConfig() + self.assertFalse(validated_graph_config.initialized()) + validated_graph_config.initialize(graph_config=text_config) + self.assertTrue(validated_graph_config.initialized()) + + graph = mp.CalculatorGraph(validated_graph_config=validated_graph_config) + graph.observe_output_stream('out', lambda _, packet: out.append(packet)) + graph.start_run() + graph.add_packet_to_input_stream( + stream='in', packet=hello_world_packet.at(0)) + graph.add_packet_to_input_stream( + stream='in', packet=hello_world_packet, timestamp=1) + graph.close() + self.assertEqual(graph.graph_input_stream_add_mode, + mp.GraphInputStreamAddMode.WAIT_TILL_NOT_FULL) + self.assertEqual(graph.max_queue_size, 1) + self.assertFalse(graph.has_error()) + self.assertLen(out, 2) + self.assertEqual(out[0].timestamp, 0) + self.assertEqual(out[1].timestamp, 1) + self.assertEqual(mp.packet_getter.get_str(out[0]), 'hello world') + self.assertEqual(mp.packet_getter.get_str(out[1]), 'hello world') + def testInsertPacketsWithSameTimestamp(self): text_config = """ max_queue_size: 1 diff --git a/mediapipe/python/framework_bindings.cc b/mediapipe/python/framework_bindings.cc index 9bb3571f0..0238fac47 100644 --- a/mediapipe/python/framework_bindings.cc +++ b/mediapipe/python/framework_bindings.cc @@ -20,6 +20,7 @@ #include "mediapipe/python/pybind/packet_getter.h" #include "mediapipe/python/pybind/resource_util.h" #include "mediapipe/python/pybind/timestamp.h" +#include "mediapipe/python/pybind/validated_graph_config.h" namespace mediapipe { namespace python { @@ -33,6 +34,7 @@ PYBIND11_MODULE(_framework_bindings, m) { PacketCreatorSubmodule(&m); PacketGetterSubmodule(&m); CalculatorGraphSubmodule(&m); + ValidatedGraphConfigSubmodule(&m); } } // namespace python diff --git a/mediapipe/python/image_frame_test.py b/mediapipe/python/image_frame_test.py index 6b9fd1989..800e46172 100644 --- a/mediapipe/python/image_frame_test.py +++ b/mediapipe/python/image_frame_test.py @@ -14,7 +14,9 @@ """Tests for mediapipe.python._framework_bindings.image_frame.""" +import gc import random +import sys from absl.testing import absltest import cv2 import mediapipe as mp @@ -140,6 +142,45 @@ class ImageFrameTest(absltest.TestCase): np.array_equal(mat[offset:-offset, offset:-offset, :], image_frame.numpy_view())) + # For image frames that store contiguous data, the output of numpy_view() + # points to the pixel data of the original image frame object. The life cycle + # of the data array should tie to the image frame object. + def testImageFrameNumpyViewWithContiguousData(self): + w, h = 640, 480 + mat = np.random.randint(2**8 - 1, size=(h, w, 3), dtype=np.uint8) + image_frame = mp.ImageFrame(image_format=mp.ImageFormat.SRGB, data=mat) + self.assertTrue(image_frame.is_contiguous()) + initial_ref_count = sys.getrefcount(image_frame) + self.assertTrue(np.array_equal(mat, image_frame.numpy_view())) + # Get 2 data array objects and verify that the image frame's ref count is + # increased by 2. + np_view = image_frame.numpy_view() + self.assertEqual(sys.getrefcount(image_frame), initial_ref_count + 1) + np_view2 = image_frame.numpy_view() + self.assertEqual(sys.getrefcount(image_frame), initial_ref_count + 2) + del np_view + del np_view2 + gc.collect() + # After the two data array objects getting destroyed, the current ref count + # should euqal to the initial ref count. + self.assertEqual(sys.getrefcount(image_frame), initial_ref_count) + + # For image frames that store non contiguous data, the output of numpy_view() + # stores a copy of the pixel data of the image frame object. The life cycle of + # the data array doesn't tie to the image frame object. + def testImageFrameNumpyViewWithNonContiguousData(self): + w, h = 641, 481 + mat = np.random.randint(2**8 - 1, size=(h, w, 3), dtype=np.uint8) + image_frame = mp.ImageFrame(image_format=mp.ImageFormat.SRGB, data=mat) + self.assertFalse(image_frame.is_contiguous()) + initial_ref_count = sys.getrefcount(image_frame) + self.assertTrue(np.array_equal(mat, image_frame.numpy_view())) + np_view = image_frame.numpy_view() + self.assertEqual(sys.getrefcount(image_frame), initial_ref_count) + del np_view + gc.collect() + self.assertEqual(sys.getrefcount(image_frame), initial_ref_count) + if __name__ == '__main__': absltest.main() diff --git a/mediapipe/python/pybind/BUILD b/mediapipe/python/pybind/BUILD index e61fd2e94..9da2ed8ee 100644 --- a/mediapipe/python/pybind/BUILD +++ b/mediapipe/python/pybind/BUILD @@ -27,7 +27,6 @@ pybind_library( "//mediapipe/framework:calculator_cc_proto", "//mediapipe/framework:calculator_graph", "//mediapipe/framework:packet", - "//mediapipe/framework/port:file_helpers", "//mediapipe/framework/port:map_util", "//mediapipe/framework/port:parse_text_proto", "//mediapipe/framework/port:status", @@ -135,7 +134,20 @@ pybind_library( name = "util", hdrs = ["util.h"], deps = [ + "//mediapipe/framework:calculator_cc_proto", "//mediapipe/framework:timestamp", + "//mediapipe/framework/port:file_helpers", "//mediapipe/framework/port:status", ], ) + +pybind_library( + name = "validated_graph_config", + srcs = ["validated_graph_config.cc"], + hdrs = ["validated_graph_config.h"], + deps = [ + ":util", + "//mediapipe/framework:validated_graph_config", + "//mediapipe/framework/port:parse_text_proto", + ], +) diff --git a/mediapipe/python/pybind/calculator_graph.cc b/mediapipe/python/pybind/calculator_graph.cc index 6e0ba552d..d883025d3 100644 --- a/mediapipe/python/pybind/calculator_graph.cc +++ b/mediapipe/python/pybind/calculator_graph.cc @@ -19,7 +19,6 @@ #include "mediapipe/framework/calculator.pb.h" #include "mediapipe/framework/calculator_graph.h" #include "mediapipe/framework/packet.h" -#include "mediapipe/framework/port/file_helpers.h" #include "mediapipe/framework/port/map_util.h" #include "mediapipe/framework/port/parse_text_proto.h" #include "mediapipe/framework/port/status.h" @@ -70,39 +69,25 @@ void CalculatorGraphSubmodule(pybind11::module* module) { // TODO: Support graph initialization with graph templates and // subgraph. calculator_graph.def( - py::init([](py::args args, py::kwargs kwargs) { - if (!args.empty()) { - throw RaisePyError(PyExc_RuntimeError, - "Invalid position input arguments."); - } + py::init([](py::kwargs kwargs) { bool init_with_binary_graph = false; bool init_with_graph_proto = false; + bool init_with_validated_graph_config = false; CalculatorGraphConfig graph_config_proto; for (const auto& kw : kwargs) { const std::string& key = kw.first.cast(); if (key == "binary_graph_path") { init_with_binary_graph = true; std::string file_name(kw.second.cast().str()); - auto status = file::Exists(file_name); - if (!status.ok()) { - throw RaisePyError(PyExc_FileNotFoundError, - status.message().data()); - } - std::string graph_config_string; - RaisePyErrorIfNotOk( - file::GetContents(file_name, &graph_config_string)); - if (!graph_config_proto.ParseFromArray( - graph_config_string.c_str(), - graph_config_string.length())) { - throw RaisePyError( - PyExc_RuntimeError, - absl::StrCat("Failed to parse the binary graph: ", file_name) - .c_str()); - } + graph_config_proto = ReadCalculatorGraphConfigFromFile(file_name); } else if (key == "graph_config") { init_with_graph_proto = true; graph_config_proto = ParseProto(kw.second.cast()); + } else if (key == "validated_graph_config") { + init_with_validated_graph_config = true; + graph_config_proto = + py::cast(kw.second)->Config(); } else { throw RaisePyError( PyExc_RuntimeError, @@ -110,12 +95,15 @@ void CalculatorGraphSubmodule(pybind11::module* module) { } } - if (!(init_with_binary_graph ^ init_with_graph_proto)) { + if ((init_with_binary_graph ? 1 : 0) + (init_with_graph_proto ? 1 : 0) + + (init_with_validated_graph_config ? 1 : 0) != + 1) { throw RaisePyError( PyExc_ValueError, "Please provide \'binary_graph\' to initialize the graph with" " binary graph or provide \'graph_config\' to initialize the " - " with graph config proto."); + " with graph config proto or provide \'validated_graph_config\' " + " to initialize the with ValidatedGraphConfig object."); } auto calculator_graph = absl::make_unique(); RaisePyErrorIfNotOk(calculator_graph->Initialize(graph_config_proto)); @@ -127,6 +115,7 @@ void CalculatorGraphSubmodule(pybind11::module* module) { binary_graph_path: The path to a binary mediapipe graph file (.binarypb). graph_config: A single CalculatorGraphConfig proto message or its text proto format. + validated_graph_config: A ValidatedGraphConfig object. Raises: FileNotFoundError: If the binary graph file can't be found. @@ -136,11 +125,11 @@ void CalculatorGraphSubmodule(pybind11::module* module) { // TODO: Return a Python CalculatorGraphConfig instead. calculator_graph.def_property_readonly( - "config", + "text_config", [](const CalculatorGraph& self) { return self.Config().DebugString(); }); calculator_graph.def_property_readonly( - "serialized_config", [](const CalculatorGraph& self) { + "binary_config", [](const CalculatorGraph& self) { return py::bytes(self.Config().SerializeAsString()); }); diff --git a/mediapipe/python/pybind/image_frame.cc b/mediapipe/python/pybind/image_frame.cc index cd48ade5c..49eef09a1 100644 --- a/mediapipe/python/pybind/image_frame.cc +++ b/mediapipe/python/pybind/image_frame.cc @@ -21,19 +21,16 @@ namespace python { namespace { template -py::array GenerateContiguousDataArray(const ImageFrame& image_frame, - const py::object& py_object) { +py::array GenerateContiguousDataArrayHelper(const ImageFrame& image_frame, + const py::object& py_object) { std::vector shape{image_frame.Height(), image_frame.Width()}; if (image_frame.NumberOfChannels() > 1) { shape.push_back(image_frame.NumberOfChannels()); } py::array_t contiguous_data; if (image_frame.IsContiguous()) { - // TODO: Create contiguous_data without copying ata. - // It's possible to achieve this with the help of py::capsule. - // Reference: https://github.com/pybind/pybind11/issues/1042, contiguous_data = py::array_t( - shape, reinterpret_cast(image_frame.PixelData())); + shape, reinterpret_cast(image_frame.PixelData()), py_object); } else { auto contiguous_data_copy = absl::make_unique(image_frame.Width() * image_frame.Height() * @@ -55,35 +52,65 @@ py::array GenerateContiguousDataArray(const ImageFrame& image_frame, return contiguous_data; } -py::array GetContiguousDataAttr(const ImageFrame& image_frame, - const py::object& py_object) { - py::object get_data_attr = - py::getattr(py_object, "__contiguous_data", py::none()); - if (image_frame.IsEmpty()) { - throw RaisePyError(PyExc_RuntimeError, "ImageFrame is unallocated."); - } - // If __contiguous_data attr already stores data, return the cached results. - if (!get_data_attr.is_none()) { - return get_data_attr.cast(); - } +py::array GenerateContiguousDataArray(const ImageFrame& image_frame, + const py::object& py_object) { switch (image_frame.ChannelSize()) { case sizeof(uint8): - py_object.attr("__contiguous_data") = - GenerateContiguousDataArray(image_frame, py_object); - break; + return GenerateContiguousDataArrayHelper(image_frame, py_object) + .cast(); case sizeof(uint16): - py_object.attr("__contiguous_data") = - GenerateContiguousDataArray(image_frame, py_object); - break; + return GenerateContiguousDataArrayHelper(image_frame, py_object) + .cast(); case sizeof(float): - py_object.attr("__contiguous_data") = - GenerateContiguousDataArray(image_frame, py_object); + return GenerateContiguousDataArrayHelper(image_frame, py_object) + .cast(); break; default: throw RaisePyError(PyExc_RuntimeError, "Unsupported image frame channel size. Data is not " "uint8, uint16, or float?"); } +} + +// Generates a contiguous data pyarray object on demand. +// This function only accepts an image frame object that already stores +// contiguous data. The output py::array points to the raw pixel data array of +// the image frame object directly. +py::array GenerateDataPyArrayOnDemand(const ImageFrame& image_frame, + const py::object& py_object) { + if (!image_frame.IsContiguous()) { + throw RaisePyError(PyExc_RuntimeError, + "GenerateDataPyArrayOnDemand must take an ImageFrame " + "object that stores contiguous data."); + } + return GenerateContiguousDataArray(image_frame, py_object); +} + +// Gets the cached contiguous data array from the "__contiguous_data" attribute. +// If the attribute doesn't exist, the function calls +// GenerateContiguousDataArray() to generate the contiguous data pyarray object, +// which realigns and copies the data from the original image frame object. +// Then, the data array object is cached in the "__contiguous_data" attribute. +// This function only accepts an image frame object that stores non-contiguous +// data. +py::array GetCachedContiguousDataAttr(const ImageFrame& image_frame, + const py::object& py_object) { + if (image_frame.IsContiguous()) { + throw RaisePyError(PyExc_RuntimeError, + "GetCachedContiguousDataAttr must take an ImageFrame " + "object that stores non-contiguous data."); + } + py::object get_data_attr = + py::getattr(py_object, "__contiguous_data", py::none()); + if (image_frame.IsEmpty()) { + throw RaisePyError(PyExc_RuntimeError, "ImageFrame is unallocated."); + } + // If __contiguous_data attr doesn't store data yet, generates the contiguous + // data array object and caches the result. + if (get_data_attr.is_none()) { + py_object.attr("__contiguous_data") = + GenerateContiguousDataArray(image_frame, py_object); + } return py_object.attr("__contiguous_data").cast(); } @@ -91,7 +118,9 @@ template py::object GetValue(const ImageFrame& image_frame, const std::vector& pos, const py::object& py_object) { py::array_t output_array = - GetContiguousDataAttr(image_frame, py_object); + image_frame.IsContiguous() + ? GenerateDataPyArrayOnDemand(image_frame, py_object) + : GetCachedContiguousDataAttr(image_frame, py_object); if (pos.size() == 2) { return py::cast(static_cast(output_array.at(pos[0], pos[1]))); } else if (pos.size() == 3) { @@ -243,7 +272,19 @@ void ImageFrameSubmodule(pybind11::module* module) { [](ImageFrame& self) { py::object py_object = py::cast(self, py::return_value_policy::reference); - return GetContiguousDataAttr(self, py_object); + // If the image frame data is contiguous, generates the data pyarray + // object on demand because 1) making a pyarray by referring to the + // existing image frame pixel data is relatively cheap and 2) caching + // the pyarray object in an attribute of the image frame is problematic: + // the image frame object and the data pyarray object refer to each + // other, which causes gc fails to free the pyarray after use. + // For the non-contiguous cases, gets a cached data pyarray object from + // the image frame pyobject attribute. This optimization is to avoid the + // expensive data realignment and copy operations happening more than + // once. + return self.IsContiguous() + ? GenerateDataPyArrayOnDemand(self, py_object) + : GetCachedContiguousDataAttr(self, py_object); }, R"doc(Return the image frame pixel data as an unwritable numpy ndarray. diff --git a/mediapipe/python/pybind/util.h b/mediapipe/python/pybind/util.h index 11cec05f6..d776d53b9 100644 --- a/mediapipe/python/pybind/util.h +++ b/mediapipe/python/pybind/util.h @@ -15,6 +15,8 @@ #ifndef MEDIAPIPE_PYTHON_PYBIND_UTIL_H_ #define MEDIAPIPE_PYTHON_PYBIND_UTIL_H_ +#include "mediapipe/framework/calculator.pb.h" +#include "mediapipe/framework/port/file_helpers.h" #include "mediapipe/framework/port/status.h" #include "mediapipe/framework/timestamp.h" #include "pybind11/pybind11.h" @@ -86,6 +88,25 @@ inline std::string TimestampValueString(const Timestamp& timestamp) { } } +// Reads a CalculatorGraphConfig from a file. If failed, raises a PyError. +inline ::mediapipe::CalculatorGraphConfig ReadCalculatorGraphConfigFromFile( + const std::string& file_name) { + ::mediapipe::CalculatorGraphConfig graph_config_proto; + auto status = file::Exists(file_name); + if (!status.ok()) { + throw RaisePyError(PyExc_FileNotFoundError, status.message().data()); + } + std::string graph_config_string; + RaisePyErrorIfNotOk(file::GetContents(file_name, &graph_config_string)); + if (!graph_config_proto.ParseFromArray(graph_config_string.c_str(), + graph_config_string.length())) { + throw RaisePyError( + PyExc_RuntimeError, + absl::StrCat("Failed to parse the binary graph: ", file_name).c_str()); + } + return graph_config_proto; +} + } // namespace python } // namespace mediapipe diff --git a/mediapipe/python/pybind/validated_graph_config.cc b/mediapipe/python/pybind/validated_graph_config.cc new file mode 100644 index 000000000..0bb2721c9 --- /dev/null +++ b/mediapipe/python/pybind/validated_graph_config.cc @@ -0,0 +1,153 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "mediapipe/python/pybind/validated_graph_config.h" + +#include "mediapipe/framework/port/parse_text_proto.h" +#include "mediapipe/framework/validated_graph_config.h" +#include "mediapipe/python/pybind/util.h" + +namespace mediapipe { +namespace python { + +namespace py = pybind11; + +void ValidatedGraphConfigSubmodule(pybind11::module* module) { + py::module m = module->def_submodule( + "validated_graph_config", "MediaPipe validated graph config module."); + + // Validated Graph Config + py::class_ validated_graph_config( + m, "ValidatedGraphConfig", + R"doc(A class to validate and canonicalize a CalculatorGraphConfig.)doc"); + + validated_graph_config.def(py::init()) + .def( + "initialize", + [](ValidatedGraphConfig* self, py::kwargs kwargs) { + bool init_with_binary_graph = false; + bool init_with_graph_proto = false; + CalculatorGraphConfig graph_config_proto; + for (const auto& kw : kwargs) { + const std::string& key = kw.first.cast(); + if (key == "binary_graph_path") { + init_with_binary_graph = true; + std::string file_name(kw.second.cast().str()); + graph_config_proto = + ReadCalculatorGraphConfigFromFile(file_name); + } else if (key == "graph_config") { + init_with_graph_proto = true; + if (!ParseTextProto( + kw.second.cast().str(), + &graph_config_proto)) { + throw RaisePyError( + PyExc_RuntimeError, + absl::StrCat( + "Failed to parse: ", + std::string(kw.second.cast().str())) + .c_str()); + } + } else { + throw RaisePyError( + PyExc_RuntimeError, + absl::StrCat("Unknown kwargs input argument: ", key) + .c_str()); + } + } + RaisePyErrorIfNotOk(self->Initialize(graph_config_proto)); + }, + R"doc(Initialize ValidatedGraphConfig with a CalculatorGraphConfig. + + Args: + binary_graph_path: The path to a binary mediapipe graph file (.binarypb). + graph_config: A single CalculatorGraphConfig proto message or its text proto + format. + + Raises: + FileNotFoundError: If the binary graph file can't be found. + ValueError: If the input arguments prvoided are more than needed or the + graph validation process contains error. + + Examples: + validated_graph_config = mp.ValidatedGraphConfig() + validated_graph_config.initialize(graph_config=text_config) + +)doc"); + + validated_graph_config.def( + "registered_stream_type_name", + [](ValidatedGraphConfig& self, const std::string& stream_name) { + auto status_or_type_name = self.RegisteredStreamTypeName(stream_name); + RaisePyErrorIfNotOk(status_or_type_name.status()); + return status_or_type_name.ValueOrDie(); + }, + R"doc(Return the registered type name of the specified stream if it can be determined. + + Args: + stream_name: The input/output stream name. + + Returns: + The registered packet type name of the input/output stream. + + Raises: + ValueError: If the input/output stream cannot be found. + + Examples: + validated_graph_config.registered_stream_type_name('stream_name') + +)doc"); + + validated_graph_config.def( + "registered_side_packet_type_name", + [](ValidatedGraphConfig& self, const std::string& side_packet_name) { + auto status_or_type_name = + self.RegisteredSidePacketTypeName(side_packet_name); + RaisePyErrorIfNotOk(status_or_type_name.status()); + return status_or_type_name.ValueOrDie(); + }, + R"doc(Return the registered type name of the specified side packet if it can be determined. + + Args: + side_packet_name: The input/output side packet name. + + Returns: + The registered packet type name of the input/output side packet. + + Raises: + ValueError: If the input/output side packet cannot be found. + + Examples: + validated_graph_config.registered_side_packet_type_name('side_packet') + +)doc"); + + // TODO: Return a Python CalculatorGraphConfig instead. + validated_graph_config.def_property_readonly( + "text_config", [](const ValidatedGraphConfig& self) { + return self.Config().DebugString(); + }); + + validated_graph_config.def_property_readonly( + "binary_config", [](const ValidatedGraphConfig& self) { + return py::bytes(self.Config().SerializeAsString()); + }); + + validated_graph_config.def( + "initialized", + [](const ValidatedGraphConfig& self) { return self.Initialized(); }, + R"doc(Indicate if ValidatedGraphConfig is initialized.)doc"); +} + +} // namespace python +} // namespace mediapipe diff --git a/mediapipe/python/pybind/validated_graph_config.h b/mediapipe/python/pybind/validated_graph_config.h new file mode 100644 index 000000000..7f9899bc1 --- /dev/null +++ b/mediapipe/python/pybind/validated_graph_config.h @@ -0,0 +1,28 @@ +// Copyright 2020 The MediaPipe Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef MEDIAPIPE_PYTHON_PYBIND_VALIDATED_GRAPH_CONFIG_H_ +#define MEDIAPIPE_PYTHON_PYBIND_VALIDATED_GRAPH_CONFIG_H_ + +#include "pybind11/pybind11.h" + +namespace mediapipe { +namespace python { + +void ValidatedGraphConfigSubmodule(pybind11::module* module); + +} // namespace python +} // namespace mediapipe + +#endif // MEDIAPIPE_PYTHON_PYBIND_VALIDATED_GRAPH_CONFIG_H_ diff --git a/mediapipe/graphs/pose_tracking/calculators/BUILD b/mediapipe/util/filtering/BUILD similarity index 63% rename from mediapipe/graphs/pose_tracking/calculators/BUILD rename to mediapipe/util/filtering/BUILD index 9ac2e9a07..0a9300ab3 100644 --- a/mediapipe/graphs/pose_tracking/calculators/BUILD +++ b/mediapipe/util/filtering/BUILD @@ -12,11 +12,11 @@ # See the License for the specific language governing permissions and # limitations under the License. -load("//mediapipe/framework/port:build_config.bzl", "mediapipe_proto_library") - licenses(["notice"]) -package(default_visibility = ["//visibility:public"]) +package(default_visibility = [ + "//mediapipe:__subpackages__", +]) cc_library( name = "low_pass_filter", @@ -55,31 +55,7 @@ cc_test( deps = [ ":relative_velocity_filter", "//mediapipe/framework/port:gtest_main", + "//mediapipe/framework/port:logging", "@com_google_absl//absl/time", ], ) - -mediapipe_proto_library( - name = "landmarks_smoothing_calculator_proto", - srcs = ["landmarks_smoothing_calculator.proto"], - visibility = ["//visibility:public"], - deps = [ - "//mediapipe/framework:calculator_proto", - ], -) - -cc_library( - name = "landmarks_smoothing_calculator", - srcs = ["landmarks_smoothing_calculator.cc"], - visibility = ["//visibility:public"], - deps = [ - ":landmarks_smoothing_calculator_cc_proto", - ":relative_velocity_filter", - "//mediapipe/framework:calculator_framework", - "//mediapipe/framework:timestamp", - "//mediapipe/framework/formats:landmark_cc_proto", - "//mediapipe/framework/port:ret_check", - "@com_google_absl//absl/algorithm:container", - ], - alwayslink = 1, -) diff --git a/mediapipe/graphs/pose_tracking/calculators/low_pass_filter.cc b/mediapipe/util/filtering/low_pass_filter.cc similarity index 95% rename from mediapipe/graphs/pose_tracking/calculators/low_pass_filter.cc rename to mediapipe/util/filtering/low_pass_filter.cc index 6b1bfb149..91ef15600 100644 --- a/mediapipe/graphs/pose_tracking/calculators/low_pass_filter.cc +++ b/mediapipe/util/filtering/low_pass_filter.cc @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "mediapipe/graphs/pose_tracking/calculators/low_pass_filter.h" +#include "mediapipe/util/filtering/low_pass_filter.h" #include "absl/memory/memory.h" #include "mediapipe/framework/port/logging.h" diff --git a/mediapipe/graphs/pose_tracking/calculators/low_pass_filter.h b/mediapipe/util/filtering/low_pass_filter.h similarity index 82% rename from mediapipe/graphs/pose_tracking/calculators/low_pass_filter.h rename to mediapipe/util/filtering/low_pass_filter.h index d7a63e3e2..3ded1b0c1 100644 --- a/mediapipe/graphs/pose_tracking/calculators/low_pass_filter.h +++ b/mediapipe/util/filtering/low_pass_filter.h @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef MEDIAPIPE_GRAPHS_POSE_TRACKING_CALCULATORS_LOW_PASS_FILTER_H_ -#define MEDIAPIPE_GRAPHS_POSE_TRACKING_CALCULATORS_LOW_PASS_FILTER_H_ +#ifndef MEDIAPIPE_UTIL_FILTERING_LOW_PASS_FILTER_H_ +#define MEDIAPIPE_UTIL_FILTERING_LOW_PASS_FILTER_H_ #include @@ -44,4 +44,4 @@ class LowPassFilter { } // namespace mediapipe -#endif // MEDIAPIPE_GRAPHS_POSE_TRACKING_CALCULATORS_LOW_PASS_FILTER_H_ +#endif // MEDIAPIPE_UTIL_FILTERING_LOW_PASS_FILTER_H_ diff --git a/mediapipe/graphs/pose_tracking/calculators/low_pass_filter_test.cc b/mediapipe/util/filtering/low_pass_filter_test.cc similarity index 94% rename from mediapipe/graphs/pose_tracking/calculators/low_pass_filter_test.cc rename to mediapipe/util/filtering/low_pass_filter_test.cc index e782d9c48..d8078624c 100644 --- a/mediapipe/graphs/pose_tracking/calculators/low_pass_filter_test.cc +++ b/mediapipe/util/filtering/low_pass_filter_test.cc @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "mediapipe/graphs/pose_tracking/calculators/low_pass_filter.h" +#include "mediapipe/util/filtering/low_pass_filter.h" #include "mediapipe/framework/port/gtest.h" diff --git a/mediapipe/graphs/pose_tracking/calculators/relative_velocity_filter.cc b/mediapipe/util/filtering/relative_velocity_filter.cc similarity index 97% rename from mediapipe/graphs/pose_tracking/calculators/relative_velocity_filter.cc rename to mediapipe/util/filtering/relative_velocity_filter.cc index 2a120e3c8..ab88ad59b 100644 --- a/mediapipe/graphs/pose_tracking/calculators/relative_velocity_filter.cc +++ b/mediapipe/util/filtering/relative_velocity_filter.cc @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "mediapipe/graphs/pose_tracking/calculators/relative_velocity_filter.h" +#include "mediapipe/util/filtering/relative_velocity_filter.h" #include #include diff --git a/mediapipe/graphs/pose_tracking/calculators/relative_velocity_filter.h b/mediapipe/util/filtering/relative_velocity_filter.h similarity index 90% rename from mediapipe/graphs/pose_tracking/calculators/relative_velocity_filter.h rename to mediapipe/util/filtering/relative_velocity_filter.h index 8f68ab062..054c937b8 100644 --- a/mediapipe/graphs/pose_tracking/calculators/relative_velocity_filter.h +++ b/mediapipe/util/filtering/relative_velocity_filter.h @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef MEDIAPIPE_GRAPHS_POSE_TRACKING_CALCULATORS_RELATIVE_VELOCITY_FILTER_H_ -#define MEDIAPIPE_GRAPHS_POSE_TRACKING_CALCULATORS_RELATIVE_VELOCITY_FILTER_H_ +#ifndef MEDIAPIPE_UTIL_FILTERING_RELATIVE_VELOCITY_FILTER_H_ +#define MEDIAPIPE_UTIL_FILTERING_RELATIVE_VELOCITY_FILTER_H_ #include #include #include "absl/time/time.h" -#include "mediapipe/graphs/pose_tracking/calculators/low_pass_filter.h" +#include "mediapipe/util/filtering/low_pass_filter.h" namespace mediapipe { @@ -87,4 +87,4 @@ class RelativeVelocityFilter { } // namespace mediapipe -#endif // MEDIAPIPE_GRAPHS_POSE_TRACKING_CALCULATORS_RELATIVE_VELOCITY_FILTER_H_ +#endif // MEDIAPIPE_UTIL_FILTERING_RELATIVE_VELOCITY_FILTER_H_ diff --git a/mediapipe/graphs/pose_tracking/calculators/relative_velocity_filter_test.cc b/mediapipe/util/filtering/relative_velocity_filter_test.cc similarity index 99% rename from mediapipe/graphs/pose_tracking/calculators/relative_velocity_filter_test.cc rename to mediapipe/util/filtering/relative_velocity_filter_test.cc index ce94a356e..793564721 100644 --- a/mediapipe/graphs/pose_tracking/calculators/relative_velocity_filter_test.cc +++ b/mediapipe/util/filtering/relative_velocity_filter_test.cc @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "mediapipe/graphs/pose_tracking/calculators/relative_velocity_filter.h" +#include "mediapipe/util/filtering/relative_velocity_filter.h" #include #include @@ -20,6 +20,7 @@ #include "absl/time/time.h" #include "mediapipe/framework/port/gtest.h" +#include "mediapipe/framework/port/logging.h" namespace mediapipe { diff --git a/mediapipe/util/sequence/media_sequence.py b/mediapipe/util/sequence/media_sequence.py index 07289576f..da18bffd0 100644 --- a/mediapipe/util/sequence/media_sequence.py +++ b/mediapipe/util/sequence/media_sequence.py @@ -157,7 +157,8 @@ from __future__ import division from __future__ import print_function import functools import numpy as np -from mediapipe.util.sequence import media_sequence_util as msu +from mediapipe.util.sequence import media_sequence_util +msu = media_sequence_util _HAS_DYNAMIC_ATTRIBUTES = True diff --git a/mediapipe/util/tflite/BUILD b/mediapipe/util/tflite/BUILD index 9cd774c08..17f6a848a 100644 --- a/mediapipe/util/tflite/BUILD +++ b/mediapipe/util/tflite/BUILD @@ -51,41 +51,6 @@ cc_library( ], ) -cc_library( - name = "tensor_buffer", - srcs = ["tensor_buffer.cc"], - hdrs = ["tensor_buffer.h"], - deps = [ - "@org_tensorflow//tensorflow/lite:framework", - "@com_google_absl//absl/memory", - "//mediapipe/framework:port", - ] + select({ - "//mediapipe/gpu:disable_gpu": [], - "//mediapipe:ios": [ - "//mediapipe/gpu:MPPMetalUtil", - "//mediapipe/gpu:gl_base", - ], - "//conditions:default": [ - "@org_tensorflow//tensorflow/lite/delegates/gpu/gl:gl_buffer", - "//mediapipe/gpu:gl_base", - "//mediapipe/gpu:gl_context", - ], - }), -) - -cc_test( - name = "tensor_buffer_test", - srcs = ["tensor_buffer_test.cc"], - deps = [ - ":tensor_buffer", - ":config", - "//mediapipe/framework/port:gtest_main", - ] + select({ - "//mediapipe/gpu:disable_gpu": [], - "//conditions:default": [], - }), -) - cc_library( name = "tflite_gpu_runner", srcs = select({ diff --git a/mediapipe/util/tflite/tensor_buffer.cc b/mediapipe/util/tflite/tensor_buffer.cc deleted file mode 100644 index 47b2487ff..000000000 --- a/mediapipe/util/tflite/tensor_buffer.cc +++ /dev/null @@ -1,43 +0,0 @@ -#include "mediapipe/util/tflite/tensor_buffer.h" - -namespace mediapipe { - -TensorBuffer::TensorBuffer() {} - -TensorBuffer::~TensorBuffer() { uses_gpu_ = false; } - -TensorBuffer::TensorBuffer(TfLiteTensor& tensor) { - cpu_ = tensor; - uses_gpu_ = false; -} - -#if !defined(MEDIAPIPE_DISABLE_GL_COMPUTE) -TensorBuffer::TensorBuffer(std::shared_ptr tensor) { - gpu_ = std::move(tensor); - uses_gpu_ = true; -} -// static -std::shared_ptr TensorBuffer::CreateGlBuffer( - std::shared_ptr context) { - std::shared_ptr ptr( - new tflite::gpu::gl::GlBuffer, [context](tflite::gpu::gl::GlBuffer* ref) { - if (context) { - context->Run([ref]() { - if (ref) delete ref; - }); - } else { - if (ref) delete ref; // No context provided. - } - }); - return ptr; -} -#endif // MEDIAPIPE_DISABLE_GL_COMPUTE - -#if defined(MEDIAPIPE_IOS) -TensorBuffer::TensorBuffer(id tensor) { - gpu_ = tensor; - uses_gpu_ = true; -} -#endif // MEDIAPIPE_IOS - -} // namespace mediapipe diff --git a/mediapipe/util/tflite/tensor_buffer.h b/mediapipe/util/tflite/tensor_buffer.h deleted file mode 100644 index e41e96ba4..000000000 --- a/mediapipe/util/tflite/tensor_buffer.h +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2020 The MediaPipe Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef MEDIAPIPE_UTIL_TFLITE_TENSOR_BUFFER_H_ -#define MEDIAPIPE_UTIL_TFLITE_TENSOR_BUFFER_H_ - -#include "absl/memory/memory.h" -#include "mediapipe/framework/port.h" -#include "tensorflow/lite/interpreter.h" - -#if !defined(MEDIAPIPE_DISABLE_GL_COMPUTE) -#include "mediapipe/gpu/gl_context.h" -#include "tensorflow/lite/delegates/gpu/gl/gl_buffer.h" -#endif // MEDIAPIPE_DISABLE_GL_COMPUTE - -#if defined(MEDIAPIPE_IOS) -#import -#endif // MEDIAPIPE_IOS - -namespace mediapipe { - -class TensorBuffer { - public: - TensorBuffer(); - ~TensorBuffer(); - - TensorBuffer(TfLiteTensor& tensor); - TfLiteTensor* GetTfLiteTensor() { return &cpu_; } - const TfLiteTensor* GetTfLiteTensor() const { return &cpu_; } - -#if !defined(MEDIAPIPE_DISABLE_GL_COMPUTE) - TensorBuffer(std::shared_ptr tensor); - std::shared_ptr GetGlBuffer() { return gpu_; } - const std::shared_ptr GetGlBuffer() const { - return gpu_; - } - // Example use: - // auto tensor_buf = TensorBuffer(TensorBuffer::CreateGlBuffer(gl_context)); - static std::shared_ptr CreateGlBuffer( - std::shared_ptr context); -#endif // MEDIAPIPE_DISABLE_GL_COMPUTE - -#if defined(MEDIAPIPE_IOS) - TensorBuffer(id tensor); - id GetMetalBuffer() { return gpu_; } - const id GetMetalBuffer() const { return gpu_; } -#endif // MEDIAPIPE_IOS - - bool UsesGpu() const { return uses_gpu_; } - - private: - TfLiteTensor cpu_; - -#if !defined(MEDIAPIPE_DISABLE_GL_COMPUTE) - std::shared_ptr gpu_; -#endif // MEDIAPIPE_DISABLE_GL_COMPUTE - -#if defined(MEDIAPIPE_IOS) - typedef id gpu_; -#endif // MEDIAPIPE_IOS - - bool uses_gpu_ = false; -}; - -} // namespace mediapipe - -#endif // MEDIAPIPE_UTIL_TFLITE_TENSOR_BUFFER_H_ diff --git a/mediapipe/util/tflite/tensor_buffer_test.cc b/mediapipe/util/tflite/tensor_buffer_test.cc deleted file mode 100644 index 42ba583d0..000000000 --- a/mediapipe/util/tflite/tensor_buffer_test.cc +++ /dev/null @@ -1,31 +0,0 @@ -#include "mediapipe/util/tflite/tensor_buffer.h" - -#include "mediapipe/framework/port/gmock.h" -#include "mediapipe/framework/port/gtest.h" -#include "mediapipe/util/tflite/config.h" - -namespace mediapipe { - -TEST(Cpu, BasicTest) { - TensorBuffer tb; - TfLiteTensor tfl_tb; - tb = TensorBuffer(tfl_tb); - EXPECT_FALSE(tb.UsesGpu()); -} - -#if MEDIAPIPE_TFLITE_GL_INFERENCE -TEST(Gpu, BasicTest) { - TensorBuffer tb; - std::shared_ptr tfg_tb = - TensorBuffer::CreateGlBuffer(nullptr); - tb = TensorBuffer(tfg_tb); - EXPECT_TRUE(tb.UsesGpu()); -} -#endif // !MEDIAPIPE_TFLITE_GL_INFERENCE - -} // namespace mediapipe - -int main(int argc, char** argv) { - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/setup_android_sdk_and_ndk.sh b/setup_android_sdk_and_ndk.sh index 300790847..4236d84d3 100644 --- a/setup_android_sdk_and_ndk.sh +++ b/setup_android_sdk_and_ndk.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2019 The MediaPipe Authors. +# Copyright 2019-2020 The MediaPipe Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,8 +17,7 @@ # Script to setup Android SDK and NDK. # usage: # $ cd -# $ chmod +x ./setup_android_sdk_and_ndk.sh -# $ ./setup_android_sdk_and_ndk.sh ~/Android/Sdk ~/Android/Ndk r18b +# $ bash ./setup_android_sdk_and_ndk.sh ~/Android/Sdk ~/Android/Ndk r18b set -e @@ -59,14 +58,14 @@ fi if [ -d "$android_sdk_path" ] then - echo "Warning: android_sdk_path is non empty. Android SDK Installation will be ignored." + echo "Warning: android_sdk_path is non empty. Installation of the Android SDK will be skipped." else rm -rf /tmp/android_sdk/ mkdir /tmp/android_sdk/ - curl https://dl.google.com/android/repository/sdk-tools-${platform}-4333796.zip -o /tmp/android_sdk/android_sdk.zip - unzip /tmp/android_sdk/android_sdk.zip -d /tmp/android_sdk/ + curl https://dl.google.com/android/repository/commandlinetools-${platform}-6609375_latest.zip -o /tmp/android_sdk/commandline_tools.zip + unzip /tmp/android_sdk/commandline_tools.zip -d /tmp/android_sdk/ mkdir -p $android_sdk_path - /tmp/android_sdk/tools/bin/sdkmanager --update + /tmp/android_sdk/tools/bin/sdkmanager --update --sdk_root=${android_sdk_path} /tmp/android_sdk/tools/bin/sdkmanager "build-tools;29.0.1" "platform-tools" "platforms;android-29" --sdk_root=${android_sdk_path} rm -rf /tmp/android_sdk/ echo "Android SDK is now installed. Consider setting \$ANDROID_HOME environment variable to be ${android_sdk_path}"