commit 33a452ad83810cb01a61905440176a825dbff494 Author: Joseph Ferano Date: Wed Feb 13 21:27:47 2019 -0400 Importing code from previous merged project diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d59a35f --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +/assg3-distrib/ +*.pdf +*.log +*.swp +*.suo +*.html +presentation/ +final/ +.idea/ +*.zip +elm-stuff/** +!elm-stuff/packages/ +!elm-stuff/packages/Zinggi/ +!elm-stuff/packages/Zinggi/elm-obj-loader/ +!elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/ +!elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/** \ No newline at end of file diff --git a/README.org b/README.org new file mode 100644 index 0000000..fbd99c2 --- /dev/null +++ b/README.org @@ -0,0 +1,39 @@ +### FPS Scene + +You can walk around the scene with simple FPS controls. +Open `scene.html` with an http server, you can use the following; + +```python3 -m http.server 8000``` + +Unfortunately, elm-reactor has issues with loading obj files so that's why the +python server is needed. + +![alt text](screenshots/elm-fps.png "FPS Scene") + + +##### Controls + +Mouse - Look Rotation + +WASD - Player movement + +◀ ▼ ▲ ▶ - Move the Robot + +N and M - Rotate robot left and right + +Y and H - Rotate robot arm up and down + +U and J - Rotate robot hand up and down + + +### PQTorusknot + +Either open up `torus.html`, or use the command `elm-reactor`, if you want to be able to modify the source file and compile; + +https://guide.elm-lang.org/install.html + +Alternatively, here's the Ellie link + +https://ellie-app.com/vVTgpBj77ra1 + +![alt text](screenshots/elm-knot.png "PQ Torus Knot") diff --git a/Scene.elm b/Scene.elm new file mode 100644 index 0000000..ac98f22 --- /dev/null +++ b/Scene.elm @@ -0,0 +1,379 @@ +module Scene exposing (..) + +import Html exposing (Html) +import Html.Attributes exposing (width, height, style) +import AnimationFrame +import Time exposing (Time) +import Dict exposing (..) +import Math.Matrix4 as Mat4 exposing (Mat4) +import Math.Vector2 as Vec2 exposing (vec2, Vec2) +import Math.Vector3 as Vec3 exposing (vec3, Vec3) +import WebGL exposing (Mesh, Shader) +import Mouse +import Keyboard exposing (..) +import Task +import WebGL.Texture as Texture exposing (..) +import Color exposing (..) +import Window +import OBJ +import OBJ.Types +import Shaders exposing (..) + +type alias ObjVert = OBJ.Types.Vertex +type alias ObjMesh = OBJ.Types.MeshWith ObjVert + +main : Program Never Model Msg +main = Html.program + { init = init + , view = view + , update = update + , subscriptions = subscriptions } + + +type alias Model = + { texDict : Dict String Texture + , objDict : Dict String ObjMesh + , rot : Float + , winSize : Window.Size + , keys : Keys + , pos : Vec3 + , pitchAndYaw : ( Float , Float ) + , lookDir : Vec3 + , lastMousePos : Mouse.Position + , robot : Robot } + +type alias Robot = { pos : Vec3 , rot : Float , armRot : Float , handRot : Float } + +type alias Keys = + { left : Bool , down : Bool , up : Bool , right : Bool + , w : Bool , a : Bool , s : Bool , d : Bool + , y : Bool , h : Bool , u : Bool , j : Bool + , n : Bool , m : Bool } + +type Msg + = TextureLoaded (Result Texture.Error (String , Texture)) + | ObjLoaded (Result String (String , ObjMesh)) + | Animate Time + | WindowResized Window.Size + | MouseMove Mouse.Position + | KeyChange Bool Keyboard.KeyCode + +init: ( Model , Cmd Msg ) +init = + ( Model + Dict.empty + Dict.empty + 0 + (Window.Size 1 1) + -- God this is horrendous + (Keys False False False False False False False False False False False False False False) + (vec3 0 0 -10) + (0 , -90) + (vec3 0 0 1) + { x = 0 , y = 0 } + { pos = vec3 0 -0.5 -3 , rot = 45 , armRot = 0 , handRot = 0 } + , Cmd.batch + [ loadTex "Thwomp" "textures/thwomp-face.jpg" + , loadTex "UV" "textures/uv_big.png" + , loadTex "Tetra" "textures/tetra.png" + , loadObj "Teapot" "models/suz.obj" + , Task.perform WindowResized Window.size] ) + +loadTex: String -> String -> Cmd Msg +loadTex id path = + Task.attempt TextureLoaded (Texture.load path |> Task.map (\t -> (id , t) ) ) + +loadObj: String -> String -> Cmd Msg +loadObj id path = + OBJ.loadMeshWithoutTexture path (\ r -> Result.map (\ o -> (id , o)) r ) |> Cmd.map ObjLoaded + +subscriptions: Model -> Sub Msg +subscriptions _ = + Sub.batch + [ AnimationFrame.diffs Animate + , Window.resizes WindowResized + , Mouse.moves MouseMove + , Keyboard.downs (KeyChange True) + , Keyboard.ups (KeyChange False) ] + + +update: Msg -> Model -> (Model , Cmd Msg) +update msg model = + let m = case msg of + KeyChange b k -> { model | keys = getKeys b k model.keys } + Animate dt -> + { model + | pos = movePos + (model.keys.a , model.keys.s , model.keys.w , model.keys.d) + model.lookDir + model.pos + 0.2 + , robot = updateRobot model dt + , rot = model.rot + 0.001 * dt} + WindowResized size -> { model | winSize = size } + TextureLoaded result -> + case result of + Ok (id , tex) -> { model | texDict = Dict.insert id tex model.texDict } + Err e -> model + ObjLoaded result -> + case result of + Ok (id , obj) -> { model | objDict = Dict.insert id obj model.objDict } + Err e -> model |> Debug.log e + MouseMove mp -> + let (ld , py) = getLookPos model.lastMousePos mp model.pitchAndYaw + in { model | lookDir = ld , lastMousePos = mp , pitchAndYaw = py } + in ( m , Cmd.none ) + +updateRobot: Model -> Time -> Robot +updateRobot { robot , keys } dt = + let rr part = part + dt * 0.005 + rl part = part - dt * 0.005 + rot = radians robot.rot + in { pos = + movePos + (keys.left, keys.down, keys.up, keys.right) + (vec3 (sin rot) (sin rot) (cos rot)) + robot.pos + 0.1 + , rot = if keys.n then rr robot.rot else if keys.m then rl robot.rot else robot.rot + , armRot = + let angle = if keys.y then rr robot.armRot else if keys.h then rl robot.armRot else robot.armRot + in clamp -0.5 2.5 angle + , handRot = + let angle = if keys.u then rr robot.handRot else if keys.j then rl robot.handRot else robot.handRot + in clamp -1 1 angle} + +view: Model -> Html Msg +view model = + WebGL.toHtml + [ width model.winSize.width , height model.winSize.height , style [ ( "display" , "block") ] ] + ([ getEntity model wall texturedPlane "Thwomp" + , getEntity model tetraB tetraBasic "UV" + , getEntity model tetra tetraF "Tetra" + , getRobot model + , getModel model (Mat4.makeRotate model.rot Vec3.j) "Teapot" + , getEntity model floor texturedPlane "UV" ] |> List.concat) + +getRobot: Model -> List WebGL.Entity +getRobot model = + let body = Mat4.makeTranslate model.robot.pos + |> Mat4.rotate model.robot.rot Vec3.j + arm = Mat4.makeTranslate3 0 0 -0.35 + |> Mat4.rotate model.robot.armRot Vec3.i + |> Mat4.inverse |> Maybe.withDefault Mat4.identity + |> Mat4.mul (Mat4.makeTranslate3 0 0.5 0.5) + |> Mat4.mul body + hand = Mat4.makeTranslate3 0 0 -0.25 + |> Mat4.rotate model.robot.handRot Vec3.i + |> Mat4.inverse |> Maybe.withDefault Mat4.identity + |> Mat4.mul (Mat4.makeTranslate3 0 0 0.6) + |> Mat4.mul arm + in [ getEntity3 model (body |> Mat4.scale3 0.5 0.5 0.5) cube Color.blue + , getEntity3 model (arm |> Mat4.scale3 0.2 0.2 0.5) cube Color.green + , getEntity3 model (hand |> Mat4.scale3 0.15 0.15 0.45) cube Color.red + ] |> List.concat + +getModel: Model -> Mat4 -> String -> List WebGL.Entity +getModel model local id = + case Dict.get id model.objDict of + Just mesh -> + case Dict.get "UV" model.texDict of + Just t -> [ WebGL.entity + diffuseVS + diffuseFS + (WebGL.indexedTriangles mesh.vertices mesh.indices) + (DiffuseColor + (projectionMatrix model) + (viewMatrix model) + local + (colorToVec3 Color.blue) + (vec3 1 1 0) + (vec3 1 0 1) + (vec3 0 0 1) + 1.0) ] + Nothing -> [] + Nothing -> [] + +getEntity: Model -> Mat4 -> Mesh UTVertex -> String -> List WebGL.Entity +getEntity model local mesh texId = + case Dict.get texId model.texDict of + Just t -> + [ WebGL.entity + unlitTexturedVS + unlitTexturedFS + mesh + (UnlitTextured (projectionMatrix model) (viewMatrix model ) local t) ] + Nothing -> [] + +getEntity2: Model -> Mat4 -> Mesh ObjVert -> Color -> List WebGL.Entity +getEntity2 model local mesh color = + [ WebGL.entity + unlitColorVS + unlitColorFS + mesh + (UnlitColor (projectionMatrix model) (viewMatrix model ) local (colorToVec3 color) ) ] + +getEntity3: Model -> Mat4 -> Mesh ObjVert -> Color -> List WebGL.Entity +getEntity3 model local mesh color = + [ WebGL.entity + diffuseVS + diffuseFS + mesh + (DiffuseColor + (projectionMatrix model) + (viewMatrix model) + local + (colorToVec3 color) + (vec3 1 1 0) + (vec3 1 0 1) + (vec3 0 0 1) + 1.0 ) ] + +projectionMatrix: Model -> Mat4 +projectionMatrix model = + Mat4.makePerspective 50 (toFloat model.winSize.width / toFloat model.winSize.height) 0.01 1000 + +viewMatrix: Model -> Mat4 +viewMatrix model = + Mat4.makeLookAt model.pos (Vec3.add model.pos model.lookDir) Vec3.j + +getLookPos: Mouse.Position -> Mouse.Position -> ( Float , Float ) -> ( Vec3 , (Float , Float) ) +getLookPos lmp mp ( lastPitch , lastYaw ) = + let sensitivity = 0.0039 + rangeY = 89 + ox = mp.x - lmp.x |> toFloat + oy = lmp.y - mp.y |> toFloat + yaw = ox * sensitivity + lastYaw |> radians + pitch = -oy * sensitivity + lastPitch |> radians + pitch_ = if pitch > rangeY then rangeY else if pitch < -rangeY then -rangeY else pitch + lookDir = vec3 (cos yaw * cos pitch_) (sin pitch_) (sin yaw * cos pitch_) + in (Vec3.normalize lookDir , ( pitch_ , yaw ) ) + +colorToVec3: Color -> Vec3 +colorToVec3 color = + let to01 x = toFloat x / 255 + c = Color.toRgb color + in vec3 (to01 c.red) (to01 c.green) (to01 c.blue) + +movePos: (Bool, Bool, Bool, Bool) -> Vec3 -> Vec3 -> Float -> Vec3 +movePos ( left , down , up , right ) lookDir pos speed = + let lookDir_ = Vec3.setY 0 lookDir + forward = if up then 1 else if down then -1 else 0 + strafe = if right then 1 else if left then -1 else 0 + cross = Vec3.cross lookDir_ Vec3.j + dir = Vec3.add (Vec3.scale strafe cross) (Vec3.scale forward lookDir_) + dir_ = if Vec3.length dir <= 0 then dir else Vec3.normalize dir + in Vec3.add pos <| Vec3.scale speed dir_ + +getKeys: Bool -> KeyCode -> Keys -> Keys +getKeys isOn code keys = + case code of + -- ◀ ▼ ▲ ▶ + 37 -> { keys | left = isOn } + 40 -> { keys | down = isOn } + 38 -> { keys | up = isOn } + 39 -> { keys | right = isOn } + -- WASD + 87 -> { keys | w = isOn } + 65 -> { keys | a = isOn } + 83 -> { keys | s = isOn } + 68 -> { keys | d = isOn } + -- YHUJNM + 89 -> { keys | y = isOn } + 72 -> { keys | h = isOn } + 85 -> { keys | u = isOn } + 74 -> { keys | j = isOn } + 78 -> { keys | n = isOn } + 77 -> { keys | m = isOn } + _ -> keys + + +------------- +-- Geometry +------------- + +wall = Mat4.makeTranslate3 0 0 3 +floor = Mat4.makeTranslate3 0 -1 0 + |> Mat4.rotate (pi / -2) ( vec3 1 0 0) + |> Mat4.rotate pi ( vec3 0 0 1) + |> Mat4.scale3 15 15 0 +tetraB = Mat4.makeTranslate3 -5 1.5 5 + |> Mat4.scale3 2 2 2 +tetra = Mat4.makeTranslate3 5 0 5 + +-- right/left front/back top/bottom +cube: Mesh ObjVert +cube = + let rtf = vec3 1 1 1 + ltf = vec3 -1 1 1 + ltb = vec3 -1 1 -1 + rtb = vec3 1 1 -1 + rbb = vec3 1 -1 -1 + rbf = vec3 1 -1 1 + lbf = vec3 -1 -1 1 + lbb = vec3 -1 -1 -1 + front = Vec3.k + back = Vec3.scale -1 front + top = Vec3.j + bottom = Vec3.scale -1 top + right = Vec3.i + left = Vec3.scale -1 right + in + [ face right rtf rbf rbb rtb + , face left ltf lbf lbb ltb + , face front rtf rbf lbf ltf + , face back rtb rbb lbb ltb + , face top rtf ltf ltb rtb + , face bottom rbf lbf lbb rbb + ] |> List.concat + |> WebGL.triangles + +face: Vec3 -> Vec3 -> Vec3 -> Vec3 -> Vec3 -> List (ObjVert , ObjVert , ObjVert) +face norm a b c d = + let v pos = OBJ.Types.Vertex pos norm + in [ ( v a , v b , v c ) , ( v c , v d , v a ) ] + +tetraBasic: Mesh UTVertex +tetraBasic = + let peak = UTVertex (vec3 0 1 0) (vec2 1 1) + bottomLeft = UTVertex (vec3 -1 -1 -1) (vec2 0 0) + bottomRight = UTVertex (vec3 -1 -1 1) (vec2 1 0) + topLeft = UTVertex (vec3 1 -1 1) (vec2 0 0) + topRight = UTVertex (vec3 1 -1 -1) (vec2 0 1) + in [ ( peak , bottomLeft , bottomRight ) + , ( peak , bottomLeft , topRight ) + , ( peak , bottomRight , topLeft ) + , ( peak , topRight , topLeft ) + , ( bottomLeft , bottomRight , topRight) + , ( bottomRight, topLeft , topRight ) ] + |> WebGL.triangles + +tetraF: Mesh UTVertex +tetraF = + let f0a = UTVertex (vec3 -1 -1 1) (vec2 0 0.5) + f0b = UTVertex (vec3 1 -1 1) (vec2 0.5 0.5) + f0c = UTVertex (vec3 0 1 0) (vec2 0.25 1) + + f1a = UTVertex (vec3 -1 -1 -1) (vec2 0.5 0.5) + f1b = UTVertex (vec3 -1 -1 1) (vec2 1 0.5) + f1c = UTVertex (vec3 0 1 0) (vec2 0.75 1) + + f2a = UTVertex (vec3 1 -1 -1) (vec2 0 0) + f2b = UTVertex (vec3 -1 -1 -1) (vec2 0.5 0) + f2c = UTVertex (vec3 0 1 0) (vec2 0.25 0.5) + + f3a = UTVertex (vec3 1 -1 1) (vec2 0.5 0) + f3b = UTVertex (vec3 1 -1 -1) (vec2 1 0) + f3c = UTVertex (vec3 0 1 0) (vec2 0.75 0.5) + in [ ( f0a , f0b , f0c ) , ( f1a , f1b , f1c ) , ( f2a , f2b , f2c ) , ( f3a , f3b , f3c ) ] + |> WebGL.triangles + +texturedPlane: Mesh UTVertex +texturedPlane = + let topLeft = UTVertex (vec3 -1 1 1) (vec2 0 1) + topRight = UTVertex (vec3 1 1 1) (vec2 1 1) + bottomLeft = UTVertex (vec3 -1 -1 1) (vec2 0 0) + bottomRight = UTVertex (vec3 1 -1 1) (vec2 1 0) + in [ ( topLeft, topRight, bottomLeft ) , ( bottomLeft, topRight, bottomRight ) ] + |> WebGL.triangles + diff --git a/Shaders.elm b/Shaders.elm new file mode 100644 index 0000000..7e42334 --- /dev/null +++ b/Shaders.elm @@ -0,0 +1,130 @@ +module Shaders exposing (..) + +import Math.Matrix4 as Mat4 exposing (Mat4) +import Math.Vector2 as Vec2 exposing (vec2, Vec2) +import Math.Vector3 as Vec3 exposing (vec3, Vec3) +import WebGL exposing (Mesh, Shader) +import WebGL.Texture as Texture exposing (..) +import OBJ +import OBJ.Types + +type alias UTVertex = { position : Vec3 , coord : Vec2 } +type alias ColorVertex = { position : Vec3 , normal : Vec3 , color : Vec3 } + +type alias UnlitColor = { projection : Mat4 , view : Mat4 , model : Mat4 , color : Vec3 } +type alias UnlitTextured = { projection : Mat4 , view : Mat4 , model : Mat4 , texture : Texture } +type alias DiffuseColor = + { projection : Mat4 + , view : Mat4 + , model : Mat4 + , color : Vec3 + , ambient : Vec3 + , diffuse : Vec3 + , specular : Vec3 + , shininess : Float } + + +diffuseVS: Shader { position : Vec3 , normal : Vec3 } DiffuseColor { vlightWeight : Vec3 } +diffuseVS = + [glsl| + attribute vec3 position; + attribute vec3 normal; + uniform mat4 projection; + uniform mat4 view; + uniform mat4 model; + uniform vec3 ambient; + uniform vec3 diffuse; + uniform vec3 specular; + uniform float shininess; + varying vec3 vlightWeight; + + void main() + { + gl_Position = projection * view * model * vec4(position, 1.0); + + vec3 lightDir = normalize(vec3(0.0, -0.0, -1.0)); + vec4 norm = model * vec4(normal, 0.0); + vec3 n = norm.xyz; + float dir = max(dot(n, lightDir), 0.0); + float v = 0.5; + vlightWeight = diffuse * dir + vec3(v, v, v); + } + |] + +diffuseFS: Shader {} DiffuseColor { vlightWeight : Vec3 } +diffuseFS = + [glsl| + + precision mediump float; + uniform vec3 color; + varying vec3 vlightWeight; + + void main() + { + gl_FragColor = vec4(color * vlightWeight, 1.0); + } + |] + + +unlitColorVS: Shader OBJ.Types.Vertex UnlitColor { vcolor : Vec3 } +unlitColorVS = + [glsl| + attribute vec3 position; + attribute vec3 normal; + uniform mat4 projection; + uniform mat4 view; + uniform mat4 model; + uniform vec3 color; + varying vec3 vcolor; + + void main() + { + gl_Position = projection * view * model * vec4(position, 1.0); + vcolor = color; + } + |] + +unlitColorFS: Shader {} UnlitColor { vcolor : Vec3 } +unlitColorFS = + [glsl| + + precision mediump float; + varying vec3 vcolor; + + void main() + { + gl_FragColor = vec4(vcolor, 1.0); + } + |] + + +unlitTexturedVS: Shader { position : Vec3 , coord : Vec2 } UnlitTextured { vcoord : Vec2 } +unlitTexturedVS = + [glsl| + attribute vec3 position; + attribute vec2 coord; + uniform mat4 projection; + uniform mat4 view; + uniform mat4 model; + varying vec2 vcoord; + + void main() + { + gl_Position = projection * view * model * vec4(position, 1.0); + vcoord = coord; + } + |] + +unlitTexturedFS: Shader {} UnlitTextured { vcoord : Vec2 } +unlitTexturedFS = + [glsl| + + precision mediump float; + uniform sampler2D texture; + varying vec2 vcoord; + + void main() + { + gl_FragColor = texture2D(texture, vcoord); + } + |] diff --git a/elm-package.json b/elm-package.json new file mode 100644 index 0000000..be316d9 --- /dev/null +++ b/elm-package.json @@ -0,0 +1,22 @@ +{ + "version": "1.0.0", + "summary": "helpful summary of your project, less than 80 characters", + "repository": "https://github.com/user/project.git", + "license": "BSD3", + "source-directories": [ + "." + ], + "exposed-modules": [], + "dependencies": { + "Zinggi/elm-obj-loader": "1.0.3 <= v < 2.0.0", + "elm-community/linear-algebra": "3.1.2 <= v < 4.0.0", + "elm-community/webgl": "2.0.5 <= v < 3.0.0", + "elm-lang/animation-frame": "1.0.1 <= v < 2.0.0", + "elm-lang/core": "5.1.1 <= v < 6.0.0", + "elm-lang/html": "2.0.0 <= v < 3.0.0", + "elm-lang/keyboard": "1.0.1 <= v < 2.0.0", + "elm-lang/mouse": "1.0.1 <= v < 2.0.0", + "elm-lang/window": "1.0.1 <= v < 2.0.0" + }, + "elm-version": "0.18.0 <= v < 0.19.0" +} diff --git a/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/.gitignore b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/.gitignore new file mode 100644 index 0000000..a826176 --- /dev/null +++ b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/.gitignore @@ -0,0 +1,6 @@ +elm-stuff/ +index.html +src/Main.elm +documentation.json +# this is only for debugging +src/Native/ diff --git a/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/LICENSE b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/LICENSE new file mode 100644 index 0000000..9f3e978 --- /dev/null +++ b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016 Florian Zinggeler + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/README.md b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/README.md new file mode 100644 index 0000000..0a63aaa --- /dev/null +++ b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/README.md @@ -0,0 +1,34 @@ +# elm-obj-loader + +This is a small library for importing [wavefront .obj][objSpecs] files into your WebGL application. + +# Demo/Examples + * [Model viewer][modelViewer] + * [Suzanne from Blender][suzanne] + +[Src](/examples) + +# Limitations +Only a small subset of the .obj file specification is supported. + +The easiest is to export/convert your model from Blender or another 3D content creation tool as an .obj file. + +The default export options from blender work fine. Make sure you keep 'Write Normals' selected. + +Completely supported face types are those with vertex position, normals and optionally vertex texture coordinates. (`v`, `vn`, `vt`) + +Smooth groups are ignored (`s n`). +Your model needs vertex normals (`vn`). + +Only tris and quads are supported. (Tris might load slightly faster) +No free-form curves/surfaces. +No material library (mtllib) support. +No negative indexing. + + + + + +[suzanne]: https://zinggi.github.io/randomDemos/webgl/objLoader_simple.html +[modelViewer]: https://zinggi.github.io/randomDemos/webgl/objLoader_modelViewer.html +[objSpecs]: http://www.martinreddy.net/gfx/3d/OBJ.spec diff --git a/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/elm-package.json b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/elm-package.json new file mode 100644 index 0000000..9bc9ba1 --- /dev/null +++ b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/elm-package.json @@ -0,0 +1,22 @@ +{ + "version": "1.0.3", + "summary": "Load wavefront .obj files in your WebGL scene.", + "repository": "https://github.com/Zinggi/elm-obj-loader.git", + "license": "MIT", + "source-directories": [ + "src" + ], + "exposed-modules": [ + "OBJ", + "OBJ.Types" + ], + "dependencies": { + "Bogdanp/elm-combine": "3.1.1 <= v < 4.0.0", + "Skinney/elm-array-exploration": "2.0.1 <= v < 3.0.0", + "elm-community/linear-algebra": "3.1.0 <= v < 4.0.0", + "elm-community/webgl": "2.0.0 <= v < 3.0.0", + "elm-lang/core": "5.0.0 <= v < 6.0.0", + "elm-lang/http": "1.0.0 <= v < 2.0.0" + }, + "elm-version": "0.18.0 <= v < 0.19.0" +} diff --git a/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/.gitignore b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/.gitignore new file mode 100644 index 0000000..ec60aa5 --- /dev/null +++ b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/.gitignore @@ -0,0 +1,3 @@ +elm-stuff/ +index.html +testObjs/ diff --git a/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/ElmLogo.elm b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/ElmLogo.elm new file mode 100644 index 0000000..46aa78f --- /dev/null +++ b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/ElmLogo.elm @@ -0,0 +1,299 @@ +module ElmLogo exposing (..) + +import AnimationFrame +import Dict exposing (Dict) +import Html exposing (Html, div, text) +import Html.Attributes as Attr +import Html.Events exposing (on, onInput, onCheck) +import Json.Decode as JD +import Math.Matrix4 as M4 exposing (Mat4) +import Math.Vector3 as V3 exposing (Vec3, vec3) +import Task +import WebGL as GL +import WebGL.Texture +import WebGL.Settings exposing (cullFace, front) +import WebGL.Settings.DepthTest as DepthTest +import Mouse +import Window + + +-- + +import Shaders +import OBJ +import OBJ.Types exposing (ObjFile, Mesh(..)) + + +main : Program Never Model Msg +main = + Html.program + { init = ( initModel, initCmd ) + , view = view + , subscriptions = subscriptions + , update = update + } + + + +-- MODEL + + +type alias Model = + { time : Float + , mesh : Result String ObjFile + , currentModel : String + , zoom : Float + , diffText : Result String GL.Texture + , normText : Result String GL.Texture + , isDown : Bool + , lastMousePos : Mouse.Position + , mouseDelta : MouseDelta + , windowSize : Window.Size + , withTangent : Bool + } + + +type alias MouseDelta = + { x : Float, y : Float } + + +initModel : Model +initModel = + { mesh = Err "loading ..." + , currentModel = "meshes/elmLogo.obj" + , time = 0 + , zoom = 5 + , diffText = Err "Loading texture..." + , normText = Err "Loading texture..." + , isDown = False + , lastMousePos = Mouse.Position 0 0 + , mouseDelta = MouseDelta 0 (pi / 2) + , windowSize = Window.Size 800 600 + , withTangent = True + } + + +models : List String +models = + [ "meshes/elmLogo.obj" + , "meshes/suzanneNoUV.obj" + ] + + +initCmd : Cmd Msg +initCmd = + Cmd.batch + [ loadModel True "meshes/elmLogo.obj" + , loadTexture "textures/elmLogoDiffuse.png" DiffTextureLoaded + , loadTexture "textures/elmLogoNorm.png" NormTextureLoaded + , Task.perform ResizeWindow Window.size + ] + + +loadModel : Bool -> String -> Cmd Msg +loadModel withTangents url = + OBJ.loadObjFileWith { withTangents = withTangents } url (LoadObj url) + + + +-- UPDATE + + +type Msg + = Tick Float + | LoadObj String (Result String (Dict String (Dict String Mesh))) + | Zoom Float + | MouseMove Mouse.Position + | MouseDown Mouse.Position + | MouseUp + | DiffTextureLoaded (Result String GL.Texture) + | NormTextureLoaded (Result String GL.Texture) + | ResizeWindow Window.Size + | SelectMesh String + | SetUseTangent Bool + + +update : Msg -> Model -> ( Model, Cmd Msg ) +update msg model = + case msg of + Tick dt -> + ( { model | time = model.time + dt / 1000 }, Cmd.none ) + + Zoom dy -> + ( { model | zoom = max 0.01 (model.zoom + dy / 100) }, Cmd.none ) + + SelectMesh url -> + ( model, loadModel model.withTangent url ) + + SetUseTangent t -> + ( { model | withTangent = t }, loadModel t model.currentModel ) + + LoadObj url mesh -> + ( { model | mesh = mesh, currentModel = url }, Cmd.none ) + + DiffTextureLoaded t -> + ( { model | diffText = t }, Cmd.none ) + + NormTextureLoaded t -> + ( { model | normText = t }, Cmd.none ) + + MouseDown p -> + ( { model | isDown = True, lastMousePos = p }, Cmd.none ) + + MouseUp -> + ( { model | isDown = False }, Cmd.none ) + + MouseMove p -> + ( { model | mouseDelta = getDelta p model.lastMousePos model.mouseDelta, lastMousePos = p }, Cmd.none ) + + ResizeWindow w -> + ( { model | windowSize = w }, Cmd.none ) + + + +-- VIEW / RENDER + + +renderModel : Model -> GL.Texture -> GL.Texture -> Mesh -> GL.Entity +renderModel model textureDiff textureNorm mesh = + let + ( camera, view, viewProjection, cameraPos ) = + getCamera model + + modelM = + M4.makeTranslate (vec3 -1 0 0) + + lightPos = + vec3 (0.5 * cos (2 * model.time)) (1 + 0.5 * sin (2 * model.time)) 0.5 + + uniforms = + { camera = camera + , mvMat = M4.mul view modelM + , modelViewProjectionMatrix = M4.mul viewProjection modelM + , modelMatrix = modelM + , viewPosition = cameraPos + , textureDiff = textureDiff + , textureNorm = textureNorm + , lightPosition = lightPos + } + in + case mesh of + WithoutTexture { vertices, indices } -> + renderCullFace Shaders.simpleVert Shaders.simpleFrag (GL.indexedTriangles vertices indices) uniforms + + WithTexture { vertices, indices } -> + renderCullFace Shaders.noNormalVert Shaders.noNormalFrag (GL.indexedTriangles vertices indices) uniforms + + WithTextureAndTangent { vertices, indices } -> + renderCullFace Shaders.normalVert Shaders.normalFrag (GL.indexedTriangles vertices indices) uniforms + + +getCamera : Model -> ( Mat4, Mat4, Mat4, Vec3 ) +getCamera { mouseDelta, zoom, windowSize } = + let + ( mx, my ) = + ( mouseDelta.x, mouseDelta.y ) + + aspect = + toFloat windowSize.width / toFloat windowSize.height + + proj = + M4.makePerspective 45 aspect 0.01 10000 + + position = + vec3 (zoom * sin -mx * sin my) (-zoom * cos my + 1) (zoom * cos -mx * sin my) + + view = + M4.makeLookAt (position) (vec3 0 1 0) (vec3 0 1 0) + in + ( proj, view, M4.mul proj view, position ) + + +view : Model -> Html.Html Msg +view model = + div [] + [ selectModel model + , case ( model.mesh, model.diffText, model.normText ) of + ( Ok m, Ok td, Ok tn ) -> + GL.toHtmlWith [ GL.antialias, GL.depth 1 ] + [ onZoom + , Attr.width (model.windowSize.width) + , Attr.height (model.windowSize.height) + , Attr.style [ ( "position", "absolute" ) ] + ] + (Dict.values m + |> List.concatMap Dict.values + |> List.map (renderModel model td tn) + ) + + err -> + Html.div [] [ Html.text (toString err) ] + ] + + +selectModel : Model -> Html Msg +selectModel model = + div [ Attr.style [ ( "position", "absolute" ), ( "z-index", "2" ), ( "backgroundColor", "white" ) ] ] + ([ Html.select [ onInput SelectMesh, Attr.value model.currentModel ] + (List.map (\t -> Html.option [ Attr.value t ] [ text t ]) models) + ] + ++ if String.startsWith "meshes/elmLogo" model.currentModel then + [ text "\twith normal map: " + , Html.input [ Attr.type_ "checkbox", onCheck SetUseTangent, Attr.checked model.withTangent ] [] + ] + else + [] + ) + + + +-- SUBS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.batch + ((if model.isDown then + [ Mouse.moves MouseMove ] + else + [] + ) + ++ [ AnimationFrame.diffs Tick + , Mouse.downs MouseDown + , Mouse.ups (\_ -> MouseUp) + , Window.resizes ResizeWindow + ] + ) + + + +-- HELPERS + + +onZoom : Html.Attribute Msg +onZoom = + on "wheel" (JD.map Zoom (JD.field "deltaY" JD.float)) + + +getDelta : Mouse.Position -> Mouse.Position -> MouseDelta -> MouseDelta +getDelta curr lastP delta = + MouseDelta (toFloat (curr.x - lastP.x) / 100 + delta.x) (clamp 0.01 pi (toFloat (curr.y - lastP.y) / 100 + delta.y)) + + +loadTexture : String -> (Result String GL.Texture -> msg) -> Cmd msg +loadTexture url msg = + WebGL.Texture.load url + |> Task.attempt + (\r -> + case r of + Ok t -> + msg (Ok t) + + Err e -> + msg (Err ("Failed to load texture: " ++ toString e)) + ) + + +renderCullFace : GL.Shader a u v -> GL.Shader {} u v -> GL.Mesh a -> u -> GL.Entity +renderCullFace = + GL.entityWith [ DepthTest.default, cullFace front ] diff --git a/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/README.md b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/README.md new file mode 100644 index 0000000..c072b40 --- /dev/null +++ b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/README.md @@ -0,0 +1,9 @@ +# Running +Due to [a bug in elm reactor](https://github.com/elm-lang/elm-reactor/issues/217), the obj file will be served as an html page instead of `plain/text`. This screws up the parsing. + +Using another file server works, e.g. +using [elm-live](https://github.com/tomekwi/elm-live) or `python -m http.server` + +# Acknowledgements + +Brick textures were taken from: http://www.textures.com/ diff --git a/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/Shaders.elm b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/Shaders.elm new file mode 100644 index 0000000..a329279 --- /dev/null +++ b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/Shaders.elm @@ -0,0 +1,301 @@ +module Shaders exposing (..) + +import WebGL + + +{-| This shader uses Spherical Environment Mapping (SEM). +Here are some relevant links: + + - [very cool demo](https://www.clicktorelease.com/code/spherical-normal-mapping/#) + - + - + +-} +reflectionVert = + [glsl| + +attribute vec3 position; +attribute vec3 normal; +uniform mat4 mvMat; +uniform mat4 camera; +varying vec3 vNormal; + +void main() +{ + vec4 vertex4 = mvMat * vec4(position, 1.0); + vNormal = vec3(mvMat * vec4(normal, 0.0)); + vec3 nm_z = normalize(vec3(vertex4)); + vec3 nm_x = cross(nm_z, vec3(0.0, 1.0, 0.0)); + vec3 nm_y = cross(nm_x, nm_z); + vNormal = vec3(dot(vNormal, nm_x), dot(vNormal, nm_y), dot(vNormal, nm_z)); + gl_Position = camera * vertex4; +} + +|] + + +reflectionFrag = + [glsl| +precision mediump float; + +uniform sampler2D texture; + +varying vec3 vNormal; + +void main() +{ + vec2 texCoord = vec2(0.5 * vNormal.x + 0.5, - 0.5 * vNormal.y - 0.5); + vec4 fragColor = texture2D(texture, texCoord); + fragColor.a = 1.0; + + gl_FragColor = fragColor; +} + +|] + + +{-| normal mapping according to: + +-} +normalVert = + [glsl| +attribute vec3 position; +attribute vec3 normal; +attribute vec2 texCoord; +attribute vec4 tangent; + +varying vec2 vTexCoord; +varying vec3 vLightDirection; +varying vec3 vViewDirection; + + +uniform mat4 modelViewProjectionMatrix; +uniform mat4 modelMatrix; +uniform vec3 lightPosition; +uniform vec3 viewPosition; + +mat3 transpose(mat3 m) { + return mat3(m[0][0], m[1][0], m[2][0], + m[0][1], m[1][1], m[2][1], + m[0][2], m[1][2], m[2][2]); +} + + +void main() +{ + vec4 pos = vec4(position, 1.0 ); + vec3 posWorld = (modelMatrix * pos).xyz; + + // Tangent, Bitangent, Normal space matrix TBN + // this isn't entirely correct, it should use the normal matrix + // In this special case it works out well, + // since my model matrix does not contain any rotation or translation. + // http://www.lighthouse3d.com/tutorials/glsl-12-tutorial/the-normal-matrix/ + vec3 n = normalize((modelMatrix * vec4(normal, 0.0)).xyz); + vec3 t = normalize((modelMatrix * vec4(tangent.xyz, 0.0)).xyz); + vec3 b = normalize((modelMatrix * vec4((cross(normal, tangent.xyz) * tangent.w), 0.0)).xyz); + mat3 tbn = transpose(mat3(t, b, n)); + vLightDirection = tbn*(lightPosition - posWorld); + vViewDirection = tbn*(viewPosition - posWorld); + vTexCoord = texCoord; + gl_Position = modelViewProjectionMatrix * pos; +} +|] + + +normalFrag = + [glsl| +precision mediump float; + +uniform sampler2D textureDiff; +uniform sampler2D textureNorm; + +varying vec2 vTexCoord; +varying vec3 vLightDirection; +varying vec3 vViewDirection; + +void main() { + + vec3 lightDir = normalize(vLightDirection); + + // Local normal, in tangent space + vec3 pixelNormal = normalize(texture2D(textureNorm, vTexCoord).rgb*2.0 - 1.0); + float lambert = max(dot(pixelNormal, lightDir), 0.0); + + + // diffuse + lambert + vec3 lightIntensities = vec3(1.5, 1.0, 1.0); + vec3 diffuseColor = texture2D(textureDiff, vTexCoord).rgb; + vec3 diffuse = lambert * diffuseColor * lightIntensities; + + // ambient + vec3 ambient = 0.3 * diffuseColor; + + // specular + float shininess = 32.0; + vec3 viewDir = normalize(vViewDirection); + vec3 reflectDir = reflect(-lightDir, pixelNormal); + vec3 halfwayDir = normalize(lightDir + viewDir); + float spec = pow(max(dot(pixelNormal, halfwayDir), 0.0), shininess); + vec3 specular = vec3(0.2) * spec * lightIntensities; + + // attenuation + float lightAttenuation = 0.3; + float attenuation = 1.0 / (1.0 + lightAttenuation * pow(length(vLightDirection), 2.0)); + + vec3 final_color = ambient + (diffuse + specular) * attenuation; + gl_FragColor = vec4(final_color, 1.0); +} +|] + + +{-| same as the normal mapping shader, but without deforming normals. +-} +noNormalVert = + [glsl| +attribute vec3 position; +attribute vec3 normal; +attribute vec2 texCoord; + +varying vec2 vTexCoord; +varying vec3 vLightDirection; +varying vec3 vViewDirection; +varying vec3 vNormal; + +uniform mat4 modelViewProjectionMatrix; +uniform mat4 modelMatrix; +uniform vec3 lightPosition; +uniform vec3 viewPosition; + +void main() +{ + vec4 pos = vec4(position, 1.0 ); + vec3 posWorld = (modelMatrix * pos).xyz; + + vLightDirection = lightPosition - posWorld; + vViewDirection = viewPosition - posWorld; + vTexCoord = texCoord; + // this is incorrect, it should use the normal matrix + vNormal = mat3(modelMatrix) * normal; + gl_Position = modelViewProjectionMatrix * pos; +} +|] + + +noNormalFrag = + [glsl| +precision mediump float; + +uniform sampler2D textureDiff; + +varying vec2 vTexCoord; +varying vec3 vLightDirection; +varying vec3 vViewDirection; +varying vec3 vNormal; + +void main() +{ + vec3 lightDir = normalize(vLightDirection); + + // lambert + vec3 pixelNormal = normalize(vNormal); + float lambert = max(dot(pixelNormal, lightDir), 0.0); + + // diffuse + lambert + vec3 lightIntensities = vec3(1.5, 1.0, 1.0); + vec3 diffuseColor = texture2D(textureDiff, vTexCoord).rgb; + vec3 diffuse = lambert * diffuseColor * lightIntensities; + + // ambient + vec3 ambient = 0.3 * diffuseColor; + + // specular + float shininess = 32.0; + vec3 viewDir = normalize(vViewDirection); + vec3 reflectDir = reflect(-lightDir, pixelNormal); + vec3 halfwayDir = normalize(lightDir + viewDir); + float spec = pow(max(dot(pixelNormal, halfwayDir), 0.0), shininess); + vec3 specular = vec3(0.2) * spec * lightIntensities; + + // attenuation + float lightAttenuation = 0.3; + float attenuation = 1.0 / (1.0 + lightAttenuation * pow(length(vLightDirection), 2.0)); + + vec3 final_color = ambient + (diffuse + specular) * attenuation; + gl_FragColor = vec4(final_color, 1.0); +} +|] + + +{-| same as above, but without any textures. +-} +simpleVert = + [glsl| +attribute vec3 position; +attribute vec3 normal; + +varying vec3 vLightDirection; +varying vec3 vViewDirection; +varying vec3 vNormal; + +uniform mat4 modelViewProjectionMatrix; +uniform mat4 modelMatrix; +uniform vec3 lightPosition; +uniform vec3 viewPosition; + +void main() +{ + vec4 pos = vec4(position, 1.0 ); + vec3 posWorld = (modelMatrix * pos).xyz; + + vLightDirection = lightPosition - posWorld; + vViewDirection = viewPosition - posWorld; + // this is incorrect, it should use the normal matrix, like this: + // vNormal = mat3(normalMatrix) * normal; + // it works in this case, since the modelMatrix is the identity matrix + vNormal = normal; + gl_Position = modelViewProjectionMatrix * pos; +} +|] + + +simpleFrag = + [glsl| +precision mediump float; + +varying vec3 vLightDirection; +varying vec3 vViewDirection; +varying vec3 vNormal; + +void main() +{ + vec3 lightDir = normalize(vLightDirection); + + // lambert + vec3 pixelNormal = normalize(vNormal); + float lambert = max(dot(pixelNormal, lightDir), 0.0); + + // diffuse + lambert + vec3 lightIntensities = vec3(1.5, 1.0, 1.0); + vec3 diffuseColor = vec3(0.3, 0.2, 0.95); + vec3 diffuse = lambert * diffuseColor * lightIntensities; + + // ambient + vec3 ambient = 0.2 * diffuseColor; + + // specular + float shininess = 32.0; + vec3 viewDir = normalize(vViewDirection); + vec3 reflectDir = reflect(-lightDir, pixelNormal); + vec3 halfwayDir = normalize(lightDir + viewDir); + float spec = pow(max(dot(pixelNormal, halfwayDir), 0.0), shininess); + vec3 specular = vec3(0.2) * spec * lightIntensities; + + // attenuation + float lightAttenuation = 0.3; + float attenuation = 1.0 / (1.0 + lightAttenuation * pow(length(vLightDirection), 2.0)); + + vec3 final_color = ambient + (diffuse + specular) * attenuation; + gl_FragColor = vec4(final_color, 1.0); +} +|] diff --git a/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/Suzanne.elm b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/Suzanne.elm new file mode 100644 index 0000000..d2d3f05 --- /dev/null +++ b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/Suzanne.elm @@ -0,0 +1,148 @@ +module Suzanne exposing (..) + +import AnimationFrame +import Html +import Html.Attributes as Attr +import Html.Events exposing (on) +import Json.Decode as JD +import Math.Matrix4 as M4 exposing (Mat4) +import Math.Vector3 as V3 exposing (Vec3, vec3) +import Task +import WebGL as GL +import WebGL.Texture +import WebGL.Settings exposing (cullFace, front) +import WebGL.Settings.DepthTest as DepthTest + + +-- + +import OBJ +import OBJ.Types exposing (MeshWith, VertexWithTexture) +import Shaders exposing (reflectionVert, reflectionFrag) + + +main : Program Never Model Msg +main = + Html.program + { init = ( initModel, initCmd ) + , view = view + , subscriptions = (\model -> AnimationFrame.diffs Tick) + , update = update + } + + + +-- MODEL + + +type alias Model = + { time : Float + , mesh : Result String (MeshWith VertexWithTexture) + , zoom : Float + , reflectionTexture : Result String GL.Texture + } + + +initModel : Model +initModel = + { mesh = Err "loading ...", time = 0, zoom = 10, reflectionTexture = Err "Loading texture..." } + + +initCmd : Cmd Msg +initCmd = + Cmd.batch + [ OBJ.loadMesh "meshes/suzanne.obj" LoadObj + , loadTexture "textures/chavant.jpg" TextureLoaded + ] + + + +-- UPDATE + + +type Msg + = Tick Float + | LoadObj (Result String (MeshWith VertexWithTexture)) + | Zoom Float + | TextureLoaded (Result String GL.Texture) + + +update : Msg -> Model -> ( Model, Cmd Msg ) +update msg model = + case msg of + Tick dt -> + ( { model | time = model.time + dt / 1000 }, Cmd.none ) + + Zoom dy -> + ( { model | zoom = model.zoom + dy / 100 }, Cmd.none ) + + LoadObj mesh -> + ( { model | mesh = mesh }, Cmd.none ) + + TextureLoaded t -> + ( { model | reflectionTexture = t }, Cmd.none ) + + + +-- VIEW / RENDER + + +renderModel : Model -> GL.Texture -> MeshWith VertexWithTexture -> GL.Entity +renderModel { zoom, time } texture { vertices, indices } = + let + ( camera, view ) = + getCamera zoom time + + model = + M4.makeRotate time (vec3 0 1 0) + + modelView = + M4.mul view model + in + GL.entityWith [ DepthTest.default, cullFace front ] + reflectionVert + reflectionFrag + (GL.indexedTriangles vertices indices) + { camera = camera, mvMat = modelView, texture = texture } + + +getCamera : Float -> Float -> ( Mat4, Mat4 ) +getCamera zoom t = + ( (M4.makePerspective 45 1 0.01 10000) + , (M4.makeLookAt (vec3 (zoom) (zoom / 2) (zoom)) (vec3 0 0 0) (vec3 0 1 0)) + ) + + +view : Model -> Html.Html Msg +view model = + case ( model.mesh, model.reflectionTexture ) of + ( Ok m, Ok t ) -> + GL.toHtmlWith [ GL.antialias, GL.depth 1 ] + [ onZoom, Attr.width 400, Attr.height 400 ] + [ renderModel model t m ] + + ( a, b ) -> + Html.div [] [ Html.text (toString a ++ "\n\n\n" ++ toString b) ] + + + +-- HELPERS + + +loadTexture : String -> (Result String GL.Texture -> msg) -> Cmd msg +loadTexture url msg = + WebGL.Texture.load url + |> Task.attempt + (\r -> + case r of + Ok t -> + msg (Ok t) + + Err e -> + msg (Err ("Failed to load texture: " ++ toString e)) + ) + + +onZoom : Html.Attribute Msg +onZoom = + on "wheel" (JD.map Zoom (JD.field "deltaY" JD.float)) diff --git a/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/elm-package.json b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/elm-package.json new file mode 100644 index 0000000..13b8a78 --- /dev/null +++ b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/elm-package.json @@ -0,0 +1,24 @@ +{ + "version": "1.0.0", + "summary": "helpful summary of your project, less than 80 characters", + "repository": "https://github.com/Zinggi/elm-obj-loader.git", + "license": "BSD3", + "source-directories": [ + ".", + "../src" + ], + "exposed-modules": [], + "dependencies": { + "Bogdanp/elm-combine": "3.1.1 <= v < 4.0.0", + "Skinney/elm-array-exploration": "2.0.1 <= v < 3.0.0", + "elm-community/linear-algebra": "1.0.0 <= v < 2.0.0", + "elm-community/webgl": "2.0.0 <= v < 3.0.0", + "elm-lang/animation-frame": "1.0.1 <= v < 2.0.0", + "elm-lang/core": "5.0.0 <= v < 6.0.0", + "elm-lang/html": "2.0.0 <= v < 3.0.0", + "elm-lang/http": "1.0.0 <= v < 2.0.0", + "elm-lang/mouse": "1.0.1 <= v < 2.0.0", + "elm-lang/window": "1.0.1 <= v < 2.0.0" + }, + "elm-version": "0.18.0 <= v < 0.19.0" +} diff --git a/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/meshes/elmLogo.obj b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/meshes/elmLogo.obj new file mode 100644 index 0000000..a466af3 --- /dev/null +++ b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/meshes/elmLogo.obj @@ -0,0 +1,1576 @@ +# Blender v2.78 (sub 0) OBJ File: 'elmLogo.blend' +# www.blender.org +mtllib elmLogo.mtl +o Cube.001 +v 1.471009 1.436646 0.059000 +v 1.500000 1.407655 0.100000 +v 1.528991 1.436646 0.059000 +v 1.478087 1.429568 0.089990 +v 1.500000 1.444863 0.085310 +v 1.521913 1.429568 0.089990 +v 1.500000 1.451482 0.059000 +v 1.063354 1.028991 0.059000 +v 1.063354 0.971009 0.059000 +v 1.092345 1.000000 0.100000 +v 1.048518 1.000000 0.059000 +v 1.055138 1.000000 0.085310 +v 1.070432 0.978087 0.089990 +v 1.070432 1.021914 0.089990 +v 1.471009 0.563354 0.059000 +v 1.528991 0.563354 0.059000 +v 1.500000 0.592345 0.100000 +v 1.500000 0.548518 0.059000 +v 1.500000 0.555137 0.085310 +v 1.521913 0.570432 0.089990 +v 1.478087 0.570432 0.089990 +v 1.936646 1.028991 0.059000 +v 1.907655 1.000000 0.100000 +v 1.936646 0.971009 0.059000 +v 1.929568 1.021913 0.089990 +v 1.944863 1.000000 0.085310 +v 1.929568 0.978087 0.089990 +v 1.951482 1.000000 0.059000 +v 1.099660 1.975702 0.059000 +v 1.087652 1.946711 0.059000 +v 1.157643 1.934702 0.100000 +v 1.075749 1.968624 0.059000 +v 1.090667 1.962444 0.086273 +v 1.115230 1.933289 0.089990 +v 1.128652 1.965692 0.089990 +v 1.546173 1.488190 0.059000 +v 1.546173 1.546173 0.100000 +v 1.488190 1.546173 0.059000 +v 1.538755 1.509764 0.089990 +v 1.521507 1.521507 0.085197 +v 1.509764 1.538755 0.089990 +v 1.517181 1.517181 0.059000 +v 1.975702 1.099660 0.059000 +v 1.934702 1.157643 0.100000 +v 1.946711 1.087652 0.059000 +v 1.965692 1.128652 0.089990 +v 1.962444 1.090667 0.086273 +v 1.933289 1.115230 0.089990 +v 1.968624 1.075749 0.059000 +v 1.934702 1.975702 0.059000 +v 1.934702 1.934702 0.100000 +v 1.975702 1.934702 0.059000 +v 1.934702 1.965692 0.089990 +v 1.961012 1.961012 0.085310 +v 1.965692 1.934702 0.089990 +v 1.965692 1.965692 0.059000 +v 1.912348 0.053289 0.059000 +v 1.842357 0.065298 0.100000 +v 1.900340 0.024298 0.059000 +v 1.884770 0.066711 0.089990 +v 1.909333 0.037556 0.086273 +v 1.871348 0.034308 0.089990 +v 1.924251 0.031377 0.059000 +v 1.511810 0.453827 0.059000 +v 1.453827 0.511810 0.059000 +v 1.453827 0.453827 0.100000 +v 1.482819 0.482819 0.059000 +v 1.478493 0.478493 0.085197 +v 1.461245 0.490236 0.089990 +v 1.490236 0.461245 0.089990 +v 0.971009 0.936646 0.059000 +v 1.000000 0.907655 0.100000 +v 1.028991 0.936646 0.059000 +v 0.978087 0.929568 0.089990 +v 1.000000 0.944863 0.085310 +v 1.021914 0.929568 0.089990 +v 1.000000 0.951482 0.059000 +v 0.087652 0.053289 0.059000 +v 0.099660 0.024298 0.059000 +v 0.157643 0.065298 0.100000 +v 0.075749 0.031376 0.059000 +v 0.090667 0.037556 0.086273 +v 0.128652 0.034308 0.089990 +v 0.115230 0.066711 0.089990 +v 1.946711 0.912348 0.059000 +v 1.934702 0.842357 0.100000 +v 1.975702 0.900340 0.059000 +v 1.933289 0.884770 0.089990 +v 1.962444 0.909333 0.086273 +v 1.965692 0.871348 0.089990 +v 1.968624 0.924251 0.059000 +v 1.563354 0.471009 0.059000 +v 1.592345 0.500000 0.100000 +v 1.563354 0.528991 0.059000 +v 1.570432 0.478087 0.089990 +v 1.555137 0.500000 0.085310 +v 1.570432 0.521913 0.089990 +v 1.548518 0.500000 0.059000 +v 1.975702 0.099660 0.059000 +v 1.934702 0.157643 0.100000 +v 1.946711 0.087652 0.059000 +v 1.965692 0.128652 0.089990 +v 1.962444 0.090667 0.086273 +v 1.933289 0.115230 0.089990 +v 1.968624 0.075749 0.059000 +v 0.024298 0.099660 0.059000 +v 0.053289 0.087652 0.059000 +v 0.065298 0.157643 0.100000 +v 0.031376 0.075749 0.059000 +v 0.037556 0.090667 0.086273 +v 0.066711 0.115230 0.089990 +v 0.034308 0.128652 0.089990 +v 0.936646 0.971009 0.059000 +v 0.936646 1.028991 0.059000 +v 0.907655 1.000000 0.100000 +v 0.951482 1.000000 0.059000 +v 0.944863 1.000000 0.085310 +v 0.929568 1.021914 0.089990 +v 0.929568 0.978087 0.089990 +v 0.453827 1.511810 0.059000 +v 0.453827 1.453827 0.100000 +v 0.511810 1.453827 0.059000 +v 0.461245 1.490236 0.089990 +v 0.478493 1.478493 0.085197 +v 0.490236 1.461245 0.089990 +v 0.482819 1.482819 0.059000 +v 0.053289 1.912348 0.059000 +v 0.024298 1.900340 0.059000 +v 0.065298 1.842357 0.100000 +v 0.031376 1.924251 0.059000 +v 0.037556 1.909333 0.086273 +v 0.034308 1.871348 0.089990 +v 0.066711 1.884770 0.089990 +v 1.400340 1.475702 0.059000 +v 1.342357 1.434702 0.100000 +v 1.412348 1.446711 0.059000 +v 1.371348 1.465692 0.089990 +v 1.409333 1.462444 0.086273 +v 1.384770 1.433289 0.089990 +v 1.424251 1.468624 0.059000 +v 0.599660 1.475702 0.059000 +v 0.587652 1.446711 0.059000 +v 0.657643 1.434702 0.100000 +v 0.575749 1.468624 0.059000 +v 0.590667 1.462444 0.086273 +v 0.615230 1.433289 0.089990 +v 0.628652 1.465692 0.089990 +v 0.971009 1.063354 0.059000 +v 1.028991 1.063354 0.059000 +v 1.000000 1.092345 0.100000 +v 1.000000 1.048518 0.059000 +v 1.000000 1.055138 0.085310 +v 1.021913 1.070432 0.089990 +v 0.978087 1.070432 0.089990 +v 0.099660 1.975702 0.059000 +v 0.087652 1.946711 0.059000 +v 0.157643 1.934702 0.100000 +v 0.075749 1.968624 0.059000 +v 0.090667 1.962444 0.086273 +v 0.115230 1.933289 0.089990 +v 0.128652 1.965692 0.089990 +v 0.551065 1.524298 0.059000 +v 0.527047 1.565298 0.100000 +v 0.481073 1.553289 0.059000 +v 0.539056 1.534308 0.089990 +v 0.514280 1.534474 0.086273 +v 0.496643 1.551876 0.089990 +v 0.512996 1.531376 0.059000 +v 1.412348 1.553289 0.059000 +v 1.342357 1.565298 0.100000 +v 1.400340 1.524298 0.059000 +v 1.384770 1.566711 0.089990 +v 1.409333 1.537556 0.086273 +v 1.371349 1.534308 0.089990 +v 1.424251 1.531376 0.059000 +v 0.948935 1.975702 0.059000 +v 0.972953 1.934702 0.100000 +v 1.018927 1.946711 0.059000 +v 0.960944 1.965692 0.089990 +v 0.985720 1.965526 0.086273 +v 1.003357 1.948124 0.089990 +v 0.987004 1.968624 0.059000 +v 0.948935 1.975702 -0.059000 +v 1.018927 1.946711 -0.059000 +v 0.972953 1.934702 -0.100000 +v 0.987004 1.968624 -0.059000 +v 0.985720 1.965526 -0.086273 +v 1.003357 1.948124 -0.089990 +v 0.960944 1.965692 -0.089990 +v 1.400340 1.524298 -0.059000 +v 1.342357 1.565298 -0.100000 +v 1.412348 1.553289 -0.059000 +v 1.371348 1.534308 -0.089990 +v 1.409333 1.537556 -0.086273 +v 1.384770 1.566711 -0.089990 +v 1.424251 1.531376 -0.059000 +v 0.481073 1.553289 -0.059000 +v 0.527047 1.565298 -0.100000 +v 0.551065 1.524298 -0.059000 +v 0.496643 1.551876 -0.089990 +v 0.514280 1.534474 -0.086273 +v 0.539056 1.534308 -0.089990 +v 0.512996 1.531376 -0.059000 +v 0.087652 1.946711 -0.059000 +v 0.099660 1.975702 -0.059000 +v 0.157643 1.934702 -0.100000 +v 0.075749 1.968624 -0.059000 +v 0.090667 1.962444 -0.086273 +v 0.128652 1.965692 -0.089990 +v 0.115230 1.933289 -0.089990 +v 0.971009 1.063354 -0.059000 +v 1.000000 1.092345 -0.100000 +v 1.028991 1.063354 -0.059000 +v 0.978087 1.070432 -0.089990 +v 1.000000 1.055137 -0.085310 +v 1.021914 1.070432 -0.089990 +v 1.000000 1.048518 -0.059000 +v 0.657643 1.434702 -0.100000 +v 0.587652 1.446711 -0.059000 +v 0.599660 1.475702 -0.059000 +v 0.615230 1.433289 -0.089990 +v 0.590667 1.462444 -0.086273 +v 0.575749 1.468624 -0.059000 +v 0.628652 1.465692 -0.089990 +v 1.342357 1.434702 -0.100000 +v 1.400340 1.475702 -0.059000 +v 1.412348 1.446711 -0.059000 +v 1.371348 1.465692 -0.089990 +v 1.409333 1.462444 -0.086273 +v 1.424251 1.468624 -0.059000 +v 1.384770 1.433289 -0.089990 +v 0.065298 1.842357 -0.100000 +v 0.024298 1.900340 -0.059000 +v 0.053289 1.912348 -0.059000 +v 0.034308 1.871348 -0.089990 +v 0.037556 1.909333 -0.086273 +v 0.031377 1.924251 -0.059000 +v 0.066711 1.884770 -0.089990 +v 0.453827 1.511810 -0.059000 +v 0.511810 1.453827 -0.059000 +v 0.453827 1.453827 -0.100000 +v 0.482819 1.482819 -0.059000 +v 0.478493 1.478493 -0.085197 +v 0.490236 1.461245 -0.089990 +v 0.461245 1.490236 -0.089990 +v 0.907655 1.000000 -0.100000 +v 0.936646 1.028991 -0.059000 +v 0.936646 0.971009 -0.059000 +v 0.929568 1.021913 -0.089990 +v 0.944863 1.000000 -0.085310 +v 0.951482 1.000000 -0.059000 +v 0.929568 0.978086 -0.089990 +v 0.053289 0.087652 -0.059000 +v 0.024298 0.099660 -0.059000 +v 0.065298 0.157643 -0.100000 +v 0.031376 0.075749 -0.059000 +v 0.037556 0.090667 -0.086273 +v 0.034308 0.128652 -0.089990 +v 0.066711 0.115230 -0.089990 +v 1.975702 0.099660 -0.059000 +v 1.946711 0.087652 -0.059000 +v 1.934702 0.157643 -0.100000 +v 1.968624 0.075749 -0.059000 +v 1.962444 0.090667 -0.086273 +v 1.933289 0.115230 -0.089990 +v 1.965692 0.128652 -0.089990 +v 1.563354 0.471009 -0.059000 +v 1.563354 0.528991 -0.059000 +v 1.592345 0.500000 -0.100000 +v 1.548518 0.500000 -0.059000 +v 1.555138 0.500000 -0.085310 +v 1.570432 0.521913 -0.089990 +v 1.570432 0.478087 -0.089990 +v 1.934702 0.842357 -0.100000 +v 1.946711 0.912348 -0.059000 +v 1.975702 0.900340 -0.059000 +v 1.933289 0.884770 -0.089990 +v 1.962444 0.909333 -0.086273 +v 1.968624 0.924251 -0.059000 +v 1.965692 0.871348 -0.089990 +v 0.157643 0.065298 -0.100000 +v 0.099660 0.024298 -0.059000 +v 0.087652 0.053289 -0.059000 +v 0.128652 0.034308 -0.089990 +v 0.090667 0.037556 -0.086273 +v 0.075749 0.031376 -0.059000 +v 0.115230 0.066711 -0.089990 +v 1.028991 0.936646 -0.059000 +v 1.000000 0.907655 -0.100000 +v 0.971009 0.936646 -0.059000 +v 1.021913 0.929568 -0.089990 +v 1.000000 0.944863 -0.085310 +v 0.978086 0.929568 -0.089990 +v 1.000000 0.951482 -0.059000 +v 1.511810 0.453827 -0.059000 +v 1.453827 0.453827 -0.100000 +v 1.453827 0.511810 -0.059000 +v 1.490236 0.461245 -0.089990 +v 1.478493 0.478493 -0.085197 +v 1.461245 0.490236 -0.089990 +v 1.482819 0.482819 -0.059000 +v 1.912348 0.053289 -0.059000 +v 1.900340 0.024298 -0.059000 +v 1.842357 0.065298 -0.100000 +v 1.924251 0.031376 -0.059000 +v 1.909333 0.037556 -0.086273 +v 1.871348 0.034308 -0.089990 +v 1.884770 0.066711 -0.089990 +v 1.934702 1.975702 -0.059000 +v 1.975702 1.934702 -0.059000 +v 1.934702 1.934702 -0.100000 +v 1.965692 1.965692 -0.059000 +v 1.961012 1.961012 -0.085310 +v 1.965692 1.934702 -0.089990 +v 1.934702 1.965692 -0.089990 +v 1.946711 1.087652 -0.059000 +v 1.934702 1.157643 -0.100000 +v 1.975702 1.099660 -0.059000 +v 1.933289 1.115230 -0.089990 +v 1.962444 1.090667 -0.086273 +v 1.965692 1.128652 -0.089990 +v 1.968624 1.075749 -0.059000 +v 1.546173 1.488190 -0.059000 +v 1.488190 1.546173 -0.059000 +v 1.546173 1.546173 -0.100000 +v 1.517181 1.517181 -0.059000 +v 1.521507 1.521507 -0.085197 +v 1.509764 1.538755 -0.089990 +v 1.538755 1.509764 -0.089990 +v 1.087652 1.946711 -0.059000 +v 1.099660 1.975702 -0.059000 +v 1.157643 1.934702 -0.100000 +v 1.075749 1.968624 -0.059000 +v 1.090667 1.962444 -0.086273 +v 1.128652 1.965692 -0.089990 +v 1.115230 1.933289 -0.089990 +v 1.936646 1.028991 -0.059000 +v 1.936646 0.971009 -0.059000 +v 1.907655 1.000000 -0.100000 +v 1.951482 1.000000 -0.059000 +v 1.944862 1.000000 -0.085310 +v 1.929568 0.978087 -0.089990 +v 1.929568 1.021914 -0.089990 +v 1.500000 0.592345 -0.100000 +v 1.528991 0.563354 -0.059000 +v 1.471009 0.563354 -0.059000 +v 1.521913 0.570432 -0.089990 +v 1.500000 0.555137 -0.085310 +v 1.500000 0.548518 -0.059000 +v 1.478087 0.570432 -0.089990 +v 1.063354 1.028991 -0.059000 +v 1.092345 1.000000 -0.100000 +v 1.063354 0.971009 -0.059000 +v 1.070432 1.021913 -0.089990 +v 1.055137 1.000000 -0.085310 +v 1.070432 0.978087 -0.089990 +v 1.048518 1.000000 -0.059000 +v 1.471009 1.436646 -0.059000 +v 1.528991 1.436646 -0.059000 +v 1.500000 1.407655 -0.100000 +v 1.500000 1.451482 -0.059000 +v 1.500000 1.444862 -0.085310 +v 1.521913 1.429568 -0.089990 +v 1.478087 1.429568 -0.089990 +vt 0.7148 0.7467 +vt 0.7417 0.7467 +vt 0.7417 0.8769 +vt 0.7148 0.8769 +vt 0.9182 0.5809 +vt 0.9451 0.5809 +vt 0.9451 0.7088 +vt 0.9182 0.7088 +vt 0.1594 0.7351 +vt 0.1862 0.7351 +vt 0.1862 0.8653 +vt 0.1594 0.8653 +vt 0.4604 0.7876 +vt 0.4872 0.7876 +vt 0.4872 0.9209 +vt 0.4604 0.9209 +vt 0.6104 0.7880 +vt 0.6373 0.7880 +vt 0.6373 0.9237 +vt 0.6104 0.9237 +vt 0.8177 0.6311 +vt 0.8446 0.6311 +vt 0.8446 0.9186 +vt 0.8177 0.9186 +vt 0.6527 0.0224 +vt 0.7369 0.1058 +vt 0.7369 0.2899 +vt 0.6527 0.2065 +vt 0.9638 0.7246 +vt 0.9907 0.7246 +vt 0.9907 0.8525 +vt 0.9638 0.8525 +vt 0.4196 0.4028 +vt 0.2277 0.2126 +vt 0.3311 0.1101 +vt 0.4196 0.0224 +vt 0.8727 0.4317 +vt 0.8995 0.4317 +vt 0.8995 0.7193 +vt 0.8727 0.7193 +vt 0.3126 0.8656 +vt 0.3395 0.8656 +vt 0.3395 0.9935 +vt 0.3126 0.9935 +vt 0.9638 0.5754 +vt 0.9907 0.5754 +vt 0.9907 0.6978 +vt 0.9638 0.6978 +vt 0.9638 0.4344 +vt 0.9907 0.4344 +vt 0.9907 0.5569 +vt 0.9638 0.5569 +vt 0.9741 0.1422 +vt 0.9472 0.1422 +vt 0.9472 0.0065 +vt 0.9741 0.0065 +vt 0.8830 0.2914 +vt 0.8561 0.2914 +vt 0.8561 0.0093 +vt 0.8830 0.0093 +vt 0.2051 0.4028 +vt 0.1166 0.3151 +vt 0.0132 0.2126 +vt 0.2051 0.0224 +vt 0.8727 0.7324 +vt 0.8995 0.7324 +vt 0.8995 0.8657 +vt 0.8727 0.8657 +vt 0.5059 0.7903 +vt 0.5328 0.7903 +vt 0.5328 0.9159 +vt 0.5059 0.9159 +vt 0.5515 0.7903 +vt 0.5784 0.7903 +vt 0.5784 0.9127 +vt 0.5515 0.9127 +vt 0.9182 0.7273 +vt 0.9451 0.7273 +vt 0.9451 0.8498 +vt 0.9182 0.8498 +vt 0.6104 0.6416 +vt 0.6373 0.6416 +vt 0.6373 0.7695 +vt 0.6104 0.7695 +vt 0.4736 0.6230 +vt 0.5621 0.5353 +vt 0.6506 0.4475 +vt 0.6506 0.6230 +vt 0.2049 0.7351 +vt 0.2318 0.7351 +vt 0.2318 0.8653 +vt 0.2049 0.8653 +vt 0.9016 0.0093 +vt 0.9285 0.0093 +vt 0.9285 0.1449 +vt 0.9016 0.1449 +vt 0.8540 0.6022 +vt 0.7760 0.5249 +vt 0.8540 0.4475 +vt 0.6693 0.7440 +vt 0.6962 0.7440 +vt 0.6962 0.8796 +vt 0.6693 0.8796 +vt 0.9182 0.4344 +vt 0.9451 0.4344 +vt 0.9451 0.5624 +vt 0.9182 0.5624 +vt 0.8374 0.0224 +vt 0.8374 0.1770 +vt 0.7594 0.0997 +vt 0.7534 0.4475 +vt 0.7534 0.6317 +vt 0.6693 0.7151 +vt 0.6693 0.5310 +vt 0.9016 0.1635 +vt 0.9285 0.1635 +vt 0.9285 0.2914 +vt 0.9016 0.2914 +vt 0.7721 0.6338 +vt 0.7990 0.6338 +vt 0.7990 0.9159 +vt 0.7721 0.9159 +vt 0.9741 0.2836 +vt 0.9472 0.2836 +vt 0.9472 0.1580 +vt 0.9741 0.1580 +vt 0.2505 0.7351 +vt 0.2774 0.7351 +vt 0.2774 0.8653 +vt 0.2505 0.8653 +vt 0.6340 0.0224 +vt 0.6340 0.4028 +vt 0.5455 0.3151 +vt 0.4421 0.2126 +vt 0.3258 0.7273 +vt 0.4361 0.7273 +vt 0.4361 0.8367 +vt 0.8374 0.2217 +vt 0.8374 0.3763 +vt 0.7594 0.2990 +vt 0.4417 0.6957 +vt 0.3165 0.5716 +vt 0.4417 0.4475 +vt 0.4417 0.5716 +vt 0.0225 0.7166 +vt 0.2939 0.4475 +vt 0.2939 0.7166 +vt 0.1477 0.7166 +vt 0.4604 0.6416 +vt 0.5917 0.6416 +vt 0.5917 0.7718 +vt 0.4604 0.7718 +vt 0.1956 0.7351 +vt 0.1956 0.7292 +vt 0.2049 0.7258 +vt 0.1407 0.8653 +vt 0.1500 0.8653 +vt 0.1500 0.8712 +vt 0.1407 0.8746 +vt 0.7148 0.8862 +vt 0.7088 0.8862 +vt 0.7055 0.8769 +vt 0.2049 0.8746 +vt 0.1989 0.8746 +vt 0.1956 0.8653 +vt 0.1500 0.7351 +vt 0.1500 0.7292 +vt 0.1594 0.7258 +vt 0.0093 0.8653 +vt 0.0093 0.8746 +vt 0.0033 0.8746 +vt 0.0000 0.8653 +vt 0.1594 0.8746 +vt 0.1534 0.8746 +vt 0.1500 0.8653 +vt 0.2411 0.7351 +vt 0.2411 0.7292 +vt 0.2505 0.7258 +vt 0.0093 0.7351 +vt 0.0000 0.7351 +vt 0.0000 0.7292 +vt 0.0093 0.7258 +vt 0.7055 0.7467 +vt 0.7055 0.7408 +vt 0.7148 0.7375 +vt 0.1407 0.7351 +vt 0.1407 0.7258 +vt 0.1467 0.7258 +vt 0.1500 0.7351 +vt 0.2505 0.8746 +vt 0.2445 0.8746 +vt 0.2411 0.8653 +vt 0.4604 0.9275 +vt 0.4541 0.9275 +vt 0.4510 0.9163 +vt 0.9089 0.4410 +vt 0.9089 0.4324 +vt 0.9182 0.4252 +vt 0.4670 0.6323 +vt 0.4583 0.6323 +vt 0.4623 0.6211 +vt 0.9089 0.5763 +vt 0.9089 0.5716 +vt 0.9182 0.5716 +vt 0.5522 0.5320 +vt 0.5555 0.5287 +vt 0.5588 0.5255 +vt 0.9122 0.5716 +vt 0.9089 0.5670 +vt 0.8633 0.7370 +vt 0.8633 0.7310 +vt 0.8727 0.7258 +vt 0.6487 0.4364 +vt 0.6548 0.4303 +vt 0.6599 0.4410 +vt 0.9182 0.7181 +vt 0.9120 0.7181 +vt 0.9089 0.7023 +vt 0.4510 0.7876 +vt 0.4510 0.7834 +vt 0.4604 0.7810 +vt 0.6599 0.6230 +vt 0.6599 0.6290 +vt 0.6506 0.6323 +vt 0.8727 0.8723 +vt 0.8667 0.8723 +vt 0.8633 0.8657 +vt 0.6010 0.6481 +vt 0.6010 0.6395 +vt 0.6104 0.6323 +vt 0.2145 0.4094 +vt 0.2145 0.4180 +vt 0.2032 0.4140 +vt 0.8177 0.9252 +vt 0.8115 0.9252 +vt 0.8083 0.9140 +vt 0.6104 0.7787 +vt 0.6044 0.7787 +vt 0.6010 0.7741 +vt 0.6010 0.7834 +vt 0.6010 0.7787 +vt 0.1133 0.3249 +vt 0.1100 0.3216 +vt 0.1067 0.3184 +vt 0.7628 0.6338 +vt 0.7628 0.6279 +vt 0.7721 0.6245 +vt 0.0066 0.2191 +vt 0.0024 0.2149 +vt 0.0066 0.2060 +vt 0.6104 0.9329 +vt 0.6044 0.9329 +vt 0.6010 0.9237 +vt 0.7721 0.9252 +vt 0.7659 0.9252 +vt 0.7628 0.9094 +vt 0.8083 0.6357 +vt 0.8083 0.6296 +vt 0.8177 0.6245 +vt 0.2032 0.0112 +vt 0.2093 0.0051 +vt 0.2145 0.0158 +vt 0.9544 0.4410 +vt 0.9544 0.4324 +vt 0.9638 0.4252 +vt 0.8633 0.6087 +vt 0.8633 0.6173 +vt 0.8520 0.6134 +vt 0.9638 0.8590 +vt 0.9576 0.8590 +vt 0.9544 0.8479 +vt 0.9089 0.7273 +vt 0.9089 0.7214 +vt 0.9182 0.7181 +vt 0.7694 0.5314 +vt 0.7651 0.5272 +vt 0.7694 0.5183 +vt 0.9638 0.5661 +vt 0.9578 0.5661 +vt 0.9544 0.5569 +vt 0.9544 0.7293 +vt 0.9544 0.7232 +vt 0.9638 0.7181 +vt 0.8520 0.4364 +vt 0.8582 0.4303 +vt 0.8633 0.4410 +vt 0.9182 0.8590 +vt 0.9120 0.8590 +vt 0.9089 0.8432 +vt 0.8727 0.7258 +vt 0.8664 0.7258 +vt 0.8633 0.7147 +vt 0.8923 0.2848 +vt 0.8923 0.2934 +vt 0.8830 0.3007 +vt 0.4289 0.4094 +vt 0.4289 0.4180 +vt 0.4176 0.4140 +vt 0.8830 0.0000 +vt 0.8890 0.0000 +vt 0.8923 0.0093 +vt 0.8923 0.0093 +vt 0.8923 0.0033 +vt 0.9016 0.0000 +vt 0.2211 0.2191 +vt 0.2168 0.2149 +vt 0.2211 0.2060 +vt 0.8923 0.1588 +vt 0.8923 0.1542 +vt 0.9016 0.1542 +vt 0.3211 0.1068 +vt 0.3244 0.1036 +vt 0.3277 0.1003 +vt 0.8957 0.1542 +vt 0.8923 0.1496 +vt 0.9016 0.3007 +vt 0.8954 0.3007 +vt 0.8923 0.2848 +vt 0.8633 0.4364 +vt 0.8633 0.4303 +vt 0.8727 0.4252 +vt 0.4176 0.0112 +vt 0.4238 0.0051 +vt 0.4289 0.0158 +vt 0.3033 0.8702 +vt 0.3033 0.8642 +vt 0.3126 0.8590 +vt 0.8355 0.0112 +vt 0.8416 0.0051 +vt 0.8467 0.0158 +vt 0.9638 0.7071 +vt 0.9576 0.7071 +vt 0.9544 0.6913 +vt 0.3126 1.0000 +vt 0.3064 1.0000 +vt 0.3033 0.9888 +vt 0.5421 0.7968 +vt 0.5421 0.7882 +vt 0.5515 0.7810 +vt 0.8467 0.1835 +vt 0.8467 0.1921 +vt 0.8355 0.1882 +vt 0.5515 0.9220 +vt 0.5455 0.9220 +vt 0.5421 0.9127 +vt 0.9544 0.5754 +vt 0.9544 0.5695 +vt 0.9638 0.5661 +vt 0.7528 0.1062 +vt 0.7486 0.1020 +vt 0.7528 0.0931 +vt 0.9741 0.0000 +vt 0.9803 0.0000 +vt 0.9834 0.0112 +vt 0.4966 0.7968 +vt 0.4966 0.7882 +vt 0.5059 0.7810 +vt 0.6434 0.0158 +vt 0.6434 0.0072 +vt 0.6546 0.0112 +vt 0.6599 0.7421 +vt 0.6599 0.7381 +vt 0.6693 0.7375 +vt 0.7415 0.0973 +vt 0.7455 0.1013 +vt 0.7462 0.1085 +vt 0.5059 0.9252 +vt 0.4997 0.9252 +vt 0.4966 0.9186 +vt 0.9834 0.2771 +vt 0.9834 0.2857 +vt 0.9741 0.2929 +vt 0.7462 0.2965 +vt 0.7462 0.3050 +vt 0.7349 0.3011 +vt 0.6693 0.8862 +vt 0.6631 0.8862 +vt 0.6599 0.8750 +vt 0.9834 0.1441 +vt 0.9834 0.1480 +vt 0.9741 0.1487 +vt 0.6480 0.2150 +vt 0.6440 0.2110 +vt 0.6434 0.2038 +vt 0.9803 0.1487 +vt 0.9834 0.1553 +vt 0.9472 0.1487 +vt 0.9410 0.1487 +vt 0.9379 0.1441 +vt 0.9379 0.1553 +vt 0.9379 0.1497 +vt 0.7628 0.6290 +vt 0.7628 0.6346 +vt 0.7581 0.6401 +vt 0.7055 0.8750 +vt 0.7055 0.8811 +vt 0.6962 0.8862 +vt 0.6712 0.7263 +vt 0.6651 0.7323 +vt 0.6599 0.7216 +vt 0.9472 0.2929 +vt 0.9410 0.2929 +vt 0.9379 0.2771 +vt 0.5421 0.9186 +vt 0.5421 0.9242 +vt 0.5328 0.9252 +vt 0.6599 0.5337 +vt 0.6599 0.5281 +vt 0.6646 0.5225 +vt 0.6962 0.7375 +vt 0.7024 0.7375 +vt 0.7055 0.7421 +vt 0.5328 0.7810 +vt 0.5390 0.7810 +vt 0.5421 0.7968 +vt 0.9379 0.0112 +vt 0.9379 0.0051 +vt 0.9472 0.0000 +vt 0.7515 0.4364 +vt 0.7576 0.4303 +vt 0.7628 0.4410 +vt 0.5877 0.9127 +vt 0.5877 0.9187 +vt 0.5784 0.9220 +vt 0.4361 0.7181 +vt 0.4421 0.7181 +vt 0.4455 0.7273 +vt 0.9907 0.5661 +vt 0.9967 0.5661 +vt 1.0000 0.5754 +vt 0.4455 0.8432 +vt 0.4455 0.8518 +vt 0.4342 0.8479 +vt 0.5784 0.7810 +vt 0.5846 0.7810 +vt 0.5877 0.7968 +vt 0.3488 0.9888 +vt 0.3488 0.9949 +vt 0.3395 1.0000 +vt 0.3146 0.7293 +vt 0.3084 0.7232 +vt 0.3192 0.7181 +vt 0.3395 0.8590 +vt 0.3457 0.8590 +vt 0.3488 0.8702 +vt 1.0000 0.6913 +vt 1.0000 0.6999 +vt 0.9907 0.7071 +vt 0.6434 0.4094 +vt 0.6434 0.4180 +vt 0.6321 0.4140 +vt 0.8995 0.4252 +vt 0.9057 0.4252 +vt 0.9089 0.4364 +vt 0.9379 0.2848 +vt 0.9379 0.2934 +vt 0.9285 0.3007 +vt 0.9285 0.1542 +vt 0.9345 0.1542 +vt 0.9379 0.1588 +vt 0.9379 0.1496 +vt 0.9379 0.1542 +vt 0.5422 0.3249 +vt 0.5389 0.3216 +vt 0.5356 0.3184 +vt 0.4355 0.2191 +vt 0.4313 0.2149 +vt 0.4355 0.2060 +vt 0.9285 0.0000 +vt 0.9345 0.0000 +vt 0.9379 0.0093 +vt 0.8467 0.0093 +vt 0.8467 0.0033 +vt 0.8561 0.0000 +vt 0.8561 0.3007 +vt 0.8499 0.3007 +vt 0.8467 0.2848 +vt 0.9089 0.7147 +vt 0.9089 0.7207 +vt 0.8995 0.7258 +vt 0.6321 0.0112 +vt 0.6382 0.0051 +vt 0.6434 0.0158 +vt 0.9907 0.7181 +vt 0.9969 0.7181 +vt 1.0000 0.7293 +vt 0.9544 0.8432 +vt 0.9544 0.8518 +vt 0.9451 0.8590 +vt 0.8467 0.3829 +vt 0.8467 0.3915 +vt 0.8355 0.3875 +vt 0.9451 0.7181 +vt 0.9511 0.7181 +vt 0.9544 0.7273 +vt 1.0000 0.5569 +vt 1.0000 0.5628 +vt 0.9907 0.5661 +vt 0.7528 0.3056 +vt 0.7486 0.3014 +vt 0.7528 0.2925 +vt 0.8355 0.2105 +vt 0.8416 0.2045 +vt 0.8467 0.2152 +vt 0.9907 0.4252 +vt 0.9969 0.4252 +vt 1.0000 0.4410 +vt 1.0000 0.8479 +vt 1.0000 0.8539 +vt 0.9907 0.8590 +vt 0.2920 0.4364 +vt 0.2981 0.4303 +vt 0.3033 0.4410 +vt 0.8446 0.6245 +vt 0.8508 0.6245 +vt 0.8539 0.6357 +vt 0.8083 0.9094 +vt 0.8083 0.9180 +vt 0.7990 0.9252 +vt 0.6466 0.9237 +vt 0.6466 0.9296 +vt 0.6373 0.9329 +vt 0.3033 0.7166 +vt 0.3033 0.7225 +vt 0.2939 0.7258 +vt 0.7990 0.6245 +vt 0.8050 0.6245 +vt 0.8083 0.6338 +vt 0.6466 0.7741 +vt 0.6466 0.7787 +vt 0.6373 0.7787 +vt 0.1524 0.7258 +vt 0.1477 0.7258 +vt 0.1431 0.7258 +vt 0.6432 0.7787 +vt 0.6466 0.7834 +vt 0.6373 0.6323 +vt 0.6435 0.6323 +vt 0.6466 0.6481 +vt 0.8539 0.9140 +vt 0.8539 0.9201 +vt 0.8446 0.9252 +vt 0.0159 0.7258 +vt 0.0073 0.7258 +vt 0.0113 0.7147 +vt 0.4872 0.7810 +vt 0.4932 0.7810 +vt 0.4966 0.7876 +vt 0.9089 0.8657 +vt 0.9089 0.8699 +vt 0.8995 0.8723 +vt 0.3099 0.5782 +vt 0.3056 0.5740 +vt 0.3099 0.5651 +vt 0.9544 0.7023 +vt 0.9544 0.7109 +vt 0.9451 0.7181 +vt 0.4397 0.4364 +vt 0.4459 0.4303 +vt 0.4510 0.4410 +vt 0.8995 0.7258 +vt 0.9057 0.7258 +vt 0.9089 0.7370 +vt 0.9451 0.5716 +vt 0.9511 0.5716 +vt 0.9544 0.5763 +vt 0.9544 0.5670 +vt 0.9544 0.5716 +vt 0.4510 0.5670 +vt 0.4510 0.5716 +vt 0.4510 0.5763 +vt 0.9451 0.4252 +vt 0.9513 0.4252 +vt 0.9544 0.4410 +vt 0.4966 0.9163 +vt 0.4966 0.9224 +vt 0.4872 0.9275 +vt 0.4510 0.7023 +vt 0.4510 0.7109 +vt 0.4397 0.7069 +vt 0.7417 0.7375 +vt 0.7477 0.7375 +vt 0.7511 0.7467 +vt 0.2867 0.8653 +vt 0.2867 0.8712 +vt 0.2774 0.8746 +vt 0.5917 0.6323 +vt 0.5977 0.6323 +vt 0.6010 0.6416 +vt 0.6010 0.7718 +vt 0.6010 0.7777 +vt 0.5917 0.7810 +vt 0.2774 0.7258 +vt 0.2834 0.7258 +vt 0.2867 0.7351 +vt 0.1956 0.8653 +vt 0.1956 0.8712 +vt 0.1862 0.8746 +vt 0.2411 0.8653 +vt 0.2411 0.8712 +vt 0.2318 0.8746 +vt 0.4604 0.7810 +vt 0.4544 0.7810 +vt 0.4510 0.7718 +vt 0.1862 0.7258 +vt 0.1922 0.7258 +vt 0.1956 0.7351 +vt 0.2318 0.7258 +vt 0.2378 0.7258 +vt 0.2411 0.7351 +vt 0.7511 0.8769 +vt 0.7511 0.8829 +vt 0.7417 0.8862 +vt 0.4510 0.6416 +vt 0.4510 0.6356 +vt 0.4604 0.6323 +vn 0.7936 0.5914 0.1429 +vn 0.7936 0.5914 -0.1429 +vn 0.5914 0.7936 -0.1429 +vn 0.5914 0.7936 0.1429 +vn -0.6945 -0.7033 0.1517 +vn -0.6945 -0.7033 -0.1517 +vn -0.5914 -0.7855 -0.1820 +vn -0.5914 -0.7855 0.1820 +vn -0.7936 -0.5914 0.1429 +vn -0.7936 -0.5914 -0.1429 +vn -0.5914 -0.7936 -0.1429 +vn -0.5914 -0.7936 0.1429 +vn 0.1429 0.9793 0.1429 +vn 0.1429 0.9793 -0.1429 +vn -0.1373 0.9736 -0.1820 +vn -0.1373 0.9736 0.1820 +vn 0.6945 0.7033 0.1517 +vn 0.6945 0.7033 -0.1517 +vn -0.1373 -0.9736 0.1820 +vn -0.1373 -0.9736 -0.1820 +vn 0.1373 -0.9736 -0.1820 +vn 0.1373 -0.9736 0.1820 +vn -0.1067 0.0442 0.9933 +vn -0.0774 -0.1869 0.9793 +vn 0.1067 -0.0442 0.9933 +vn 0.0774 0.1869 0.9793 +vn 0.9736 -0.1373 0.1820 +vn 0.9736 -0.1373 -0.1820 +vn 0.9736 0.1373 -0.1820 +vn 0.9736 0.1373 0.1820 +vn -0.0442 -0.1067 0.9933 +vn 0.2022 0.0000 0.9793 +vn 0.1210 0.1210 0.9852 +vn -0.0442 0.1067 0.9933 +vn -0.9736 0.1373 0.1820 +vn -0.9736 0.1373 -0.1820 +vn -0.9736 -0.1373 -0.1820 +vn -0.9736 -0.1373 0.1820 +vn 0.1373 0.9736 0.1820 +vn 0.1373 0.9736 -0.1820 +vn 0.5914 -0.7936 0.1429 +vn 0.5914 -0.7936 -0.1429 +vn 0.7855 -0.5914 -0.1820 +vn 0.7855 -0.5914 0.1820 +vn -0.5914 0.7855 0.1820 +vn -0.5914 0.7855 -0.1820 +vn -0.7936 0.5914 -0.1429 +vn -0.7936 0.5914 0.1429 +vn 0.0701 0.9886 0.1333 +vn 0.0701 0.9886 -0.1333 +vn 0.5914 -0.7855 0.1820 +vn 0.5914 -0.7855 -0.1820 +vn 0.7936 -0.5914 -0.1429 +vn 0.7936 -0.5914 0.1429 +vn 0.0000 0.2022 0.9793 +vn -0.1067 -0.0442 0.9933 +vn 0.9793 0.1429 -0.1429 +vn 0.9793 0.1429 0.1429 +vn -0.7855 -0.5914 0.1820 +vn -0.7855 -0.5914 -0.1820 +vn -0.6494 -0.7486 -0.1333 +vn -0.6494 -0.7486 0.1333 +vn 0.7855 0.5914 0.1820 +vn 0.7855 0.5914 -0.1820 +vn 0.7033 0.6945 -0.1517 +vn 0.7033 0.6945 0.1517 +vn -0.1210 -0.1210 0.9852 +vn 0.0442 -0.1067 0.9933 +vn 0.1429 0.1429 0.9793 +vn -0.5914 0.7936 0.1429 +vn -0.5914 0.7936 -0.1429 +vn 0.0442 0.1067 0.9933 +vn -0.2022 0.0000 0.9793 +vn -0.0701 -0.9886 0.1333 +vn -0.0701 -0.9886 -0.1333 +vn -0.7033 -0.6945 -0.1517 +vn -0.7033 -0.6945 0.1517 +vn 0.1067 0.0442 0.9933 +vn 0.0000 -0.2022 0.9793 +vn -0.1067 0.0442 -0.9933 +vn 0.0774 0.1869 -0.9793 +vn 0.1067 -0.0442 -0.9933 +vn -0.0774 -0.1869 -0.9793 +vn 0.5914 0.7855 -0.1820 +vn 0.5914 0.7855 0.1820 +vn -0.7855 0.5914 -0.1820 +vn -0.7855 0.5914 0.1820 +vn 0.6494 0.7486 -0.1333 +vn 0.6494 0.7486 0.1333 +vn -0.0442 -0.1067 -0.9933 +vn -0.0442 0.1067 -0.9933 +vn 0.1210 0.1210 -0.9852 +vn 0.2022 0.0000 -0.9793 +vn 0.1067 0.0442 -0.9933 +vn 0.0000 -0.2022 -0.9793 +vn 0.0442 0.1067 -0.9933 +vn 0.0442 -0.1067 -0.9933 +vn -0.2022 0.0000 -0.9793 +vn 0.1429 0.1429 -0.9793 +vn -0.1210 -0.1210 -0.9852 +vn -0.1067 -0.0442 -0.9933 +vn 0.0000 0.2022 -0.9793 +vn -0.3939 0.5958 0.6999 +vn 0.0000 0.8165 0.5773 +vn 0.0000 0.9897 0.1428 +vn 0.3939 0.5958 0.6999 +vn -0.9897 0.0000 0.1428 +vn -0.8165 0.0000 0.5773 +vn -0.5958 0.3939 0.6999 +vn -0.5958 -0.3939 0.6999 +vn 0.0000 -0.9897 0.1428 +vn 0.0000 -0.8165 0.5773 +vn -0.3939 -0.5958 0.6999 +vn 0.3939 -0.5958 0.6999 +vn 0.5958 0.3939 0.6999 +vn 0.8165 0.0000 0.5773 +vn 0.9897 0.0000 0.1428 +vn 0.5958 -0.3939 0.6999 +vn -0.8891 0.3683 0.2718 +vn -0.6227 0.2579 0.7387 +vn -0.0997 0.6339 0.7669 +vn -0.5188 -0.3777 0.7669 +vn -0.4820 -0.5001 0.7194 +vn -0.5650 -0.5650 0.6012 +vn -0.6998 -0.6998 0.1435 +vn -0.5001 -0.4820 0.7194 +vn 0.6339 -0.0997 0.7669 +vn 0.2579 -0.6227 0.7387 +vn 0.3683 -0.8891 0.2718 +vn -0.3777 -0.5188 0.7669 +vn 0.1428 0.6999 0.6999 +vn 0.5773 0.5773 0.5773 +vn 0.6999 0.6999 0.1428 +vn 0.6999 0.1428 0.6999 +vn 0.5188 0.3777 0.7669 +vn 0.6227 -0.2579 0.7387 +vn 0.8891 -0.3683 0.2718 +vn 0.0997 -0.6339 0.7669 +vn 0.6998 0.6998 0.1435 +vn 0.5650 0.5650 0.6012 +vn 0.5001 0.4820 0.7194 +vn 0.4820 0.5001 0.7194 +vn -0.8891 -0.3683 0.2718 +vn -0.6227 -0.2579 0.7387 +vn -0.5188 0.3777 0.7669 +vn -0.0997 -0.6339 0.7669 +vn -0.3777 0.5188 0.7669 +vn 0.2579 0.6227 0.7387 +vn 0.3683 0.8891 0.2718 +vn 0.6339 0.0997 0.7669 +vn -0.3683 -0.8891 0.2718 +vn -0.2579 -0.6227 0.7387 +vn -0.6339 -0.0997 0.7669 +vn 0.3777 -0.5188 0.7669 +vn -0.3683 0.8891 0.2718 +vn -0.2579 0.6227 0.7387 +vn 0.3777 0.5188 0.7669 +vn -0.6339 0.0997 0.7669 +vn 0.0997 0.6339 0.7669 +vn 0.6227 0.2579 0.7387 +vn 0.8891 0.3683 0.2718 +vn 0.5188 -0.3777 0.7669 +vn -0.0745 -0.7240 0.6857 +vn -0.3177 -0.7669 0.5575 +vn -0.3807 -0.9192 0.1005 +vn -0.4593 -0.5646 0.6857 +vn 0.0745 0.7240 0.6857 +vn 0.3177 0.7669 0.5575 +vn 0.3807 0.9192 0.1005 +vn 0.4593 0.5646 0.6857 +vn 0.3807 0.9192 -0.1005 +vn 0.3177 0.7669 -0.5575 +vn 0.0745 0.7240 -0.6857 +vn 0.4593 0.5646 -0.6857 +vn 0.0997 -0.6339 -0.7669 +vn 0.6227 -0.2579 -0.7387 +vn 0.8891 -0.3683 -0.2718 +vn 0.5188 0.3777 -0.7669 +vn -0.4593 -0.5646 -0.6857 +vn -0.3177 -0.7669 -0.5575 +vn -0.3807 -0.9192 -0.1005 +vn -0.0745 -0.7240 -0.6857 +vn -0.8891 0.3683 -0.2718 +vn -0.6227 0.2579 -0.7387 +vn -0.5188 -0.3777 -0.7669 +vn -0.0997 0.6339 -0.7669 +vn -0.3939 -0.5958 -0.6999 +vn 0.0000 -0.8165 -0.5773 +vn 0.0000 -0.9897 -0.1428 +vn 0.3939 -0.5958 -0.6999 +vn 0.0997 0.6339 -0.7669 +vn 0.6227 0.2579 -0.7387 +vn 0.5188 -0.3777 -0.7669 +vn 0.8891 0.3683 -0.2718 +vn -0.6339 0.0997 -0.7669 +vn -0.2579 0.6227 -0.7387 +vn 0.3777 0.5188 -0.7669 +vn -0.3683 0.8891 -0.2718 +vn 0.6998 0.6998 -0.1435 +vn 0.5650 0.5650 -0.6012 +vn 0.4820 0.5001 -0.7194 +vn 0.5001 0.4820 -0.7194 +vn 0.5958 0.3939 -0.6999 +vn 0.8165 0.0000 -0.5773 +vn 0.5958 -0.3939 -0.6999 +vn 0.9897 0.0000 -0.1428 +vn -0.3683 -0.8891 -0.2718 +vn -0.2579 -0.6227 -0.7387 +vn 0.3777 -0.5188 -0.7669 +vn -0.6339 -0.0997 -0.7669 +vn 0.3683 -0.8891 -0.2718 +vn 0.2579 -0.6227 -0.7387 +vn 0.6339 -0.0997 -0.7669 +vn -0.3777 -0.5188 -0.7669 +vn -0.9897 0.0000 -0.1428 +vn -0.8165 0.0000 -0.5773 +vn -0.5958 -0.3939 -0.6999 +vn -0.5958 0.3939 -0.6999 +vn -0.3777 0.5188 -0.7669 +vn 0.2579 0.6227 -0.7387 +vn 0.6339 0.0997 -0.7669 +vn 0.3683 0.8891 -0.2718 +vn -0.0997 -0.6339 -0.7669 +vn -0.6227 -0.2579 -0.7387 +vn -0.5188 0.3777 -0.7669 +vn -0.8891 -0.3683 -0.2718 +vn 0.3939 0.5958 -0.6999 +vn 0.0000 0.8165 -0.5773 +vn 0.0000 0.9897 -0.1428 +vn -0.3939 0.5958 -0.6999 +vn 0.6999 0.6999 -0.1428 +vn 0.5773 0.5773 -0.5773 +vn 0.1428 0.6999 -0.6999 +vn 0.6999 0.1428 -0.6999 +vn -0.6998 -0.6998 -0.1435 +vn -0.5650 -0.5650 -0.6012 +vn -0.4820 -0.5001 -0.7194 +vn -0.5001 -0.4820 -0.7194 +usemtl Material.001 +s 1 +f 22/1/1 337/2/2 359/3/3 3/4/4 +f 36/5/5 323/6/6 316/7/7 45/8/8 +f 9/9/9 353/10/10 346/11/11 15/12/12 +f 50/13/13 309/14/14 331/15/15 29/16/16 +f 65/17/17 297/18/18 288/19/3 73/20/4 +f 79/21/19 282/22/20 303/23/21 59/24/22 +f 157/25/23 163/26/24 170/27/25 177/28/26 +f 99/29/27 260/30/28 276/31/29 87/32/30 +f 108/33/31 115/34/32 121/35/33 129/36/34 +f 128/37/35 233/38/36 254/39/37 106/40/38 +f 134/41/39 226/42/40 220/43/15 141/44/16 +f 149/45/41 213/46/42 227/47/43 136/48/44 +f 85/49/45 275/50/46 268/51/47 94/52/48 +f 176/53/49 183/54/50 205/55/15 155/56/16 +f 107/57/51 253/58/52 248/59/53 113/60/54 +f 58/61/25 66/62/33 72/63/55 80/64/56 +f 43/65/27 318/66/28 310/67/57 52/68/58 +f 156/69/59 204/70/60 197/71/61 164/72/62 +f 142/73/59 219/74/60 211/75/11 148/76/12 +f 92/77/9 267/78/10 261/79/7 101/80/8 +f 57/81/63 302/82/64 295/83/65 64/84/66 +f 31/85/23 37/86/67 44/87/68 51/88/69 +f 1/89/70 358/90/71 351/91/47 8/92/48 +f 114/93/1 247/94/2 240/95/65 122/96/66 +f 86/97/72 93/98/73 100/99/68 +f 162/100/74 199/101/75 190/102/21 171/103/22 +f 30/104/59 330/105/60 324/106/76 38/107/77 +f 135/108/78 143/109/23 150/110/79 +f 206/111/80 185/112/81 191/113/82 198/114/83 +f 120/115/17 239/116/18 234/117/84 127/118/85 +f 71/119/70 290/120/71 283/121/86 78/122/87 +f 169/123/63 192/124/64 184/125/88 178/126/89 +f 16/127/41 345/128/42 338/129/53 24/130/54 +f 255/131/90 232/132/91 241/133/92 246/134/93 +f 225/135/94 212/136/95 218/137/80 +f 274/138/96 262/139/97 269/140/98 +f 332/141/80 311/142/99 317/143/97 325/144/100 +f 304/145/82 281/146/101 289/147/102 296/148/92 +f 360/149/102 339/150/93 344/151/95 352/152/98 +f 1/89/70 4/153/103 5/154/104 7/155/105 +f 2/156/55 6/157/106 5/158/104 4/159/103 +f 3/4/4 7/160/105 5/161/104 6/162/106 +f 8/92/48 11/163/107 12/164/108 14/165/109 +f 9/9/9 13/166/110 12/167/108 11/168/107 +f 10/169/73 14/170/109 12/171/108 13/172/110 +f 15/12/12 18/173/111 19/174/112 21/175/113 +f 16/127/41 20/176/114 19/177/112 18/178/111 +f 17/179/79 21/180/113 19/181/112 20/182/114 +f 22/1/1 25/183/115 26/184/116 28/185/117 +f 23/186/32 27/187/118 26/188/116 25/189/115 +f 24/130/54 28/190/117 26/191/116 27/192/118 +f 29/16/16 32/193/119 33/194/120 35/195/121 +f 30/104/59 34/196/122 33/197/120 32/198/119 +f 31/85/23 35/199/121 33/200/120 34/201/122 +f 36/5/5 39/202/123 40/203/124 42/204/125 +f 37/86/67 41/205/126 40/206/124 39/207/123 +f 38/107/77 42/204/125 40/208/124 41/209/126 +f 43/65/27 46/210/127 47/211/128 49/212/129 +f 44/87/68 48/213/130 47/214/128 46/215/127 +f 45/8/8 49/216/129 47/217/128 48/218/130 +f 50/13/13 53/219/131 54/220/132 56/221/133 +f 51/88/69 55/222/134 54/223/132 53/224/131 +f 52/68/58 56/225/133 54/226/132 55/227/134 +f 57/81/63 60/228/135 61/229/136 63/230/137 +f 58/61/25 62/231/138 61/232/136 60/233/135 +f 59/24/22 63/234/137 61/235/136 62/236/138 +f 64/84/66 67/237/139 68/238/140 70/239/141 +f 65/17/17 69/240/142 68/241/140 67/237/139 +f 66/62/33 70/242/141 68/243/140 69/244/142 +f 71/119/70 74/245/103 75/246/104 77/247/105 +f 72/63/55 76/248/106 75/249/104 74/250/103 +f 73/20/4 77/251/105 75/252/104 76/253/106 +f 78/122/87 81/254/143 82/255/144 84/256/145 +f 79/21/19 83/257/146 82/258/144 81/259/143 +f 80/64/56 84/260/145 82/261/144 83/262/146 +f 85/49/45 88/263/147 89/264/148 91/265/149 +f 86/97/72 90/266/150 89/267/148 88/268/147 +f 87/32/30 91/269/149 89/270/148 90/271/150 +f 92/77/9 95/272/110 96/273/108 98/274/107 +f 93/98/73 97/275/109 96/276/108 95/277/110 +f 94/52/48 98/278/107 96/279/108 97/280/109 +f 99/29/27 102/281/127 103/282/128 105/283/129 +f 100/99/68 104/284/130 103/285/128 102/286/127 +f 101/80/8 105/287/129 103/288/128 104/289/130 +f 106/40/38 109/290/151 110/291/152 112/292/153 +f 107/57/51 111/293/154 110/294/152 109/295/151 +f 108/33/31 112/296/153 110/297/152 111/298/154 +f 113/60/54 116/299/117 117/300/116 119/301/118 +f 114/93/1 118/302/115 117/303/116 116/304/117 +f 115/34/32 119/305/118 117/306/116 118/307/115 +f 120/115/17 123/308/142 124/309/140 126/310/139 +f 121/35/33 125/311/141 124/312/140 123/313/142 +f 122/96/66 126/310/139 124/314/140 125/315/141 +f 127/118/85 130/316/155 131/317/156 133/318/157 +f 128/37/35 132/319/158 131/320/156 130/321/155 +f 129/36/34 133/322/157 131/323/156 132/324/158 +f 134/41/39 137/325/159 138/326/160 140/327/161 +f 135/108/78 139/328/162 138/329/160 137/330/159 +f 136/48/44 140/331/161 138/332/160 139/333/162 +f 141/44/16 144/334/119 145/335/120 147/336/121 +f 142/73/59 146/337/122 145/338/120 144/339/119 +f 143/109/23 147/340/121 145/341/120 146/342/122 +f 148/76/12 151/343/111 152/344/112 154/345/113 +f 149/45/41 153/346/114 152/347/112 151/348/111 +f 150/110/79 154/349/113 152/350/112 153/351/114 +f 155/56/16 158/352/119 159/353/120 161/354/121 +f 156/69/59 160/355/122 159/356/120 158/357/119 +f 157/25/23 161/358/121 159/359/120 160/360/122 +f 162/100/74 165/361/163 166/362/164 168/363/165 +f 163/26/24 167/364/166 166/365/164 165/366/163 +f 164/72/62 168/367/165 166/368/164 167/369/166 +f 169/123/63 172/370/135 173/371/136 175/372/137 +f 170/27/25 174/373/138 173/374/136 172/375/135 +f 171/103/22 175/376/137 173/377/136 174/378/138 +f 176/53/49 179/379/167 180/380/168 182/381/169 +f 177/28/26 181/382/170 180/383/168 179/384/167 +f 178/126/89 182/381/169 180/385/168 181/386/170 +f 183/54/50 186/387/171 187/388/172 189/389/173 +f 184/125/88 188/390/174 187/391/172 186/387/171 +f 185/112/81 189/392/173 187/393/172 188/394/174 +f 190/102/21 193/395/175 194/396/176 196/397/177 +f 191/113/82 195/398/178 194/399/176 193/400/175 +f 192/124/64 196/401/177 194/402/176 195/403/178 +f 197/71/61 200/404/179 201/405/180 203/406/181 +f 198/114/83 202/407/182 201/408/180 200/409/179 +f 199/101/75 203/410/181 201/411/180 202/412/182 +f 204/70/60 207/413/183 208/414/184 210/415/185 +f 205/55/15 209/416/186 208/417/184 207/418/183 +f 206/111/80 210/419/185 208/420/184 209/421/186 +f 211/75/11 214/422/187 215/423/188 217/424/189 +f 212/136/95 216/425/190 215/426/188 214/427/187 +f 213/46/42 217/428/189 215/429/188 216/430/190 +f 218/137/80 221/431/185 222/432/184 224/433/186 +f 219/74/60 223/434/183 222/435/184 221/436/185 +f 220/43/15 224/437/186 222/438/184 223/439/183 +f 225/135/94 228/440/191 229/441/192 231/442/193 +f 226/42/40 230/443/194 229/444/192 228/445/191 +f 227/47/43 231/446/193 229/447/192 230/448/194 +f 232/132/91 235/449/195 236/450/196 238/451/197 +f 233/38/36 237/452/198 236/453/196 235/454/195 +f 234/117/84 238/455/197 236/456/196 237/457/198 +f 239/116/18 242/458/199 243/459/200 245/460/201 +f 240/95/65 244/461/202 243/462/200 242/458/199 +f 241/133/92 245/463/201 243/464/200 244/465/202 +f 246/134/93 249/466/203 250/467/204 252/468/205 +f 247/94/2 251/469/206 250/470/204 249/471/203 +f 248/59/53 252/472/205 250/473/204 251/474/206 +f 253/58/52 256/475/207 257/476/208 259/477/209 +f 254/39/37 258/478/210 257/479/208 256/480/207 +f 255/131/90 259/481/209 257/482/208 258/483/210 +f 260/30/28 263/484/211 264/485/212 266/486/213 +f 261/79/7 265/487/214 264/488/212 263/489/211 +f 262/139/97 266/490/213 264/491/212 265/492/214 +f 267/78/10 270/493/215 271/494/216 273/495/217 +f 268/51/47 272/496/218 271/497/216 270/498/215 +f 269/140/98 273/499/217 271/500/216 272/501/218 +f 274/138/96 277/502/219 278/503/220 280/504/221 +f 275/50/46 279/505/222 278/506/220 277/507/219 +f 276/31/29 280/508/221 278/509/220 279/510/222 +f 281/146/101 284/511/223 285/512/224 287/513/225 +f 282/22/20 286/514/226 285/515/224 284/516/223 +f 283/121/86 287/517/225 285/518/224 286/519/226 +f 288/19/3 291/520/227 292/521/228 294/522/229 +f 289/147/102 293/523/230 292/524/228 291/525/227 +f 290/120/71 294/526/229 292/527/228 293/528/230 +f 295/83/65 298/529/202 299/530/200 301/531/199 +f 296/148/92 300/532/201 299/533/200 298/534/202 +f 297/18/18 301/531/199 299/535/200 300/536/201 +f 302/82/64 305/537/177 306/538/176 308/539/178 +f 303/23/21 307/540/175 306/541/176 305/542/177 +f 304/145/82 308/543/178 306/544/176 307/545/175 +f 309/14/14 312/546/231 313/547/232 315/548/233 +f 310/67/57 314/549/234 313/550/232 312/551/231 +f 311/142/99 315/552/233 313/553/232 314/554/234 +f 316/7/7 319/555/214 320/556/212 322/557/211 +f 317/143/97 321/558/213 320/559/212 319/560/214 +f 318/66/28 322/561/211 320/562/212 321/563/213 +f 323/6/6 326/564/235 327/565/236 329/566/237 +f 324/106/76 328/567/238 327/568/236 326/564/235 +f 325/144/100 329/569/237 327/570/236 328/571/238 +f 330/105/60 333/572/183 334/573/184 336/574/185 +f 331/15/15 335/575/186 334/576/184 333/577/183 +f 332/141/80 336/578/185 334/579/184 335/580/186 +f 337/2/2 340/581/206 341/582/204 343/583/203 +f 338/129/53 342/584/205 341/585/204 340/586/206 +f 339/150/93 343/587/203 341/588/204 342/589/205 +f 344/151/95 347/590/190 348/591/188 350/592/187 +f 345/128/42 349/593/189 348/594/188 347/595/190 +f 346/11/11 350/596/187 348/597/188 349/598/189 +f 351/91/47 354/599/218 355/600/216 357/601/215 +f 352/152/98 356/602/217 355/603/216 354/604/218 +f 353/10/10 357/605/215 355/606/216 356/607/217 +f 358/90/71 361/608/229 362/609/228 364/610/230 +f 359/3/3 363/611/227 362/612/228 361/613/229 +f 360/149/102 364/614/230 362/615/228 363/616/227 +f 101/80/8 261/79/7 263/489/211 105/287/129 +f 105/283/129 263/484/211 260/30/28 99/29/27 +f 52/68/58 310/67/57 312/551/231 56/225/133 +f 56/221/133 312/546/231 309/14/14 50/13/13 +f 94/52/48 268/51/47 270/498/215 98/278/107 +f 98/274/107 270/493/215 267/78/10 92/77/9 +f 45/8/8 316/7/7 322/557/211 49/216/129 +f 49/212/129 322/561/211 318/66/28 43/65/27 +f 38/107/77 324/106/76 326/564/235 42/204/125 +f 42/204/125 326/564/235 323/6/6 36/5/5 +f 330/105/60 30/104/59 32/198/119 333/572/183 +f 333/577/183 32/193/119 29/16/16 331/15/15 +f 155/56/16 205/55/15 207/418/183 158/352/119 +f 158/357/119 207/413/183 204/70/60 156/69/59 +f 106/40/38 254/39/37 256/480/207 109/290/151 +f 109/295/151 256/475/207 253/58/52 107/57/51 +f 178/126/89 184/125/88 186/387/171 182/381/169 +f 182/381/169 186/387/171 183/54/50 176/53/49 +f 24/130/54 338/129/53 340/586/206 28/190/117 +f 28/185/117 340/581/206 337/2/2 22/1/1 +f 122/96/66 240/95/65 242/458/199 126/310/139 +f 126/310/139 242/458/199 239/116/18 120/115/17 +f 73/20/4 288/19/3 294/522/229 77/251/105 +f 77/247/105 294/526/229 290/120/71 71/119/70 +f 171/103/22 190/102/21 196/397/177 175/376/137 +f 175/372/137 196/401/177 192/124/64 169/123/63 +f 199/101/75 162/100/74 168/363/165 203/410/181 +f 203/406/181 168/367/165 164/72/62 197/71/61 +f 184/125/88 192/124/64 195/403/178 188/390/174 +f 188/394/174 195/398/178 191/113/82 185/112/81 +f 211/75/11 219/74/60 221/436/185 214/422/187 +f 214/427/187 221/431/185 218/137/80 212/136/95 +f 227/47/43 213/46/42 216/430/190 231/446/193 +f 231/442/193 216/425/190 212/136/95 225/135/94 +f 240/95/65 247/94/2 249/471/203 244/461/202 +f 244/465/202 249/466/203 246/134/93 241/133/92 +f 254/39/37 233/38/36 235/454/195 258/478/210 +f 258/483/210 235/449/195 232/132/91 255/131/90 +f 268/51/47 275/50/46 277/507/219 272/496/218 +f 272/501/218 277/502/219 274/138/96 269/140/98 +f 261/79/7 267/78/10 273/495/217 265/487/214 +f 265/492/214 273/499/217 269/140/98 262/139/97 +f 283/121/86 290/120/71 293/528/230 287/517/225 +f 287/513/225 293/523/230 289/147/102 281/146/101 +f 310/67/57 318/66/28 321/563/213 314/549/234 +f 314/554/234 321/558/213 317/143/97 311/142/99 +f 331/15/15 309/14/14 315/548/233 335/575/186 +f 335/580/186 315/552/233 311/142/99 332/141/80 +f 338/129/53 345/128/42 347/595/190 342/584/205 +f 342/589/205 347/590/190 344/151/95 339/150/93 +f 324/106/76 330/105/60 336/574/185 328/567/238 +f 328/571/238 336/578/185 332/141/80 325/144/100 +f 10/169/73 2/156/55 4/159/103 14/170/109 +f 14/165/109 4/153/103 1/89/70 8/92/48 +f 17/179/79 10/169/73 13/172/110 21/180/113 +f 21/175/113 13/166/110 9/9/9 15/12/12 +f 23/186/32 17/179/79 20/182/114 27/187/118 +f 27/192/118 20/176/114 16/127/41 24/130/54 +f 2/156/55 23/186/32 25/189/115 6/157/106 +f 6/162/106 25/183/115 22/1/1 3/4/4 +f 37/86/67 31/85/23 34/201/122 41/205/126 +f 41/209/126 34/196/122 30/104/59 38/107/77 +f 44/87/68 37/86/67 39/207/123 48/213/130 +f 48/218/130 39/202/123 36/5/5 45/8/8 +f 51/88/69 44/87/68 46/215/127 55/222/134 +f 55/227/134 46/210/127 43/65/27 52/68/58 +f 31/85/23 51/88/69 53/224/131 35/199/121 +f 35/195/121 53/219/131 50/13/13 29/16/16 +f 66/62/33 58/61/25 60/233/135 70/242/141 +f 70/239/141 60/228/135 57/81/63 64/84/66 +f 72/63/55 66/62/33 69/244/142 76/248/106 +f 76/253/106 69/240/142 65/17/17 73/20/4 +f 80/64/56 72/63/55 74/250/103 84/260/145 +f 84/256/145 74/245/103 71/119/70 78/122/87 +f 58/61/25 80/64/56 83/262/146 62/231/138 +f 62/236/138 83/257/146 79/21/19 59/24/22 +f 93/98/73 86/97/72 88/268/147 97/275/109 +f 97/280/109 88/263/147 85/49/45 94/52/48 +f 100/99/68 93/98/73 95/277/110 104/284/130 +f 104/289/130 95/272/110 92/77/9 101/80/8 +f 86/97/72 100/99/68 102/286/127 90/266/150 +f 90/271/150 102/281/127 99/29/27 87/32/30 +f 115/34/32 108/33/31 111/298/154 119/305/118 +f 119/301/118 111/293/154 107/57/51 113/60/54 +f 121/35/33 115/34/32 118/307/115 125/311/141 +f 125/315/141 118/302/115 114/93/1 122/96/66 +f 129/36/34 121/35/33 123/313/142 133/322/157 +f 133/318/157 123/308/142 120/115/17 127/118/85 +f 108/33/31 129/36/34 132/324/158 112/296/153 +f 112/292/153 132/319/158 128/37/35 106/40/38 +f 143/109/23 135/108/78 137/330/159 147/340/121 +f 147/336/121 137/325/159 134/41/39 141/44/16 +f 150/110/79 143/109/23 146/342/122 154/349/113 +f 154/345/113 146/337/122 142/73/59 148/76/12 +f 135/108/78 150/110/79 153/351/114 139/328/162 +f 139/333/162 153/346/114 149/45/41 136/48/44 +f 163/26/24 157/25/23 160/360/122 167/364/166 +f 167/369/166 160/355/122 156/69/59 164/72/62 +f 170/27/25 163/26/24 165/366/163 174/373/138 +f 174/378/138 165/361/163 162/100/74 171/103/22 +f 177/28/26 170/27/25 172/375/135 181/382/170 +f 181/386/170 172/370/135 169/123/63 178/126/89 +f 157/25/23 177/28/26 179/384/167 161/358/121 +f 161/354/121 179/379/167 176/53/49 155/56/16 +f 148/76/12 211/75/11 217/424/189 151/343/111 +f 151/348/111 217/428/189 213/46/42 149/45/41 +f 275/50/46 85/49/45 91/265/149 279/505/222 +f 279/510/222 91/269/149 87/32/30 276/31/29 +f 226/42/40 134/41/39 140/327/161 230/443/194 +f 230/448/194 140/331/161 136/48/44 227/47/43 +f 141/44/16 220/43/15 223/439/183 144/334/119 +f 144/339/119 223/434/183 219/74/60 142/73/59 +f 59/24/22 303/23/21 305/542/177 63/234/137 +f 63/230/137 305/537/177 302/82/64 57/81/63 +f 3/4/4 359/3/3 361/613/229 7/160/105 +f 7/155/105 361/608/229 358/90/71 1/89/70 +f 78/122/87 283/121/86 286/519/226 81/254/143 +f 81/259/143 286/514/226 282/22/20 79/21/19 +f 127/118/85 234/117/84 237/457/198 130/316/155 +f 130/321/155 237/452/198 233/38/36 128/37/35 +f 297/18/18 65/17/17 67/237/139 301/531/199 +f 301/531/199 67/237/139 64/84/66 295/83/65 +f 247/94/2 114/93/1 116/304/117 251/469/206 +f 251/474/206 116/299/117 113/60/54 248/59/53 +f 353/10/10 9/9/9 11/168/107 357/605/215 +f 357/601/215 11/163/107 8/92/48 351/91/47 +f 15/12/12 346/11/11 349/598/189 18/173/111 +f 18/178/111 349/593/189 345/128/42 16/127/41 +f 205/55/15 183/54/50 189/389/173 209/416/186 +f 209/421/186 189/392/173 185/112/81 206/111/80 +f 190/102/21 199/101/75 202/412/182 193/395/175 +f 193/400/175 202/407/182 198/114/83 191/113/82 +f 197/71/61 204/70/60 210/415/185 200/404/179 +f 200/409/179 210/419/185 206/111/80 198/114/83 +f 220/43/15 226/42/40 228/445/191 224/437/186 +f 224/433/186 228/440/191 225/135/94 218/137/80 +f 234/117/84 239/116/18 245/460/201 238/455/197 +f 238/451/197 245/463/201 241/133/92 232/132/91 +f 248/59/53 253/58/52 259/477/209 252/472/205 +f 252/468/205 259/481/209 255/131/90 246/134/93 +f 276/31/29 260/30/28 266/486/213 280/508/221 +f 280/504/221 266/490/213 262/139/97 274/138/96 +f 303/23/21 282/22/20 284/516/223 307/540/175 +f 307/545/175 284/511/223 281/146/101 304/145/82 +f 288/19/3 297/18/18 300/536/201 291/520/227 +f 291/525/227 300/532/201 296/148/92 289/147/102 +f 295/83/65 302/82/64 308/539/178 298/529/202 +f 298/534/202 308/543/178 304/145/82 296/148/92 +f 316/7/7 323/6/6 329/566/237 319/555/214 +f 319/560/214 329/569/237 325/144/100 317/143/97 +f 359/3/3 337/2/2 343/583/203 363/611/227 +f 363/616/227 343/587/203 339/150/93 360/149/102 +f 346/11/11 353/10/10 356/607/217 350/596/187 +f 350/592/187 356/602/217 352/152/98 344/151/95 +f 351/91/47 358/90/71 364/610/230 354/599/218 +f 354/604/218 364/614/230 360/149/102 352/152/98 +f 2/156/55 10/169/73 17/179/79 23/186/32 diff --git a/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/meshes/suzanne.obj b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/meshes/suzanne.obj new file mode 100644 index 0000000..14e9bbe --- /dev/null +++ b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/meshes/suzanne.obj @@ -0,0 +1,2580 @@ +# Blender3D v249 OBJ File: suzanne.blend +# www.blender3d.org +v 0.437500 0.164063 0.765625 +v -0.437500 0.164063 0.765625 +v 0.500000 0.093750 0.687500 +v -0.500000 0.093750 0.687500 +v 0.546875 0.054688 0.578125 +v -0.546875 0.054688 0.578125 +v 0.351563 -0.023438 0.617188 +v -0.351563 -0.023438 0.617188 +v 0.351563 0.031250 0.718750 +v -0.351563 0.031250 0.718750 +v 0.351563 0.132813 0.781250 +v -0.351563 0.132813 0.781250 +v 0.273438 0.164063 0.796875 +v -0.273438 0.164063 0.796875 +v 0.203125 0.093750 0.742188 +v -0.203125 0.093750 0.742188 +v 0.156250 0.054688 0.648438 +v -0.156250 0.054688 0.648438 +v 0.078125 0.242188 0.656250 +v -0.078125 0.242188 0.656250 +v 0.140625 0.242188 0.742188 +v -0.140625 0.242188 0.742188 +v 0.242188 0.242188 0.796875 +v -0.242188 0.242188 0.796875 +v 0.273438 0.328125 0.796875 +v -0.273438 0.328125 0.796875 +v 0.203125 0.390625 0.742188 +v -0.203125 0.390625 0.742188 +v 0.156250 0.437500 0.648438 +v -0.156250 0.437500 0.648438 +v 0.351563 0.515625 0.617188 +v -0.351563 0.515625 0.617188 +v 0.351563 0.453125 0.718750 +v -0.351563 0.453125 0.718750 +v 0.351563 0.359375 0.781250 +v -0.351563 0.359375 0.781250 +v 0.437500 0.328125 0.765625 +v -0.437500 0.328125 0.765625 +v 0.500000 0.390625 0.687500 +v -0.500000 0.390625 0.687500 +v 0.546875 0.437500 0.578125 +v -0.546875 0.437500 0.578125 +v 0.625000 0.242188 0.562500 +v -0.625000 0.242188 0.562500 +v 0.562500 0.242188 0.671875 +v -0.562500 0.242188 0.671875 +v 0.468750 0.242188 0.757813 +v -0.468750 0.242188 0.757813 +v 0.476563 0.242188 0.773438 +v -0.476563 0.242188 0.773438 +v 0.445313 0.335938 0.781250 +v -0.445313 0.335938 0.781250 +v 0.351563 0.375000 0.804688 +v -0.351563 0.375000 0.804688 +v 0.265625 0.335938 0.820313 +v -0.265625 0.335938 0.820313 +v 0.226563 0.242188 0.820313 +v -0.226563 0.242188 0.820313 +v 0.265625 0.156250 0.820313 +v -0.265625 0.156250 0.820313 +v 0.351563 0.242188 0.828125 +v -0.351563 0.242188 0.828125 +v 0.351563 0.117188 0.804688 +v -0.351563 0.117188 0.804688 +v 0.445313 0.156250 0.781250 +v -0.445313 0.156250 0.781250 +v 0.000000 0.429688 0.742188 +v 0.000000 0.351563 0.820313 +v 0.000000 -0.679688 0.734375 +v 0.000000 -0.320313 0.781250 +v 0.000000 -0.187500 0.796875 +v 0.000000 -0.773438 0.718750 +v 0.000000 0.406250 0.601563 +v 0.000000 0.570313 0.570313 +v 0.000000 0.898438 -0.546875 +v 0.000000 0.562500 -0.851563 +v 0.000000 0.070313 -0.828125 +v 0.000000 -0.382813 -0.351563 +v 0.203125 -0.187500 0.562500 +v -0.203125 -0.187500 0.562500 +v 0.312500 -0.437500 0.570313 +v -0.312500 -0.437500 0.570313 +v 0.351563 -0.695313 0.570313 +v -0.351563 -0.695313 0.570313 +v 0.367188 -0.890625 0.531250 +v -0.367188 -0.890625 0.531250 +v 0.328125 -0.945313 0.523438 +v -0.328125 -0.945313 0.523438 +v 0.179688 -0.968750 0.554688 +v -0.179688 -0.968750 0.554688 +v 0.000000 -0.984375 0.578125 +v 0.437500 -0.140625 0.531250 +v -0.437500 -0.140625 0.531250 +v 0.632813 -0.039063 0.539063 +v -0.632813 -0.039063 0.539063 +v 0.828125 0.148438 0.445313 +v -0.828125 0.148438 0.445313 +v 0.859375 0.429688 0.593750 +v -0.859375 0.429688 0.593750 +v 0.710938 0.484375 0.625000 +v -0.710938 0.484375 0.625000 +v 0.492188 0.601563 0.687500 +v -0.492188 0.601563 0.687500 +v 0.320313 0.757813 0.734375 +v -0.320313 0.757813 0.734375 +v 0.156250 0.718750 0.757813 +v -0.156250 0.718750 0.757813 +v 0.062500 0.492188 0.750000 +v -0.062500 0.492188 0.750000 +v 0.164063 0.414063 0.773438 +v -0.164063 0.414063 0.773438 +v 0.125000 0.304688 0.765625 +v -0.125000 0.304688 0.765625 +v 0.203125 0.093750 0.742188 +v -0.203125 0.093750 0.742188 +v 0.375000 0.015625 0.703125 +v -0.375000 0.015625 0.703125 +v 0.492188 0.062500 0.671875 +v -0.492188 0.062500 0.671875 +v 0.625000 0.187500 0.648438 +v -0.625000 0.187500 0.648438 +v 0.640625 0.296875 0.648438 +v -0.640625 0.296875 0.648438 +v 0.601563 0.375000 0.664063 +v -0.601563 0.375000 0.664063 +v 0.429688 0.437500 0.718750 +v -0.429688 0.437500 0.718750 +v 0.250000 0.468750 0.757813 +v -0.250000 0.468750 0.757813 +v 0.000000 -0.765625 0.734375 +v 0.109375 -0.718750 0.734375 +v -0.109375 -0.718750 0.734375 +v 0.117188 -0.835938 0.710938 +v -0.117188 -0.835938 0.710938 +v 0.062500 -0.882813 0.695313 +v -0.062500 -0.882813 0.695313 +v 0.000000 -0.890625 0.687500 +v 0.000000 -0.195313 0.750000 +v 0.000000 -0.140625 0.742188 +v 0.101563 -0.148438 0.742188 +v -0.101563 -0.148438 0.742188 +v 0.125000 -0.226563 0.750000 +v -0.125000 -0.226563 0.750000 +v 0.085938 -0.289063 0.742188 +v -0.085938 -0.289063 0.742188 +v 0.398438 -0.046875 0.671875 +v -0.398438 -0.046875 0.671875 +v 0.617188 0.054688 0.625000 +v -0.617188 0.054688 0.625000 +v 0.726563 0.203125 0.601563 +v -0.726563 0.203125 0.601563 +v 0.742188 0.375000 0.656250 +v -0.742188 0.375000 0.656250 +v 0.687500 0.414063 0.726563 +v -0.687500 0.414063 0.726563 +v 0.437500 0.546875 0.796875 +v -0.437500 0.546875 0.796875 +v 0.312500 0.640625 0.835938 +v -0.312500 0.640625 0.835938 +v 0.203125 0.617188 0.851563 +v -0.203125 0.617188 0.851563 +v 0.101563 0.429688 0.843750 +v -0.101563 0.429688 0.843750 +v 0.125000 -0.101563 0.812500 +v -0.125000 -0.101563 0.812500 +v 0.210938 -0.445313 0.710938 +v -0.210938 -0.445313 0.710938 +v 0.250000 -0.703125 0.687500 +v -0.250000 -0.703125 0.687500 +v 0.265625 -0.820313 0.664063 +v -0.265625 -0.820313 0.664063 +v 0.234375 -0.914063 0.632813 +v -0.234375 -0.914063 0.632813 +v 0.164063 -0.929688 0.632813 +v -0.164063 -0.929688 0.632813 +v 0.000000 -0.945313 0.640625 +v 0.000000 0.046875 0.726563 +v 0.000000 0.210938 0.765625 +v 0.328125 0.476563 0.742188 +v -0.328125 0.476563 0.742188 +v 0.164063 0.140625 0.750000 +v -0.164063 0.140625 0.750000 +v 0.132813 0.210938 0.757813 +v -0.132813 0.210938 0.757813 +v 0.117188 -0.687500 0.734375 +v -0.117188 -0.687500 0.734375 +v 0.078125 -0.445313 0.750000 +v -0.078125 -0.445313 0.750000 +v 0.000000 -0.445313 0.750000 +v 0.000000 -0.328125 0.742188 +v 0.093750 -0.273438 0.781250 +v -0.093750 -0.273438 0.781250 +v 0.132813 -0.226563 0.796875 +v -0.132813 -0.226563 0.796875 +v 0.109375 -0.132813 0.781250 +v -0.109375 -0.132813 0.781250 +v 0.039063 -0.125000 0.781250 +v -0.039063 -0.125000 0.781250 +v 0.000000 -0.203125 0.828125 +v 0.046875 -0.148438 0.812500 +v -0.046875 -0.148438 0.812500 +v 0.093750 -0.156250 0.812500 +v -0.093750 -0.156250 0.812500 +v 0.109375 -0.226563 0.828125 +v -0.109375 -0.226563 0.828125 +v 0.078125 -0.250000 0.804688 +v -0.078125 -0.250000 0.804688 +v 0.000000 -0.289063 0.804688 +v 0.257813 -0.312500 0.554688 +v -0.257813 -0.312500 0.554688 +v 0.164063 -0.242188 0.710938 +v -0.164063 -0.242188 0.710938 +v 0.179688 -0.312500 0.710938 +v -0.179688 -0.312500 0.710938 +v 0.234375 -0.250000 0.554688 +v -0.234375 -0.250000 0.554688 +v 0.000000 -0.875000 0.687500 +v 0.046875 -0.867188 0.687500 +v -0.046875 -0.867188 0.687500 +v 0.093750 -0.820313 0.710938 +v -0.093750 -0.820313 0.710938 +v 0.093750 -0.742188 0.726563 +v -0.093750 -0.742188 0.726563 +v 0.000000 -0.781250 0.656250 +v 0.093750 -0.750000 0.664063 +v -0.093750 -0.750000 0.664063 +v 0.093750 -0.812500 0.640625 +v -0.093750 -0.812500 0.640625 +v 0.046875 -0.851563 0.632813 +v -0.046875 -0.851563 0.632813 +v 0.000000 -0.859375 0.632813 +v 0.171875 0.218750 0.781250 +v -0.171875 0.218750 0.781250 +v 0.187500 0.156250 0.773438 +v -0.187500 0.156250 0.773438 +v 0.335938 0.429688 0.757813 +v -0.335938 0.429688 0.757813 +v 0.273438 0.421875 0.773438 +v -0.273438 0.421875 0.773438 +v 0.421875 0.398438 0.773438 +v -0.421875 0.398438 0.773438 +v 0.562500 0.351563 0.695313 +v -0.562500 0.351563 0.695313 +v 0.585938 0.289063 0.687500 +v -0.585938 0.289063 0.687500 +v 0.578125 0.195313 0.679688 +v -0.578125 0.195313 0.679688 +v 0.476563 0.101563 0.718750 +v -0.476563 0.101563 0.718750 +v 0.375000 0.062500 0.742188 +v -0.375000 0.062500 0.742188 +v 0.226563 0.109375 0.781250 +v -0.226563 0.109375 0.781250 +v 0.179688 0.296875 0.781250 +v -0.179688 0.296875 0.781250 +v 0.210938 0.375000 0.781250 +v -0.210938 0.375000 0.781250 +v 0.234375 0.359375 0.757813 +v -0.234375 0.359375 0.757813 +v 0.195313 0.296875 0.757813 +v -0.195313 0.296875 0.757813 +v 0.242188 0.125000 0.757813 +v -0.242188 0.125000 0.757813 +v 0.375000 0.085938 0.726563 +v -0.375000 0.085938 0.726563 +v 0.460938 0.117188 0.703125 +v -0.460938 0.117188 0.703125 +v 0.546875 0.210938 0.671875 +v -0.546875 0.210938 0.671875 +v 0.554688 0.281250 0.671875 +v -0.554688 0.281250 0.671875 +v 0.531250 0.335938 0.679688 +v -0.531250 0.335938 0.679688 +v 0.414063 0.390625 0.750000 +v -0.414063 0.390625 0.750000 +v 0.281250 0.398438 0.765625 +v -0.281250 0.398438 0.765625 +v 0.335938 0.406250 0.750000 +v -0.335938 0.406250 0.750000 +v 0.203125 0.171875 0.750000 +v -0.203125 0.171875 0.750000 +v 0.195313 0.226563 0.750000 +v -0.195313 0.226563 0.750000 +v 0.109375 0.460938 0.609375 +v -0.109375 0.460938 0.609375 +v 0.195313 0.664063 0.617188 +v -0.195313 0.664063 0.617188 +v 0.335938 0.687500 0.593750 +v -0.335938 0.687500 0.593750 +v 0.484375 0.554688 0.554688 +v -0.484375 0.554688 0.554688 +v 0.679688 0.453125 0.492188 +v -0.679688 0.453125 0.492188 +v 0.796875 0.406250 0.460938 +v -0.796875 0.406250 0.460938 +v 0.773438 0.164063 0.375000 +v -0.773438 0.164063 0.375000 +v 0.601563 0.000000 0.414063 +v -0.601563 0.000000 0.414063 +v 0.437500 -0.093750 0.468750 +v -0.437500 -0.093750 0.468750 +v 0.000000 0.898438 0.289063 +v 0.000000 0.984375 -0.078125 +v 0.000000 -0.195313 -0.671875 +v 0.000000 -0.460938 0.187500 +v 0.000000 -0.976563 0.460938 +v 0.000000 -0.804688 0.343750 +v 0.000000 -0.570313 0.320313 +v 0.000000 -0.484375 0.281250 +v 0.851563 0.234375 0.054688 +v -0.851563 0.234375 0.054688 +v 0.859375 0.320313 -0.046875 +v -0.859375 0.320313 -0.046875 +v 0.773438 0.265625 -0.437500 +v -0.773438 0.265625 -0.437500 +v 0.460938 0.437500 -0.703125 +v -0.460938 0.437500 -0.703125 +v 0.734375 -0.046875 0.070313 +v -0.734375 -0.046875 0.070313 +v 0.593750 -0.125000 -0.164063 +v -0.593750 -0.125000 -0.164063 +v 0.640625 -0.007813 -0.429688 +v -0.640625 -0.007813 -0.429688 +v 0.335938 0.054688 -0.664063 +v -0.335938 0.054688 -0.664063 +v 0.234375 -0.351563 0.406250 +v -0.234375 -0.351563 0.406250 +v 0.179688 -0.414063 0.257813 +v -0.179688 -0.414063 0.257813 +v 0.289063 -0.710938 0.382813 +v -0.289063 -0.710938 0.382813 +v 0.250000 -0.500000 0.390625 +v -0.250000 -0.500000 0.390625 +v 0.328125 -0.914063 0.398438 +v -0.328125 -0.914063 0.398438 +v 0.140625 -0.757813 0.367188 +v -0.140625 -0.757813 0.367188 +v 0.125000 -0.539063 0.359375 +v -0.125000 -0.539063 0.359375 +v 0.164063 -0.945313 0.437500 +v -0.164063 -0.945313 0.437500 +v 0.218750 -0.281250 0.429688 +v -0.218750 -0.281250 0.429688 +v 0.210938 -0.226563 0.468750 +v -0.210938 -0.226563 0.468750 +v 0.203125 -0.171875 0.500000 +v -0.203125 -0.171875 0.500000 +v 0.210938 -0.390625 0.164063 +v -0.210938 -0.390625 0.164063 +v 0.296875 -0.312500 -0.265625 +v -0.296875 -0.312500 -0.265625 +v 0.343750 -0.148438 -0.539063 +v -0.343750 -0.148438 -0.539063 +v 0.453125 0.867188 -0.382813 +v -0.453125 0.867188 -0.382813 +v 0.453125 0.929688 -0.070313 +v -0.453125 0.929688 -0.070313 +v 0.453125 0.851563 0.234375 +v -0.453125 0.851563 0.234375 +v 0.460938 0.523438 0.429688 +v -0.460938 0.523438 0.429688 +v 0.726563 0.406250 0.335938 +v -0.726563 0.406250 0.335938 +v 0.632813 0.453125 0.281250 +v -0.632813 0.453125 0.281250 +v 0.640625 0.703125 0.054688 +v -0.640625 0.703125 0.054688 +v 0.796875 0.562500 0.125000 +v -0.796875 0.562500 0.125000 +v 0.796875 0.617188 -0.117188 +v -0.796875 0.617188 -0.117188 +v 0.640625 0.750000 -0.195313 +v -0.640625 0.750000 -0.195313 +v 0.640625 0.679688 -0.445313 +v -0.640625 0.679688 -0.445313 +v 0.796875 0.539063 -0.359375 +v -0.796875 0.539063 -0.359375 +v 0.617188 0.328125 -0.585938 +v -0.617188 0.328125 -0.585938 +v 0.484375 0.023438 -0.546875 +v -0.484375 0.023438 -0.546875 +v 0.820313 0.328125 -0.203125 +v -0.820313 0.328125 -0.203125 +v 0.406250 -0.171875 0.148438 +v -0.406250 -0.171875 0.148438 +v 0.429688 -0.195313 -0.210938 +v -0.429688 -0.195313 -0.210938 +v 0.890625 0.406250 -0.234375 +v -0.890625 0.406250 -0.234375 +v 0.773438 -0.140625 -0.125000 +v -0.773438 -0.140625 -0.125000 +v 1.039063 -0.101563 -0.328125 +v -1.039063 -0.101563 -0.328125 +v 1.281250 0.054688 -0.429688 +v -1.281250 0.054688 -0.429688 +v 1.351563 0.320313 -0.421875 +v -1.351563 0.320313 -0.421875 +v 1.234375 0.507813 -0.421875 +v -1.234375 0.507813 -0.421875 +v 1.023438 0.476563 -0.312500 +v -1.023438 0.476563 -0.312500 +v 1.015625 0.414063 -0.289063 +v -1.015625 0.414063 -0.289063 +v 1.187500 0.437500 -0.390625 +v -1.187500 0.437500 -0.390625 +v 1.265625 0.289063 -0.406250 +v -1.265625 0.289063 -0.406250 +v 1.210938 0.078125 -0.406250 +v -1.210938 0.078125 -0.406250 +v 1.031250 -0.039063 -0.304688 +v -1.031250 -0.039063 -0.304688 +v 0.828125 -0.070313 -0.132813 +v -0.828125 -0.070313 -0.132813 +v 0.921875 0.359375 -0.218750 +v -0.921875 0.359375 -0.218750 +v 0.945313 0.304688 -0.289063 +v -0.945313 0.304688 -0.289063 +v 0.882813 -0.023438 -0.210938 +v -0.882813 -0.023438 -0.210938 +v 1.039063 0.000000 -0.367188 +v -1.039063 0.000000 -0.367188 +v 1.187500 0.093750 -0.445313 +v -1.187500 0.093750 -0.445313 +v 1.234375 0.250000 -0.445313 +v -1.234375 0.250000 -0.445313 +v 1.171875 0.359375 -0.437500 +v -1.171875 0.359375 -0.437500 +v 1.023438 0.343750 -0.359375 +v -1.023438 0.343750 -0.359375 +v 0.843750 0.289063 -0.210938 +v -0.843750 0.289063 -0.210938 +v 0.835938 0.171875 -0.273438 +v -0.835938 0.171875 -0.273438 +v 0.757813 0.093750 -0.273438 +v -0.757813 0.093750 -0.273438 +v 0.820313 0.085938 -0.273438 +v -0.820313 0.085938 -0.273438 +v 0.843750 0.015625 -0.273438 +v -0.843750 0.015625 -0.273438 +v 0.812500 -0.015625 -0.273438 +v -0.812500 -0.015625 -0.273438 +v 0.726563 0.000000 -0.070313 +v -0.726563 0.000000 -0.070313 +v 0.718750 -0.023438 -0.171875 +v -0.718750 -0.023438 -0.171875 +v 0.718750 0.039063 -0.187500 +v -0.718750 0.039063 -0.187500 +v 0.796875 0.203125 -0.210938 +v -0.796875 0.203125 -0.210938 +v 0.890625 0.242188 -0.265625 +v -0.890625 0.242188 -0.265625 +v 0.890625 0.234375 -0.320313 +v -0.890625 0.234375 -0.320313 +v 0.812500 -0.015625 -0.320313 +v -0.812500 -0.015625 -0.320313 +v 0.851563 0.015625 -0.320313 +v -0.851563 0.015625 -0.320313 +v 0.828125 0.078125 -0.320313 +v -0.828125 0.078125 -0.320313 +v 0.765625 0.093750 -0.320313 +v -0.765625 0.093750 -0.320313 +v 0.843750 0.171875 -0.320313 +v -0.843750 0.171875 -0.320313 +v 1.039063 0.328125 -0.414063 +v -1.039063 0.328125 -0.414063 +v 1.187500 0.343750 -0.484375 +v -1.187500 0.343750 -0.484375 +v 1.257813 0.242188 -0.492188 +v -1.257813 0.242188 -0.492188 +v 1.210938 0.085938 -0.484375 +v -1.210938 0.085938 -0.484375 +v 1.046875 0.000000 -0.421875 +v -1.046875 0.000000 -0.421875 +v 0.882813 -0.015625 -0.265625 +v -0.882813 -0.015625 -0.265625 +v 0.953125 0.289063 -0.343750 +v -0.953125 0.289063 -0.343750 +v 0.890625 0.109375 -0.328125 +v -0.890625 0.109375 -0.328125 +v 0.937500 0.062500 -0.335938 +v -0.937500 0.062500 -0.335938 +v 1.000000 0.125000 -0.367188 +v -1.000000 0.125000 -0.367188 +v 0.960938 0.171875 -0.351563 +v -0.960938 0.171875 -0.351563 +v 1.015625 0.234375 -0.375000 +v -1.015625 0.234375 -0.375000 +v 1.054688 0.187500 -0.382813 +v -1.054688 0.187500 -0.382813 +v 1.109375 0.210938 -0.390625 +v -1.109375 0.210938 -0.390625 +v 1.085938 0.273438 -0.390625 +v -1.085938 0.273438 -0.390625 +v 1.023438 0.437500 -0.484375 +v -1.023438 0.437500 -0.484375 +v 1.250000 0.468750 -0.546875 +v -1.250000 0.468750 -0.546875 +v 1.367188 0.296875 -0.500000 +v -1.367188 0.296875 -0.500000 +v 1.312500 0.054688 -0.531250 +v -1.312500 0.054688 -0.531250 +v 1.039063 -0.085938 -0.492188 +v -1.039063 -0.085938 -0.492188 +v 0.789063 -0.125000 -0.328125 +v -0.789063 -0.125000 -0.328125 +v 0.859375 0.382813 -0.382813 +v -0.859375 0.382813 -0.382813 +v -1.023438 0.476563 -0.312500 +v -1.234375 0.507813 -0.421875 +v -0.890625 0.406250 -0.234375 +v -0.820313 0.328125 -0.203125 +vt 0.315596 0.792535 +vt 0.331462 0.787091 +vt 0.331944 0.799704 +vt 0.049262 0.798007 +vt 0.050304 0.785428 +vt 0.065913 0.791570 +vt 0.321453 0.778649 +vt 0.060677 0.777438 +vt 0.310368 0.778802 +vt 0.071744 0.778083 +vt 0.302416 0.786560 +vt 0.079345 0.786186 +vt 0.301514 0.798474 +vt 0.079717 0.798128 +vt 0.308740 0.806873 +vt 0.072125 0.806199 +vt 0.321648 0.808687 +vt 0.059149 0.807438 +vt 0.048462 0.201858 +vt 0.040084 0.207259 +vt 0.043232 0.202821 +vt 0.043249 0.220655 +vt 0.040093 0.216224 +vt 0.048480 0.221607 +vt 0.563710 0.649220 +vt 0.540594 0.657349 +vt 0.547067 0.627433 +vt 0.974643 0.218739 +vt 0.968169 0.188824 +vt 0.991286 0.196952 +vt 0.166564 0.702856 +vt 0.160061 0.635503 +vt 0.218800 0.643864 +vt 0.646379 0.202310 +vt 0.587641 0.210669 +vt 0.594146 0.143318 +vt 0.231653 0.710981 +vt 0.181122 0.727399 +vt 0.174315 0.716236 +vt 0.601897 0.129938 +vt 0.608704 0.118775 +vt 0.659234 0.135195 +vt 0.266169 0.503056 +vt 0.270502 0.531304 +vt 0.237927 0.525958 +vt 0.665505 0.320215 +vt 0.698081 0.314870 +vt 0.693747 0.343118 +vt 0.392095 0.783569 +vt 0.421339 0.774990 +vt 0.422693 0.793271 +vt 0.628129 0.465996 +vt 0.613733 0.456434 +vt 0.634389 0.436387 +vt 0.501778 0.870396 +vt 0.507486 0.857499 +vt 0.528577 0.865850 +vt 0.643384 0.583025 +vt 0.644052 0.562152 +vt 0.656465 0.561923 +vt 0.766386 0.787223 +vt 0.745292 0.810963 +vt 0.708792 0.802136 +vt 0.769147 0.634951 +vt 0.732033 0.641034 +vt 0.711181 0.618495 +vt 0.849461 0.545148 +vt 0.823375 0.497849 +vt 0.897469 0.500666 +vt 0.902318 0.546395 +vt 0.572425 0.679855 +vt 0.643837 0.668801 +vt 0.623443 0.718088 +vt 0.572425 0.724426 +vt 0.726607 0.540494 +vt 0.753364 0.518460 +vt 0.715449 0.680462 +vt 0.749227 0.698466 +vt 0.695922 0.534580 +vt 0.693526 0.510498 +vt 0.772837 0.655221 +vt 0.784620 0.679820 +vt 0.718163 0.580185 +vt 0.809389 0.599417 +vt 0.761761 0.743313 +vt 0.667750 0.767676 +vt 0.693110 0.564191 +vt 0.797155 0.722534 +vt 0.682009 0.616616 +vt 0.795802 0.787304 +vt 0.719538 0.655221 +vt 0.756895 0.826983 +vt 0.782765 0.655221 +vt 0.695179 0.821970 +vt 0.843059 0.610497 +vt 0.635588 0.780626 +vt 0.634422 0.561399 +vt 0.628274 0.581967 +vt 0.511020 0.847430 +vt 0.533908 0.850607 +vt 0.633815 0.551490 +vt 0.613046 0.571327 +vt 0.530368 0.831407 +vt 0.501394 0.842435 +vt 0.626589 0.538875 +vt 0.604527 0.544684 +vt 0.508929 0.810914 +vt 0.492547 0.829318 +vt 0.618247 0.522587 +vt 0.602583 0.501781 +vt 0.480939 0.813120 +vt 0.469234 0.787943 +vt 0.616652 0.502716 +vt 0.613925 0.497595 +vt 0.459358 0.796431 +vt 0.462840 0.801566 +vt 0.644899 0.511966 +vt 0.630336 0.517087 +vt 0.628893 0.504351 +vt 0.635735 0.498392 +vt 0.458270 0.813966 +vt 0.469630 0.821874 +vt 0.457144 0.833207 +vt 0.449054 0.817297 +vt 0.637359 0.534149 +vt 0.654293 0.524569 +vt 0.464258 0.849211 +vt 0.482600 0.837505 +vt 0.644187 0.548520 +vt 0.659377 0.540935 +vt 0.478087 0.863369 +vt 0.493557 0.851414 +vt 0.597230 0.539263 +vt 0.595257 0.495349 +vt 0.466971 0.777596 +vt 0.507407 0.801398 +vt 0.605628 0.572478 +vt 0.534801 0.825096 +vt 0.627145 0.592333 +vt 0.544318 0.853620 +vt 0.651887 0.586528 +vt 0.528822 0.875551 +vt 0.665532 0.557472 +vt 0.492878 0.878439 +vt 0.669345 0.535984 +vt 0.467321 0.871200 +vt 0.612569 0.491986 +vt 0.454710 0.792385 +vt 0.619277 0.495381 +vt 0.454636 0.800448 +vt 0.628580 0.496763 +vt 0.451294 0.809743 +vt 0.636682 0.490206 +vt 0.440853 0.813605 +vt 0.652342 0.504728 +vt 0.446182 0.836397 +vt 0.664409 0.519225 +vt 0.453285 0.856119 +vt 0.666191 0.492411 +vt 0.717596 0.474672 +vt 0.382398 0.879324 +vt 0.427166 0.842398 +vt 0.681733 0.511408 +vt 0.427493 0.877628 +vt 0.435523 0.867805 +vt 0.685777 0.532869 +vt 0.453231 0.887054 +vt 0.588528 0.478377 +vt 0.454313 0.762782 +vt 0.446975 0.900429 +vt 0.713425 0.237886 +vt 0.709019 0.215724 +vt 0.755152 0.224403 +vt 0.762923 0.242445 +vt 0.327574 0.621771 +vt 0.281440 0.630451 +vt 0.285847 0.608289 +vt 0.335345 0.603729 +vt 0.576794 0.465515 +vt 0.583867 0.423087 +vt 0.405805 0.730353 +vt 0.448347 0.745304 +vt 0.686035 0.253032 +vt 0.258456 0.593142 +vt 0.683851 0.556229 +vt 0.482266 0.899349 +vt 0.670531 0.597684 +vt 0.532990 0.898426 +vt 0.630909 0.604157 +vt 0.553941 0.861896 +vt 0.596864 0.576275 +vt 0.542184 0.818594 +vt 0.585561 0.529242 +vt 0.503791 0.785451 +vt 0.572425 0.529736 +vt 0.510638 0.773572 +vt 0.587548 0.588270 +vt 0.557294 0.815416 +vt 0.629961 0.623919 +vt 0.572425 0.868524 +vt 0.548104 0.914571 +vt 0.488130 0.914571 +vt 0.658830 0.266292 +vt 0.631691 0.281488 +vt 0.204112 0.564686 +vt 0.231252 0.579881 +vt 0.706402 0.288928 +vt 0.278823 0.557246 +vt 0.743528 0.317934 +vt 0.752264 0.346660 +vt 0.324686 0.499513 +vt 0.315950 0.528240 +vt 0.743309 0.289810 +vt 0.315731 0.556363 +vt 0.700326 0.147967 +vt 0.272746 0.698208 +vt 0.795874 0.266472 +vt 0.775660 0.289442 +vt 0.757507 0.263314 +vt 0.348083 0.556732 +vt 0.329929 0.582860 +vt 0.368297 0.579702 +vt 0.804056 0.232825 +vt 0.376478 0.613349 +vt 0.810124 0.179100 +vt 0.382547 0.667075 +vt 0.753847 0.157090 +vt 0.811201 0.146834 +vt 0.383624 0.699341 +vt 0.326269 0.689085 +vt 0.879685 0.183943 +vt 0.888071 0.157228 +vt 0.460496 0.688946 +vt 0.452109 0.662231 +vt 0.925222 0.140531 +vt 0.947451 0.149372 +vt 0.519876 0.696801 +vt 0.497647 0.705643 +vt 0.876420 0.258223 +vt 0.946138 0.286262 +vt 0.518561 0.559910 +vt 0.448843 0.587951 +vt 0.829953 0.196170 +vt 0.837053 0.152275 +vt 0.409477 0.693900 +vt 0.402377 0.650004 +vt 0.829888 0.255993 +vt 0.402311 0.590181 +vt 0.852096 0.297194 +vt 0.813695 0.289418 +vt 0.424519 0.548979 +vt 0.386117 0.556756 +vt 0.820842 0.328587 +vt 0.789451 0.311961 +vt 0.393264 0.517587 +vt 0.361873 0.534212 +vt 0.840465 0.403536 +vt 0.762603 0.423087 +vt 0.412887 0.442637 +vt 0.335024 0.423087 +vt 0.909248 0.345901 +vt 0.481670 0.500271 +vt 0.676670 0.402805 +vt 0.249092 0.443369 +vt 0.573469 0.193539 +vt 0.579214 0.151927 +vt 0.151632 0.694246 +vt 0.145888 0.652633 +vt 0.546919 0.227092 +vt 0.536510 0.214419 +vt 0.119340 0.619080 +vt 0.108931 0.631753 +vt 0.588792 0.317539 +vt 0.161214 0.528634 +vt 0.630429 0.371564 +vt 0.202851 0.474609 +vt 0.657494 0.118541 +vt 0.164237 0.319427 +vt 0.169464 0.304721 +vt 0.210459 0.345510 +vt 0.169574 0.118572 +vt 0.164356 0.103821 +vt 0.210731 0.077759 +vt 0.229913 0.727634 +vt 0.589956 0.115821 +vt 0.153468 0.300432 +vt 0.153526 0.122857 +vt 0.162374 0.730353 +vt 0.578472 0.119429 +vt 0.553653 0.120209 +vt 0.126070 0.725964 +vt 0.150890 0.726744 +vt 0.546510 0.159800 +vt 0.509384 0.119033 +vt 0.081800 0.727137 +vt 0.118929 0.686371 +vt 0.534072 0.185482 +vt 0.106492 0.660689 +vt 0.462352 0.161885 +vt 0.478174 0.145123 +vt 0.493641 0.175543 +vt 0.505521 0.150780 +vt 0.077939 0.695390 +vt 0.050592 0.701044 +vt 0.066060 0.670626 +vt 0.034770 0.684282 +vt 0.476706 0.124129 +vt 0.049122 0.722039 +vt 0.465324 0.131169 +vt 0.037741 0.714998 +vt 0.446348 0.149671 +vt 0.018765 0.696495 +vt 0.445483 0.184898 +vt 0.427581 0.175095 +vt 0.000000 0.671069 +vt 0.017903 0.661268 +vt 0.480167 0.198327 +vt 0.052588 0.647841 +vt 0.521714 0.207472 +vt 0.094135 0.638699 +vt 0.701979 0.120236 +vt 0.274400 0.725940 +vt 0.757541 0.138176 +vt 0.329963 0.708000 +vt 0.817327 0.117813 +vt 0.389751 0.728363 +vt 0.844767 0.126748 +vt 0.417191 0.719428 +vt 0.893893 0.126476 +vt 0.466319 0.719698 +vt 0.936543 0.115821 +vt 0.508970 0.730353 +vt 0.965717 0.128368 +vt 0.538144 0.717805 +vt 0.989276 0.166159 +vt 0.561701 0.680013 +vt 1.000000 0.175243 +vt 0.572425 0.670929 +vt 0.289028 0.269037 +vt 0.283878 0.263049 +vt 0.299187 0.258321 +vt 0.300964 0.267357 +vt 0.299421 0.165436 +vt 0.284101 0.160633 +vt 0.289287 0.154655 +vt 0.301244 0.156393 +vt 0.317793 0.260767 +vt 0.316733 0.267304 +vt 0.318078 0.163079 +vt 0.317052 0.156521 +vt 0.335398 0.269583 +vt 0.330421 0.276220 +vt 0.335777 0.154335 +vt 0.330824 0.147649 +vt 0.278552 0.277080 +vt 0.273734 0.272912 +vt 0.273975 0.150706 +vt 0.278818 0.146548 +vt 0.271078 0.306358 +vt 0.264864 0.305818 +vt 0.265194 0.117691 +vt 0.271427 0.117166 +vt 0.278613 0.324240 +vt 0.274006 0.327477 +vt 0.274436 0.095993 +vt 0.279049 0.099253 +vt 0.298062 0.342565 +vt 0.294660 0.349561 +vt 0.295240 0.073895 +vt 0.298634 0.080932 +vt 0.312476 0.342961 +vt 0.315033 0.350198 +vt 0.315702 0.073322 +vt 0.313108 0.080584 +vt 0.323281 0.337709 +vt 0.328696 0.344302 +vt 0.329405 0.079293 +vt 0.323940 0.085897 +vt 0.335361 0.313857 +vt 0.339396 0.315576 +vt 0.340031 0.108187 +vt 0.335968 0.109893 +vt 0.339920 0.298303 +vt 0.345292 0.298556 +vt 0.345869 0.125306 +vt 0.340471 0.125531 +vt 0.339277 0.286081 +vt 0.344398 0.284332 +vt 0.344895 0.139582 +vt 0.339764 0.137799 +vt 0.345671 0.260159 +vt 0.355483 0.280619 +vt 0.356003 0.143373 +vt 0.346021 0.163854 +vt 0.356162 0.297750 +vt 0.356783 0.126174 +vt 0.349494 0.319809 +vt 0.350195 0.103982 +vt 0.333524 0.354692 +vt 0.334295 0.068869 +vt 0.317323 0.364551 +vt 0.318050 0.058911 +vt 0.293154 0.361782 +vt 0.293765 0.061619 +vt 0.263750 0.335417 +vt 0.264168 0.087998 +vt 0.251373 0.309082 +vt 0.251676 0.114380 +vt 0.264926 0.265507 +vt 0.265122 0.158092 +vt 0.278030 0.255522 +vt 0.278212 0.168150 +vt 0.320744 0.246538 +vt 0.320956 0.177355 +vt 0.296570 0.247318 +vt 0.296748 0.176443 +vt 0.038845 0.211743 +vt 0.047440 0.211734 +vt 0.055230 0.211728 +vt 0.057303 0.228458 +vt 0.057278 0.194991 +vt 0.041287 0.229096 +vt 0.041253 0.194380 +vt 0.032564 0.220061 +vt 0.032546 0.203437 +vt 0.030743 0.211752 +vt 0.029931 0.223131 +vt 0.028053 0.211756 +vt 0.029906 0.200372 +vt 0.038587 0.233067 +vt 0.038544 0.190412 +vt 0.061533 0.231825 +vt 0.061505 0.191616 +vt 0.057382 0.211726 +vt 0.168191 0.258703 +vt 0.213958 0.246887 +vt 0.214040 0.176591 +vt 0.168236 0.164676 +vt 0.148297 0.258447 +vt 0.138777 0.299079 +vt 0.138791 0.124216 +vt 0.148319 0.164919 +vt 0.115455 0.259296 +vt 0.109657 0.296761 +vt 0.109611 0.126556 +vt 0.115440 0.164070 +vt 0.119233 0.228698 +vt 0.156540 0.233552 +vt 0.156556 0.189842 +vt 0.119230 0.194690 +vt 0.173998 0.244074 +vt 0.174035 0.179329 +vt 0.195860 0.238258 +vt 0.195909 0.185188 +vt 0.203534 0.211734 +vt 0.252997 0.211802 +vt 0.171285 0.225095 +vt 0.164455 0.211704 +vt 0.180017 0.211713 +vt 0.177113 0.227468 +vt 0.171300 0.198319 +vt 0.177134 0.195952 +vt 0.185539 0.227013 +vt 0.187516 0.221322 +vt 0.187531 0.202116 +vt 0.185563 0.196419 +vt 0.176585 0.232500 +vt 0.165993 0.229894 +vt 0.176611 0.190916 +vt 0.166011 0.193512 +vt 0.189406 0.230672 +vt 0.189438 0.192766 +vt 0.193574 0.221791 +vt 0.193592 0.201656 +vt 0.186479 0.211718 +vt 0.156919 0.211701 +vt 0.148476 0.211699 +vt 0.427853 0.115821 +vt 0.427581 0.104121 +vt 0.441185 0.104121 +vt 0.427581 0.011703 +vt 0.427581 0.000000 +vt 0.441181 0.011386 +vt 0.067509 0.234045 +vt 0.071465 0.211716 +vt 0.067479 0.189385 +vt 0.119764 0.211696 +vt 0.060932 0.261035 +vt 0.038121 0.261699 +vt 0.038025 0.161756 +vt 0.060860 0.162382 +vt 0.019864 0.255578 +vt 0.019760 0.167921 +vt 0.016617 0.242679 +vt 0.016537 0.180842 +vt 0.014466 0.211775 +vt 0.297831 0.211892 +vt 0.340508 0.212027 +vt 0.356498 0.241635 +vt 0.356742 0.182510 +vt 0.236517 0.317748 +vt 0.236802 0.105655 +vt 0.264789 0.363401 +vt 0.265286 0.059917 +vt 0.296951 0.385966 +vt 0.297650 0.037339 +vt 0.337996 0.385300 +vt 0.338890 0.038126 +vt 0.349401 0.368365 +vt 0.350300 0.055183 +vt 0.377282 0.319664 +vt 0.378129 0.104260 +vt 0.394788 0.292204 +vt 0.395576 0.131978 +vt 0.391029 0.270263 +vt 0.391643 0.154015 +vt 0.368661 0.212151 +vt 0.379482 0.228055 +vt 0.379686 0.196331 +vt 0.420379 0.261837 +vt 0.421104 0.162716 +vt 0.426533 0.298960 +vt 0.427581 0.125377 +vt 0.396664 0.342212 +vt 0.397734 0.081667 +vt 0.365156 0.387054 +vt 0.366203 0.036443 +vt 0.346744 0.416452 +vt 0.347768 0.006839 +vt 0.278009 0.423087 +vt 0.278714 0.000000 +vt 0.241964 0.376122 +vt 0.242399 0.047096 +vt 0.055563 0.291878 +vt 0.055443 0.131506 +vt 0.014495 0.288026 +vt 0.014318 0.135436 +vt 0.003828 0.279132 +vt 0.003650 0.144368 +vt 0.000113 0.248111 +vt 0.000000 0.175447 +vt 0.000000 0.211799 +vt 0.046962 0.798865 +vt 0.047306 0.784561 +vt 0.334495 0.786358 +vt 0.334204 0.800664 +vt 0.058429 0.773633 +vt 0.323868 0.774947 +vt 0.072992 0.774071 +vt 0.309301 0.774739 +vt 0.084403 0.784016 +vt 0.297459 0.784168 +vt 0.083417 0.800146 +vt 0.297728 0.800325 +vt 0.073091 0.810538 +vt 0.307582 0.811166 +vt 0.057505 0.810093 +vt 0.323173 0.811412 +vt 0.024988 0.807478 +vt 0.047717 0.829014 +vt 0.332112 0.830749 +vt 0.355774 0.810244 +vt 0.000000 0.817350 +vt 0.033121 0.852785 +vt 0.345638 0.855146 +vt 0.380299 0.821215 +vt 0.083391 0.855019 +vt 0.078555 0.829097 +vt 0.301299 0.829463 +vt 0.295318 0.855146 +vt 0.100718 0.807888 +vt 0.280100 0.807291 +vt 0.123146 0.821929 +vt 0.257070 0.820323 +vt 0.127501 0.768220 +vt 0.103229 0.776171 +vt 0.279000 0.775494 +vt 0.255105 0.766472 +vt 0.079351 0.756089 +vt 0.303746 0.756492 +vt 0.089008 0.730353 +vt 0.295241 0.730353 +vt 0.049398 0.755271 +vt 0.035422 0.733227 +vt 0.333706 0.757005 +vt 0.348646 0.735604 +vt 0.026877 0.776230 +vt 0.355274 0.778943 +vt 0.000000 0.770061 +vt 0.382398 0.773973 +vn 0.189764 -0.003571 0.981811 +vn 0.646809 -0.758202 0.082095 +vn 0.999573 -0.014496 -0.024445 +vn -0.999573 -0.014496 -0.024445 +vn -0.646809 -0.758202 0.082095 +vn -0.189764 -0.003571 0.981811 +vn -0.085788 -0.982971 0.162389 +vn 0.085788 -0.982971 0.162389 +vn -0.744835 -0.623768 0.236824 +vn 0.744835 -0.623768 0.236824 +vn -0.870968 -0.014710 0.491104 +vn 0.870968 -0.014710 0.491104 +vn -0.758354 0.606128 0.239692 +vn 0.758354 0.606128 0.239692 +vn -0.085788 0.982513 0.165105 +vn 0.085788 0.982513 0.165105 +vn 0.655141 0.750633 0.085574 +vn -0.655141 0.750633 0.085574 +vn -0.349284 -0.719932 0.599719 +vn -0.173681 0.215735 0.960845 +vn -0.809839 0.388287 0.439741 +vn 0.809839 0.388287 0.439741 +vn 0.173681 0.215735 0.960845 +vn 0.349284 -0.719932 0.599719 +vn 0.000000 0.794183 0.607654 +vn -0.508652 0.858119 -0.069887 +vn 0.000000 0.487075 0.873348 +vn 0.508652 0.858119 -0.069887 +vn 0.981414 -0.186682 0.043947 +vn 0.569811 -0.821711 0.007813 +vn 0.563463 -0.814570 0.137669 +vn -0.563463 -0.814570 0.137669 +vn -0.569811 -0.821711 0.007813 +vn -0.981414 -0.186682 0.043947 +vn 0.475845 -0.876247 0.075381 +vn 0.850520 -0.525529 -0.020692 +vn 0.876949 -0.163823 0.451766 +vn -0.876949 -0.163823 0.451766 +vn -0.850520 -0.525529 -0.020692 +vn -0.475845 -0.876247 0.075381 +vn 0.448286 -0.367870 -0.814661 +vn 0.530534 -0.539445 -0.653829 +vn 0.513077 -0.674673 -0.530595 +vn -0.513077 -0.674673 -0.530595 +vn -0.530534 -0.539445 -0.653829 +vn -0.448286 -0.367870 -0.814661 +vn 0.888180 -0.439955 -0.132389 +vn 0.588519 0.226966 0.775933 +vn 0.911527 -0.115268 0.394665 +vn -0.911527 -0.115268 0.394665 +vn -0.588519 0.226966 0.775933 +vn -0.888180 -0.439955 -0.132389 +vn 0.468886 -0.304727 0.829005 +vn 0.251564 0.260781 0.932005 +vn -0.003082 -0.330882 0.943632 +vn 0.003082 -0.330882 0.943632 +vn -0.251564 0.260781 0.932005 +vn -0.468886 -0.304727 0.829005 +vn 0.473067 0.578997 -0.664022 +vn 0.992462 0.028626 -0.118900 +vn 0.459975 -0.380261 -0.802362 +vn -0.459975 -0.380261 -0.802362 +vn -0.992462 0.028626 -0.118900 +vn -0.473067 0.578997 -0.664022 +vn -0.059908 -0.804712 -0.590594 +vn -0.346141 -0.637287 -0.688498 +vn -0.330546 -0.943236 0.031281 +vn -0.073672 -0.594989 0.800317 +vn 0.330546 -0.943236 0.031281 +vn 0.346141 -0.637287 -0.688498 +vn 0.059908 -0.804712 -0.590594 +vn 0.073672 -0.594989 0.800317 +vn 0.593738 0.595264 -0.541368 +vn -0.626057 -0.002686 -0.779748 +vn 0.626057 -0.002686 -0.779748 +vn -0.593738 0.595264 -0.541368 +vn 0.127689 0.703757 0.698843 +vn -0.713828 0.382183 0.586810 +vn 0.713828 0.382183 0.586810 +vn -0.127689 0.703757 0.698843 +vn 0.378063 0.560045 -0.737144 +vn 0.036805 -0.708457 -0.704764 +vn -0.378063 0.560045 -0.737144 +vn -0.036805 -0.708457 -0.704764 +vn -0.031556 0.838710 0.543626 +vn 0.031556 0.838710 0.543626 +vn -0.361156 0.848689 0.386303 +vn 0.361156 0.848689 0.386303 +vn -0.716392 0.204474 0.667043 +vn 0.716392 0.204474 0.667043 +vn -0.662038 -0.413770 0.624866 +vn 0.662038 -0.413770 0.624866 +vn -0.530229 -0.655751 0.537370 +vn 0.530229 -0.655751 0.537370 +vn -0.437483 0.001221 0.899197 +vn 0.550981 -0.138096 0.822993 +vn 0.437483 0.001221 0.899197 +vn -0.550981 -0.138096 0.822993 +vn -0.315958 -0.102298 0.943205 +vn 0.608539 0.296121 0.736167 +vn -0.608539 0.296121 0.736167 +vn 0.315958 -0.102298 0.943205 +vn -0.445479 -0.088778 0.890866 +vn -0.257698 0.600024 0.757317 +vn 0.257698 0.600024 0.757317 +vn 0.445479 -0.088778 0.890866 +vn -0.327799 0.169927 0.929319 +vn 0.041780 0.927213 0.372112 +vn 0.327799 0.169927 0.929319 +vn -0.041780 0.927213 0.372112 +vn -0.277932 0.260201 0.924680 +vn -0.750725 0.111545 0.651112 +vn 0.750725 0.111545 0.651112 +vn 0.277932 0.260201 0.924680 +vn -0.437910 -0.293985 0.849574 +vn -0.183782 0.036836 0.982269 +vn -0.554216 0.387219 0.736808 +vn -0.814325 0.253426 0.522111 +vn 0.554216 0.387219 0.736808 +vn 0.183782 0.036836 0.982269 +vn 0.437910 -0.293985 0.849574 +vn 0.814325 0.253426 0.522111 +vn -0.326670 -0.001617 0.945128 +vn -0.704337 -0.526872 0.475692 +vn 0.704337 -0.526872 0.475692 +vn 0.326670 -0.001617 0.945128 +vn -0.308786 0.134617 0.941527 +vn -0.629170 -0.371441 0.682730 +vn 0.629170 -0.371441 0.682730 +vn 0.308786 0.134617 0.941527 +vn 0.146184 0.948637 0.280465 +vn -0.137516 0.905820 0.400708 +vn 0.137516 0.905820 0.400708 +vn -0.146184 0.948637 0.280465 +vn 0.723746 0.690023 -0.005219 +vn -0.723746 0.690023 -0.005219 +vn 0.994690 -0.078005 0.067019 +vn -0.994690 -0.078005 0.067019 +vn 0.200934 -0.758141 0.620350 +vn -0.200934 -0.758141 0.620350 +vn -0.541246 -0.672658 0.504501 +vn 0.541246 -0.672658 0.504501 +vn -0.690054 -0.553209 0.466628 +vn 0.690054 -0.553209 0.466628 +vn -0.464003 0.686666 0.559557 +vn 0.464003 0.686666 0.559557 +vn -0.827448 -0.135899 0.544786 +vn 0.827448 -0.135899 0.544786 +vn -0.466231 0.808863 0.358196 +vn 0.466231 0.808863 0.358196 +vn -0.743980 -0.022919 0.667776 +vn 0.743980 -0.022919 0.667776 +vn -0.711295 -0.638325 0.294137 +vn 0.711295 -0.638325 0.294137 +vn -0.709769 -0.501999 0.494125 +vn 0.709769 -0.501999 0.494125 +vn -0.818903 -0.425520 0.385113 +vn -0.992523 -0.071444 -0.098758 +vn 0.992523 -0.071444 -0.098758 +vn 0.818903 -0.425520 0.385113 +vn -0.439192 -0.273568 0.855708 +vn 0.439192 -0.273568 0.855708 +vn -0.414686 -0.059877 0.907956 +vn 0.414686 -0.059877 0.907956 +vn -0.341563 0.452132 0.823939 +vn 0.341563 0.452132 0.823939 +vn -0.724509 -0.684927 0.076632 +vn -0.987548 -0.123020 0.097995 +vn 0.987548 -0.123020 0.097995 +vn 0.724509 -0.684927 0.076632 +vn -0.572741 -0.088443 0.814936 +vn 0.572741 -0.088443 0.814936 +vn -0.291818 -0.152104 0.944273 +vn 0.291818 -0.152104 0.944273 +vn 0.239662 -0.128605 0.962279 +vn -0.239662 -0.128605 0.962279 +vn 0.187017 0.370678 0.909696 +vn -0.187017 0.370678 0.909696 +vn -0.455794 0.423170 0.783044 +vn 0.455794 0.423170 0.783044 +vn -0.543504 -0.813379 -0.207343 +vn -0.560045 -0.814417 -0.151738 +vn 0.560045 -0.814417 -0.151738 +vn 0.543504 -0.813379 -0.207343 +vn -0.615375 -0.087649 -0.783319 +vn -0.447310 0.229530 -0.864406 +vn 0.447310 0.229530 -0.864406 +vn 0.615375 -0.087649 -0.783319 +vn -0.547166 -0.832179 -0.089785 +vn 0.547166 -0.832179 -0.089785 +vn -0.873135 0.486984 -0.020264 +vn -0.865352 0.331217 -0.376049 +vn 0.865352 0.331217 -0.376049 +vn 0.873135 0.486984 -0.020264 +vn -0.748741 0.518387 0.413038 +vn 0.748741 0.518387 0.413038 +vn -0.766167 0.634816 0.099612 +vn 0.766167 0.634816 0.099612 +vn -0.953185 -0.248299 -0.172430 +vn -0.665639 0.602496 -0.440321 +vn 0.665639 0.602496 -0.440321 +vn 0.953185 -0.248299 -0.172430 +vn -0.322642 0.847713 0.421033 +vn -0.188574 0.788934 -0.584765 +vn 0.188574 0.788934 -0.584765 +vn 0.322642 0.847713 0.421033 +vn -0.239784 0.745262 -0.622120 +vn 0.494247 0.520585 -0.696158 +vn -0.494247 0.520585 -0.696158 +vn 0.239784 0.745262 -0.622120 +vn -0.480697 0.731223 0.483932 +vn 0.000000 0.758690 0.651418 +vn 0.480697 0.731223 0.483932 +vn -0.489242 0.762963 0.422498 +vn -0.363109 0.908567 -0.206458 +vn 0.363109 0.908567 -0.206458 +vn 0.489242 0.762963 0.422498 +vn -0.645039 0.694540 0.318613 +vn 0.645039 0.694540 0.318613 +vn -0.492843 0.869015 0.043062 +vn -0.679434 0.728965 -0.083468 +vn 0.492843 0.869015 0.043062 +vn 0.679434 0.728965 -0.083468 +vn -0.391736 0.826014 -0.405225 +vn -0.644398 0.527207 -0.553880 +vn 0.391736 0.826014 -0.405225 +vn 0.644398 0.527207 -0.553880 +vn 0.000000 0.800714 -0.599017 +vn 0.000000 0.330729 -0.943693 +vn 0.000000 0.999664 0.025636 +vn 0.000000 -0.271462 -0.962432 +vn -0.685293 -0.583148 -0.436232 +vn -0.907224 0.252602 -0.336253 +vn 0.907224 0.252602 -0.336253 +vn 0.685293 -0.583148 -0.436232 +vn 0.000000 -0.984344 -0.176214 +vn 0.000000 -0.736351 -0.676565 +vn 0.000000 -0.948759 -0.315928 +vn 0.000000 -0.648244 -0.761406 +vn -0.317362 -0.946959 -0.049959 +vn -0.838282 -0.408155 0.361461 +vn 0.838282 -0.408155 0.361461 +vn 0.317362 -0.946959 -0.049959 +vn -0.939360 0.325999 0.106113 +vn 0.939360 0.325999 0.106113 +vn -0.930631 0.340159 0.134770 +vn -0.960143 0.231361 0.156774 +vn 0.960143 0.231361 0.156774 +vn 0.930631 0.340159 0.134770 +vn -0.812555 -0.001068 -0.582842 +vn -0.979583 0.093387 0.177862 +vn 0.979583 0.093387 0.177862 +vn 0.812555 -0.001068 -0.582842 +vn -0.272530 -0.301157 -0.913785 +vn 0.272530 -0.301157 -0.913785 +vn -0.090915 -0.776330 -0.623707 +vn -0.506851 -0.488144 -0.710471 +vn -0.142521 -0.147282 -0.978759 +vn -0.637257 0.093326 -0.764946 +vn 0.637257 0.093326 -0.764946 +vn 0.506851 -0.488144 -0.710471 +vn 0.142521 -0.147282 -0.978759 +vn 0.090915 -0.776330 -0.623707 +vn -0.937284 -0.254250 0.238350 +vn 0.937284 -0.254250 0.238350 +vn -0.430525 -0.895260 0.114597 +vn 0.430525 -0.895260 0.114597 +vn -0.158391 -0.974822 0.156774 +vn 0.158391 -0.974822 0.156774 +vn 0.000000 -0.915860 -0.401440 +vn 0.000000 -0.946440 0.322855 +vn 0.000000 -0.336802 -0.941557 +vn 0.000000 -0.175726 -0.984436 +vn -0.599231 -0.773980 0.204566 +vn 0.599231 -0.773980 0.204566 +vn -0.890988 -0.423261 -0.164037 +vn 0.890988 -0.423261 -0.164037 +vn -0.851985 0.219275 0.475387 +vn 0.851985 0.219275 0.475387 +vn -0.509171 0.852229 0.119999 +vn 0.509171 0.852229 0.119999 +vn -0.610431 0.759148 0.225867 +vn 0.610431 0.759148 0.225867 +vn -0.182470 0.981780 0.052492 +vn 0.182470 0.981780 0.052492 +vn 0.520371 0.770348 0.368389 +vn -0.520371 0.770348 0.368389 +vn 0.852718 0.504257 0.136204 +vn -0.852718 0.504257 0.136204 +vn 0.000000 0.970214 0.242164 +vn -0.709647 0.261818 0.654042 +vn 0.067293 -0.064272 0.995636 +vn -0.246590 -0.034089 0.968505 +vn -0.809717 -0.010224 0.586688 +vn 0.246590 -0.034089 0.968505 +vn -0.067293 -0.064272 0.995636 +vn 0.709647 0.261818 0.654042 +vn 0.809717 -0.010224 0.586688 +vn -0.465835 -0.080325 0.881191 +vn -0.737114 -0.244179 0.630085 +vn 0.465835 -0.080325 0.881191 +vn 0.737114 -0.244179 0.630085 +vn -0.211951 -0.085971 0.973479 +vn -0.367504 -0.376476 0.850398 +vn 0.211951 -0.085971 0.973479 +vn 0.367504 -0.376476 0.850398 +vn -0.430280 0.556597 0.710624 +vn -0.020081 -0.072939 0.997131 +vn 0.020081 -0.072939 0.997131 +vn 0.430280 0.556597 0.710624 +vn -0.090976 0.597339 0.796777 +vn -0.187933 -0.091617 0.977874 +vn 0.187933 -0.091617 0.977874 +vn 0.090976 0.597339 0.796777 +vn 0.165929 0.609363 0.775292 +vn -0.203314 0.092532 0.974700 +vn 0.203314 0.092532 0.974700 +vn -0.165929 0.609363 0.775292 +vn 0.269295 0.241676 0.932218 +vn -0.314219 -0.132420 0.940062 +vn 0.314219 -0.132420 0.940062 +vn -0.269295 0.241676 0.932218 +vn 0.420057 -0.118992 0.899625 +vn -0.119755 -0.070925 0.990234 +vn 0.119755 -0.070925 0.990234 +vn -0.420057 -0.118992 0.899625 +vn 0.226142 -0.606586 0.762139 +vn -0.320841 0.040712 0.946226 +vn 0.320841 0.040712 0.946226 +vn -0.226142 -0.606586 0.762139 +vn 0.232612 -0.746055 0.623890 +vn -0.074557 -0.391644 0.917081 +vn 0.074557 -0.391644 0.917081 +vn -0.232612 -0.746055 0.623890 +vn -0.121250 -0.313883 0.941679 +vn -0.146702 -0.035707 0.988525 +vn 0.146702 -0.035707 0.988525 +vn 0.121250 -0.313883 0.941679 +vn -0.216834 -0.273721 0.937010 +vn -0.187445 0.001160 0.982269 +vn 0.187445 0.001160 0.982269 +vn 0.216834 -0.273721 0.937010 +vn -0.303018 -0.201941 0.931333 +vn -0.253090 -0.161809 0.953795 +vn 0.253090 -0.161809 0.953795 +vn 0.303018 -0.201941 0.931333 +vn -0.140110 -0.091189 0.985900 +vn 0.140110 -0.091189 0.985900 +vn -0.237983 0.050172 0.969939 +vn 0.237983 0.050172 0.969939 +vn -0.312662 -0.237922 0.919553 +vn 0.312662 -0.237922 0.919553 +vn -0.373791 -0.105197 0.921506 +vn 0.373791 -0.105197 0.921506 +vn -0.470595 -0.164647 0.866817 +vn 0.470595 -0.164647 0.866817 +vn -0.439222 -0.376141 0.815821 +vn 0.439222 -0.376141 0.815821 +vn -0.219611 -0.540635 0.812037 +vn 0.219611 -0.540635 0.812037 +vn 0.166967 -0.374828 0.911893 +vn -0.166967 -0.374828 0.911893 +vn 0.201849 -0.277596 0.939238 +vn -0.201849 -0.277596 0.939238 +vn 0.001160 -0.165563 0.986175 +vn -0.001160 -0.165563 0.986175 +vn 0.292917 -0.174108 0.940123 +vn -0.292917 -0.174108 0.940123 +vn 0.000000 0.732200 0.681051 +vn 0.000000 -0.603626 0.797266 +vn 0.000000 -0.971740 0.235908 +vn 0.131779 -0.608295 0.782678 +vn -0.131779 -0.608295 0.782678 +vn 0.759117 0.068392 0.647298 +vn -0.759117 0.068392 0.647298 +vn 0.405957 0.643605 0.648793 +vn -0.405957 0.643605 0.648793 +vn 0.000000 0.598346 0.801202 +vn 0.073855 -0.330546 0.940855 +vn 0.000000 -0.124516 0.992187 +vn -0.073855 -0.330546 0.940855 +vn -0.085116 -0.339244 0.936827 +vn 0.085116 -0.339244 0.936827 +vn -0.141881 -0.148350 0.978698 +vn 0.141881 -0.148350 0.978698 +vn 0.000000 -0.482803 0.875698 +vn -0.692984 -0.001343 0.720908 +vn -0.095523 -0.326090 0.940489 +vn 0.095523 -0.326090 0.940489 +vn 0.692984 -0.001343 0.720908 +vn -0.646687 0.162603 0.745201 +vn 0.646687 0.162603 0.745201 +vn -0.593463 0.121860 0.795556 +vn 0.593463 0.121860 0.795556 +vn -0.124363 0.009674 0.992187 +vn -0.509995 -0.457717 0.728233 +vn 0.509995 -0.457717 0.728233 +vn 0.124363 0.009674 0.992187 +vn -0.972137 -0.167882 0.163549 +vn 0.972137 -0.167882 0.163549 +vn -0.715995 0.572161 0.399945 +vn 0.715995 0.572161 0.399945 +vn 0.000000 0.430525 0.902554 +vn 0.000000 0.010865 0.999939 +vn -0.221839 -0.606037 0.763848 +vn 0.000000 -0.492935 0.870022 +vn 0.000000 0.010315 0.999939 +vn -0.294320 -0.184484 0.937712 +vn 0.221839 -0.606037 0.763848 +vn 0.294320 -0.184484 0.937712 +vn -0.396924 0.534989 0.745781 +vn 0.247780 0.568224 0.784661 +vn -0.247780 0.568224 0.784661 +vn 0.396924 0.534989 0.745781 +vn -0.868221 -0.261330 0.421735 +vn -0.555986 -0.690695 0.462355 +vn 0.868221 -0.261330 0.421735 +vn 0.555986 -0.690695 0.462355 +vn -0.753075 0.649892 0.102298 +vn 0.753075 0.649892 0.102298 +vn 0.194189 0.935697 0.294473 +vn -0.194189 0.935697 0.294473 +vn 0.000000 0.788965 0.614399 +vn 0.000000 -0.888638 0.458571 +vn 0.000000 -0.336772 0.941557 +vn 0.000000 -0.251991 0.967711 +vn -0.188360 -0.040132 0.981262 +vn 0.000000 -0.032899 0.999451 +vn 0.188360 -0.040132 0.981262 +vn 0.000000 0.000000 1.000000 +vn -0.572039 -0.018708 0.820002 +vn -0.536332 -0.212409 0.816828 +vn 0.536332 -0.212409 0.816828 +vn 0.572039 -0.018708 0.820002 +vn -0.357707 -0.638325 0.681570 +vn 0.357707 -0.638325 0.681570 +vn -0.154302 -0.754112 0.638325 +vn 0.154302 -0.754112 0.638325 +vn 0.000000 -0.743461 0.668752 +vn 0.000000 -0.189123 0.981933 +vn 0.000000 -0.114475 0.993408 +vn 0.001404 -0.055635 0.998444 +vn -0.001404 -0.055635 0.998444 +vn -0.336283 -0.512833 0.789850 +vn 0.336283 -0.512833 0.789850 +vn -0.454543 -0.337077 0.824458 +vn 0.454543 -0.337077 0.824458 +vn -0.543474 -0.308603 0.780602 +vn 0.543474 -0.308603 0.780602 +vn -0.387158 -0.187811 0.902646 +vn 0.387158 -0.187811 0.902646 +vn -0.430647 -0.144902 0.890805 +vn 0.430647 -0.144902 0.890805 +vn -0.234016 -0.120548 0.964721 +vn 0.234016 -0.120548 0.964721 +vn -0.263833 0.168798 0.949675 +vn 0.263833 0.168798 0.949675 +vn 0.196722 0.141881 0.970122 +vn -0.196722 0.141881 0.970122 +vn -0.906766 -0.008332 0.421522 +vn -0.744133 -0.640919 0.188269 +vn 0.744133 -0.640919 0.188269 +vn 0.906766 -0.008332 0.421522 +vn -0.044191 -0.974395 0.220313 +vn 0.044191 -0.974395 0.220313 +vn 0.639943 -0.761498 0.102786 +vn -0.639943 -0.761498 0.102786 +vn 0.955504 -0.011444 0.294717 +vn -0.955504 -0.011444 0.294717 +vn 0.649678 0.754387 0.093570 +vn -0.649678 0.754387 0.093570 +vn -0.037049 0.978881 0.200903 +vn 0.037049 0.978881 0.200903 +vn -0.752342 0.635395 0.173742 +vn 0.752342 0.635395 0.173742 +vn -0.811792 -0.002777 0.583880 +vn -0.596942 0.486770 0.637684 +vn 0.596942 0.486770 0.637684 +vn 0.811792 -0.002777 0.583880 +vn -0.868221 -0.005829 0.496109 +vn -0.719504 0.473006 0.508469 +vn 0.719504 0.473006 0.508469 +vn 0.868221 -0.005829 0.496109 +vn -0.204260 0.828761 0.520951 +vn -0.095767 0.717277 0.690146 +vn 0.095767 0.717277 0.690146 +vn 0.204260 0.828761 0.520951 +vn 0.451704 0.459883 0.764458 +vn -0.451704 0.459883 0.764458 +vn 0.450362 0.693899 0.561815 +vn -0.450362 0.693899 0.561815 +vn 0.805536 0.109409 0.582324 +vn 0.691488 -0.074099 0.718558 +vn -0.691488 -0.074099 0.718558 +vn -0.805536 0.109409 0.582324 +vn 0.386212 -0.474685 0.790857 +vn -0.386212 -0.474685 0.790857 +vn 0.557756 -0.629109 0.541368 +vn -0.557756 -0.629109 0.541368 +vn -0.091159 -0.723716 0.684011 +vn -0.199744 -0.858058 0.473067 +vn 0.091159 -0.723716 0.684011 +vn 0.199744 -0.858058 0.473067 +vn -0.597949 -0.496475 0.629231 +vn 0.597949 -0.496475 0.629231 +vn -0.723197 -0.488907 0.487747 +vn 0.723197 -0.488907 0.487747 +usemtl Material_ray.png +s 1 +f 61/1/1 65/2/2 49/3/3 +f 50/4/4 66/5/5 62/6/6 +f 63/7/7 65/2/2 61/1/1 +f 62/6/6 66/5/5 64/8/8 +f 61/1/1 59/9/9 63/7/7 +f 64/8/8 60/10/10 62/6/6 +f 61/1/1 57/11/11 59/9/9 +f 60/10/10 58/12/12 62/6/6 +f 61/1/1 55/13/13 57/11/11 +f 58/12/12 56/14/14 62/6/6 +f 61/1/1 53/15/15 55/13/13 +f 56/14/14 54/16/16 62/6/6 +f 61/1/1 51/17/17 53/15/15 +f 54/16/16 52/18/18 62/6/6 +f 61/1/1 49/3/3 51/17/17 +f 52/18/18 50/4/4 62/6/6 +f 225/19/19 229/20/20 227/21/21 +f 228/22/22 230/23/23 226/24/24 +f 73/25/25 284/26/26 74/27/27 +f 74/28/27 285/29/28 73/30/25 +f 342/31/29 348/32/30 384/33/31 +f 385/34/32 349/35/33 343/36/34 +f 300/37/35 346/38/36 344/39/37 +f 345/40/38 347/41/39 301/42/40 +f 324/43/41 380/44/42 352/45/43 +f 353/46/44 381/47/45 325/48/46 +f 442/49/47 444/50/48 446/51/49 +f 447/52/50 445/53/51 443/54/52 +f 464/55/53 492/56/54 466/57/55 +f 467/58/56 493/59/57 465/60/58 +f 496/61/59 498/62/60 500/63/61 +f 501/64/62 499/65/63 497/66/64 +f 505/67/65 323/68/66 321/69/67 +f 505/67/65 321/69/67 391/70/68 +f 320/71/69 322/72/70 504/73/71 +f 320/71/69 504/73/71 390/74/72 +f 505/67/65 507/75/73 315/76/74 +f 505/67/65 315/76/74 323/68/66 +f 314/77/75 506/78/76 504/73/71 +f 314/77/75 504/73/71 322/72/70 +f 389/79/77 383/80/78 507/75/73 +f 383/80/78 315/76/74 507/75/73 +f 314/77/75 382/81/79 506/78/76 +f 382/81/79 388/82/80 506/78/76 +f 501/64/62 497/66/64 495/83/81 +f 501/64/62 495/83/81 503/84/82 +f 494/85/83 496/61/59 500/63/61 +f 494/85/83 500/63/61 502/86/84 +f 505/67/65 503/84/82 507/75/73 +f 503/84/82 495/83/81 507/75/73 +f 494/85/83 502/86/84 506/78/76 +f 502/86/84 504/73/71 506/78/76 +f 495/83/81 401/87/85 507/75/73 +f 401/87/85 389/79/77 507/75/73 +f 388/82/80 400/88/86 506/78/76 +f 400/88/86 494/85/83 506/78/76 +f 497/66/64 399/89/87 495/83/81 +f 399/89/87 401/87/85 495/83/81 +f 400/88/86 398/90/88 494/85/83 +f 398/90/88 496/61/59 494/85/83 +f 499/65/63 397/91/89 497/66/64 +f 397/91/89 399/89/87 497/66/64 +f 398/90/88 396/92/90 496/61/59 +f 396/92/90 498/62/60 496/61/59 +f 501/64/62 395/93/91 499/65/63 +f 395/93/91 397/91/89 499/65/63 +f 396/92/90 394/94/92 498/62/60 +f 394/94/92 500/63/61 498/62/60 +f 503/84/82 393/95/93 395/93/91 +f 503/84/82 395/93/91 501/64/62 +f 394/94/92 392/96/94 502/86/84 +f 394/94/92 502/86/84 500/63/61 +f 505/67/65 391/70/68 393/95/93 +f 505/67/65 393/95/93 503/84/82 +f 392/96/94 390/74/72 504/73/71 +f 392/96/94 504/73/71 502/86/84 +f 491/97/95 493/59/57 467/58/56 +f 491/97/95 467/58/56 469/98/96 +f 466/57/55 492/56/54 490/99/97 +f 466/57/55 490/99/97 468/100/98 +f 489/101/99 491/97/95 471/102/100 +f 491/97/95 469/98/96 471/102/100 +f 468/100/98 490/99/97 470/103/101 +f 490/99/97 488/104/102 470/103/101 +f 483/105/103 489/101/99 473/106/104 +f 489/101/99 471/102/100 473/106/104 +f 470/103/101 488/104/102 472/107/105 +f 488/104/102 482/108/106 472/107/105 +f 481/109/107 483/105/103 473/106/104 +f 481/109/107 473/106/104 475/110/108 +f 472/107/105 482/108/106 480/111/109 +f 472/107/105 480/111/109 474/112/110 +f 481/109/107 475/110/108 457/113/111 +f 475/110/108 455/114/112 457/113/111 +f 454/115/113 474/112/110 456/116/114 +f 474/112/110 480/111/109 456/116/114 +f 463/117/115 479/118/116 459/119/117 +f 463/117/115 459/119/117 461/120/118 +f 458/121/119 478/122/120 462/123/121 +f 458/121/119 462/123/121 460/124/122 +f 479/118/116 463/117/115 485/125/123 +f 463/117/115 453/126/124 485/125/123 +f 452/127/125 462/123/121 484/128/126 +f 462/123/121 478/122/120 484/128/126 +f 487/129/127 485/125/123 477/130/128 +f 485/125/123 453/126/124 477/130/128 +f 452/127/125 484/128/126 476/131/129 +f 484/128/126 486/132/130 476/131/129 +f 487/129/127 477/130/128 465/60/58 +f 487/129/127 465/60/58 493/59/57 +f 464/55/53 476/131/129 486/132/130 +f 464/55/53 486/132/130 492/56/54 +f 491/97/95 489/101/99 493/59/57 +f 489/101/99 487/129/127 493/59/57 +f 486/132/130 488/104/102 492/56/54 +f 488/104/102 490/99/97 492/56/54 +f 489/101/99 483/105/103 485/125/123 +f 489/101/99 485/125/123 487/129/127 +f 484/128/126 482/108/106 488/104/102 +f 484/128/126 488/104/102 486/132/130 +f 483/105/103 481/109/107 485/125/123 +f 481/109/107 479/118/116 485/125/123 +f 478/122/120 480/111/109 484/128/126 +f 480/111/109 482/108/106 484/128/126 +f 481/109/107 457/113/111 479/118/116 +f 457/113/111 459/119/117 479/118/116 +f 458/121/119 456/116/114 478/122/120 +f 456/116/114 480/111/109 478/122/120 +f 473/106/104 421/133/131 475/110/108 +f 421/133/131 419/134/132 475/110/108 +f 418/135/133 420/136/134 474/112/110 +f 420/136/134 472/107/105 474/112/110 +f 471/102/100 423/137/135 473/106/104 +f 423/137/135 421/133/131 473/106/104 +f 420/136/134 422/138/136 472/107/105 +f 422/138/136 470/103/101 472/107/105 +f 469/98/96 425/139/137 471/102/100 +f 425/139/137 423/137/135 471/102/100 +f 422/138/136 424/140/138 470/103/101 +f 424/140/138 468/100/98 470/103/101 +f 467/58/56 427/141/139 425/139/137 +f 467/58/56 425/139/137 469/98/96 +f 424/140/138 426/142/140 466/57/55 +f 424/140/138 466/57/55 468/100/98 +f 465/60/58 429/143/141 427/141/139 +f 465/60/58 427/141/139 467/58/56 +f 426/142/140 428/144/142 464/55/53 +f 426/142/140 464/55/53 466/57/55 +f 477/130/128 417/145/143 429/143/141 +f 477/130/128 429/143/141 465/60/58 +f 428/144/142 416/146/144 476/131/129 +f 428/144/142 476/131/129 464/55/53 +f 475/110/108 419/134/132 441/147/145 +f 475/110/108 441/147/145 455/114/112 +f 440/148/146 418/135/133 474/112/110 +f 440/148/146 474/112/110 454/115/113 +f 455/114/112 441/147/145 439/149/147 +f 455/114/112 439/149/147 457/113/111 +f 438/150/148 440/148/146 454/115/113 +f 438/150/148 454/115/113 456/116/114 +f 457/113/111 439/149/147 459/119/117 +f 439/149/147 437/151/149 459/119/117 +f 436/152/150 438/150/148 458/121/119 +f 438/150/148 456/116/114 458/121/119 +f 459/119/117 437/151/149 461/120/118 +f 437/151/149 435/153/151 461/120/118 +f 434/154/152 436/152/150 460/124/122 +f 436/152/150 458/121/119 460/124/122 +f 461/120/118 435/153/151 433/155/153 +f 461/120/118 433/155/153 463/117/115 +f 432/156/154 434/154/152 460/124/122 +f 432/156/154 460/124/122 462/123/121 +f 463/117/115 433/155/153 453/126/124 +f 433/155/153 451/157/155 453/126/124 +f 450/158/156 432/156/154 452/127/125 +f 432/156/154 462/123/121 452/127/125 +f 453/126/124 451/157/155 417/145/143 +f 453/126/124 417/145/143 477/130/128 +f 416/146/144 450/158/156 452/127/125 +f 416/146/144 452/127/125 476/131/129 +f 447/52/50 443/54/52 449/159/157 +f 443/54/52 313/160/158 449/159/157 +f 312/161/159 442/49/47 448/162/160 +f 442/49/47 446/51/49 448/162/160 +f 431/163/161 449/159/157 383/80/78 +f 449/159/157 313/160/158 383/80/78 +f 312/161/159 448/162/160 382/164/79 +f 448/162/160 430/165/162 382/164/79 +f 451/157/155 431/163/161 417/145/143 +f 431/163/161 415/166/163 417/145/143 +f 414/167/164 430/165/162 416/146/144 +f 430/165/162 450/158/156 416/146/144 +f 433/155/153 449/159/157 451/157/155 +f 449/159/157 431/163/161 451/157/155 +f 430/165/162 448/162/160 450/158/156 +f 448/162/160 432/156/154 450/158/156 +f 447/52/50 449/159/157 435/153/151 +f 449/159/157 433/155/153 435/153/151 +f 432/156/154 448/162/160 434/154/152 +f 448/162/160 446/51/49 434/154/152 +f 439/149/147 447/52/50 435/153/151 +f 439/149/147 435/153/151 437/151/149 +f 434/154/152 446/51/49 438/150/148 +f 434/154/152 438/150/148 436/152/150 +f 445/53/51 447/52/50 441/147/145 +f 447/52/50 439/149/147 441/147/145 +f 438/150/148 446/51/49 440/148/146 +f 446/51/49 444/50/48 440/148/146 +f 441/147/145 419/134/132 413/168/165 +f 441/147/145 413/168/165 445/53/51 +f 412/169/166 418/135/133 440/148/146 +f 412/169/166 440/148/146 444/50/48 +f 415/166/163 431/163/161 383/80/78 +f 415/166/163 383/80/78 389/79/77 +f 382/164/79 430/165/162 414/167/164 +f 382/164/79 414/167/164 388/170/80 +f 443/171/52 319/172/167 311/173/168 +f 443/171/52 311/173/168 313/174/158 +f 310/175/169 318/176/170 442/177/47 +f 310/175/169 442/177/47 312/178/159 +f 413/168/165 391/179/68 445/53/51 +f 391/179/68 321/180/67 445/53/51 +f 320/181/69 390/182/72 444/50/48 +f 390/182/72 412/169/166 444/50/48 +f 445/53/51 321/180/67 443/54/52 +f 321/183/67 319/172/167 443/171/52 +f 318/176/170 320/184/69 442/177/47 +f 320/181/69 444/50/48 442/49/47 +f 417/145/143 415/166/163 403/185/171 +f 417/145/143 403/185/171 429/143/141 +f 402/186/172 414/167/164 416/146/144 +f 402/186/172 416/146/144 428/144/142 +f 427/141/139 429/143/141 405/187/173 +f 429/143/141 403/185/171 405/187/173 +f 402/186/172 428/144/142 404/188/174 +f 428/144/142 426/142/140 404/188/174 +f 425/139/137 427/141/139 407/189/175 +f 427/141/139 405/187/173 407/189/175 +f 404/188/174 426/142/140 406/190/176 +f 426/142/140 424/140/138 406/190/176 +f 423/137/135 425/139/137 409/191/177 +f 425/139/137 407/189/175 409/191/177 +f 406/190/176 424/140/138 408/192/178 +f 424/140/138 422/138/136 408/192/178 +f 421/133/131 423/137/135 409/191/177 +f 421/133/131 409/191/177 411/193/179 +f 408/192/178 422/138/136 420/136/134 +f 408/192/178 420/136/134 410/194/180 +f 419/134/132 421/133/131 411/193/179 +f 419/134/132 411/193/179 413/168/165 +f 410/194/180 420/136/134 418/135/133 +f 410/194/180 418/135/133 412/169/166 +f 413/168/165 411/193/179 393/195/93 +f 413/168/165 393/195/93 391/179/68 +f 392/196/94 410/194/180 412/169/166 +f 392/196/94 412/169/166 390/182/72 +f 411/193/179 409/191/177 393/195/93 +f 409/191/177 395/197/91 393/195/93 +f 394/198/92 408/192/178 392/196/94 +f 408/192/178 410/194/180 392/196/94 +f 409/191/177 407/189/175 395/197/91 +f 407/189/175 397/199/89 395/197/91 +f 396/200/90 406/190/176 394/198/92 +f 406/190/176 408/192/178 394/198/92 +f 407/189/175 405/187/173 397/199/89 +f 405/187/173 399/89/87 397/199/89 +f 398/201/88 404/188/174 396/200/90 +f 404/188/174 406/190/176 396/200/90 +f 405/187/173 403/185/171 401/87/85 +f 405/187/173 401/87/85 399/89/87 +f 400/202/86 402/186/172 404/188/174 +f 400/202/86 404/188/174 398/201/88 +f 415/166/163 389/79/77 403/185/171 +f 389/79/77 401/87/85 403/185/171 +f 400/202/86 388/170/80 402/186/172 +f 388/170/80 414/167/164 402/186/172 +f 381/47/45 353/46/44 387/203/181 +f 353/46/44 351/204/182 387/203/181 +f 350/205/183 352/45/43 386/206/184 +f 352/45/43 380/44/42 386/206/184 +f 381/47/45 387/203/181 323/207/66 +f 387/203/181 321/183/67 323/207/66 +f 320/184/69 386/206/184 322/208/70 +f 386/206/184 380/44/42 322/208/70 +f 381/47/45 379/209/185 325/48/46 +f 379/209/185 317/210/186 325/48/46 +f 316/211/187 378/212/188 324/43/41 +f 378/212/188 380/44/42 324/43/41 +f 381/47/45 323/207/66 379/209/185 +f 323/207/66 315/213/74 379/209/185 +f 314/214/75 322/208/70 378/212/188 +f 322/208/70 380/44/42 378/212/188 +f 343/36/34 345/40/38 301/42/40 +f 343/36/34 301/42/40 385/34/32 +f 300/37/35 344/39/37 342/31/29 +f 300/37/35 342/31/29 384/33/31 +f 385/34/32 301/42/40 299/215/189 +f 385/34/32 299/215/189 319/172/167 +f 298/216/190 300/37/35 384/33/31 +f 298/216/190 384/33/31 318/176/170 +f 387/203/181 385/34/32 321/183/67 +f 385/34/32 319/172/167 321/183/67 +f 318/176/170 384/33/31 320/184/69 +f 384/33/31 386/206/184 320/184/69 +f 387/203/181 351/204/182 385/34/32 +f 351/204/182 349/35/33 385/34/32 +f 348/32/30 350/205/183 384/33/31 +f 350/205/183 386/206/184 384/33/31 +f 371/217/191 377/218/192 383/219/78 +f 377/218/192 315/213/74 383/219/78 +f 314/214/75 376/220/193 382/221/79 +f 376/220/193 370/222/194 382/221/79 +f 371/217/191 383/219/78 313/174/158 +f 371/217/191 313/174/158 369/223/195 +f 312/178/159 382/221/79 370/222/194 +f 312/178/159 370/222/194 368/224/196 +f 369/223/195 313/174/158 311/173/168 +f 369/223/195 311/173/168 363/225/197 +f 310/175/169 312/178/159 368/224/196 +f 310/175/169 368/224/196 362/226/198 +f 311/173/168 297/227/199 363/225/197 +f 297/227/199 295/228/200 363/225/197 +f 294/229/201 296/230/202 362/226/198 +f 296/230/202 310/175/169 362/226/198 +f 361/231/203 291/232/204 285/29/28 +f 361/231/203 285/29/28 74/28/27 +f 284/26/26 290/233/205 360/234/206 +f 284/26/26 360/234/206 74/27/27 +f 289/235/207 287/236/208 291/232/204 +f 287/236/208 285/29/28 291/232/204 +f 284/26/26 286/237/209 290/233/205 +f 286/237/209 288/238/210 290/233/205 +f 359/239/211 361/231/203 302/240/212 +f 361/231/203 74/28/27 302/240/212 +f 74/27/27 360/234/206 302/241/212 +f 360/234/206 358/242/213 302/241/212 +f 365/243/214 293/244/215 361/231/203 +f 293/244/215 291/232/204 361/231/203 +f 290/233/205 292/245/216 360/234/206 +f 292/245/216 364/246/217 360/234/206 +f 365/243/214 361/231/203 359/239/211 +f 365/243/214 359/239/211 367/247/218 +f 358/242/213 360/234/206 364/246/217 +f 358/242/213 364/246/217 366/248/219 +f 367/247/218 359/239/211 357/249/220 +f 367/247/218 357/249/220 373/250/221 +f 356/251/222 358/242/213 366/248/219 +f 356/251/222 366/248/219 372/252/223 +f 373/250/221 357/249/220 355/253/224 +f 373/250/221 355/253/224 375/254/225 +f 354/255/226 356/251/222 372/252/223 +f 354/255/226 372/252/223 374/256/227 +f 375/254/225 355/253/224 317/210/186 +f 375/254/225 317/210/186 379/209/185 +f 316/211/187 354/255/226 374/256/227 +f 316/211/187 374/256/227 378/212/188 +f 375/254/225 379/209/185 377/218/192 +f 379/209/185 315/213/74 377/218/192 +f 314/214/75 378/212/188 376/220/193 +f 378/212/188 374/256/227 376/220/193 +f 377/218/192 371/217/191 373/250/221 +f 377/218/192 373/250/221 375/254/225 +f 372/252/223 370/222/194 376/220/193 +f 372/252/223 376/220/193 374/256/227 +f 371/217/191 369/223/195 367/247/218 +f 371/217/191 367/247/218 373/250/221 +f 366/248/219 368/224/196 370/222/194 +f 366/248/219 370/222/194 372/252/223 +f 369/223/195 363/225/197 365/243/214 +f 369/223/195 365/243/214 367/247/218 +f 364/246/217 362/226/198 368/224/196 +f 364/246/217 368/224/196 366/248/219 +f 363/225/197 295/228/200 293/244/215 +f 363/225/197 293/244/215 365/243/214 +f 292/245/216 294/229/201 362/226/198 +f 292/245/216 362/226/198 364/246/217 +f 317/210/186 355/253/224 75/257/228 +f 317/210/186 75/257/228 76/258/229 +f 75/259/228 354/255/226 316/211/187 +f 75/259/228 316/211/187 76/260/229 +f 355/253/224 357/249/220 303/261/230 +f 355/253/224 303/261/230 75/257/228 +f 303/262/230 356/251/222 354/255/226 +f 303/262/230 354/255/226 75/259/228 +f 357/249/220 359/239/211 303/261/230 +f 359/239/211 302/240/212 303/261/230 +f 302/241/212 358/242/213 303/262/230 +f 358/242/213 356/251/222 303/262/230 +f 325/48/46 317/210/186 77/263/231 +f 317/210/186 76/258/229 77/263/231 +f 76/260/229 316/211/187 77/264/231 +f 316/211/187 324/43/41 77/264/231 +f 319/172/167 299/215/189 297/227/199 +f 319/172/167 297/227/199 311/173/168 +f 296/230/202 298/216/190 318/176/170 +f 296/230/202 318/176/170 310/175/169 +f 349/35/33 329/265/232 343/36/34 +f 329/265/232 327/266/233 343/36/34 +f 326/267/234 328/268/235 342/31/29 +f 328/268/235 348/32/30 342/31/29 +f 329/265/232 349/35/33 305/269/236 +f 329/265/232 305/269/236 309/270/237 +f 305/271/236 348/32/30 328/268/235 +f 305/271/236 328/268/235 309/272/237 +f 349/35/33 351/204/182 78/273/238 +f 349/35/33 78/273/238 305/269/236 +f 78/274/238 350/205/183 348/32/30 +f 78/274/238 348/32/30 305/271/236 +f 351/204/182 353/46/44 78/273/238 +f 353/46/44 304/275/239 78/273/238 +f 304/276/239 352/45/43 78/274/238 +f 352/45/43 350/205/183 78/274/238 +f 353/46/44 325/48/46 304/275/239 +f 325/48/46 77/263/231 304/275/239 +f 77/264/231 324/43/41 304/276/239 +f 324/43/41 352/45/43 304/276/239 +f 301/42/40 347/41/39 93/277/240 +f 347/278/39 80/279/241 93/280/240 +f 79/281/242 346/282/36 92/283/243 +f 346/38/36 300/37/35 92/284/243 +f 345/40/38 216/285/244 347/41/39 +f 216/286/244 80/279/241 347/278/39 +f 79/281/242 215/287/245 346/282/36 +f 215/288/245 344/39/37 346/38/36 +f 343/36/34 327/266/233 210/289/246 +f 327/266/233 82/290/247 210/289/246 +f 81/291/248 326/267/234 209/292/249 +f 326/267/234 342/31/29 209/292/249 +f 345/40/38 343/36/34 216/285/244 +f 343/36/34 210/289/246 216/285/244 +f 209/292/249 342/31/29 215/288/245 +f 342/31/29 344/39/37 215/288/245 +f 333/293/250 84/294/251 82/290/247 +f 333/293/250 82/290/247 327/266/233 +f 81/291/248 83/295/252 332/296/253 +f 81/291/248 332/296/253 326/267/234 +f 339/297/254 333/293/250 329/265/232 +f 333/293/250 327/266/233 329/265/232 +f 326/267/234 332/296/253 328/268/235 +f 332/296/253 338/298/255 328/268/235 +f 341/299/256 335/300/257 337/301/258 +f 335/300/257 331/302/259 337/301/258 +f 330/303/260 334/304/261 336/305/262 +f 334/304/261 340/306/263 336/305/262 +f 339/297/254 337/301/258 331/302/259 +f 339/297/254 331/302/259 333/293/250 +f 330/303/260 336/305/262 338/298/255 +f 330/303/260 338/298/255 332/296/253 +f 331/302/259 86/307/264 84/294/251 +f 331/302/259 84/294/251 333/293/250 +f 83/295/252 85/308/265 330/303/260 +f 83/295/252 330/303/260 332/296/253 +f 335/300/257 88/309/266 86/307/264 +f 335/300/257 86/307/264 331/302/259 +f 85/308/265 87/310/267 334/304/261 +f 85/308/265 334/304/261 330/303/260 +f 341/299/256 90/311/268 88/309/266 +f 341/299/256 88/309/266 335/300/257 +f 87/310/267 89/312/269 340/306/263 +f 87/310/267 340/306/263 334/304/261 +f 306/313/270 91/314/271 90/311/268 +f 306/313/270 90/311/268 341/299/256 +f 89/312/269 91/315/271 306/316/270 +f 89/312/269 306/316/270 340/306/263 +f 337/301/258 307/317/272 341/299/256 +f 307/317/272 306/313/270 341/299/256 +f 306/316/270 307/318/272 340/306/263 +f 307/318/272 336/305/262 340/306/263 +f 339/297/254 308/319/273 337/301/258 +f 308/319/273 307/317/272 337/301/258 +f 307/318/272 308/320/273 336/305/262 +f 308/320/273 338/298/255 336/305/262 +f 329/265/232 309/270/237 339/297/254 +f 309/270/237 308/319/273 339/297/254 +f 308/320/273 309/272/237 338/298/255 +f 309/272/237 328/268/235 338/298/255 +f 301/42/40 93/277/240 95/321/274 +f 301/42/40 95/321/274 299/215/189 +f 94/322/275 92/284/243 300/37/35 +f 94/322/275 300/37/35 298/216/190 +f 299/215/189 95/321/274 97/323/276 +f 299/215/189 97/323/276 297/227/199 +f 96/324/277 94/322/275 298/216/190 +f 96/324/277 298/216/190 296/230/202 +f 297/227/199 97/323/276 295/228/200 +f 97/323/276 99/325/278 295/228/200 +f 98/326/279 96/324/277 294/229/201 +f 96/324/277 296/230/202 294/229/201 +f 295/228/200 99/325/278 101/327/280 +f 295/228/200 101/327/280 293/244/215 +f 100/328/281 98/326/279 294/229/201 +f 100/328/281 294/229/201 292/245/216 +f 293/244/215 101/327/280 291/232/204 +f 101/327/280 103/329/282 291/232/204 +f 102/330/283 100/328/281 290/233/205 +f 100/328/281 292/245/216 290/233/205 +f 291/232/204 103/329/282 289/235/207 +f 103/329/282 105/331/284 289/235/207 +f 104/332/285 102/330/283 288/238/210 +f 102/330/283 290/233/205 288/238/210 +f 289/235/207 105/331/284 287/236/208 +f 105/331/284 107/333/286 287/236/208 +f 106/334/287 104/332/285 286/237/209 +f 104/332/285 288/238/210 286/237/209 +f 287/236/208 107/333/286 109/335/288 +f 287/236/208 109/335/288 285/29/28 +f 108/336/289 106/334/287 286/237/209 +f 108/336/289 286/237/209 284/26/26 +f 285/29/28 109/335/288 67/337/290 +f 285/29/28 67/337/290 73/30/25 +f 67/338/290 108/336/289 284/26/26 +f 67/338/290 284/26/26 73/25/25 +f 281/339/291 235/340/292 233/341/293 +f 281/339/291 233/341/293 283/342/294 +f 232/343/295 234/344/296 280/345/297 +f 232/343/295 280/345/297 282/346/298 +f 283/342/294 233/341/293 255/347/299 +f 283/342/294 255/347/299 261/348/300 +f 254/349/301 232/343/295 282/346/298 +f 254/349/301 282/346/298 260/350/302 +f 261/348/300 255/347/299 257/351/303 +f 261/348/300 257/351/303 259/352/304 +f 256/353/305 254/349/301 260/350/302 +f 256/353/305 260/350/302 258/354/306 +f 263/355/307 253/356/308 235/340/292 +f 263/355/307 235/340/292 281/339/291 +f 234/344/296 252/357/309 262/358/310 +f 234/344/296 262/358/310 280/345/297 +f 265/359/311 251/360/312 263/355/307 +f 251/360/312 253/356/308 263/355/307 +f 252/357/309 250/361/313 262/358/310 +f 250/361/313 264/362/314 262/358/310 +f 267/363/315 249/364/316 265/359/311 +f 249/364/316 251/360/312 265/359/311 +f 250/361/313 248/365/317 264/362/314 +f 248/365/317 266/366/318 264/362/314 +f 269/367/319 247/368/320 249/364/316 +f 269/367/319 249/364/316 267/363/315 +f 248/365/317 246/369/321 268/370/322 +f 248/365/317 268/370/322 266/366/318 +f 271/371/323 245/372/324 269/367/319 +f 245/372/324 247/368/320 269/367/319 +f 246/369/321 244/373/325 268/370/322 +f 244/373/325 270/374/326 268/370/322 +f 273/375/327 243/376/328 245/372/324 +f 273/375/327 245/372/324 271/371/323 +f 244/373/325 242/377/329 272/378/330 +f 244/373/325 272/378/330 270/374/326 +f 275/379/331 241/380/332 273/375/327 +f 241/380/332 243/376/328 273/375/327 +f 242/377/329 240/381/333 272/378/330 +f 240/381/333 274/382/334 272/378/330 +f 279/383/335 237/384/336 275/379/331 +f 237/384/336 241/380/332 275/379/331 +f 240/381/333 236/385/337 274/382/334 +f 236/385/337 278/386/338 274/382/334 +f 277/387/339 239/388/340 237/384/336 +f 277/387/339 237/384/336 279/383/335 +f 236/385/337 238/389/341 276/390/342 +f 236/385/337 276/390/342 278/386/338 +f 259/352/304 257/351/303 239/388/340 +f 259/352/304 239/388/340 277/387/339 +f 238/389/341 256/353/305 258/354/306 +f 238/389/341 258/354/306 276/390/342 +f 257/351/303 111/391/343 129/392/344 +f 257/351/303 129/392/344 239/388/340 +f 128/393/345 110/394/346 256/353/305 +f 128/393/345 256/353/305 238/389/341 +f 239/388/340 129/392/344 180/395/347 +f 239/388/340 180/395/347 237/384/336 +f 179/396/348 128/393/345 238/389/341 +f 179/396/348 238/389/341 236/385/337 +f 237/384/336 180/395/347 127/397/349 +f 237/384/336 127/397/349 241/380/332 +f 126/398/350 179/396/348 236/385/337 +f 126/398/350 236/385/337 240/381/333 +f 241/380/332 127/397/349 243/376/328 +f 127/397/349 125/399/351 243/376/328 +f 124/400/352 126/398/350 242/377/329 +f 126/398/350 240/381/333 242/377/329 +f 243/376/328 125/399/351 245/372/324 +f 125/399/351 123/401/353 245/372/324 +f 122/402/354 124/400/352 244/373/325 +f 124/400/352 242/377/329 244/373/325 +f 245/372/324 123/401/353 121/403/355 +f 245/372/324 121/403/355 247/368/320 +f 120/404/356 122/402/354 244/373/325 +f 120/404/356 244/373/325 246/369/321 +f 247/368/320 121/403/355 119/405/357 +f 247/368/320 119/405/357 249/364/316 +f 118/406/358 120/404/356 246/369/321 +f 118/406/358 246/369/321 248/365/317 +f 249/364/316 119/405/357 117/407/359 +f 249/364/316 117/407/359 251/360/312 +f 116/408/360 118/406/358 248/365/317 +f 116/408/360 248/365/317 250/361/313 +f 251/360/312 117/407/359 115/409/361 +f 251/360/312 115/409/361 253/356/308 +f 114/410/362 116/408/360 250/361/313 +f 114/410/362 250/361/313 252/357/309 +f 253/356/308 115/409/361 235/340/292 +f 115/409/361 182/411/363 235/340/292 +f 181/412/364 114/410/362 234/344/296 +f 114/410/362 252/357/309 234/344/296 +f 255/347/299 113/413/365 257/351/303 +f 113/413/365 111/391/343 257/351/303 +f 110/394/346 112/414/366 256/353/305 +f 112/414/366 254/349/301 256/353/305 +f 233/341/293 184/415/367 113/413/365 +f 233/341/293 113/413/365 255/347/299 +f 112/414/366 183/416/368 232/343/295 +f 112/414/366 232/343/295 254/349/301 +f 235/340/292 182/411/363 184/415/367 +f 235/340/292 184/415/367 233/341/293 +f 183/416/368 181/412/364 234/344/296 +f 183/416/368 234/344/296 232/343/295 +f 230/23/23 231/417/369 224/418/370 +f 230/23/23 224/418/370 226/24/24 +f 224/418/370 231/417/369 229/20/20 +f 224/418/370 229/20/20 225/19/19 +f 224/418/370 72/419/371 226/24/24 +f 72/419/371 223/420/372 226/24/24 +f 222/421/373 72/419/371 225/19/19 +f 72/419/371 224/418/370 225/19/19 +f 226/24/24 223/420/372 221/422/374 +f 226/24/24 221/422/374 228/22/22 +f 220/423/375 222/421/373 225/19/19 +f 220/423/375 225/19/19 227/21/21 +f 228/22/22 221/422/374 219/424/376 +f 228/22/22 219/424/376 230/23/23 +f 218/425/377 220/423/375 227/21/21 +f 218/425/377 227/21/21 229/20/20 +f 230/23/23 219/424/376 231/417/369 +f 219/424/376 217/426/378 231/417/369 +f 217/426/378 218/425/377 231/417/369 +f 218/425/377 229/20/20 231/417/369 +f 219/424/376 136/427/379 137/428/380 +f 219/424/376 137/428/380 217/426/378 +f 137/428/380 135/429/381 218/425/377 +f 137/428/380 218/425/377 217/426/378 +f 221/422/374 134/430/382 136/427/379 +f 221/422/374 136/427/379 219/424/376 +f 135/429/381 133/431/383 220/423/375 +f 135/429/381 220/423/375 218/425/377 +f 223/420/372 132/432/384 134/430/382 +f 223/420/372 134/430/382 221/422/374 +f 133/431/383 131/433/385 222/421/373 +f 133/431/383 222/421/373 220/423/375 +f 72/419/371 130/434/386 223/420/372 +f 130/434/386 132/432/384 223/420/372 +f 131/433/385 130/434/386 222/421/373 +f 130/434/386 72/419/371 222/421/373 +f 212/435/387 165/436/388 80/279/241 +f 212/435/387 80/279/241 216/286/244 +f 79/281/242 164/437/389 211/438/390 +f 79/281/242 211/438/390 215/287/245 +f 212/435/387 216/286/244 214/439/391 +f 216/286/244 210/440/246 214/439/391 +f 209/441/249 215/287/245 213/442/392 +f 215/287/245 211/438/390 213/442/392 +f 214/439/391 210/440/246 167/443/393 +f 210/440/246 82/444/247 167/443/393 +f 81/445/248 209/441/249 166/446/394 +f 209/441/249 213/442/392 166/446/394 +f 167/443/393 188/447/395 214/439/391 +f 188/447/395 145/448/396 214/439/391 +f 144/449/397 187/450/398 213/442/392 +f 187/450/398 166/446/394 213/442/392 +f 214/439/391 145/448/396 212/435/387 +f 145/448/396 143/451/399 212/435/387 +f 142/452/400 144/449/397 211/438/390 +f 144/449/397 213/442/392 211/438/390 +f 212/435/387 143/451/399 141/453/401 +f 212/435/387 141/453/401 165/436/388 +f 140/454/402 142/452/400 211/438/390 +f 140/454/402 211/438/390 164/437/389 +f 165/436/388 141/453/401 139/455/403 +f 165/436/388 139/455/403 177/456/404 +f 139/455/403 140/454/402 164/437/389 +f 139/455/403 164/437/389 177/456/404 +f 207/457/405 208/458/406 199/459/407 +f 207/457/405 199/459/407 205/460/408 +f 199/459/407 208/458/406 206/461/409 +f 199/459/407 206/461/409 204/462/410 +f 203/463/411 205/460/408 201/464/412 +f 205/460/408 199/459/407 201/464/412 +f 199/459/407 204/462/410 200/465/413 +f 204/462/410 202/466/414 200/465/413 +f 207/457/405 205/460/408 194/467/415 +f 207/457/405 194/467/415 192/468/416 +f 193/469/417 204/462/410 206/461/409 +f 193/469/417 206/461/409 191/470/418 +f 205/460/408 203/463/411 194/467/415 +f 203/463/411 196/471/419 194/467/415 +f 195/472/420 202/466/414 193/469/417 +f 202/466/414 204/462/410 193/469/417 +f 203/463/411 201/464/412 198/473/421 +f 203/463/411 198/473/421 196/471/419 +f 197/474/422 200/465/413 202/466/414 +f 197/474/422 202/466/414 195/472/420 +f 201/464/412 199/459/407 71/475/423 +f 201/464/412 71/475/423 198/473/421 +f 71/475/423 199/459/407 200/465/413 +f 71/475/423 200/465/413 197/474/422 +f 207/457/405 192/468/416 208/458/406 +f 192/468/416 70/476/424 208/458/406 +f 70/476/424 191/470/418 208/458/406 +f 191/470/418 206/461/409 208/458/406 +f 192/468/416 145/448/396 70/476/424 +f 145/448/396 190/477/425 70/476/424 +f 190/477/425 144/449/397 70/476/424 +f 144/449/397 191/470/418 70/476/424 +f 198/473/421 71/475/423 139/455/403 +f 71/478/423 138/479/426 139/480/403 +f 138/481/426 71/482/423 139/483/403 +f 71/475/423 197/474/422 139/455/403 +f 196/471/419 198/473/421 141/453/401 +f 198/473/421 139/455/403 141/453/401 +f 139/455/403 197/474/422 140/454/402 +f 197/474/422 195/472/420 140/454/402 +f 194/467/415 196/471/419 143/451/399 +f 196/471/419 141/453/401 143/451/399 +f 140/454/402 195/472/420 142/452/400 +f 195/472/420 193/469/417 142/452/400 +f 192/468/416 194/467/415 143/451/399 +f 192/468/416 143/451/399 145/448/396 +f 142/452/400 193/469/417 191/470/418 +f 142/452/400 191/470/418 144/449/397 +f 186/484/427 132/432/384 69/485/428 +f 132/432/384 130/434/386 69/485/428 +f 130/434/386 131/433/385 69/485/428 +f 131/433/385 185/486/429 69/485/428 +f 189/487/430 188/447/395 69/485/428 +f 188/447/395 186/484/427 69/485/428 +f 185/486/429 187/450/398 69/485/428 +f 187/450/398 189/487/430 69/485/428 +f 189/487/430 190/477/425 188/447/395 +f 190/477/425 145/448/396 188/447/395 +f 144/449/397 190/477/425 187/450/398 +f 190/477/425 189/487/430 187/450/398 +f 169/488/431 171/489/432 132/432/384 +f 169/488/431 132/432/384 186/484/427 +f 131/433/385 170/490/433 168/491/434 +f 131/433/385 168/491/434 185/486/429 +f 186/484/427 188/447/395 167/443/393 +f 186/484/427 167/443/393 169/488/431 +f 166/446/394 187/450/398 185/486/429 +f 166/446/394 185/486/429 168/491/434 +f 173/492/435 134/430/382 171/489/432 +f 134/430/382 132/432/384 171/489/432 +f 131/433/385 133/431/383 170/490/433 +f 133/431/383 172/493/436 170/490/433 +f 175/494/437 136/427/379 134/430/382 +f 175/494/437 134/430/382 173/492/435 +f 133/431/383 135/429/381 174/495/438 +f 133/431/383 174/495/438 172/493/436 +f 176/496/439 137/428/380 136/427/379 +f 176/496/439 136/427/379 175/494/437 +f 135/429/381 137/428/380 176/496/439 +f 135/429/381 176/496/439 174/495/438 +f 184/415/367 182/411/363 178/497/440 +f 182/411/363 177/456/404 178/497/440 +f 177/456/404 181/412/364 178/497/440 +f 181/412/364 183/416/368 178/497/440 +f 178/497/440 68/498/441 113/413/365 +f 178/497/440 113/413/365 184/415/367 +f 112/414/366 68/498/441 178/497/440 +f 112/414/366 178/497/440 183/416/368 +f 68/498/441 163/499/442 113/413/365 +f 163/499/442 111/391/343 113/413/365 +f 110/394/346 162/500/443 112/414/366 +f 162/500/443 68/498/441 112/414/366 +f 177/456/404 182/411/363 115/409/361 +f 177/456/404 115/409/361 165/436/388 +f 114/410/362 181/412/364 177/456/404 +f 114/410/362 177/456/404 164/437/389 +f 147/501/444 165/436/388 115/409/361 +f 147/501/444 115/409/361 117/407/359 +f 114/410/362 164/437/389 146/502/445 +f 114/410/362 146/502/445 116/408/360 +f 149/503/446 147/501/444 119/405/357 +f 147/501/444 117/407/359 119/405/357 +f 116/408/360 146/502/445 118/406/358 +f 146/502/445 148/504/447 118/406/358 +f 151/505/448 149/503/446 121/403/355 +f 149/503/446 119/405/357 121/403/355 +f 118/406/358 148/504/447 120/404/356 +f 148/504/447 150/506/449 120/404/356 +f 153/507/450 151/505/448 123/401/353 +f 151/505/448 121/403/355 123/401/353 +f 120/404/356 150/506/449 122/402/354 +f 150/506/449 152/508/451 122/402/354 +f 155/509/452 153/507/450 125/399/351 +f 153/507/450 123/401/353 125/399/351 +f 122/402/354 152/508/451 124/400/352 +f 152/508/451 154/510/453 124/400/352 +f 157/511/454 155/509/452 127/397/349 +f 155/509/452 125/399/351 127/397/349 +f 124/400/352 154/510/453 126/398/350 +f 154/510/453 156/512/455 126/398/350 +f 159/513/456 157/511/454 180/395/347 +f 157/511/454 127/397/349 180/395/347 +f 126/398/350 156/512/455 179/396/348 +f 156/512/455 158/514/457 179/396/348 +f 159/513/456 180/395/347 129/392/344 +f 159/513/456 129/392/344 161/515/458 +f 128/393/345 179/396/348 158/514/457 +f 128/393/345 158/514/457 160/516/459 +f 161/515/458 129/392/344 163/499/442 +f 129/392/344 111/391/343 163/499/442 +f 110/394/346 128/393/345 162/500/443 +f 128/393/345 160/516/459 162/500/443 +f 68/498/441 67/517/290 163/499/442 +f 67/517/290 109/518/288 163/499/442 +f 108/519/289 67/517/290 162/500/443 +f 67/517/290 68/498/441 162/500/443 +f 163/499/442 109/518/288 161/515/458 +f 109/518/288 107/520/286 161/515/458 +f 106/521/287 108/519/289 160/516/459 +f 108/519/289 162/500/443 160/516/459 +f 161/515/458 107/520/286 159/513/456 +f 107/520/286 105/522/284 159/513/456 +f 104/523/285 106/521/287 158/514/457 +f 106/521/287 160/516/459 158/514/457 +f 159/513/456 105/522/284 103/524/282 +f 159/513/456 103/524/282 157/511/454 +f 102/525/283 104/523/285 158/514/457 +f 102/525/283 158/514/457 156/512/455 +f 157/511/454 103/524/282 155/509/452 +f 103/524/282 101/526/280 155/509/452 +f 100/527/281 102/525/283 154/510/453 +f 102/525/283 156/512/455 154/510/453 +f 155/509/452 101/526/280 153/507/450 +f 101/526/280 99/528/278 153/507/450 +f 98/529/279 100/527/281 152/508/451 +f 100/527/281 154/510/453 152/508/451 +f 153/507/450 99/528/278 151/505/448 +f 99/528/278 97/530/276 151/505/448 +f 96/531/277 98/529/279 150/506/449 +f 98/529/279 152/508/451 150/506/449 +f 151/505/448 97/530/276 95/532/274 +f 151/505/448 95/532/274 149/503/446 +f 94/533/275 96/531/277 150/506/449 +f 94/533/275 150/506/449 148/504/447 +f 149/503/446 95/532/274 147/501/444 +f 95/532/274 93/280/240 147/501/444 +f 92/283/243 94/533/275 146/502/445 +f 94/533/275 148/504/447 146/502/445 +f 147/501/444 93/280/240 80/279/241 +f 147/501/444 80/279/241 165/436/388 +f 79/281/242 92/283/243 146/502/445 +f 79/281/242 146/502/445 164/437/389 +f 169/488/431 167/443/393 82/444/247 +f 169/488/431 82/444/247 84/534/251 +f 81/445/248 166/446/394 168/491/434 +f 81/445/248 168/491/434 83/535/252 +f 171/489/432 169/488/431 84/534/251 +f 171/489/432 84/534/251 86/536/264 +f 83/535/252 168/491/434 170/490/433 +f 83/535/252 170/490/433 85/537/265 +f 173/492/435 171/489/432 86/536/264 +f 173/492/435 86/536/264 88/538/266 +f 85/537/265 170/490/433 172/493/436 +f 85/537/265 172/493/436 87/539/267 +f 175/494/437 173/492/435 90/540/268 +f 173/492/435 88/538/266 90/540/268 +f 87/539/267 172/493/436 89/541/269 +f 172/493/436 174/495/438 89/541/269 +f 176/496/439 175/494/437 91/542/271 +f 175/494/437 90/540/268 91/542/271 +f 89/541/269 174/495/438 91/542/271 +f 174/495/438 176/496/439 91/542/271 +f 50/4/4 48/543/460 2/544/461 +f 50/4/4 2/544/461 66/5/5 +f 1/545/462 47/546/463 49/3/3 +f 1/545/462 49/3/3 65/2/2 +f 66/5/5 2/544/461 12/547/464 +f 66/5/5 12/547/464 64/8/8 +f 11/548/465 1/545/462 65/2/2 +f 11/548/465 65/2/2 63/7/7 +f 64/8/8 12/547/464 14/549/466 +f 64/8/8 14/549/466 60/10/10 +f 13/550/467 11/548/465 63/7/7 +f 13/550/467 63/7/7 59/9/9 +f 60/10/10 14/549/466 24/551/468 +f 60/10/10 24/551/468 58/12/12 +f 23/552/469 13/550/467 59/9/9 +f 23/552/469 59/9/9 57/11/11 +f 58/12/12 24/551/468 56/14/14 +f 24/551/468 26/553/470 56/14/14 +f 25/554/471 23/552/469 55/13/13 +f 23/552/469 57/11/11 55/13/13 +f 56/14/14 26/553/470 54/16/16 +f 26/553/470 36/555/472 54/16/16 +f 35/556/473 25/554/471 53/15/15 +f 25/554/471 55/13/13 53/15/15 +f 54/16/16 36/555/472 52/18/18 +f 36/555/472 38/557/474 52/18/18 +f 37/558/475 35/556/473 51/17/17 +f 35/556/473 53/15/15 51/17/17 +f 52/18/18 38/557/474 50/4/4 +f 38/557/474 48/543/460 50/4/4 +f 47/546/463 37/558/475 49/3/3 +f 37/558/475 51/17/17 49/3/3 +f 46/559/476 48/543/460 40/560/477 +f 48/543/460 38/557/474 40/560/477 +f 37/558/475 47/546/463 39/561/478 +f 47/546/463 45/562/479 39/561/478 +f 44/563/480 46/559/476 42/564/481 +f 46/559/476 40/560/477 42/564/481 +f 39/561/478 45/562/479 41/565/482 +f 45/562/479 43/566/483 41/565/482 +f 42/564/481 40/560/477 32/567/484 +f 40/560/477 34/568/485 32/567/484 +f 33/569/486 39/561/478 31/570/487 +f 39/561/478 41/565/482 31/570/487 +f 40/560/477 38/557/474 34/568/485 +f 38/557/474 36/555/472 34/568/485 +f 35/556/473 37/558/475 33/569/486 +f 37/558/475 39/561/478 33/569/486 +f 34/568/485 36/555/472 28/571/488 +f 36/555/472 26/553/470 28/571/488 +f 25/554/471 35/556/473 27/572/489 +f 35/556/473 33/569/486 27/572/489 +f 32/567/484 34/568/485 30/573/490 +f 34/568/485 28/571/488 30/573/490 +f 27/572/489 33/569/486 29/574/491 +f 33/569/486 31/570/487 29/574/491 +f 30/573/490 28/571/488 20/575/492 +f 28/571/488 22/576/493 20/575/492 +f 21/577/494 27/572/489 19/578/495 +f 27/572/489 29/574/491 19/578/495 +f 28/571/488 26/553/470 24/551/468 +f 28/571/488 24/551/468 22/576/493 +f 23/552/469 25/554/471 27/572/489 +f 23/552/469 27/572/489 21/577/494 +f 22/576/493 24/551/468 16/579/496 +f 24/551/468 14/549/466 16/579/496 +f 13/550/467 23/552/469 15/580/497 +f 23/552/469 21/577/494 15/580/497 +f 20/575/492 22/576/493 18/581/498 +f 22/576/493 16/579/496 18/581/498 +f 15/580/497 21/577/494 17/582/499 +f 21/577/494 19/578/495 17/582/499 +f 18/581/498 16/579/496 10/583/500 +f 18/581/498 10/583/500 8/584/501 +f 9/585/502 15/580/497 17/582/499 +f 9/585/502 17/582/499 7/586/503 +f 16/579/496 14/549/466 12/547/464 +f 16/579/496 12/547/464 10/583/500 +f 11/548/465 13/550/467 15/580/497 +f 11/548/465 15/580/497 9/585/502 +f 10/583/500 12/547/464 2/544/461 +f 10/583/500 2/544/461 4/587/504 +f 1/545/462 11/548/465 9/585/502 +f 1/545/462 9/585/502 3/588/505 +f 8/584/501 10/583/500 4/587/504 +f 8/584/501 4/587/504 6/589/506 +f 3/588/505 9/585/502 7/586/503 +f 3/588/505 7/586/503 5/590/507 +f 6/589/506 4/587/504 46/559/476 +f 6/589/506 46/559/476 44/563/480 +f 45/562/479 3/588/505 5/590/507 +f 45/562/479 5/590/507 43/566/483 +f 4/587/504 2/544/461 48/543/460 +f 4/587/504 48/543/460 46/559/476 +f 47/546/463 1/545/462 3/588/505 +f 47/546/463 3/588/505 45/562/479 diff --git a/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/meshes/suzanneNoUV.obj b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/meshes/suzanneNoUV.obj new file mode 100644 index 0000000..bb5caab --- /dev/null +++ b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/meshes/suzanneNoUV.obj @@ -0,0 +1,1518 @@ +# Blender v2.78 (sub 0) OBJ File: 'elmLogo.blend' +# www.blender.org +o Suzanne_Suzanne.001 +v 1.256235 1.096088 0.351251 +v 0.743765 1.096088 0.351251 +v 1.292840 1.054907 0.305495 +v 0.707160 1.054907 0.305495 +v 1.320294 1.032029 0.241436 +v 0.679706 1.032029 0.241436 +v 1.205903 0.986273 0.264314 +v 0.794097 0.986273 0.264314 +v 1.205903 1.018302 0.323797 +v 0.794097 1.018302 0.323797 +v 1.205903 1.077785 0.360402 +v 0.794097 1.077785 0.360402 +v 1.160147 1.096088 0.369554 +v 0.839853 1.096088 0.369554 +v 1.118966 1.054907 0.337524 +v 0.881034 1.054907 0.337524 +v 1.091512 1.032029 0.282617 +v 0.908487 1.032029 0.282617 +v 1.045756 1.141844 0.287192 +v 0.954244 1.141844 0.287192 +v 1.082361 1.141844 0.337524 +v 0.917639 1.141844 0.337524 +v 1.141844 1.141844 0.369554 +v 0.858155 1.141844 0.369554 +v 1.160147 1.192176 0.369554 +v 0.839853 1.192176 0.369554 +v 1.118966 1.228781 0.337524 +v 0.881034 1.228781 0.337524 +v 1.091512 1.256235 0.282617 +v 0.908487 1.256235 0.282617 +v 1.205903 1.301991 0.264314 +v 0.794097 1.301991 0.264314 +v 1.205903 1.265386 0.323797 +v 0.794097 1.265386 0.323797 +v 1.205903 1.210479 0.360402 +v 0.794097 1.210479 0.360402 +v 1.256235 1.192176 0.351251 +v 0.743765 1.192176 0.351251 +v 1.292840 1.228781 0.305495 +v 0.707160 1.228781 0.305495 +v 1.320294 1.256235 0.241436 +v 0.679706 1.256235 0.241436 +v 1.366050 1.141844 0.232285 +v 0.633950 1.141844 0.232285 +v 1.329445 1.141844 0.296344 +v 0.670555 1.141844 0.296344 +v 1.274537 1.141844 0.346675 +v 0.725462 1.141844 0.346675 +v 1.279113 1.141844 0.355827 +v 0.720887 1.141844 0.355827 +v 1.260810 1.196752 0.360402 +v 0.739189 1.196752 0.360402 +v 1.205903 1.219630 0.374129 +v 0.794097 1.219630 0.374129 +v 1.155571 1.196752 0.383280 +v 0.844429 1.196752 0.383280 +v 1.132693 1.141844 0.383280 +v 0.867307 1.141844 0.383280 +v 1.155571 1.091512 0.383280 +v 0.844429 1.091512 0.383280 +v 1.205903 1.141844 0.387856 +v 0.794097 1.141844 0.387856 +v 1.205903 1.068634 0.374129 +v 0.794097 1.068634 0.374129 +v 1.260810 1.091512 0.360402 +v 0.739189 1.091512 0.360402 +v 1.000000 1.251659 0.337524 +v 1.000000 1.205903 0.383280 +v 1.000000 0.601920 0.332949 +v 1.000000 0.812399 0.360402 +v 1.000000 0.890185 0.369554 +v 1.000000 0.547013 0.323797 +v 1.000000 1.237932 0.255163 +v 1.000000 1.334020 0.236860 +v 1.000000 1.526197 -0.417454 +v 1.000000 1.329445 -0.595903 +v 1.000000 1.041180 -0.582176 +v 1.000000 0.775794 -0.303063 +v 1.118966 0.890185 0.232285 +v 0.881034 0.890185 0.232285 +v 1.183025 0.743765 0.236860 +v 0.816975 0.743765 0.236860 +v 1.205903 0.592769 0.236860 +v 0.794097 0.592769 0.236860 +v 1.215054 0.478379 0.213982 +v 0.784945 0.478379 0.213982 +v 1.192176 0.446349 0.209407 +v 0.807824 0.446349 0.209407 +v 1.105239 0.432622 0.227709 +v 0.894760 0.432622 0.227709 +v 1.000000 0.423471 0.241436 +v 1.256235 0.917639 0.213982 +v 0.743765 0.917639 0.213982 +v 1.370625 0.977122 0.218558 +v 0.629374 0.977122 0.218558 +v 1.485016 1.086937 0.163650 +v 0.514984 1.086937 0.163650 +v 1.503319 1.251659 0.250587 +v 0.496681 1.251659 0.250587 +v 1.416382 1.283689 0.268890 +v 0.583618 1.283689 0.268890 +v 1.288264 1.352323 0.305495 +v 0.711735 1.352323 0.305495 +v 1.187600 1.443835 0.332949 +v 0.812399 1.443835 0.332949 +v 1.091512 1.420957 0.346675 +v 0.908487 1.420957 0.346675 +v 1.036605 1.288264 0.342100 +v 0.963395 1.288264 0.342100 +v 1.096088 1.242508 0.355827 +v 0.903912 1.242508 0.355827 +v 1.073210 1.178449 0.351251 +v 0.926790 1.178449 0.351251 +v 1.118966 1.054907 0.337524 +v 0.881034 1.054907 0.337524 +v 1.219630 1.009151 0.314646 +v 0.780370 1.009151 0.314646 +v 1.288264 1.036605 0.296344 +v 0.711735 1.036605 0.296344 +v 1.366050 1.109815 0.282617 +v 0.633950 1.109815 0.282617 +v 1.375201 1.173874 0.282617 +v 0.624799 1.173874 0.282617 +v 1.352323 1.219630 0.291768 +v 0.647677 1.219630 0.291768 +v 1.251659 1.256235 0.323797 +v 0.748340 1.256235 0.323797 +v 1.146420 1.274537 0.346675 +v 0.853580 1.274537 0.346675 +v 1.000000 0.551589 0.332949 +v 1.064059 0.579042 0.332949 +v 0.935941 0.579042 0.332949 +v 1.068634 0.510408 0.319222 +v 0.931365 0.510408 0.319222 +v 1.036605 0.482954 0.310070 +v 0.963395 0.482954 0.310070 +v 1.000000 0.478379 0.305495 +v 1.000000 0.885609 0.342100 +v 1.000000 0.917639 0.337524 +v 1.059483 0.913063 0.337524 +v 0.940517 0.913063 0.337524 +v 1.073210 0.867307 0.342100 +v 0.926790 0.867307 0.342100 +v 1.050332 0.830702 0.337524 +v 0.949668 0.830702 0.337524 +v 1.233357 0.972546 0.296344 +v 0.766643 0.972546 0.296344 +v 1.361474 1.032029 0.268890 +v 0.638525 1.032029 0.268890 +v 1.425533 1.118966 0.255163 +v 0.574467 1.118966 0.255163 +v 1.434684 1.219630 0.287192 +v 0.565316 1.219630 0.287192 +v 1.402655 1.242508 0.328373 +v 0.597345 1.242508 0.328373 +v 1.256235 1.320294 0.369554 +v 0.743765 1.320294 0.369554 +v 1.183025 1.375201 0.392432 +v 0.816975 1.375201 0.392432 +v 1.118966 1.361474 0.401583 +v 0.881034 1.361474 0.401583 +v 1.059483 1.251659 0.397007 +v 0.940517 1.251659 0.397007 +v 1.073210 0.940517 0.378705 +v 0.926790 0.940517 0.378705 +v 1.123542 0.739189 0.319222 +v 0.876458 0.739189 0.319222 +v 1.146420 0.588194 0.305495 +v 0.853580 0.588194 0.305495 +v 1.155571 0.519559 0.291768 +v 0.844429 0.519559 0.291768 +v 1.137269 0.464652 0.273465 +v 0.862731 0.464652 0.273465 +v 1.096088 0.455501 0.273465 +v 0.903912 0.455501 0.273465 +v 1.000000 0.446349 0.278041 +v 1.000000 1.027454 0.328373 +v 1.000000 1.123542 0.351251 +v 1.192176 1.279113 0.337524 +v 0.807824 1.279113 0.337524 +v 1.096088 1.082361 0.342100 +v 0.903912 1.082361 0.342100 +v 1.077785 1.123542 0.346675 +v 0.922214 1.123542 0.346675 +v 1.068634 0.597345 0.332949 +v 0.931365 0.597345 0.332949 +v 1.045756 0.739189 0.342100 +v 0.954244 0.739189 0.342100 +v 1.000000 0.739189 0.342100 +v 1.000000 0.807824 0.337524 +v 1.054907 0.839853 0.360402 +v 0.945092 0.839853 0.360402 +v 1.077785 0.867307 0.369554 +v 0.922214 0.867307 0.369554 +v 1.064059 0.922214 0.360402 +v 0.935941 0.922214 0.360402 +v 1.022878 0.926790 0.360402 +v 0.977122 0.926790 0.360402 +v 1.000000 0.881034 0.387856 +v 1.027454 0.913063 0.378705 +v 0.972546 0.913063 0.378705 +v 1.054907 0.908487 0.378705 +v 0.945092 0.908487 0.378705 +v 1.064059 0.867307 0.387856 +v 0.935941 0.867307 0.387856 +v 1.045756 0.853580 0.374129 +v 0.954244 0.853580 0.374129 +v 1.000000 0.830702 0.374129 +v 1.150995 0.816975 0.227709 +v 0.849004 0.816975 0.227709 +v 1.096088 0.858155 0.319222 +v 0.903912 0.858155 0.319222 +v 1.105239 0.816975 0.319222 +v 0.894760 0.816975 0.319222 +v 1.137269 0.853580 0.227709 +v 0.862731 0.853580 0.227709 +v 1.000000 0.487530 0.305495 +v 1.027454 0.492106 0.305495 +v 0.972546 0.492106 0.305495 +v 1.054907 0.519559 0.319222 +v 0.945092 0.519559 0.319222 +v 1.054907 0.565316 0.328373 +v 0.945092 0.565316 0.328373 +v 1.000000 0.542437 0.287192 +v 1.054907 0.560740 0.291768 +v 0.945092 0.560740 0.291768 +v 1.054907 0.524135 0.278041 +v 0.945092 0.524135 0.278041 +v 1.027454 0.501257 0.273465 +v 0.972546 0.501257 0.273465 +v 1.000000 0.496681 0.273465 +v 1.100664 1.128117 0.360402 +v 0.899336 1.128117 0.360402 +v 1.109815 1.091512 0.355827 +v 0.890185 1.091512 0.355827 +v 1.196752 1.251659 0.346675 +v 0.803248 1.251659 0.346675 +v 1.160147 1.247084 0.355827 +v 0.839853 1.247084 0.355827 +v 1.247084 1.233357 0.355827 +v 0.752916 1.233357 0.355827 +v 1.329445 1.205903 0.310070 +v 0.670555 1.205903 0.310070 +v 1.343172 1.169298 0.305495 +v 0.656828 1.169298 0.305495 +v 1.338596 1.114390 0.300919 +v 0.661404 1.114390 0.300919 +v 1.279113 1.059483 0.323797 +v 0.720887 1.059483 0.323797 +v 1.219630 1.036605 0.337524 +v 0.780370 1.036605 0.337524 +v 1.132693 1.064059 0.360402 +v 0.867307 1.064059 0.360402 +v 1.105239 1.173874 0.360402 +v 0.894760 1.173874 0.360402 +v 1.123542 1.219630 0.360402 +v 0.876458 1.219630 0.360402 +v 1.137269 1.210479 0.346675 +v 0.862731 1.210479 0.346675 +v 1.114390 1.173874 0.346675 +v 0.885609 1.173874 0.346675 +v 1.141844 1.073210 0.346675 +v 0.858155 1.073210 0.346675 +v 1.219630 1.050332 0.328373 +v 0.780370 1.050332 0.328373 +v 1.269962 1.068634 0.314646 +v 0.730038 1.068634 0.314646 +v 1.320294 1.123542 0.296344 +v 0.679706 1.123542 0.296344 +v 1.324869 1.164722 0.296344 +v 0.675130 1.164722 0.296344 +v 1.311142 1.196752 0.300919 +v 0.688857 1.196752 0.300919 +v 1.242508 1.228781 0.342100 +v 0.757492 1.228781 0.342100 +v 1.164722 1.233357 0.351251 +v 0.835277 1.233357 0.351251 +v 1.196752 1.237932 0.342100 +v 0.803248 1.237932 0.342100 +v 1.118966 1.100664 0.342100 +v 0.881034 1.100664 0.342100 +v 1.114390 1.132693 0.342100 +v 0.885609 1.132693 0.342100 +v 1.064059 1.269962 0.259739 +v 0.935941 1.269962 0.259739 +v 1.114390 1.388928 0.264314 +v 0.885609 1.388928 0.264314 +v 1.196752 1.402655 0.250587 +v 0.803248 1.402655 0.250587 +v 1.283689 1.324869 0.227709 +v 0.716311 1.324869 0.227709 +v 1.398079 1.265386 0.191104 +v 0.601920 1.265386 0.191104 +v 1.466714 1.237932 0.172802 +v 0.533286 1.237932 0.172802 +v 1.452987 1.096088 0.122470 +v 0.547013 1.096088 0.122470 +v 1.352323 1.000000 0.145348 +v 0.647677 1.000000 0.145348 +v 1.256235 0.945092 0.177377 +v 0.743765 0.945092 0.177377 +v 1.000000 1.526197 0.072138 +v 1.000000 1.576529 -0.142916 +v 1.000000 0.885609 -0.490664 +v 1.000000 0.730038 0.012655 +v 1.000000 0.428047 0.172802 +v 1.000000 0.528711 0.104167 +v 1.000000 0.665979 0.090441 +v 1.000000 0.716311 0.067562 +v 1.498743 1.137269 -0.065131 +v 0.501257 1.137269 -0.065131 +v 1.503319 1.187600 -0.124614 +v 0.496681 1.187600 -0.124614 +v 1.452987 1.155571 -0.353395 +v 0.547013 1.155571 -0.353395 +v 1.269962 1.256235 -0.508966 +v 0.730038 1.256235 -0.508966 +v 1.430109 0.972546 -0.055979 +v 0.569891 0.972546 -0.055979 +v 1.347747 0.926790 -0.193248 +v 0.652252 0.926790 -0.193248 +v 1.375201 0.995424 -0.348819 +v 0.624799 0.995424 -0.348819 +v 1.196752 1.032029 -0.486088 +v 0.803248 1.032029 -0.486088 +v 1.137269 0.794097 0.140772 +v 0.862731 0.794097 0.140772 +v 1.105239 0.757492 0.053836 +v 0.894760 0.757492 0.053836 +v 1.169298 0.583618 0.127046 +v 0.830702 0.583618 0.127046 +v 1.146420 0.707160 0.131621 +v 0.853580 0.707160 0.131621 +v 1.192176 0.464652 0.136197 +v 0.807824 0.464652 0.136197 +v 1.082361 0.556164 0.117894 +v 0.917639 0.556164 0.117894 +v 1.073210 0.684282 0.113319 +v 0.926790 0.684282 0.113319 +v 1.096088 0.446349 0.159075 +v 0.903912 0.446349 0.159075 +v 1.128117 0.835277 0.154499 +v 0.871882 0.835277 0.154499 +v 1.123542 0.867307 0.177377 +v 0.876458 0.867307 0.177377 +v 1.118966 0.899336 0.195680 +v 0.881034 0.899336 0.195680 +v 1.123542 0.771219 -0.001072 +v 0.876458 0.771219 -0.001072 +v 1.173874 0.816975 -0.252731 +v 0.826126 0.816975 -0.252731 +v 1.201327 0.913063 -0.412878 +v 0.798672 0.913063 -0.412878 +v 1.265386 1.507894 -0.321366 +v 0.734614 1.507894 -0.321366 +v 1.265386 1.544499 -0.138341 +v 0.734614 1.544499 -0.138341 +v 1.265386 1.498743 0.040109 +v 0.734614 1.498743 0.040109 +v 1.269962 1.306567 0.154499 +v 0.730038 1.306567 0.154499 +v 1.425533 1.237932 0.099592 +v 0.574467 1.237932 0.099592 +v 1.370625 1.265386 0.067562 +v 0.629374 1.265386 0.067562 +v 1.375201 1.411806 -0.065131 +v 0.624799 1.411806 -0.065131 +v 1.466714 1.329445 -0.023950 +v 0.533286 1.329445 -0.023950 +v 1.466714 1.361474 -0.165794 +v 0.533286 1.361474 -0.165794 +v 1.375201 1.439260 -0.211551 +v 0.624799 1.439260 -0.211551 +v 1.375201 1.398079 -0.357971 +v 0.624799 1.398079 -0.357971 +v 1.466714 1.315718 -0.307639 +v 0.533286 1.315718 -0.307639 +v 1.361474 1.192176 -0.440332 +v 0.638525 1.192176 -0.440332 +v 1.283689 1.013727 -0.417454 +v 0.716311 1.013727 -0.417454 +v 1.480440 1.192176 -0.216126 +v 0.519559 1.192176 -0.216126 +v 1.237932 0.899336 -0.010223 +v 0.762067 0.899336 -0.010223 +v 1.251659 0.885609 -0.220702 +v 0.748340 0.885609 -0.220702 +v 1.521621 1.237932 -0.234429 +v 0.478379 1.237932 -0.234429 +v 1.452987 0.917639 -0.170370 +v 0.547013 0.917639 -0.170370 +v 1.608558 0.940517 -0.289336 +v 0.391442 0.940517 -0.289336 +v 1.750402 1.032029 -0.348819 +v 0.249597 1.032029 -0.348819 +v 1.791583 1.187600 -0.344244 +v 0.208417 1.187600 -0.344244 +v 1.722949 1.297415 -0.344244 +v 0.277051 1.297415 -0.344244 +v 1.599407 1.279113 -0.280185 +v 0.400593 1.279113 -0.280185 +v 1.594831 1.242508 -0.266458 +v 0.405169 1.242508 -0.266458 +v 1.695495 1.256235 -0.325941 +v 0.304505 1.256235 -0.325941 +v 1.741251 1.169298 -0.335093 +v 0.258749 1.169298 -0.335093 +v 1.709222 1.045756 -0.335093 +v 0.290778 1.045756 -0.335093 +v 1.603982 0.977122 -0.275609 +v 0.396017 0.977122 -0.275609 +v 1.485016 0.958819 -0.174946 +v 0.514984 0.958819 -0.174946 +v 1.539924 1.210479 -0.225278 +v 0.460076 1.210479 -0.225278 +v 1.553650 1.178449 -0.266458 +v 0.446349 1.178449 -0.266458 +v 1.517045 0.986273 -0.220702 +v 0.482954 0.986273 -0.220702 +v 1.608558 1.000000 -0.312214 +v 0.391442 1.000000 -0.312214 +v 1.695495 1.054907 -0.357971 +v 0.304505 1.054907 -0.357971 +v 1.722949 1.146420 -0.357971 +v 0.277051 1.146420 -0.357971 +v 1.686344 1.210479 -0.353395 +v 0.313656 1.210479 -0.353395 +v 1.599407 1.201327 -0.307639 +v 0.400593 1.201327 -0.307639 +v 1.494167 1.169298 -0.220702 +v 0.505832 1.169298 -0.220702 +v 1.489592 1.100664 -0.257307 +v 0.510408 1.100664 -0.257307 +v 1.443835 1.054907 -0.257307 +v 0.556164 1.054907 -0.257307 +v 1.480440 1.050332 -0.257307 +v 0.519559 1.050332 -0.257307 +v 1.494167 1.009151 -0.257307 +v 0.505832 1.009151 -0.257307 +v 1.475865 0.990849 -0.257307 +v 0.524135 0.990849 -0.257307 +v 1.425533 1.000000 -0.138341 +v 0.574467 1.000000 -0.138341 +v 1.420957 0.986273 -0.197824 +v 0.579042 0.986273 -0.197824 +v 1.420957 1.022878 -0.206975 +v 0.579042 1.022878 -0.206975 +v 1.466714 1.118966 -0.220702 +v 0.533286 1.118966 -0.220702 +v 1.521621 1.141844 -0.252731 +v 0.478379 1.141844 -0.252731 +v 1.521621 1.137269 -0.284761 +v 0.478379 1.137269 -0.284761 +v 1.475865 0.990849 -0.284761 +v 0.524135 0.990849 -0.284761 +v 1.498743 1.009151 -0.284761 +v 0.501257 1.009151 -0.284761 +v 1.485016 1.045756 -0.284761 +v 0.514984 1.045756 -0.284761 +v 1.448411 1.054907 -0.284761 +v 0.551589 1.054907 -0.284761 +v 1.494167 1.100664 -0.284761 +v 0.505832 1.100664 -0.284761 +v 1.608558 1.192176 -0.339668 +v 0.391442 1.192176 -0.339668 +v 1.695495 1.201327 -0.380849 +v 0.304505 1.201327 -0.380849 +v 1.736676 1.141844 -0.385424 +v 0.263324 1.141844 -0.385424 +v 1.709222 1.050332 -0.380849 +v 0.290778 1.050332 -0.380849 +v 1.613134 1.000000 -0.344244 +v 0.386866 1.000000 -0.344244 +v 1.517045 0.990849 -0.252731 +v 0.482954 0.990849 -0.252731 +v 1.558226 1.169298 -0.298488 +v 0.441774 1.169298 -0.298488 +v 1.521621 1.064059 -0.289336 +v 0.478379 1.064059 -0.289336 +v 1.549075 1.036605 -0.293912 +v 0.450925 1.036605 -0.293912 +v 1.585680 1.073210 -0.312214 +v 0.414320 1.073210 -0.312214 +v 1.562802 1.100664 -0.303063 +v 0.437198 1.100664 -0.303063 +v 1.594831 1.137269 -0.316790 +v 0.405169 1.137269 -0.316790 +v 1.617709 1.109815 -0.321366 +v 0.382291 1.109815 -0.321366 +v 1.649739 1.123542 -0.325941 +v 0.350261 1.123542 -0.325941 +v 1.636012 1.160147 -0.325941 +v 0.363988 1.160147 -0.325941 +v 1.599407 1.256235 -0.380849 +v 0.400593 1.256235 -0.380849 +v 1.732100 1.274537 -0.417454 +v 0.267900 1.274537 -0.417454 +v 1.800734 1.173874 -0.390000 +v 0.199266 1.173874 -0.390000 +v 1.768705 1.032029 -0.408303 +v 0.231295 1.032029 -0.408303 +v 1.608558 0.949668 -0.385424 +v 0.391442 0.949668 -0.385424 +v 1.462138 0.926790 -0.289336 +v 0.537862 0.926790 -0.289336 +v 1.503319 1.224205 -0.321366 +v 0.496681 1.224205 -0.321366 +vn 0.9777 -0.0110 0.2097 +vn 0.7277 -0.6545 0.2051 +vn 0.6040 -0.5102 0.6122 +vn 0.8021 -0.0034 0.5972 +vn -0.6040 -0.5102 0.6122 +vn -0.7277 -0.6545 0.2051 +vn -0.9777 -0.0110 0.2097 +vn -0.8021 -0.0034 0.5972 +vn 0.6829 -0.5475 0.4835 +vn 0.8684 -0.0033 0.4958 +vn -0.6829 -0.5475 0.4835 +vn -0.8684 -0.0033 0.4958 +vn 0.0982 -0.7510 0.6530 +vn 0.1159 -0.8670 0.4847 +vn -0.1159 -0.8670 0.4847 +vn -0.0982 -0.7510 0.6530 +vn 0.0375 -0.9651 0.2592 +vn -0.0375 -0.9651 0.2592 +vn -0.6554 -0.6928 0.3008 +vn -0.4514 -0.5393 0.7109 +vn 0.4514 -0.5393 0.7109 +vn 0.6554 -0.6928 0.3008 +vn -0.5512 -0.6358 0.5402 +vn 0.5512 -0.6358 0.5402 +vn -0.6940 -0.0035 0.7199 +vn -0.8148 -0.0038 0.5797 +vn 0.8148 -0.0038 0.5797 +vn 0.6940 -0.0035 0.7199 +vn -0.9460 -0.0128 0.3237 +vn 0.9460 -0.0128 0.3237 +vn -0.6622 0.6914 0.2889 +vn -0.4551 0.5251 0.7191 +vn 0.4551 0.5251 0.7191 +vn 0.6622 0.6914 0.2889 +vn -0.5298 0.6266 0.5716 +vn 0.5298 0.6266 0.5716 +vn 0.1019 0.7401 0.6647 +vn 0.1224 0.8373 0.5328 +vn -0.1224 0.8373 0.5328 +vn -0.1019 0.7401 0.6647 +vn 0.0321 0.9710 0.2369 +vn -0.0321 0.9710 0.2369 +vn 0.7320 0.6527 0.1949 +vn 0.6084 0.4949 0.6203 +vn -0.6084 0.4949 0.6203 +vn -0.7320 0.6527 0.1949 +vn 0.6722 0.5381 0.5084 +vn -0.6722 0.5381 0.5084 +vn 0.7220 0.6499 0.2374 +vn 0.9737 -0.0122 0.2273 +vn -0.7220 0.6499 0.2374 +vn -0.9737 -0.0122 0.2273 +vn 0.0374 0.9336 0.3564 +vn -0.0374 0.9336 0.3564 +vn -0.6263 0.6470 0.4348 +vn 0.6263 0.6470 0.4348 +vn -0.9113 -0.0123 0.4116 +vn 0.9113 -0.0123 0.4116 +vn -0.6181 -0.6538 0.4364 +vn 0.6181 -0.6538 0.4364 +vn 0.0369 -0.9351 0.3524 +vn -0.0369 -0.9351 0.3524 +vn 0.7150 -0.6569 0.2391 +vn -0.7150 -0.6569 0.2391 +vn 0.1836 -0.0053 0.9830 +vn -0.1836 -0.0053 0.9830 +vn 0.1576 -0.9745 0.1596 +vn 0.1679 -0.7535 0.6356 +vn 0.0000 -0.7922 0.6102 +vn 0.0000 -0.9777 0.2098 +vn -0.1679 -0.7535 0.6356 +vn -0.1576 -0.9745 0.1596 +vn 0.6541 -0.7418 0.1480 +vn 0.3630 -0.6184 0.6970 +vn -0.3630 -0.6184 0.6970 +vn -0.6541 -0.7418 0.1480 +vn 0.9696 -0.1473 0.1954 +vn 0.5559 -0.2160 0.8027 +vn -0.5559 -0.2160 0.8027 +vn -0.9696 -0.1473 0.1954 +vn 0.9758 0.0949 0.1970 +vn 0.5678 -0.0330 0.8224 +vn -0.5678 -0.0330 0.8224 +vn -0.9758 0.0949 0.1970 +vn 0.9651 0.2189 0.1435 +vn 0.5872 0.1119 0.8016 +vn -0.5872 0.1119 0.8016 +vn -0.9651 0.2189 0.1435 +vn 0.9053 -0.3891 0.1703 +vn 0.3605 -0.9316 0.0454 +vn 0.3809 -0.5175 0.7662 +vn 0.0663 -0.1929 0.9789 +vn -0.3809 -0.5176 0.7662 +vn -0.3605 -0.9316 0.0454 +vn -0.9053 -0.3891 0.1703 +vn -0.0663 -0.1929 0.9789 +vn 0.5889 -0.7908 0.1668 +vn 0.4987 -0.4011 0.7683 +vn -0.4987 -0.4011 0.7683 +vn -0.5889 -0.7908 0.1668 +vn 0.9126 -0.4027 -0.0698 +vn 0.5489 -0.3266 0.7694 +vn -0.5489 -0.3266 0.7694 +vn -0.9126 -0.4027 -0.0698 +vn 0.8801 0.4238 0.2138 +vn 0.4875 -0.1470 0.8606 +vn -0.4875 -0.1470 0.8606 +vn -0.8801 0.4238 0.2138 +vn 0.5100 0.8330 0.2144 +vn 0.3417 -0.0325 0.9392 +vn -0.3417 -0.0325 0.9392 +vn -0.5100 0.8330 0.2144 +vn 0.5978 0.7838 0.1683 +vn 0.3141 -0.0304 0.9489 +vn -0.3141 -0.0304 0.9489 +vn -0.5978 0.7838 0.1683 +vn 0.2283 0.9588 0.1689 +vn 0.2711 0.2130 0.9387 +vn -0.2711 0.2130 0.9387 +vn -0.2283 0.9588 0.1689 +vn -0.5987 0.7773 0.1930 +vn -0.1643 0.1590 0.9735 +vn 0.1643 0.1590 0.9735 +vn 0.5987 0.7773 0.1930 +vn -0.7917 0.5829 0.1826 +vn -0.0729 -0.0287 0.9969 +vn 0.0729 -0.0287 0.9969 +vn 0.7917 0.5829 0.1826 +vn 0.0000 0.9595 0.2816 +vn 0.0000 -0.0241 0.9997 +vn 0.2654 -0.2040 0.9423 +vn 0.2660 -0.1257 0.9557 +vn -0.2660 -0.1257 0.9557 +vn -0.2654 -0.2040 0.9423 +vn 0.1334 -0.0975 0.9862 +vn -0.1334 -0.0975 0.9862 +vn 0.1978 -0.0104 0.9802 +vn -0.1978 -0.0104 0.9802 +vn 0.2413 -0.3067 0.9207 +vn -0.2413 -0.3067 0.9207 +vn 0.3630 -0.2123 0.9073 +vn -0.3630 -0.2123 0.9073 +vn 0.4415 -0.2058 0.8733 +vn -0.4415 -0.2058 0.8733 +vn 0.4194 -0.3797 0.8245 +vn -0.4194 -0.3797 0.8245 +vn 0.3106 -0.3403 0.8875 +vn -0.3106 -0.3403 0.8875 +vn -0.1349 -0.2146 0.9673 +vn 0.1349 -0.2146 0.9673 +vn -0.3104 -0.1697 0.9353 +vn 0.0000 0.0135 0.9999 +vn 0.3104 -0.1697 0.9353 +vn 0.0284 -0.1986 0.9796 +vn -0.0284 -0.1986 0.9796 +vn 0.0000 -0.2235 0.9747 +vn -0.1624 -0.1997 0.9663 +vn 0.1624 -0.1997 0.9663 +vn -0.0252 -0.4118 0.9109 +vn 0.0000 -0.3312 0.9435 +vn 0.0252 -0.4118 0.9109 +vn 0.0891 -0.3229 0.9422 +vn -0.0891 -0.3229 0.9422 +vn 0.1559 -0.1706 0.9729 +vn -0.1559 -0.1706 0.9729 +vn 0.1386 0.0029 0.9903 +vn 0.1802 -0.0578 0.9819 +vn -0.1802 -0.0578 0.9819 +vn -0.1386 0.0029 0.9903 +vn 0.4969 -0.4356 0.7505 +vn 0.0000 -0.4576 0.8892 +vn 0.0000 -0.0041 1.0000 +vn -0.4969 -0.4356 0.7505 +vn 0.0000 -0.0342 0.9994 +vn 0.0000 -0.4257 0.9048 +vn 0.7215 -0.3646 0.5885 +vn 0.9246 -0.2129 0.3159 +vn 0.5803 -0.7306 0.3597 +vn -0.5803 -0.7306 0.3597 +vn -0.9246 -0.2129 0.3159 +vn -0.7215 -0.3646 0.5885 +vn 0.2528 0.3479 0.9028 +vn 0.6218 0.7744 0.1168 +vn -0.6218 0.7744 0.1168 +vn -0.2528 0.3479 0.9028 +vn 0.0000 0.5692 0.8221 +vn -0.3018 0.9416 0.1492 +vn 0.3018 0.9416 0.1492 +vn 0.0000 0.7592 0.6508 +vn 0.0000 0.7851 0.6193 +vn 0.0000 -0.8574 0.5146 +vn 0.2206 -0.5640 0.7958 +vn 0.0000 -0.5286 0.8489 +vn -0.2206 -0.5640 0.7958 +vn 0.0000 0.1136 0.9935 +vn -0.1992 0.6017 0.7734 +vn 0.1992 0.6017 0.7734 +vn 0.3664 0.4751 0.8000 +vn -0.3664 0.4751 0.8000 +vn 0.4296 -0.1849 0.8838 +vn -0.4296 -0.1849 0.8838 +vn 0.7430 0.0295 0.6686 +vn -0.7430 0.0295 0.6686 +vn 0.6464 0.1424 0.7496 +vn -0.6464 0.1424 0.7496 +vn 0.9385 0.3251 0.1160 +vn -0.9385 0.3251 0.1160 +vn 0.9534 0.2816 0.1079 +vn -0.9534 0.2816 0.1079 +vn 0.0000 -0.9031 0.4294 +vn -0.1140 -0.6151 0.7801 +vn 0.1140 -0.6151 0.7801 +vn -0.6503 0.0615 0.7572 +vn 0.6503 0.0615 0.7572 +vn -0.3705 0.5450 0.7521 +vn 0.3705 0.5450 0.7521 +vn 0.0000 0.6467 0.7627 +vn -0.3272 0.4745 0.8171 +vn 0.0000 0.5289 0.8487 +vn 0.3272 0.4745 0.8171 +vn -0.6748 0.1147 0.7290 +vn 0.6748 0.1147 0.7290 +vn -0.5163 -0.7041 0.4874 +vn 0.5163 -0.7041 0.4874 +vn 0.0000 -0.6988 0.7153 +vn -0.0170 -0.0610 0.9980 +vn 0.1649 -0.0897 0.9822 +vn 0.0170 -0.0610 0.9980 +vn -0.1649 -0.0897 0.9822 +vn 0.2358 -0.1089 0.9656 +vn -0.2358 -0.1089 0.9656 +vn 0.1633 -0.0836 0.9830 +vn -0.1633 -0.0836 0.9830 +vn 0.0129 -0.1560 0.9876 +vn -0.0129 -0.1560 0.9876 +vn 0.1998 -0.2072 0.9577 +vn -0.1998 -0.2072 0.9577 +vn 0.2858 -0.0425 0.9573 +vn -0.2858 -0.0425 0.9573 +vn 0.2990 -0.0934 0.9497 +vn -0.2990 -0.0934 0.9497 +vn 0.1870 -0.0655 0.9802 +vn -0.1870 -0.0655 0.9802 +vn 0.3063 0.0342 0.9513 +vn -0.3063 0.0342 0.9513 +vn 0.1730 -0.1109 0.9786 +vn -0.1730 -0.1109 0.9786 +vn 0.1657 0.1129 0.9797 +vn -0.1657 0.1129 0.9797 +vn 0.1828 0.0367 0.9825 +vn -0.1828 0.0367 0.9825 +vn 0.5010 -0.3839 0.7756 +vn 0.3063 -0.3431 0.8879 +vn -0.5010 -0.3839 0.7756 +vn -0.3063 -0.3431 0.8879 +vn 0.0021 -0.4953 0.8687 +vn -0.0021 -0.4953 0.8687 +vn -0.1401 -0.7620 0.6322 +vn 0.1401 -0.7620 0.6322 +vn -0.1943 -0.6160 0.7633 +vn 0.1943 -0.6160 0.7633 +vn -0.3549 -0.1286 0.9260 +vn 0.3549 -0.1286 0.9260 +vn -0.2549 0.2241 0.9406 +vn 0.2549 0.2241 0.9406 +vn -0.0831 0.5416 0.8365 +vn 0.0831 0.5416 0.8365 +vn 0.1489 0.6135 0.7755 +vn -0.1489 0.6135 0.7755 +vn 0.4245 0.5609 0.7108 +vn -0.4245 0.5609 0.7108 +vn 0.6875 0.2974 0.6625 +vn -0.6875 0.2974 0.6625 +vn 0.7464 -0.2134 0.6303 +vn -0.7464 -0.2134 0.6303 +vn 0.8052 0.0150 0.5928 +vn -0.8052 0.0150 0.5928 +vn -0.5046 0.8622 0.0448 +vn 0.0000 0.8794 0.4760 +vn 0.5046 0.8622 0.0448 +vn -0.4770 0.5100 -0.7158 +vn 0.4770 0.5100 -0.7158 +vn 0.1146 0.6555 -0.7464 +vn -0.1146 0.6555 -0.7464 +vn 0.3084 0.9138 -0.2642 +vn -0.3084 0.9138 -0.2642 +vn 0.3515 0.9087 -0.2249 +vn -0.3515 0.9087 -0.2249 +vn 0.7392 0.6005 -0.3048 +vn -0.7392 0.6005 -0.3048 +vn 0.9393 -0.3068 -0.1533 +vn -0.9393 -0.3068 -0.1533 +vn 0.5768 -0.8110 -0.0972 +vn -0.5768 -0.8110 -0.0972 +vn 0.4394 -0.8925 -0.1016 +vn -0.4394 -0.8925 -0.1016 +vn 0.0000 -0.3178 -0.9481 +vn 0.0000 -0.8051 -0.5931 +vn 0.7260 -0.5865 -0.3591 +vn 0.3375 -0.2535 -0.9066 +vn -0.7260 -0.5865 -0.3591 +vn -0.3375 -0.2535 -0.9066 +vn 0.0000 -0.2978 -0.9546 +vn 0.1293 -0.1789 -0.9753 +vn -0.1293 -0.1789 -0.9753 +vn 0.0000 -0.8508 -0.5255 +vn 0.0993 -0.7679 -0.6327 +vn -0.0993 -0.7679 -0.6327 +vn 0.5586 -0.4679 -0.6848 +vn -0.5586 -0.4679 -0.6848 +vn 0.6058 0.0208 -0.7953 +vn -0.6058 0.0208 -0.7953 +vn 0.7766 -0.0093 -0.6299 +vn -0.7766 -0.0093 -0.6299 +vn 0.9601 -0.0016 -0.2794 +vn -0.9601 -0.0016 -0.2794 +vn 0.9731 -0.2302 0.0002 +vn 0.9537 -0.1999 0.2246 +vn -0.9537 -0.1999 0.2246 +vn -0.9731 -0.2302 0.0002 +vn 0.8140 -0.5544 0.1732 +vn -0.8140 -0.5544 0.1732 +vn 0.0000 -0.3004 -0.9538 +vn 0.4237 -0.3240 -0.8459 +vn 0.5191 -0.6556 -0.5483 +vn 0.0000 -0.6966 -0.7174 +vn -0.5191 -0.6556 -0.5483 +vn -0.4237 -0.3240 -0.8459 +vn 0.5213 -0.8255 -0.2162 +vn 0.0000 -0.9410 -0.3385 +vn -0.5213 -0.8255 -0.2162 +vn 0.5887 -0.8081 -0.0185 +vn 0.0000 -0.9863 -0.1650 +vn -0.5887 -0.8081 -0.0185 +vn 0.7152 -0.6950 0.0736 +vn 0.9762 -0.2019 0.0787 +vn -0.7152 -0.6950 0.0736 +vn -0.9762 -0.2019 0.0787 +vn 0.0000 0.3141 -0.9494 +vn 0.4534 0.1969 -0.8693 +vn -0.4534 0.1969 -0.8693 +vn 0.0000 0.8267 0.5627 +vn 0.4610 0.7338 0.4989 +vn 0.4198 0.9069 0.0349 +vn 0.0000 0.9997 0.0232 +vn -0.4198 0.9069 0.0349 +vn -0.4610 0.7338 0.4989 +vn 0.4258 0.8032 -0.4165 +vn 0.0000 0.8325 -0.5539 +vn -0.4258 0.8032 -0.4165 +vn 0.7652 0.6244 0.1565 +vn 0.4721 0.7778 0.4149 +vn -0.7652 0.6244 0.1565 +vn -0.4721 0.7778 0.4149 +vn 0.7475 0.5326 0.3969 +vn 0.6514 0.6814 0.3335 +vn -0.7475 0.5326 0.3969 +vn -0.6514 0.6814 0.3335 +vn 0.8548 0.5181 -0.0301 +vn 0.6788 0.7318 -0.0612 +vn -0.8548 0.5181 -0.0301 +vn -0.6788 0.7318 -0.0612 +vn 0.8739 0.3070 -0.3769 +vn 0.6440 0.5379 -0.5438 +vn -0.8739 0.3070 -0.3769 +vn -0.6440 0.5379 -0.5438 +vn 0.6260 -0.0259 -0.7794 +vn 0.5860 -0.0155 -0.8101 +vn -0.5860 -0.0155 -0.8101 +vn -0.6260 -0.0259 -0.7794 +vn 0.3916 0.8280 0.4012 +vn -0.3916 0.8280 0.4012 +vn 0.0000 0.6204 0.7843 +vn 0.9989 -0.0455 0.0062 +vn -0.9989 -0.0455 0.0062 +vn 0.8965 0.3044 0.3220 +vn -0.8965 0.3044 0.3220 +vn 0.5809 -0.8007 -0.1463 +vn 0.5730 -0.8037 0.1600 +vn -0.5809 -0.8007 -0.1463 +vn -0.5730 -0.8037 0.1600 +vn 0.2744 -0.9600 -0.0552 +vn -0.2744 -0.9600 -0.0552 +vn 0.4020 -0.6167 -0.6767 +vn 0.5443 -0.4959 -0.6766 +vn -0.5443 -0.4959 -0.6766 +vn -0.4020 -0.6167 -0.6767 +vn 0.0163 0.8736 0.4863 +vn -0.2878 0.7388 0.6094 +vn 0.4590 -0.0631 0.8862 +vn 0.5420 -0.0674 0.8376 +vn -0.4590 -0.0631 0.8862 +vn 0.2878 0.7388 0.6094 +vn -0.0163 0.8736 0.4863 +vn -0.5420 -0.0674 0.8376 +vn 0.3174 -0.0930 0.9437 +vn 0.3604 0.8605 0.3600 +vn -0.3174 -0.0930 0.9437 +vn -0.3604 0.8605 0.3600 +vn -0.1201 -0.0897 0.9887 +vn 0.7896 0.1790 0.5869 +vn 0.1201 -0.0897 0.9887 +vn -0.7896 0.1790 0.5869 +vn -0.0240 0.2739 0.9614 +vn 0.6731 -0.4998 0.5450 +vn 0.0240 0.2739 0.9614 +vn -0.6731 -0.4998 0.5450 +vn 0.4922 0.2738 0.8263 +vn 0.4719 -0.7796 0.4117 +vn -0.4922 0.2738 0.8263 +vn -0.4719 -0.7796 0.4116 +vn 0.3413 0.3527 0.8712 +vn -0.0439 -0.6481 0.7602 +vn -0.3413 0.3527 0.8712 +vn 0.0439 -0.6481 0.7602 +vn -0.1665 0.9539 0.2497 +vn 0.2330 0.8788 0.4164 +vn -0.2330 0.8788 0.4164 +vn 0.1665 0.9539 0.2497 +vn -0.7613 0.6471 0.0399 +vn 0.7613 0.6471 0.0399 +vn -0.9810 -0.0934 0.1698 +vn 0.9810 -0.0934 0.1698 +vn -0.1410 -0.7728 0.6188 +vn 0.1410 -0.7728 0.6188 +vn 0.5587 -0.6583 0.5044 +vn -0.5587 -0.6583 0.5044 +vn 0.6878 -0.5533 0.4698 +vn -0.6878 -0.5533 0.4698 +vn 0.7450 0.0855 0.6615 +vn 0.8615 -0.4880 -0.1400 +vn -0.7450 0.0855 0.6615 +vn -0.8615 -0.4880 -0.1400 +vn 0.7427 -0.2611 0.6166 +vn -0.7427 -0.2611 0.6166 +vn 0.5933 0.5663 0.5720 +vn -0.5933 0.5663 0.5720 +vn 0.8837 -0.0624 0.4639 +vn 0.9210 -0.1749 0.3480 +vn -0.9210 -0.1749 0.3480 +vn -0.8837 -0.0624 0.4639 +vn 0.8589 0.0371 0.5108 +vn 0.5731 0.7262 0.3795 +vn -0.8589 0.0371 0.5108 +vn -0.5731 0.7262 0.3795 +vn 0.7481 -0.5799 0.3224 +vn 0.8720 -0.4240 0.2446 +vn -0.8720 -0.4240 0.2446 +vn -0.7481 -0.5799 0.3224 +vn 0.6963 -0.5412 0.4714 +vn -0.6963 -0.5412 0.4714 +vn 0.6669 -0.4348 0.6052 +vn 0.6358 -0.4092 0.6544 +vn -0.6669 -0.4348 0.6052 +vn -0.6358 -0.4092 0.6544 +vn 0.5714 -0.4259 0.7015 +vn -0.5714 -0.4259 0.7015 +vn 0.7837 0.2514 0.5680 +vn -0.7837 0.2514 0.5680 +vn 0.4447 0.3740 0.8138 +vn -0.4447 0.3740 0.8138 +vn 0.3739 0.3687 0.8510 +vn -0.3739 0.3687 0.8510 +vn 0.6600 0.3495 0.6650 +vn -0.6600 0.3495 0.6650 +vn -0.0507 0.9518 0.3023 +vn 0.0507 0.9518 0.3023 +vn 0.4844 -0.3373 0.8072 +vn -0.4844 -0.3373 0.8072 +vn -0.2485 -0.5826 0.7738 +vn 0.2485 -0.5826 0.7738 +vn -0.7433 -0.0973 0.6618 +vn 0.7433 -0.0973 0.6618 +vn -0.5392 0.4506 0.7114 +vn 0.5392 0.4506 0.7114 +vn 0.0873 0.7400 0.6668 +vn -0.0873 0.7400 0.6668 +vn 0.3854 0.1162 0.9153 +vn 0.1983 0.0051 0.9801 +vn -0.3854 0.1162 0.9153 +vn -0.1983 0.0051 0.9801 +vn 0.4315 -0.0331 0.9015 +vn 0.3281 0.0002 0.9446 +vn -0.4315 -0.0331 0.9015 +vn -0.3281 0.0002 0.9446 +vn 0.3447 -0.0767 0.9355 +vn 0.3178 0.0937 0.9435 +vn -0.3447 -0.0767 0.9355 +vn -0.3178 0.0937 0.9435 +vn 0.4365 -0.0136 0.8996 +vn 0.3573 0.2980 0.8851 +vn -0.4365 -0.0136 0.8996 +vn -0.3573 0.2980 0.8851 +vn -0.0797 -0.8453 -0.5283 +vn -0.0418 -0.6989 -0.7140 +vn 0.0797 -0.8453 -0.5283 +vn 0.0418 -0.6989 -0.7140 +vn 0.6149 -0.4906 -0.6174 +vn -0.6149 -0.4906 -0.6174 +vn 0.9234 0.0856 -0.3741 +vn -0.9234 0.0856 -0.3741 +vn 0.3048 0.6219 -0.7213 +vn -0.3048 0.6219 -0.7213 +vn -0.4176 0.5586 -0.7166 +vn 0.4176 0.5586 -0.7166 +vn -0.6562 0.5715 -0.4927 +vn 0.6562 0.5715 -0.4927 +s 1 +f 47//1 1//2 3//3 45//4 +f 4//5 2//6 48//7 46//8 +f 45//4 3//3 5//9 43//10 +f 6//11 4//5 46//8 44//12 +f 3//3 9//13 7//14 5//9 +f 8//15 10//16 4//5 6//11 +f 1//2 11//17 9//13 3//3 +f 10//16 12//18 2//6 4//5 +f 11//17 13//19 15//20 9//13 +f 16//21 14//22 12//18 10//16 +f 9//13 15//20 17//23 7//14 +f 18//24 16//21 10//16 8//15 +f 15//20 21//25 19//26 17//23 +f 20//27 22//28 16//21 18//24 +f 13//19 23//29 21//25 15//20 +f 22//28 24//30 14//22 16//21 +f 23//29 25//31 27//32 21//25 +f 28//33 26//34 24//30 22//28 +f 21//25 27//32 29//35 19//26 +f 30//36 28//33 22//28 20//27 +f 27//32 33//37 31//38 29//35 +f 32//39 34//40 28//33 30//36 +f 25//31 35//41 33//37 27//32 +f 34//40 36//42 26//34 28//33 +f 35//41 37//43 39//44 33//37 +f 40//45 38//46 36//42 34//40 +f 33//37 39//44 41//47 31//38 +f 42//48 40//45 34//40 32//39 +f 39//44 45//4 43//10 41//47 +f 44//12 46//8 40//45 42//48 +f 37//43 47//1 45//4 39//44 +f 46//8 48//7 38//46 40//45 +f 47//1 37//43 51//49 49//50 +f 52//51 38//46 48//7 50//52 +f 37//43 35//41 53//53 51//49 +f 54//54 36//42 38//46 52//51 +f 35//41 25//31 55//55 53//53 +f 56//56 26//34 36//42 54//54 +f 25//31 23//29 57//57 55//55 +f 58//58 24//30 26//34 56//56 +f 23//29 13//19 59//59 57//57 +f 60//60 14//22 24//30 58//58 +f 13//19 11//17 63//61 59//59 +f 64//62 12//18 14//22 60//60 +f 11//17 1//2 65//63 63//61 +f 66//64 2//6 12//18 64//62 +f 1//2 47//1 49//50 65//63 +f 50//52 48//7 2//6 66//64 +f 61//65 65//63 49//50 +f 50//52 66//64 62//66 +f 63//61 65//63 61//65 +f 62//66 66//64 64//62 +f 61//65 59//59 63//61 +f 64//62 60//60 62//66 +f 61//65 57//57 59//59 +f 60//60 58//58 62//66 +f 61//65 55//55 57//57 +f 58//58 56//56 62//66 +f 61//65 53//53 55//55 +f 56//56 54//54 62//66 +f 61//65 51//49 53//53 +f 54//54 52//51 62//66 +f 61//65 49//50 51//49 +f 52//51 50//52 62//66 +f 89//67 174//68 176//69 91//70 +f 176//69 175//71 90//72 91//70 +f 87//73 172//74 174//68 89//67 +f 175//71 173//75 88//76 90//72 +f 85//77 170//78 172//74 87//73 +f 173//75 171//79 86//80 88//76 +f 83//81 168//82 170//78 85//77 +f 171//79 169//83 84//84 86//80 +f 81//85 166//86 168//82 83//81 +f 169//83 167//87 82//88 84//84 +f 79//89 92//90 146//91 164//92 +f 147//93 93//94 80//95 165//96 +f 92//90 94//97 148//98 146//91 +f 149//99 95//100 93//94 147//93 +f 94//97 96//101 150//102 148//98 +f 151//103 97//104 95//100 149//99 +f 96//101 98//105 152//106 150//102 +f 153//107 99//108 97//104 151//103 +f 98//105 100//109 154//110 152//106 +f 155//111 101//112 99//108 153//107 +f 100//109 102//113 156//114 154//110 +f 157//115 103//116 101//112 155//111 +f 102//113 104//117 158//118 156//114 +f 159//119 105//120 103//116 157//115 +f 104//117 106//121 160//122 158//118 +f 161//123 107//124 105//120 159//119 +f 106//121 108//125 162//126 160//122 +f 163//127 109//128 107//124 161//123 +f 108//125 67//129 68//130 162//126 +f 68//130 67//129 109//128 163//127 +f 110//131 128//132 160//122 162//126 +f 161//123 129//133 111//134 163//127 +f 128//132 179//135 158//118 160//122 +f 159//119 180//136 129//133 161//123 +f 126//137 156//114 158//118 179//135 +f 159//119 157//115 127//138 180//136 +f 124//139 154//110 156//114 126//137 +f 157//115 155//111 125//140 127//138 +f 122//141 152//106 154//110 124//139 +f 155//111 153//107 123//142 125//140 +f 120//143 150//102 152//106 122//141 +f 153//107 151//103 121//144 123//142 +f 118//145 148//98 150//102 120//143 +f 151//103 149//99 119//146 121//144 +f 116//147 146//91 148//98 118//145 +f 149//99 147//93 117//148 119//146 +f 114//149 164//92 146//91 116//147 +f 147//93 165//96 115//150 117//148 +f 114//149 181//151 177//152 164//92 +f 177//152 182//153 115//150 165//96 +f 110//131 162//126 68//130 112//154 +f 68//130 163//127 111//134 113//155 +f 112//154 68//130 178//156 183//157 +f 178//156 68//130 113//155 184//158 +f 177//152 181//151 183//157 178//156 +f 184//158 182//153 177//152 178//156 +f 135//159 137//160 176//69 174//68 +f 176//69 137//160 136//161 175//71 +f 133//162 135//159 174//68 172//74 +f 175//71 136//161 134//163 173//75 +f 131//164 133//162 172//74 170//78 +f 173//75 134//163 132//165 171//79 +f 166//86 187//166 185//167 168//82 +f 186//168 188//169 167//87 169//83 +f 131//164 170//78 168//82 185//167 +f 169//83 171//79 132//165 186//168 +f 144//170 190//171 189//172 187//166 +f 189//172 190//171 145//173 188//169 +f 185//167 187//166 189//172 69//174 +f 189//172 188//169 186//168 69//174 +f 130//175 131//164 185//167 69//174 +f 186//168 132//165 130//175 69//174 +f 142//176 193//177 191//178 144//170 +f 192//179 194//180 143//181 145//173 +f 140//182 195//183 193//177 142//176 +f 194//180 196//184 141//185 143//181 +f 139//186 197//187 195//183 140//182 +f 196//184 198//188 139//186 141//185 +f 138//189 71//190 197//187 139//186 +f 198//188 71//190 138//189 139//186 +f 190//171 144//170 191//178 70//191 +f 192//179 145//173 190//171 70//191 +f 70//191 191//178 206//192 208//193 +f 207//194 192//179 70//191 208//193 +f 71//190 199//195 200//196 197//187 +f 201//197 199//195 71//190 198//188 +f 197//187 200//196 202//198 195//183 +f 203//199 201//197 198//188 196//184 +f 195//183 202//198 204//200 193//177 +f 205//201 203//199 196//184 194//180 +f 193//177 204//200 206//192 191//178 +f 207//194 205//201 194//180 192//179 +f 199//195 204//200 202//198 200//196 +f 203//199 205//201 199//195 201//197 +f 199//195 208//193 206//192 204//200 +f 207//194 208//193 199//195 205//201 +f 139//186 140//182 164//92 177//152 +f 165//96 141//185 139//186 177//152 +f 140//182 142//176 211//202 164//92 +f 212//203 143//181 141//185 165//96 +f 142//176 144//170 213//204 211//202 +f 214//205 145//173 143//181 212//203 +f 144//170 187//166 166//86 213//204 +f 167//87 188//169 145//173 214//205 +f 81//85 209//206 213//204 166//86 +f 214//205 210//207 82//88 167//87 +f 209//206 215//208 211//202 213//204 +f 212//203 216//209 210//207 214//205 +f 79//89 164//92 211//202 215//208 +f 212//203 165//96 80//95 216//209 +f 131//164 130//175 72//210 222//211 +f 72//210 130//175 132//165 223//212 +f 133//162 131//164 222//211 220//213 +f 223//212 132//165 134//163 221//214 +f 135//159 133//162 220//213 218//215 +f 221//214 134//163 136//161 219//216 +f 137//160 135//159 218//215 217//217 +f 219//216 136//161 137//160 217//217 +f 217//217 218//215 229//218 231//219 +f 230//220 219//216 217//217 231//219 +f 218//215 220//213 227//221 229//218 +f 228//222 221//214 219//216 230//220 +f 220//213 222//211 225//223 227//221 +f 226//224 223//212 221//214 228//222 +f 222//211 72//210 224//225 225//223 +f 224//225 72//210 223//212 226//224 +f 224//225 231//219 229//218 225//223 +f 230//220 231//219 224//225 226//224 +f 225//223 229//218 227//221 +f 228//222 230//220 226//224 +f 183//157 181//151 234//226 232//227 +f 235//228 182//153 184//158 233//229 +f 112//154 183//157 232//227 254//230 +f 233//229 184//158 113//155 255//231 +f 110//131 112//154 254//230 256//232 +f 255//231 113//155 111//134 257//233 +f 181//151 114//149 252//234 234//226 +f 253//235 115//150 182//153 235//228 +f 114//149 116//147 250//236 252//234 +f 251//237 117//148 115//150 253//235 +f 116//147 118//145 248//238 250//236 +f 249//239 119//146 117//148 251//237 +f 118//145 120//143 246//240 248//238 +f 247//241 121//144 119//146 249//239 +f 120//143 122//141 244//242 246//240 +f 245//243 123//142 121//144 247//241 +f 122//141 124//139 242//244 244//242 +f 243//245 125//140 123//142 245//243 +f 124//139 126//137 240//246 242//244 +f 241//247 127//138 125//140 243//245 +f 126//137 179//135 236//248 240//246 +f 237//249 180//136 127//138 241//247 +f 179//135 128//132 238//250 236//248 +f 239//251 129//133 180//136 237//249 +f 128//132 110//131 256//232 238//250 +f 257//233 111//134 129//133 239//251 +f 238//250 256//232 258//252 276//253 +f 259//254 257//233 239//251 277//255 +f 236//248 238//250 276//253 278//256 +f 277//255 239//251 237//249 279//257 +f 240//246 236//248 278//256 274//258 +f 279//257 237//249 241//247 275//259 +f 242//244 240//246 274//258 272//260 +f 275//259 241//247 243//245 273//261 +f 244//242 242//244 272//260 270//262 +f 273//261 243//245 245//243 271//263 +f 246//240 244//242 270//262 268//264 +f 271//263 245//243 247//241 269//265 +f 248//238 246//240 268//264 266//266 +f 269//265 247//241 249//239 267//267 +f 250//236 248//238 266//266 264//268 +f 267//267 249//239 251//237 265//269 +f 252//234 250//236 264//268 262//270 +f 265//269 251//237 253//235 263//271 +f 234//226 252//234 262//270 280//272 +f 263//271 253//235 235//228 281//273 +f 256//232 254//230 260//274 258//252 +f 261//275 255//231 257//233 259//254 +f 254//230 232//227 282//276 260//274 +f 283//277 233//229 255//231 261//275 +f 232//227 234//226 280//272 282//276 +f 281//273 235//228 233//229 283//277 +f 67//129 108//125 284//278 73//279 +f 285//280 109//128 67//129 73//279 +f 108//125 106//121 286//281 284//278 +f 287//282 107//124 109//128 285//280 +f 106//121 104//117 288//283 286//281 +f 289//284 105//120 107//124 287//282 +f 104//117 102//113 290//285 288//283 +f 291//286 103//116 105//120 289//284 +f 102//113 100//109 292//287 290//285 +f 293//288 101//112 103//116 291//286 +f 100//109 98//105 294//289 292//287 +f 295//290 99//108 101//112 293//288 +f 98//105 96//101 296//291 294//289 +f 297//292 97//104 99//108 295//290 +f 96//101 94//97 298//293 296//291 +f 299//294 95//100 97//104 297//292 +f 94//97 92//90 300//295 298//293 +f 301//296 93//94 95//100 299//294 +f 308//297 309//298 328//299 338//300 +f 329//301 309//298 308//297 339//302 +f 307//303 308//297 338//300 336//304 +f 339//302 308//297 307//303 337//305 +f 306//306 307//303 336//304 340//307 +f 337//305 307//303 306//306 341//308 +f 89//67 91//70 306//306 340//307 +f 306//306 91//70 90//72 341//308 +f 87//73 89//67 340//307 334//309 +f 341//308 90//72 88//76 335//310 +f 85//77 87//73 334//309 330//311 +f 335//310 88//76 86//80 331//312 +f 83//81 85//77 330//311 332//313 +f 331//312 86//80 84//84 333//314 +f 330//311 336//304 338//300 332//313 +f 339//302 337//305 331//312 333//314 +f 330//311 334//309 340//307 336//304 +f 341//308 335//310 331//312 337//305 +f 326//315 332//313 338//300 328//299 +f 339//302 333//314 327//316 329//301 +f 81//85 83//81 332//313 326//315 +f 333//314 84//84 82//88 327//316 +f 209//206 342//317 344//318 215//208 +f 345//319 343//320 210//207 216//209 +f 81//85 326//315 342//317 209//206 +f 343//320 327//316 82//88 210//207 +f 79//89 215//208 344//318 346//321 +f 345//319 216//209 80//95 347//322 +f 79//89 346//321 300//295 92//90 +f 301//296 347//322 80//95 93//94 +f 77//323 324//324 352//325 304//326 +f 353//327 325//328 77//323 304//326 +f 304//326 352//325 350//329 78//330 +f 351//331 353//327 304//326 78//330 +f 78//330 350//329 348//332 305//333 +f 349//334 351//331 78//330 305//333 +f 305//333 348//332 328//299 309//298 +f 329//301 349//334 305//333 309//298 +f 326//315 328//299 348//332 342//317 +f 349//334 329//301 327//316 343//320 +f 296//291 298//293 318//335 310//336 +f 319//337 299//294 297//292 311//338 +f 76//339 316//340 324//324 77//323 +f 325//328 317//341 76//339 77//323 +f 302//342 358//343 356//344 303//345 +f 357//346 359//347 302//342 303//345 +f 303//345 356//344 354//348 75//349 +f 355//350 357//346 303//345 75//349 +f 75//349 354//348 316//340 76//339 +f 317//341 355//350 75//349 76//339 +f 292//287 294//289 362//351 364//352 +f 363//353 295//290 293//288 365//354 +f 364//352 362//351 368//355 366//356 +f 369//357 363//353 365//354 367//358 +f 366//356 368//355 370//359 372//360 +f 371//361 369//357 367//358 373//362 +f 372//360 370//359 376//363 374//364 +f 377//365 371//361 373//362 375//366 +f 314//367 378//368 374//364 376//363 +f 375//366 379//369 315//370 377//365 +f 316//340 354//348 374//364 378//368 +f 375//366 355//350 317//341 379//369 +f 354//348 356//344 372//360 374//364 +f 373//362 357//346 355//350 375//366 +f 356//344 358//343 366//356 372//360 +f 367//358 359//347 357//346 373//362 +f 358//343 360//371 364//352 366//356 +f 365//354 361//372 359//347 367//358 +f 290//285 292//287 364//352 360//371 +f 365//354 293//288 291//286 361//372 +f 74//373 360//371 358//343 302//342 +f 359//347 361//372 74//373 302//342 +f 284//278 286//281 288//283 290//285 +f 289//284 287//282 285//280 291//286 +f 284//278 290//285 360//371 74//373 +f 361//372 291//286 285//280 74//373 +f 73//279 284//278 74//373 +f 74//373 285//280 73//279 +f 294//289 296//291 310//336 362//351 +f 311//338 297//292 295//290 363//353 +f 310//336 312//374 368//355 362//351 +f 369//357 313//375 311//338 363//353 +f 312//374 382//376 370//359 368//355 +f 371//361 383//377 313//375 369//357 +f 314//367 376//363 370//359 382//376 +f 371//361 377//365 315//370 383//377 +f 348//332 350//329 386//378 384//379 +f 387//380 351//331 349//334 385//381 +f 318//335 384//379 386//378 320//382 +f 387//380 385//381 319//337 321//383 +f 298//293 300//295 384//379 318//335 +f 385//381 301//296 299//294 319//337 +f 300//295 344//318 342//317 384//379 +f 343//320 345//319 301//296 385//381 +f 342//317 348//332 384//379 +f 385//381 349//334 343//320 +f 300//295 346//321 344//318 +f 345//319 347//322 301//296 +f 314//367 322//384 380//385 378//368 +f 381//386 323//387 315//370 379//369 +f 316//340 378//368 380//385 324//324 +f 381//386 379//369 317//341 325//328 +f 320//382 386//378 380//385 322//384 +f 381//386 387//380 321//383 323//387 +f 350//329 352//325 380//385 386//378 +f 381//386 353//327 351//331 387//380 +f 324//324 380//385 352//325 +f 353//327 381//386 325//328 +f 400//388 388//389 414//390 402//391 +f 415//392 389//393 401//394 403//395 +f 400//388 402//391 404//396 398//397 +f 405//398 403//395 401//394 399//399 +f 398//397 404//396 406//400 396//401 +f 407//402 405//398 399//399 397//403 +f 396//401 406//400 408//404 394//405 +f 409//406 407//402 397//403 395//407 +f 394//405 408//404 410//408 392//409 +f 411//410 409//406 395//407 393//411 +f 392//409 410//408 412//412 390//413 +f 413//414 411//410 393//411 391//415 +f 410//408 420//416 418//417 412//412 +f 419//418 421//419 411//410 413//414 +f 408//404 422//420 420//416 410//408 +f 421//419 423//421 409//406 411//410 +f 406//400 424//422 422//420 408//404 +f 423//421 425//423 407//402 409//406 +f 404//396 426//424 424//422 406//400 +f 425//423 427//425 405//398 407//402 +f 402//391 428//426 426//424 404//396 +f 427//425 429//427 403//395 405//398 +f 402//391 414//390 416//428 428//426 +f 417//429 415//392 403//395 429//427 +f 318//335 320//382 444//430 442//431 +f 445//432 321//383 319//337 443//433 +f 320//382 390//413 412//412 444//430 +f 413//414 391//415 321//383 445//432 +f 310//336 318//335 442//431 312//374 +f 443//433 319//337 311//338 313//375 +f 382//376 430//434 414//390 388//389 +f 415//392 431//435 383//377 389//393 +f 412//412 418//417 440//436 444//430 +f 441//437 419//418 413//414 445//432 +f 438//438 446//439 444//430 440//436 +f 445//432 447//440 439//441 441//437 +f 434//442 446//439 438//438 436//443 +f 439//441 447//440 435//444 437//445 +f 432//446 448//447 446//439 434//442 +f 447//440 449//448 433//449 435//444 +f 430//434 448//447 432//446 450//450 +f 433//449 449//448 431//435 451//451 +f 414//390 430//434 450//450 416//428 +f 451//451 431//435 415//392 417//429 +f 312//374 448//447 430//434 382//376 +f 431//435 449//448 313//375 383//377 +f 312//374 442//431 446//439 448//447 +f 447//440 443//433 313//375 449//448 +f 442//431 444//430 446//439 +f 447//440 445//432 443//433 +f 416//428 450//450 452//452 476//453 +f 453//454 451//451 417//429 477//455 +f 450//450 432//446 462//456 452//452 +f 463//457 433//449 451//451 453//454 +f 432//446 434//442 460//458 462//456 +f 461//459 435//444 433//449 463//457 +f 434//442 436//443 458//460 460//458 +f 459//461 437//445 435//444 461//459 +f 436//443 438//438 456//462 458//460 +f 457//463 439//441 437//445 459//461 +f 438//438 440//436 454//464 456//462 +f 455//465 441//437 439//441 457//463 +f 440//436 418//417 474//466 454//464 +f 475//467 419//418 441//437 455//465 +f 428//426 416//428 476//453 464//468 +f 477//455 417//429 429//427 465//469 +f 426//424 428//426 464//468 466//470 +f 465//469 429//427 427//425 467//471 +f 424//422 426//424 466//470 468//472 +f 467//471 427//425 425//423 469//473 +f 422//420 424//422 468//472 470//474 +f 469//473 425//423 423//421 471//475 +f 420//416 422//420 470//474 472//476 +f 471//475 423//421 421//419 473//477 +f 418//417 420//416 472//476 474//466 +f 473//477 421//419 419//418 475//467 +f 458//460 456//462 480//478 478//479 +f 481//480 457//463 459//461 479//481 +f 478//479 480//478 482//482 484//483 +f 483//484 481//480 479//481 485//485 +f 484//483 482//482 488//486 486//487 +f 489//488 483//484 485//485 487//489 +f 486//487 488//486 490//490 492//491 +f 491//492 489//488 487//489 493//493 +f 464//468 476//453 486//487 492//491 +f 487//489 477//455 465//469 493//493 +f 452//452 484//483 486//487 476//453 +f 487//489 485//485 453//454 477//455 +f 452//452 462//456 478//479 484//483 +f 479//481 463//457 453//454 485//485 +f 458//460 478//479 462//456 460//458 +f 463//457 479//481 459//461 461//459 +f 454//464 474//466 480//478 456//462 +f 481//480 475//467 455//465 457//463 +f 472//476 482//482 480//478 474//466 +f 481//480 483//484 473//477 475//467 +f 470//474 488//486 482//482 472//476 +f 483//484 489//488 471//475 473//477 +f 468//472 490//490 488//486 470//474 +f 489//488 491//492 469//473 471//475 +f 466//470 492//491 490//490 468//472 +f 491//492 493//493 467//471 469//473 +f 464//468 492//491 466//470 +f 467//471 493//493 465//469 +f 392//409 390//413 504//494 502//495 +f 505//496 391//415 393//411 503//497 +f 394//405 392//409 502//495 500//498 +f 503//497 393//411 395//407 501//499 +f 396//401 394//405 500//498 498//500 +f 501//499 395//407 397//403 499//501 +f 398//397 396//401 498//500 496//502 +f 499//501 397//403 399//399 497//503 +f 400//388 398//397 496//502 494//504 +f 497//503 399//399 401//394 495//505 +f 388//389 400//388 494//504 506//506 +f 495//505 401//394 389//393 507//507 +f 494//504 502//495 504//494 506//506 +f 505//496 503//497 495//505 507//507 +f 494//504 496//502 500//498 502//495 +f 501//499 497//503 495//505 503//497 +f 496//502 498//500 500//498 +f 501//499 499//501 497//503 +f 314//367 382//376 388//389 506//506 +f 389//393 383//377 315//370 507//507 +f 314//367 506//506 504//494 322//384 +f 505//496 507//507 315//370 323//387 +f 320//382 322//384 504//494 390//413 +f 505//496 323//387 321//383 391//415 diff --git a/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/textures/chavant.jpg b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/textures/chavant.jpg new file mode 100644 index 0000000..3a6a4cb Binary files /dev/null and b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/textures/chavant.jpg differ diff --git a/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/textures/elmLogoDiffuse.png b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/textures/elmLogoDiffuse.png new file mode 100644 index 0000000..1696cd2 Binary files /dev/null and b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/textures/elmLogoDiffuse.png differ diff --git a/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/textures/elmLogoNorm.png b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/textures/elmLogoNorm.png new file mode 100644 index 0000000..8864cbd Binary files /dev/null and b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/examples/textures/elmLogoNorm.png differ diff --git a/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/src/OBJ.elm b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/src/OBJ.elm new file mode 100644 index 0000000..937c014 --- /dev/null +++ b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/src/OBJ.elm @@ -0,0 +1,169 @@ +module OBJ exposing (..) + +{-| + + +# .obj file loader + +The returned models can be rendered using `indexedTriangles` from `WebGL`. + + WebGL.indexedTriangles mesh.vertices mesh.indices + + +## From URL + +All these methods take an URL as the first parameter. + + +### Single model + +Use the methods from here if you know whats in your file +and if they only contain a single object with a single material. +These are just provided for convenience. + +@docs loadMeshWithoutTexture, loadMesh, loadMeshWithTangent + + +### General + +Use these methods if you don't know what kind of files you'll get or +if your files contain multiple groups or materials. + +@docs loadObjFile, loadObjFileWith, Settings, defaultSettings + + +## From String + +@docs parseObjStringWith + +-} + +import Dict exposing (Dict) +import Http +import OBJ.Assembler exposing (compile) +import OBJ.Parser exposing (parse) +import OBJ.Types exposing (Mesh, ObjFile) +import Task + + +-- + +import OBJ.Assembler exposing (compile) +import OBJ.Parser exposing (parse) +import OBJ.Types exposing (..) + + +{-| Load a model that doesn't have texture coordinates. +-} +loadMeshWithoutTexture : String -> (Result String (MeshWith Vertex) -> msg) -> Cmd msg +loadMeshWithoutTexture url msg = + loadObjFile url + (\res -> + case res of + Ok f -> + case (Dict.values f |> List.map Dict.values) of + [ [ WithoutTexture m ] ] -> + msg (Ok m) + + _ -> + msg (Err "file loaded correctly, but there were more than one models.") + + Err e -> + msg (Err e) + ) + + +{-| Load a model with texture coordinates. +-} +loadMesh : String -> (Result String (MeshWith VertexWithTexture) -> msg) -> Cmd msg +loadMesh url msg = + loadObjFile url + (\res -> + case res of + Ok f -> + case (Dict.values f |> List.map Dict.values) of + [ [ WithTexture m ] ] -> + msg (Ok m) + + _ -> + msg (Err "file loaded correctly, but there were more than one models.") + + Err e -> + msg (Err e) + ) + + +{-| Load a model with texture coordinate and calculate vertex tangents. +This is needed if you want to do tangent space normal mapping. +-} +loadMeshWithTangent : String -> (Result String (MeshWith VertexWithTextureAndTangent) -> msg) -> Cmd msg +loadMeshWithTangent url msg = + loadObjFileWith { withTangents = True } + url + (\res -> + case res of + Ok f -> + case (Dict.values f |> List.map Dict.values) of + [ [ WithTextureAndTangent m ] ] -> + msg (Ok m) + + _ -> + msg (Err "file loaded correctly, but there were more than one models.") + + Err e -> + msg (Err e) + ) + + +{-| Load a .obj file from an URL + + loadObjFile url ObjFileLoaded + +-} +loadObjFile : String -> (Result String ObjFile -> msg) -> Cmd msg +loadObjFile = + loadObjFileWith defaultSettings + + +{-| withTangents : If true, vertex tangents will be calculated for meshes with texture coordinates. +This is needed if you want to do tangent space normal mapping. +-} +type alias Settings = + { withTangents : Bool } + + +{-| -} +defaultSettings : Settings +defaultSettings = + { withTangents = False } + + +{-| -} +loadObjFileWith : Settings -> String -> (Result String ObjFile -> msg) -> Cmd msg +loadObjFileWith settings url msg = + Http.toTask (Http.getString url) + |> Task.andThen + (\s -> + parseObjStringWith settings s |> Task.succeed + ) + |> Task.onError (\e -> Task.succeed (Err ("failed to load:\n" ++ toString e))) + |> Task.attempt + (\r -> + case r of + Ok (Ok m) -> + msg (Ok m) + + Ok (Err e) -> + msg (Err e) + + Err e -> + msg (Err e) + ) + + +{-| Same as `loadObjFile`, but works on a string. +-} +parseObjStringWith : Settings -> String -> Result String ObjFile +parseObjStringWith config input = + parse input + |> Result.map (compile config) diff --git a/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/src/OBJ/Assembler.elm b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/src/OBJ/Assembler.elm new file mode 100644 index 0000000..b713185 --- /dev/null +++ b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/src/OBJ/Assembler.elm @@ -0,0 +1,463 @@ +module OBJ.Assembler exposing (..) + +import Array.Hamt as Array exposing (Array) +import Dict exposing (Dict) +import Math.Vector2 as V2 exposing (Vec2) +import Math.Vector3 as V3 exposing (Vec3, vec3) +import Math.Vector4 as V4 exposing (Vec4, vec4) +import OBJ.Types exposing (..) +import OBJ.InternalTypes exposing (..) + + +compile config lines = + compileHelper (emptyCompileState config) lines + |> addCurrentMesh + |> addCurrentGroup + |> .groups + + +emptyCompileState config = + { -- this is a Dict (GroupName/String) Group + -- it's the final output of this algorithm + -- Group = Dict (MtlName/String) Mesh + groups = Dict.empty + , currentGroupName = "__default__" + , currentMaterialName = "__default__" + , currentMesh = Nothing + , currentGroup = Dict.empty + , vs = Array.empty + , vts = Array.empty + , vns = Array.empty + , currentIndex = 0 + , knownVertexTextures = Dict.empty + , knownVertexTexturesTangents = Dict.empty + , knownVertex = Dict.empty + , config = config + } + + +compileHelper state lines = + case lines of + [] -> + state + + l :: ls -> + compileHelper (insertLine l state) ls + + +{-| +this 'inserts' a line into the state. +This means it manipulates the current state to reflect state changing commands +and buils meshes on the fly. +-} +insertLine line state = + case line of + Object s -> + -- even though the specs doesn't give it any meaningful meaning, + -- I treat is exactely like a group statement. + -- This is because blender uses o instead of g per default. + addCurrentGroup state + |> (\st -> { st | currentGroupName = s }) + + MtlLib s -> + -- MtlLib statements are ignored, + -- as I don't plan to support loading .mtl files + state + + Group s -> + addCurrentGroup state + |> (\st -> { st | currentGroupName = s }) + + Smooth s -> + -- smooth groups are ignored. + -- I tried to calculate these, but failed, + -- since doing them correctly is more tricky than you might think: + -- http://www.bytehazard.com/articles/vertnorm.html + -- { state | activeSmoothGroup = s } + state + + UseMtl s -> + addCurrentMesh state + |> (\st -> { st | currentMaterialName = s }) + + V v -> + { state | vs = Array.push v state.vs } + + Vt v -> + { state | vts = Array.push v state.vts } + + Vn v -> + { state | vns = Array.push v state.vns } + + F f -> + triangulateFace f + |> List.foldr addFace state + + +triangulateFace f = + case f of + FVertexTextureNormal a -> + triangulate a |> List.map FTVertexTextureNormal + + FVertexNormal a -> + triangulate a |> List.map FTVertexNormal + + +addCurrentMesh state = + -- this adds the current mesh, to the current group. + -- We also normalize all values here that need normalizing + case state.currentMesh of + Just m -> + { state + | currentGroup = Dict.insert state.currentMaterialName (finalizeMesh m) state.currentGroup + , currentMesh = Nothing + , knownVertexTextures = Dict.empty + , knownVertexTexturesTangents = Dict.empty + , knownVertex = Dict.empty + } + + _ -> + state + + +finalizeMesh mesh = + case mesh of + WithTextureT m -> + WithTexture m + + WithoutTextureT m -> + WithoutTexture m + + WithTextureAndTangentT m -> + WithTextureAndTangent + { m + | vertices = + Array.foldr + (\({ position, texCoord, normal, sdir, tdir } as v) acc -> + let + -- handedness: + -- https://web.archive.org/web/20160409104130/http://www.terathon.com/code/tangent.html + w = + if V3.dot (V3.cross normal sdir) tdir < 0 then + -1 + else + 1 + + ( x, y, z ) = + -- I have not seen this anywhere, but I added it because I sometimes got (0,0,0) + if V3.lengthSquared sdir /= 0 then + V3.toTuple <| V3.normalize (V3.sub sdir (V3.scale (V3.dot normal sdir) normal)) + else + V3.toTuple <| V3.cross (V3.normalize (V3.sub tdir (V3.scale (V3.dot normal tdir) normal))) normal + in + { position = position + , texCoord = texCoord + , normal = normal + , tangent = vec4 x y z w + } + :: acc + ) + [] + m.vertices + } + + +addCurrentGroup state = + if Dict.isEmpty state.currentGroup then + state + else + { state + | groups = Dict.insert state.currentGroupName state.currentGroup state.groups + , currentGroup = Dict.empty + } + + +addFace f state = + -- this function adds a single face to the currentMesh + -- for this it needs a dictionary containing the already known vertices, + -- indexed using the v/vn etc. + case state.currentMesh of + Nothing -> + -- we dont have a mesh yet, create one based on the type of the face + addFaceToMesh f (createMesh state.config.withTangents f) { state | currentIndex = 0 } + + Just m -> + addFaceToMesh f m state + + +addFaceToMesh f mesh ({ vs, vts, vns, currentIndex } as state) = + -- add a face to the mesh + case ( f, mesh ) of + ( FTVertexTextureNormal ( v1, v2, v3 ), WithTextureT m ) -> + let + ( newState, newVs, newIs ) = + applyForFace getOrInsertVTN ( v1, v2, v3 ) state + + newMesh = + WithTextureT { m | indices = newIs :: m.indices, vertices = m.vertices ++ newVs } + in + { newState | currentMesh = Just newMesh } + + ( FTVertexTextureNormal ( v1, v2, v3 ), WithTextureAndTangentT m ) -> + let + tangents = + getFaceTangent ( v1, v2, v3 ) state + + ( newState, newVs, newIs ) = + applyForFaceA (getOrInsertVTNT tangents) ( v1, v2, v3 ) state + + newMesh = + WithTextureAndTangentT { m | indices = newIs :: m.indices, vertices = Array.append m.vertices newVs } + in + { newState | currentMesh = Just newMesh } + + ( FTVertexNormal ( v1, v2, v3 ), WithoutTextureT m ) -> + let + ( newState, newVs, newIs ) = + applyForFace getOrInsertVN ( v1, v2, v3 ) state + + newMesh = + WithoutTextureT { m | indices = newIs :: m.indices, vertices = m.vertices ++ newVs } + in + { newState | currentMesh = Just newMesh } + + _ -> + -- TODO: lift this error into a Result type + Debug.crash "mixed face types in the model!" + + +applyForFace f ( i1, i2, i3 ) s_0 = + let + ( s_1, vs_1, i_1 ) = + f i1 s_0 + + ( s_2, vs_2, i_2 ) = + f i2 s_1 + + ( s_3, vs_3, i_3 ) = + f i3 s_2 + in + ( s_3, vs_1 ++ vs_2 ++ vs_3, ( i_3, i_2, i_1 ) ) + + +applyForFaceA f ( i1, i2, i3 ) s_0 = + let + ( s_1, vs_1, i_1 ) = + f i1 s_0 + + ( s_2, vs_2, i_2 ) = + f i2 s_1 + + ( s_3, vs_3, i_3 ) = + f i3 s_2 + in + ( s_3, Array.append (Array.append vs_1 vs_2) vs_3, ( i_3, i_2, i_1 ) ) + + +getFaceTangent (( ( pi1, ti1, ni1 ), ( pi2, ti2, ni2 ), ( pi3, ti3, ni3 ) ) as index) { vs, vts, vns } = + -- This is from here: + -- https://web.archive.org/web/20160409104130/http://www.terathon.com/code/tangent.html + -- But since the reference doesn't mention what to do in case the denominator is 0, + -- This is probably not correct. + case ( get3 ( pi1, pi2, pi3 ) vs vs vs, get3 ( ti1, ti2, ti3 ) vts vts vts ) of + ( Just ( v1, v2, v3 ), Just ( w1, w2, w3 ) ) -> + let + ( ( v1x, v1y, v1z ), ( v2x, v2y, v2z ), ( v3x, v3y, v3z ) ) = + t3map V3.toTuple ( v1, v2, v3 ) + + ( ( w1x, w1y ), ( w2x, w2y ), ( w3x, w3y ) ) = + t3map V2.toTuple ( w1, w2, w3 ) + + ( ( x1, x2 ), ( y1, y2 ), ( z1, z2 ) ) = + ( ( v2x - v1x, v3x - v1x ) + , ( v2y - v1y, v3y - v1y ) + , ( v2z - v1z, v3z - v1z ) + ) + + ( ( s1, s2 ), ( t1, t2 ) ) = + ( ( w2x - w1x, w3x - w1x ), ( w2y - w1y, w3y - w1y ) ) + + denom = + s1 * t2 - s2 * t1 + + r = + if abs denom <= 0.000001 then + 0.1 + else + 1 / denom + + sdir = + vec3 ((t2 * x1 - t1 * x2) * r) ((t2 * y1 - t1 * y2) * r) ((t2 * z1 - t1 * z2) * r) + + tdir = + vec3 ((s1 * x2 - s2 * x1) * r) ((s1 * y2 - s2 * y1) * r) ((s1 * z2 - s2 * z1) * r) + in + ( sdir, tdir ) + + _ -> + -- TODO: lift this error into a Result type + ( vec3 1 1 1, vec3 1 1 1 ) + |> log ("index " ++ toString index ++ " out of bounds!\nThis should never happen with a well formed file") + + +getOrInsertVTN index ({ vs, vts, vns, knownVertexTextures, currentIndex } as state) = + case Dict.get index knownVertexTextures of + Just i -> + ( state, [], i ) + + Nothing -> + case get3 index vs vts vns of + Just ( p, t, n ) -> + ( { state + | knownVertexTextures = Dict.insert index currentIndex knownVertexTextures + , currentIndex = currentIndex + 1 + } + , [ VertexWithTexture p t n ] + , currentIndex + ) + + Nothing -> + -- TODO: lift this error into a Result type + ( state, [], -42 ) + |> log ("index " ++ toString index ++ " out of bounds!\nThis should never happen with a well formed file") + + +getOrInsertVTNT ( s_dir, t_dir ) index ({ vs, vts, vns, knownVertexTexturesTangents, currentIndex } as state) = + case Dict.get index knownVertexTexturesTangents of + Just i -> + case state.currentMesh of + Just (WithTextureAndTangentT m) -> + ( { state + | currentMesh = + Just + (WithTextureAndTangentT + { m + | vertices = + updateArray i + (\({ sdir, tdir } as v) -> + { v | sdir = V3.add sdir s_dir, tdir = V3.add tdir t_dir } + ) + m.vertices + } + ) + } + , Array.empty + , i + ) + + _ -> + -- should never happen + ( state, Array.empty, i ) + + Nothing -> + case get3 index vs vts vns of + Just ( p, t, n ) -> + ( { state + | knownVertexTexturesTangents = Dict.insert index currentIndex knownVertexTexturesTangents + , currentIndex = currentIndex + 1 + } + , Array.fromList [ VertexWithTextureAndTangentT p t n s_dir t_dir ] + , currentIndex + ) + + Nothing -> + -- TODO: lift this error into a Result type + ( state, Array.empty, -42 ) + |> log ("index " ++ toString index ++ " out of bounds!\nThis should never happen with a well formed file") + + +getOrInsertVN index ({ vs, vns, knownVertex, currentIndex } as state) = + case Dict.get index knownVertex of + Just i -> + ( state, [], i ) + + Nothing -> + case get2 index vs vns of + Just ( p, n ) -> + ( { state + | knownVertex = Dict.insert index currentIndex knownVertex + , currentIndex = currentIndex + 1 + } + , [ Vertex p n ] + , currentIndex + ) + + Nothing -> + -- TODO: lift this error into a Result type + ( state, [], -42 ) + |> log ("index " ++ toString index ++ " out of bounds!\nThis should never happen with a well formed file") + + +fst2 ( a, b, c ) = + ( a, b ) + + +arrayUpdate i f a = + case Array.get i a of + Just e -> + Array.set i (f e) a + + _ -> + a + + +triangulate threeOrFour = + case threeOrFour of + Three t -> + [ t ] + + Four ( a, b, c, d ) -> + [ ( a, b, c ), ( d, a, c ) ] + + +createMesh withTangents f = + let + emptyMesh = + { vertices = [], indices = [] } + in + case f of + FTVertexTextureNormal _ -> + if withTangents then + WithTextureAndTangentT { emptyMesh | vertices = Array.empty } + else + WithTextureT emptyMesh + + FTVertexNormal _ -> + WithoutTextureT emptyMesh + + + +-- +-- Some helpers: +-- + + +t3map f ( a, b, c ) = + ( f a, f b, f c ) + + +updateArray i f a = + case Array.get i a of + Just v -> + Array.set i (f v) a + + Nothing -> + a + + +get3 ( a, b, c ) a1 a2 a3 = + case ( Array.get (a - 1) a1, Array.get (b - 1) a2, Array.get (c - 1) a3 ) of + ( Just a_, Just b_, Just c_ ) -> + Just ( a_, b_, c_ ) + + _ -> + Nothing + + +get2 ( a, b ) a1 a2 = + case ( Array.get (a - 1) a1, Array.get (b - 1) a2 ) of + ( Just a_, Just b_ ) -> + Just ( a_, b_ ) + + _ -> + Nothing diff --git a/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/src/OBJ/InternalTypes.elm b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/src/OBJ/InternalTypes.elm new file mode 100644 index 0000000..f0246de --- /dev/null +++ b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/src/OBJ/InternalTypes.elm @@ -0,0 +1,102 @@ +module OBJ.InternalTypes exposing (..) + +import Math.Vector3 exposing (Vec3) +import Math.Vector2 exposing (Vec2) +import Array.Hamt as Array exposing (Array) +import OBJ.Types exposing (..) + + +-- +-- {- DEBUG -} +-- +-- import Native.Time +-- +-- +-- debugNow : () -> Float +-- debugNow = +-- Native.Time.now +-- +-- +-- time : String -> (() -> a) -> a +-- time name f = +-- let +-- a = +-- debugNow () +-- in +-- f () +-- |> (\r -> log (name ++ ": " ++ toString (debugNow () - a) ++ " ms") r) + + +log s a = + let + _ = + Debug.log s () + in + a + + +type MeshT + = WithoutTextureT (MeshWith Vertex) + | WithTextureT (MeshWith VertexWithTexture) + | WithTextureAndTangentT (MeshWithT VertexWithTextureAndTangentT) + + +type alias MeshWithT a = + { vertices : Array a + , indices : List Int3 + } + + +type alias VertexWithTextureAndTangentT = + { position : Vec3, texCoord : Vec2, normal : Vec3, sdir : Vec3, tdir : Vec3 } + + +type + Line + -- v 1 3 4 + = V Vec3 + -- vt 2 4 + | Vt Vec2 + -- vn 3 3 1 + | Vn Vec3 + -- f 1 2 4 + -- f 1/3 2/3 1/7 + -- f 1/2/3 7/4/2 8/12/90 + -- f 4//8 4//1 6//2 + | F Face + -- steteful stuff + | Object String + | Group String + | Smooth String + | MtlLib String + | UseMtl String + + +type Face + = FVertexTextureNormal (ThreeOrFour Int3) + | FVertexNormal (ThreeOrFour Int2) + + +type FaceTriangle + = FTVertexTextureNormal ( Int3, Int3, Int3 ) + | FTVertexNormal ( Int2, Int2, Int2 ) + + +type ThreeOrFour a + = Three ( a, a, a ) + | Four ( a, a, a, a ) + + +type Group + = GV { faces : List Int3 } + | GVT { faces : List ( Int2, Int2, Int2 ) } + | GVTN { faces : List ( Int3, Int3, Int3 ) } + | GVN { faces : List ( Int2, Int2, Int2 ) } + + +type alias Int2 = + ( Int, Int ) + + +type alias Int3 = + ( Int, Int, Int ) diff --git a/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/src/OBJ/Parser.elm b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/src/OBJ/Parser.elm new file mode 100644 index 0000000..571bdb3 --- /dev/null +++ b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/src/OBJ/Parser.elm @@ -0,0 +1,258 @@ +module OBJ.Parser exposing (..) + +import Math.Vector3 as V3 exposing (Vec3, vec3) +import Math.Vector2 as V2 exposing (Vec2, vec2) +import Combine exposing (..) +import Json.Decode as JD +import Combine.Num exposing (..) +import Combine.Char exposing (..) +import OBJ.InternalTypes exposing (..) +import Regex exposing (find, HowMany(..)) + + +-- TODO: figure out how nice error messages work +-- +-- The obj specs: +-- http://www.martinreddy.net/gfx/3d/OBJ.spec + + +parse : String -> Result String (List Line) +parse input = + String.split "\n" input + |> List.foldr parseLineAcc (Ok []) + + +parseLineAcc : String -> Result String (List Line) -> Result String (List Line) +parseLineAcc line acc = + case acc of + Ok lines -> + if canSkip line then + Ok lines + else + parseLine line + |> Result.andThen + (\l -> + Ok (l :: lines) + ) + + Err e -> + Err e + + +canSkip line = + Regex.contains (Regex.regex "^((\\s*)|(\\s*#.*\\r?))$") line + + +parseLine l = + case Combine.parse line l of + Ok ( _, stream, result ) -> + Ok result + + Err ( _, stream, errors ) -> + Err (formatError errors stream) + + +file : Parser s (List Line) +file = + (many ignoredLines) + *> sepBy (many1 ignoredLines) + line + <* (many ignoredLines) + <* end + + +ignoredLines : Parser s () +ignoredLines = + (skip eol) <|> (skip comment) + + +objectName : Parser s String +objectName = + regex "o[ \t]+" *> regex ".+" + + +mtllib : Parser s String +mtllib = + regex "mtllib[ \t]+" *> regex ".+" + + +group : Parser s String +group = + (regex "g[ \t]+" *> regex ".+") + <|> (char 'g' *> succeed "") + + +smooth : Parser s String +smooth = + regex "s[ \t]+" *> regex ".+" + + +usemtl : Parser s String +usemtl = + regex "usemtl[ \t]+" *> regex ".+" + + +line : Parser s Line +line = + choice + [ V <$> vertex + , Vt <$> vertexTexture + , Vn <$> vertexNormal + , F <$> face + , Object <$> objectName + , Group <$> group + , Smooth <$> smooth + , UseMtl <$> usemtl + , MtlLib <$> mtllib + ] + <* regex "[ \t]*" + + +face : Parser s Face +face = + regex "f[ \t]+" + *> choice + [ fVertexTextureNormal + , fVertexNormal + , fVertex + , fVertexTexture + ] + + +fVertex : Parser s a +fVertex = + threeOrFourValues int + *> fail "Models with no precalculated vertex normals are not supported!" + + +fVertexTexture : Parser s a +fVertexTexture = + threeOrFourValues int_int + *> fail "Models with no precalculated vertex normals are not supported!" + + +fVertexTextureNormal : Parser s Face +fVertexTextureNormal = + FVertexTextureNormal <$> threeOrFourValues int_int_int + + +fVertexNormal : Parser s Face +fVertexNormal = + FVertexNormal <$> threeOrFourValues int__int + + +threeValues : (a -> a -> a -> b) -> Parser s a -> Parser s b +threeValues tagger vtype = + tagger <$> (vtype) <*> (spaces *> vtype) <*> (spaces *> vtype) + + +fourValues : (a -> a -> a -> a -> b) -> Parser s a -> Parser s b +fourValues tagger vtype = + tagger <$> (vtype) <*> (spaces *> vtype) <*> (spaces *> vtype) <*> (spaces *> vtype) + + +threeOrFourValues : Parser s a -> Parser s (ThreeOrFour a) +threeOrFourValues elements = + (Four <$> (fourValues (,,,) elements)) + <|> (Three <$> (threeValues (,,) elements)) + + +int_int : Parser s ( Int, Int ) +int_int = + (,) <$> int <*> (string "/" *> int) + + +int_int_int : Parser s ( Int, Int, Int ) +int_int_int = + (,,) <$> int <*> (string "/" *> int) <*> (string "/" *> int) + + +int__int : Parser s ( Int, Int ) +int__int = + (,) <$> int <*> (string "//" *> int) + + +vertexNormal : Parser s Vec3 +vertexNormal = + regex "vn[ \t]+" *> (V3.normalize <$> vector3) + + +vertexTexture : Parser s Vec2 +vertexTexture = + regex "vt[ \t]+" *> ((ignoreZ <$> vector3) <|> vector2) + + +vertex : Parser s Vec3 +vertex = + regex "v[ \t]+" *> vector3 + + +comment : Parser s String +comment = + regex "#" *> regex ".*" + + +vector3 : Parser s Vec3 +vector3 = + threeValues vec3 betterFloat + + +spaces : Parser s String +spaces = + regex "[ \t]+" + + +vector2 : Parser s Vec2 +vector2 = + vec2 <$> betterFloat <*> (spaces *> betterFloat) + + +betterFloat : Parser s Float +betterFloat = + (\s -> Result.withDefault 0 (JD.decodeString JD.float s)) <$> regex "[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?" + + +formatError : List String -> InputStream -> String +formatError ms stream = + let + location = + currentLocation stream + + separator = + "| " + + expectationSeparator = + "\n * " + + lineNumberOffset = + floor (logBase 10 (toFloat location.line)) + 1 + + separatorOffset = + String.length separator + + padding = + location.column + separatorOffset + 2 + in + "Parse error around line:\n\n" + ++ toString location.line + ++ separator + ++ location.source + ++ "\n" + ++ String.padLeft padding ' ' "^" + ++ "\nI expected one of the following:\n" + ++ expectationSeparator + ++ String.join expectationSeparator ms + + +toInt : String -> Int +toInt s = + String.toInt s |> Result.withDefault 0 + + +ignoreZ : Vec3 -> Vec2 +ignoreZ v = + let + ( x, y, _ ) = + V3.toTuple v + in + vec2 x y diff --git a/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/src/OBJ/Types.elm b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/src/OBJ/Types.elm new file mode 100644 index 0000000..4786c88 --- /dev/null +++ b/elm-stuff/packages/Zinggi/elm-obj-loader/1.0.3/src/OBJ/Types.elm @@ -0,0 +1,74 @@ +module OBJ.Types exposing (..) + +{-| +These are the types used by the obj loader. + +@docs ObjFile, Mesh, MeshWith + +-- +@docs Vertex, VertexWithTexture, VertexWithTextureAndTangent + + +-} + +import Dict exposing (Dict) +import Math.Vector2 exposing (Vec2) +import Math.Vector3 exposing (Vec3) +import Math.Vector4 exposing (Vec4) + + +{-| A .obj file is optionally divided into different groups/objects. +Each group/object is optionally made up of different meshes, each with it's own material. + +So the keys of this dictionary are: + + Dict GroupNameOrObjectName (Dict MaterialName Mesh) + +If no name is specified in the input file, "__default__" will be used instead. +-} +type alias ObjFile = + Dict String (Dict String Mesh) + + +{-| +A `Mesh` loaded by the obj loader is a record with a list of vertices and a list of indices. +Depending on the mesh type and the loading options you get a different kind of mesh. +They differ on what information a vertex contains. + +These meshes are meant to be used with `WebGL.indexedTriangles mesh.vertices mesh.indices`. +-} +type Mesh + = WithoutTexture (MeshWith Vertex) + | WithTexture (MeshWith VertexWithTexture) + | WithTextureAndTangent (MeshWith VertexWithTextureAndTangent) + + +{-| +-} +type alias MeshWith a = + { vertices : List a + , indices : List ( Int, Int, Int ) + } + + +{-| -} +type alias Vertex = + { position : Vec3, normal : Vec3 } + + +{-| -} +type alias VertexWithTexture = + { position : Vec3, texCoord : Vec2, normal : Vec3 } + + +{-| +The `tangent` is a vector pointing tangential to the object surface, in the direction of the `u` texture coordinate. +This is needed for doing tangent space normal mapping. +The 4th component is either 1 or -1 and has to be used to get the bitangent in the glsl shader, +e.g: `vec3 bitangent = cross(normal, tangent.xyz) * tangent.w` + +more info here: +https://web.archive.org/web/20160409104130/http://www.terathon.com/code/tangent.html +-} +type alias VertexWithTextureAndTangent = + { position : Vec3, texCoord : Vec2, normal : Vec3, tangent : Vec4 }