├── ProjectSettings ├── ProjectVersion.txt ├── TagManager.asset ├── AudioManager.asset ├── InputManager.asset ├── NavMeshAreas.asset ├── TimeManager.asset ├── DynamicsManager.asset ├── EditorSettings.asset ├── NetworkManager.asset ├── ProjectSettings.asset ├── QualitySettings.asset ├── GraphicsSettings.asset ├── Physics2DSettings.asset ├── UnityAdsSettings.asset ├── ClusterInputManager.asset ├── EditorBuildSettings.asset └── UnityConnectSettings.asset ├── Assets ├── Textures │ ├── rock.png │ ├── snow.png │ ├── desert.jpg │ ├── grass.jpg │ ├── textures-license.txt │ ├── water.png │ ├── textures-license.txt.meta │ ├── desert.jpg.meta │ ├── grass.jpg.meta │ ├── rock.png.meta │ ├── snow.png.meta │ └── water.png.meta ├── Materials │ ├── VoxelMat.mat │ └── VoxelMat.mat.meta ├── Scenes │ ├── VoxelTerrain.unity │ └── VoxelTerrain.unity.meta ├── Materials.meta ├── Scenes.meta ├── Scripts.meta ├── Shaders.meta ├── Textures.meta ├── Shaders │ ├── VoxelTerrain.shader.meta │ └── VoxelTerrain.shader └── Scripts │ ├── MarchingCubes.cs.meta │ └── MarchingCubes.cs ├── README.md └── .gitignore /ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 5.3.6f1 2 | m_StandardAssetsVersion: 0 3 | -------------------------------------------------------------------------------- /Assets/Textures/rock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unitycoder/VoxelTerrain/HEAD/Assets/Textures/rock.png -------------------------------------------------------------------------------- /Assets/Textures/snow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unitycoder/VoxelTerrain/HEAD/Assets/Textures/snow.png -------------------------------------------------------------------------------- /Assets/Textures/desert.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unitycoder/VoxelTerrain/HEAD/Assets/Textures/desert.jpg -------------------------------------------------------------------------------- /Assets/Textures/grass.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unitycoder/VoxelTerrain/HEAD/Assets/Textures/grass.jpg -------------------------------------------------------------------------------- /Assets/Textures/textures-license.txt: -------------------------------------------------------------------------------- 1 | Not sure where these old textures came from.. so replace them with your own. -------------------------------------------------------------------------------- /Assets/Textures/water.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unitycoder/VoxelTerrain/HEAD/Assets/Textures/water.png -------------------------------------------------------------------------------- /Assets/Materials/VoxelMat.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unitycoder/VoxelTerrain/HEAD/Assets/Materials/VoxelMat.mat -------------------------------------------------------------------------------- /Assets/Scenes/VoxelTerrain.unity: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unitycoder/VoxelTerrain/HEAD/Assets/Scenes/VoxelTerrain.unity -------------------------------------------------------------------------------- /ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unitycoder/VoxelTerrain/HEAD/ProjectSettings/TagManager.asset -------------------------------------------------------------------------------- /ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unitycoder/VoxelTerrain/HEAD/ProjectSettings/AudioManager.asset -------------------------------------------------------------------------------- /ProjectSettings/InputManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unitycoder/VoxelTerrain/HEAD/ProjectSettings/InputManager.asset -------------------------------------------------------------------------------- /ProjectSettings/NavMeshAreas.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unitycoder/VoxelTerrain/HEAD/ProjectSettings/NavMeshAreas.asset -------------------------------------------------------------------------------- /ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unitycoder/VoxelTerrain/HEAD/ProjectSettings/TimeManager.asset -------------------------------------------------------------------------------- /ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unitycoder/VoxelTerrain/HEAD/ProjectSettings/DynamicsManager.asset -------------------------------------------------------------------------------- /ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unitycoder/VoxelTerrain/HEAD/ProjectSettings/EditorSettings.asset -------------------------------------------------------------------------------- /ProjectSettings/NetworkManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unitycoder/VoxelTerrain/HEAD/ProjectSettings/NetworkManager.asset -------------------------------------------------------------------------------- /ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unitycoder/VoxelTerrain/HEAD/ProjectSettings/ProjectSettings.asset -------------------------------------------------------------------------------- /ProjectSettings/QualitySettings.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unitycoder/VoxelTerrain/HEAD/ProjectSettings/QualitySettings.asset -------------------------------------------------------------------------------- /ProjectSettings/GraphicsSettings.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unitycoder/VoxelTerrain/HEAD/ProjectSettings/GraphicsSettings.asset -------------------------------------------------------------------------------- /ProjectSettings/Physics2DSettings.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unitycoder/VoxelTerrain/HEAD/ProjectSettings/Physics2DSettings.asset -------------------------------------------------------------------------------- /ProjectSettings/UnityAdsSettings.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unitycoder/VoxelTerrain/HEAD/ProjectSettings/UnityAdsSettings.asset -------------------------------------------------------------------------------- /ProjectSettings/ClusterInputManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unitycoder/VoxelTerrain/HEAD/ProjectSettings/ClusterInputManager.asset -------------------------------------------------------------------------------- /ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unitycoder/VoxelTerrain/HEAD/ProjectSettings/EditorBuildSettings.asset -------------------------------------------------------------------------------- /ProjectSettings/UnityConnectSettings.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unitycoder/VoxelTerrain/HEAD/ProjectSettings/UnityConnectSettings.asset -------------------------------------------------------------------------------- /Assets/Materials/VoxelMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5ede198c19b188748995ae93b9076c63 3 | NativeFormatImporter: 4 | userData: 5 | assetBundleName: 6 | assetBundleVariant: 7 | -------------------------------------------------------------------------------- /Assets/Scenes/VoxelTerrain.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6d95a537f9d7b8e45b892907df25e6e3 3 | DefaultImporter: 4 | userData: 5 | assetBundleName: 6 | assetBundleVariant: 7 | -------------------------------------------------------------------------------- /Assets/Textures/textures-license.txt.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2b7901bbdcbe5424d87295e2b6677a71 3 | timeCreated: 1482583943 4 | licenseType: Pro 5 | TextScriptImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Materials.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 26259073541a5d44cbc5b20bd8a7c484 3 | folderAsset: yes 4 | timeCreated: 1482583009 5 | licenseType: Pro 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Scenes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1ecf3dc9797223c49a6bb4c18b84d74f 3 | folderAsset: yes 4 | timeCreated: 1482583009 5 | licenseType: Pro 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d4787cbc9eaf914419e3c005a3438c7a 3 | folderAsset: yes 4 | timeCreated: 1482583028 5 | licenseType: Pro 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Shaders.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 95b251fb03ec2f444a4a2081eea21a6e 3 | folderAsset: yes 4 | timeCreated: 1482583069 5 | licenseType: Pro 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Textures.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 23af4d0887dd2ea4b9e645fee059ad8e 3 | folderAsset: yes 4 | timeCreated: 1482583058 5 | licenseType: Pro 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Shaders/VoxelTerrain.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9aa15cc615e05d04a914c4c0da36f935 3 | timeCreated: 1482583527 4 | licenseType: Pro 5 | ShaderImporter: 6 | defaultTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # VoxelTerrain 2 | old voxel terrain project from http://1darray.com/blog/2012/09/30/marching-cubes-voxel-terrain/ 3 | 4 | # Instructions 5 | 6 | ## Controls 7 | – R = reset (reload scene) 8 | – A/D = rotate camera 9 | – Left mouse button = draw 10 | – Right mouse button = erase -------------------------------------------------------------------------------- /Assets/Scripts/MarchingCubes.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bb29785d1f6286c4eadf08bb454cfe83 3 | timeCreated: 1482734850 4 | licenseType: Pro 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /[Ll]ibrary/ 2 | /[Tt]emp/ 3 | /[Oo]bj/ 4 | /[Bb]uild/ 5 | /[Bb]uilds/ 6 | /Assets/AssetStoreTools* 7 | 8 | # Autogenerated VS/MD solution and project files 9 | ExportedObj/ 10 | *.csproj 11 | *.unityproj 12 | *.sln 13 | *.suo 14 | *.tmp 15 | *.user 16 | *.userprefs 17 | *.pidb 18 | *.booproj 19 | *.svd 20 | 21 | 22 | # Unity3D generated meta files 23 | *.pidb.meta 24 | 25 | # Unity3D Generated File On Crash Reports 26 | sysinfo.txt 27 | 28 | # Builds 29 | *.apk 30 | *.unitypackage 31 | -------------------------------------------------------------------------------- /Assets/Textures/desert.jpg.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 346b2d72e5fe8084e89301885cdae8af 3 | TextureImporter: 4 | fileIDToRecycleName: {} 5 | serializedVersion: 2 6 | mipmaps: 7 | mipMapMode: 0 8 | enableMipMap: 1 9 | linearTexture: 0 10 | correctGamma: 0 11 | fadeOut: 0 12 | borderMipMap: 0 13 | mipMapFadeDistanceStart: 1 14 | mipMapFadeDistanceEnd: 3 15 | bumpmap: 16 | convertToNormalMap: 0 17 | externalNormalMap: 0 18 | heightScale: 0.25 19 | normalMapFilter: 0 20 | isReadable: 0 21 | grayScaleToAlpha: 0 22 | generateCubemap: 0 23 | cubemapConvolution: 0 24 | cubemapConvolutionSteps: 7 25 | cubemapConvolutionExponent: 1.5 26 | seamlessCubemap: 0 27 | textureFormat: -1 28 | maxTextureSize: 1024 29 | textureSettings: 30 | filterMode: -1 31 | aniso: -1 32 | mipBias: -1 33 | wrapMode: -1 34 | nPOTScale: 1 35 | lightmap: 0 36 | rGBM: 0 37 | compressionQuality: 50 38 | allowsAlphaSplitting: 0 39 | spriteMode: 0 40 | spriteExtrude: 1 41 | spriteMeshType: 1 42 | alignment: 0 43 | spritePivot: {x: 0.5, y: 0.5} 44 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 45 | spritePixelsToUnits: 100 46 | alphaIsTransparency: 0 47 | textureType: -1 48 | buildTargetSettings: [] 49 | spriteSheet: 50 | serializedVersion: 2 51 | sprites: [] 52 | outline: [] 53 | spritePackingTag: 54 | userData: 55 | assetBundleName: 56 | assetBundleVariant: 57 | -------------------------------------------------------------------------------- /Assets/Textures/grass.jpg.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5e8e17be120bcbf409dbef148d2b354f 3 | TextureImporter: 4 | fileIDToRecycleName: {} 5 | serializedVersion: 2 6 | mipmaps: 7 | mipMapMode: 0 8 | enableMipMap: 1 9 | linearTexture: 0 10 | correctGamma: 0 11 | fadeOut: 0 12 | borderMipMap: 0 13 | mipMapFadeDistanceStart: 1 14 | mipMapFadeDistanceEnd: 3 15 | bumpmap: 16 | convertToNormalMap: 0 17 | externalNormalMap: 0 18 | heightScale: 0.25 19 | normalMapFilter: 0 20 | isReadable: 0 21 | grayScaleToAlpha: 0 22 | generateCubemap: 0 23 | cubemapConvolution: 0 24 | cubemapConvolutionSteps: 7 25 | cubemapConvolutionExponent: 1.5 26 | seamlessCubemap: 0 27 | textureFormat: -1 28 | maxTextureSize: 1024 29 | textureSettings: 30 | filterMode: -1 31 | aniso: -1 32 | mipBias: -1 33 | wrapMode: -1 34 | nPOTScale: 1 35 | lightmap: 0 36 | rGBM: 0 37 | compressionQuality: 50 38 | allowsAlphaSplitting: 0 39 | spriteMode: 0 40 | spriteExtrude: 1 41 | spriteMeshType: 1 42 | alignment: 0 43 | spritePivot: {x: 0.5, y: 0.5} 44 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 45 | spritePixelsToUnits: 100 46 | alphaIsTransparency: 0 47 | textureType: -1 48 | buildTargetSettings: [] 49 | spriteSheet: 50 | serializedVersion: 2 51 | sprites: [] 52 | outline: [] 53 | spritePackingTag: 54 | userData: 55 | assetBundleName: 56 | assetBundleVariant: 57 | -------------------------------------------------------------------------------- /Assets/Textures/rock.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3134cd75a90ed1240a2e006d1cac073d 3 | TextureImporter: 4 | fileIDToRecycleName: {} 5 | serializedVersion: 2 6 | mipmaps: 7 | mipMapMode: 0 8 | enableMipMap: 1 9 | linearTexture: 0 10 | correctGamma: 0 11 | fadeOut: 0 12 | borderMipMap: 0 13 | mipMapFadeDistanceStart: 1 14 | mipMapFadeDistanceEnd: 3 15 | bumpmap: 16 | convertToNormalMap: 0 17 | externalNormalMap: 0 18 | heightScale: 0.25 19 | normalMapFilter: 0 20 | isReadable: 0 21 | grayScaleToAlpha: 0 22 | generateCubemap: 0 23 | cubemapConvolution: 0 24 | cubemapConvolutionSteps: 7 25 | cubemapConvolutionExponent: 1.5 26 | seamlessCubemap: 0 27 | textureFormat: -1 28 | maxTextureSize: 1024 29 | textureSettings: 30 | filterMode: -1 31 | aniso: -1 32 | mipBias: -1 33 | wrapMode: -1 34 | nPOTScale: 1 35 | lightmap: 0 36 | rGBM: 0 37 | compressionQuality: 50 38 | allowsAlphaSplitting: 0 39 | spriteMode: 0 40 | spriteExtrude: 1 41 | spriteMeshType: 1 42 | alignment: 0 43 | spritePivot: {x: 0.5, y: 0.5} 44 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 45 | spritePixelsToUnits: 100 46 | alphaIsTransparency: 0 47 | textureType: -1 48 | buildTargetSettings: [] 49 | spriteSheet: 50 | serializedVersion: 2 51 | sprites: [] 52 | outline: [] 53 | spritePackingTag: 54 | userData: 55 | assetBundleName: 56 | assetBundleVariant: 57 | -------------------------------------------------------------------------------- /Assets/Textures/snow.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ae0ac1bdf08ca2e45830bb62c2e56cde 3 | TextureImporter: 4 | fileIDToRecycleName: {} 5 | serializedVersion: 2 6 | mipmaps: 7 | mipMapMode: 0 8 | enableMipMap: 1 9 | linearTexture: 0 10 | correctGamma: 0 11 | fadeOut: 0 12 | borderMipMap: 0 13 | mipMapFadeDistanceStart: 1 14 | mipMapFadeDistanceEnd: 3 15 | bumpmap: 16 | convertToNormalMap: 0 17 | externalNormalMap: 0 18 | heightScale: 0.25 19 | normalMapFilter: 0 20 | isReadable: 0 21 | grayScaleToAlpha: 0 22 | generateCubemap: 0 23 | cubemapConvolution: 0 24 | cubemapConvolutionSteps: 7 25 | cubemapConvolutionExponent: 1.5 26 | seamlessCubemap: 0 27 | textureFormat: -1 28 | maxTextureSize: 512 29 | textureSettings: 30 | filterMode: -1 31 | aniso: -1 32 | mipBias: -1 33 | wrapMode: -1 34 | nPOTScale: 1 35 | lightmap: 0 36 | rGBM: 0 37 | compressionQuality: 50 38 | allowsAlphaSplitting: 0 39 | spriteMode: 0 40 | spriteExtrude: 1 41 | spriteMeshType: 1 42 | alignment: 0 43 | spritePivot: {x: 0.5, y: 0.5} 44 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 45 | spritePixelsToUnits: 100 46 | alphaIsTransparency: 0 47 | textureType: -1 48 | buildTargetSettings: [] 49 | spriteSheet: 50 | serializedVersion: 2 51 | sprites: [] 52 | outline: [] 53 | spritePackingTag: 54 | userData: 55 | assetBundleName: 56 | assetBundleVariant: 57 | -------------------------------------------------------------------------------- /Assets/Textures/water.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 15841cd150fa2e445830773de92966d4 3 | TextureImporter: 4 | fileIDToRecycleName: {} 5 | serializedVersion: 2 6 | mipmaps: 7 | mipMapMode: 0 8 | enableMipMap: 1 9 | linearTexture: 0 10 | correctGamma: 0 11 | fadeOut: 0 12 | borderMipMap: 0 13 | mipMapFadeDistanceStart: 1 14 | mipMapFadeDistanceEnd: 3 15 | bumpmap: 16 | convertToNormalMap: 0 17 | externalNormalMap: 0 18 | heightScale: 0.25 19 | normalMapFilter: 0 20 | isReadable: 0 21 | grayScaleToAlpha: 0 22 | generateCubemap: 0 23 | cubemapConvolution: 0 24 | cubemapConvolutionSteps: 7 25 | cubemapConvolutionExponent: 1.5 26 | seamlessCubemap: 0 27 | textureFormat: -1 28 | maxTextureSize: 1024 29 | textureSettings: 30 | filterMode: -1 31 | aniso: -1 32 | mipBias: -1 33 | wrapMode: -1 34 | nPOTScale: 1 35 | lightmap: 0 36 | rGBM: 0 37 | compressionQuality: 50 38 | allowsAlphaSplitting: 0 39 | spriteMode: 0 40 | spriteExtrude: 1 41 | spriteMeshType: 1 42 | alignment: 0 43 | spritePivot: {x: 0.5, y: 0.5} 44 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 45 | spritePixelsToUnits: 100 46 | alphaIsTransparency: 0 47 | textureType: -1 48 | buildTargetSettings: [] 49 | spriteSheet: 50 | serializedVersion: 2 51 | sprites: [] 52 | outline: [] 53 | spritePackingTag: 54 | userData: 55 | assetBundleName: 56 | assetBundleVariant: 57 | -------------------------------------------------------------------------------- /Assets/Shaders/VoxelTerrain.shader: -------------------------------------------------------------------------------- 1 | Shader "Custom/VoxelTerrain" { 2 | Properties { 3 | // _PeakColor ("PeakColor", Color) = (0.8,0.9,0.9,1) 4 | _PeakLevel ("PeakLevel", Float) = 30 5 | _PeakTex ("Peak (RGB)", 2D) = "white" {} 6 | 7 | // _Level3Color ("Level3Color", Color) = (0.75,0.53,0,1) 8 | _Level3 ("Level3", Float) = 20 9 | _Level3Tex ("Level3 (RGB)", 2D) = "white" {} 10 | 11 | // _Level2Color ("Level2Color", Color) = (0.69,0.63,0.31,1) 12 | _Level2 ("Level2", Float) = 5 13 | _Level2Tex ("Level2 (RGB)", 2D) = "white" {} 14 | 15 | // _Level1Color ("Level1Color", Color) = (0.65,0.86,0.63,1) 16 | _Level1Tex ("Level1 (RGB)", 2D) = "white" {} 17 | 18 | _WaterLevel ("WaterLevel", Float) = 0 19 | // _WaterColor ("WaterColor", Color) = (0.37,0.78,0.92,1) 20 | _WaterTex ("Water (RGB)", 2D) = "white" {} 21 | 22 | 23 | _Slope ("Slope Fader", Range (0,1)) = 0.5 // this doesnt really work in new version? 24 | 25 | _Glossiness ("Smoothness", Range(0,1)) = 0.5 26 | _Metallic ("Metallic", Range(0,1)) = 0.0 27 | } 28 | SubShader { 29 | Tags { "RenderType"="Opaque" } 30 | LOD 200 31 | 32 | CGPROGRAM 33 | // Physically based Standard lighting model, and enable shadows on all light types 34 | #pragma surface surf Standard fullforwardshadows 35 | 36 | // Use shader model 3.0 target, to get nicer looking lighting 37 | #pragma target 3.0 38 | 39 | sampler2D _WaterTex; 40 | sampler2D _Level1Tex; 41 | sampler2D _Level2Tex; 42 | sampler2D _Level3Tex; 43 | sampler2D _PeakTex; 44 | 45 | struct Input { 46 | float2 uv_WaterTex; 47 | float3 customColor; 48 | float3 worldPos; 49 | }; 50 | 51 | half _Glossiness; 52 | half _Metallic; 53 | float _PeakLevel; 54 | // float4 _PeakColor; 55 | float _Level3; 56 | // float4 _Level3Color; 57 | float _Level2; 58 | // float4 _Level2Color; 59 | float _Level1; 60 | //float4 _Level1Color; 61 | float _Slope; 62 | float _WaterLevel; 63 | // float4 _WaterColor; 64 | void vert (inout appdata_full v, out Input o) { 65 | UNITY_INITIALIZE_OUTPUT(Input,o); 66 | o.customColor = abs(v.normal.y); 67 | } 68 | 69 | void surf (Input IN, inout SurfaceOutputStandard o) { 70 | if (IN.worldPos.y >= _PeakLevel) 71 | // o.Albedo = _PeakColor; 72 | o.Albedo = tex2D(_PeakTex, IN.uv_WaterTex).rgb; 73 | if (IN.worldPos.y <= _PeakLevel) 74 | // o.Albedo = lerp(_Level3Color, _PeakColor, (IN.worldPos.y - _Level3)/(_PeakLevel - _Level3)); 75 | o.Albedo = lerp(tex2D(_Level3Tex, IN.uv_WaterTex).rgb, tex2D(_PeakTex, IN.uv_WaterTex).rgb, (IN.worldPos.y - _Level3)/(_PeakLevel - _Level3)); 76 | // o.Albedo = tex2D(_Level3Tex, IN.uv_WaterTex).rgb; 77 | if (IN.worldPos.y <= _Level3) 78 | // o.Albedo = lerp(_Level2Color, _Level3Color, (IN.worldPos.y - _Level2)/(_Level3 - _Level2)); 79 | o.Albedo = lerp(tex2D(_Level2Tex, IN.uv_WaterTex).rgb, tex2D(_Level3Tex, IN.uv_WaterTex).rgb, (IN.worldPos.y - _Level2)/(_Level3 - _Level2)); 80 | // o.Albedo = tex2D(_Level2Tex, IN.uv_WaterTex).rgb; 81 | if (IN.worldPos.y <= _Level2) 82 | // o.Albedo = lerp(_Level1Color, _Level2Color, (IN.worldPos.y - _WaterLevel)/(_Level2 - _WaterLevel)); 83 | o.Albedo = lerp(tex2D(_Level1Tex, IN.uv_WaterTex).rgb, tex2D(_Level2Tex, IN.uv_WaterTex).rgb, (IN.worldPos.y - _WaterLevel)/(_Level2 - _WaterLevel)); 84 | // o.Albedo = tex2D(_Level1Tex, IN.uv_WaterTex).rgb; 85 | 86 | if (IN.worldPos.y <= _WaterLevel) 87 | o.Albedo = tex2D(_WaterTex, IN.uv_WaterTex).rgb; 88 | 89 | 90 | // doesnt work 91 | o.Albedo *= saturate(IN.customColor + _Slope); 92 | 93 | 94 | // Metallic and smoothness come from slider variables 95 | o.Metallic = _Metallic; 96 | o.Smoothness = _Glossiness; 97 | o.Alpha = 1; 98 | } 99 | ENDCG 100 | } 101 | FallBack "Diffuse" 102 | } 103 | -------------------------------------------------------------------------------- /Assets/Scripts/MarchingCubes.cs: -------------------------------------------------------------------------------- 1 | // Voxel Terrain - Converted to Unity by mgear - http://unitycoder.com/blog 2 | // Converted to c# by "SimpleRookie" 3 | 4 | // Original source: http://stemkoski.github.com/Three.js/ 5 | // ORIGINAL HEADER: 6 | /** 7 | * author alteredq / http://alteredqualia.com/ 8 | * Port of greggman's ThreeD version of marching cubes to Three.js 9 | * http://webglsamples.googlecode.com/hg/blob/blob.html 10 | */ 11 | 12 | using System.Collections.Generic; 13 | using UnityEngine; 14 | 15 | public class MarchingCubes : MonoBehaviour 16 | { 17 | private List points = new List(); 18 | private List values = new List(); 19 | 20 | private List vertices = new List(); 21 | private List uvs = new List(); 22 | private List triangles = new List(); 23 | private Vector3[] vlist = new Vector3[12]; 24 | 25 | private LineRenderer lineRenderer; 26 | 27 | private float strength = 1; 28 | private float addStrength = 0.5f; 29 | 30 | private int size = 15; // number of cubes along a side 31 | private float axisMin = 0; // mesh size 32 | private float axisMax = 120; 33 | private int multiplier;// = axisMax / size; 34 | private float axisRange;// = axisMax - axisMin; 35 | 36 | public Vector3 offset = new Vector3(0, 0, 0); 37 | 38 | public float zoomSpeed = 15f; 39 | 40 | private int size2;// = size * size; 41 | private int isolevel = 0; 42 | private Mesh geometry; 43 | 44 | Camera cam; 45 | 46 | void Start() 47 | { 48 | cam = Camera.main; 49 | 50 | multiplier = (int)(axisMax / size); 51 | axisRange = axisMax - axisMin; 52 | size2 = size * size; 53 | 54 | geometry = new Mesh(); 55 | GetComponent().mesh = geometry; 56 | 57 | lineRenderer = cam.transform.GetComponent(); 58 | 59 | InitializePlainVoxelPlane(); 60 | 61 | CreateChunk(); 62 | } 63 | 64 | // mainloop 65 | void Update() 66 | { 67 | // reset 68 | if (Input.GetKey(KeyCode.R)) 69 | { 70 | UnityEngine.SceneManagement.SceneManager.LoadScene(0); 71 | } 72 | 73 | // rotate 74 | if (Input.GetKey(KeyCode.A)) 75 | { 76 | cam.transform.RotateAround(new Vector3(60, 0, 60), -Vector3.up, 50 * Time.deltaTime); 77 | } 78 | 79 | // rotate 80 | if (Input.GetKey(KeyCode.D)) 81 | { 82 | cam.transform.RotateAround(new Vector3(60, 0, 60), Vector3.up, 50 * Time.deltaTime); 83 | } 84 | 85 | if (Input.GetMouseButtonUp(0)) 86 | { 87 | lineRenderer.SetPosition(0, Camera.main.transform.position); 88 | lineRenderer.SetPosition(1, Camera.main.transform.position); 89 | } 90 | if (Input.GetMouseButtonUp(1)) 91 | { 92 | lineRenderer.SetPosition(0, Camera.main.transform.position); 93 | lineRenderer.SetPosition(1, Camera.main.transform.position); 94 | } 95 | 96 | // zoom with mousescroll 97 | var zoom = Input.GetAxis("Mouse ScrollWheel"); 98 | if (zoom != 0) 99 | { 100 | cam.transform.Translate(cam.transform.forward * (zoom * zoomSpeed),Space.World); 101 | } 102 | 103 | // remove block .. with mouse 104 | if (Input.GetMouseButton(1)) // button is held down 105 | { 106 | Ray ray = cam.ScreenPointToRay(Input.mousePosition); 107 | RaycastHit hit; 108 | if (Physics.Raycast(ray, out hit, 999f)) 109 | { 110 | 111 | Vector3 localhit = transform.InverseTransformPoint(hit.point); 112 | 113 | int hx = (int)(localhit.x / multiplier); 114 | int hy = (int)(localhit.y / multiplier); // -0.2 is temporary fix for clicking top plane and getting too big values.. 115 | int hz = (int)(localhit.z / multiplier); 116 | //print ("Hit1:"+hx+","+hy+","+hz); 117 | // Debug.DrawLine (hit.point,hit.point+Vector3(0,1,0), Color.red,1); 118 | lineRenderer.SetPosition(0, cam.transform.position + new Vector3(0, -1, 0)); 119 | lineRenderer.SetPosition(1, hit.point); 120 | 121 | // check borders? 122 | if (hx >= 0 && hy > 0 && hz >= 0) 123 | if (hx < size - 1 && hy < size - 1 && hz < size - 1) 124 | { 125 | values[hx + size * hy + size2 * hz] -= strength; 126 | values[(hx + size * hy + size2 * hz) + size] -= strength * 0.1f; // up 127 | CreateChunk(); 128 | } 129 | } 130 | } 131 | 132 | // add block .. with mouse 133 | if (Input.GetMouseButton(0)) // button is held down 134 | { 135 | Ray ray2 = cam.ScreenPointToRay(Input.mousePosition); 136 | RaycastHit hit2; 137 | if (Physics.Raycast(ray2, out hit2, 999f)) 138 | { 139 | 140 | Vector3 localhit2 = transform.InverseTransformPoint(hit2.point); 141 | 142 | int hx2 = (int)(localhit2.x / multiplier); 143 | int hy2 = (int)(localhit2.y / multiplier); // -0.2 is temporary fix for clicking top plane and getting too big values.. 144 | int hz2 = (int)(localhit2.z / multiplier); 145 | //print ("Hit:"+hx2+","+hy2+","+hz2); 146 | // Debug.DrawLine (hit.point,hit.point+Vector3(0,1,0), Color.red,1); 147 | lineRenderer.SetPosition(0, cam.transform.position + new Vector3(0, -1, 0)); 148 | lineRenderer.SetPosition(1, hit2.point); 149 | 150 | values[hx2 + size * hy2 + size2 * hz2] += addStrength; 151 | values[(hx2 + size * hy2 + size2 * hz2) + size] += addStrength * 0.1f; // affect above point also 152 | 153 | CreateChunk(); 154 | } 155 | } 156 | } 157 | 158 | 159 | 160 | void InitializePlainVoxelPlane() 161 | { 162 | for (var k = 0; k < size; k++) // z - blue 163 | for (var j = 0; j < size; j++) // y - green 164 | for (var i = 0; i < size; i++) // x - red 165 | { 166 | // actual values 167 | float x = axisMin + axisRange * i / (size - 1); 168 | float y = axisMin + axisRange * j / (size - 1); 169 | float z = axisMin + axisRange * k / (size - 1); 170 | 171 | points.Add(new Vector3(x, y, z)); 172 | var value = -1; 173 | float wall = 0; 174 | //if (k==0) value=wall; 175 | if (j == 0) value = (int)wall; // make wall on y==0 176 | //if (i==0) value=wall; 177 | //if (k==size-1) value=wall; 178 | //if (j==size-1) value=wall; 179 | //if (i==size-1) value=wall; 180 | 181 | values.Add(value); 182 | } 183 | } 184 | 185 | 186 | void CreateChunk() 187 | { 188 | var rr = 0; // temp variable for uv map direction swapper.. 189 | 190 | var vertexIndex = 0; 191 | 192 | for (var z = 0; z < size - 1; z++) 193 | for (var y = 0; y < size - 1; y++) 194 | for (var x = 0; x < size - 1; x++) 195 | { 196 | // index of base point, and also adjacent points on cube 197 | float p = x + size * y + size2 * z; 198 | float px = p + 1; 199 | float py = p + size; 200 | float pxy = py + 1; 201 | float pz = p + size2; 202 | float pxz = px + size2; 203 | float pyz = py + size2; 204 | float pxyz = pxy + size2; 205 | 206 | // store scalar values corresponding to vertices 207 | float value0 = values[(int)p]; 208 | float value1 = values[(int)px]; 209 | float value2 = values[(int)py]; 210 | float value3 = values[(int)pxy]; 211 | float value4 = values[(int)pz]; 212 | float value5 = values[(int)pxz]; 213 | float value6 = values[(int)pyz]; 214 | float value7 = values[(int)pxyz]; 215 | 216 | // place a "1" in bit positions corresponding to vertices whose 217 | // isovalue is less than given constant. 218 | 219 | int cubeindex = 0; 220 | 221 | // if no type for ^ error: 222 | // Assets/MarchingCubes/MarchingCubesA.js(77,29): BCE0051: Operator '<' cannot be used with a left hand side of type 'Object' and a right hand side of type 'int'. 223 | 224 | if (value0 < isolevel) cubeindex |= 1; 225 | if (value1 < isolevel) cubeindex |= 2; 226 | if (value2 < isolevel) cubeindex |= 8; 227 | if (value3 < isolevel) cubeindex |= 4; 228 | if (value4 < isolevel) cubeindex |= 16; 229 | if (value5 < isolevel) cubeindex |= 32; 230 | if (value6 < isolevel) cubeindex |= 128; 231 | if (value7 < isolevel) cubeindex |= 64; 232 | 233 | // bits = 12 bit number, indicates which edges are crossed by the isosurface 234 | int bits = THREE_edgeTable[cubeindex]; 235 | 236 | // if none are crossed, proceed to next iteration 237 | if (bits == 0) continue; 238 | 239 | // check which edges are crossed, and estimate the point location 240 | // using a weighted average of scalar values at edge endpoints. 241 | // store the vertex in an array for use later. 242 | float mu = 0.5f; 243 | 244 | // bottom of the cube 245 | //if (bits & 1) 246 | if ((bits & 1) != 0) 247 | { 248 | mu = (isolevel - value0) / (value1 - value0); 249 | //vlist[0] = points[p].clone().lerpSelf( points[px], mu ); 250 | vlist[0] = lerpSelf(points[(int)p], points[(int)px], mu); 251 | 252 | 253 | } 254 | if ((bits & 2) != 0) 255 | { 256 | mu = (isolevel - value1) / (value3 - value1); 257 | // vlist[1] = points[px].clone().lerpSelf( points[pxy], mu ); 258 | vlist[1] = lerpSelf(points[(int)px], points[(int)pxy], mu); 259 | } 260 | if ((bits & 4) != 0) 261 | { 262 | mu = (isolevel - value2) / (value3 - value2); 263 | // vlist[2] = points[py].clone().lerpSelf( points[pxy], mu ); 264 | vlist[2] = lerpSelf(points[(int)py], points[(int)pxy], mu); 265 | 266 | } 267 | if ((bits & 8) != 0) 268 | { 269 | mu = (isolevel - value0) / (value2 - value0); 270 | // vlist[3] = points[p].clone().lerpSelf( points[py], mu ); 271 | vlist[3] = lerpSelf(points[(int)p], points[(int)py], mu); 272 | 273 | } 274 | // top of the cube 275 | if ((bits & 16) != 0) 276 | { 277 | mu = (isolevel - value4) / (value5 - value4); 278 | // vlist[4] = points[pz].clone().lerpSelf( points[pxz], mu ); 279 | vlist[4] = lerpSelf(points[(int)pz], points[(int)pxz], mu); 280 | 281 | } 282 | if ((bits & 32) != 0) 283 | { 284 | mu = (isolevel - value5) / (value7 - value5); 285 | // vlist[5] = points[pxz].clone().lerpSelf( points[pxyz], mu ); 286 | vlist[5] = lerpSelf(points[(int)pxz], points[(int)pxyz], mu); 287 | 288 | } 289 | if ((bits & 64) != 0) 290 | { 291 | mu = (isolevel - value6) / (value7 - value6); 292 | // vlist[6] = points[pyz].clone().lerpSelf( points[pxyz], mu ); 293 | vlist[6] = lerpSelf(points[(int)pyz], points[(int)pxyz], mu); 294 | } 295 | if ((bits & 128) != 0) 296 | { 297 | mu = (isolevel - value4) / (value6 - value4); 298 | // vlist[7] = points[pz].clone().lerpSelf( points[pyz], mu ); 299 | vlist[7] = lerpSelf(points[(int)pz], points[(int)pyz], mu); 300 | 301 | } 302 | // vertical lines of the cube 303 | if ((bits & 256) != 0) 304 | { 305 | mu = (isolevel - value0) / (value4 - value0); 306 | // vlist[8] = points[p].clone().lerpSelf( points[pz], mu ); 307 | vlist[8] = lerpSelf(points[(int)p], points[(int)pz], mu); 308 | 309 | } 310 | if ((bits & 512) != 0) 311 | { 312 | mu = (isolevel - value1) / (value5 - value1); 313 | // vlist[9] = points[px].clone().lerpSelf( points[pxz], mu ); 314 | vlist[9] = lerpSelf(points[(int)px], points[(int)pxz], mu); 315 | 316 | } 317 | if ((bits & 1024) != 0) 318 | { 319 | mu = (isolevel - value3) / (value7 - value3); 320 | // vlist[10] = points[pxy].clone().lerpSelf( points[pxyz], mu ); 321 | vlist[10] = lerpSelf(points[(int)pxy], points[(int)pxyz], mu); 322 | } 323 | 324 | //print (bits & 2048); 325 | 326 | if ((bits & 2048) != 0) 327 | { 328 | mu = (isolevel - value2) / (value6 - value2); 329 | // vlist[11] = points[py].clone().lerpSelf( points[pyz], mu ); 330 | vlist[11] = lerpSelf(points[(int)py], points[(int)pyz], mu); 331 | //print (vlist[10]); 332 | } 333 | 334 | // construct triangles -- get correct vertices from triTable. 335 | //var i = 0; 336 | var i = 0; 337 | cubeindex <<= 4; // multiply by 16... 338 | 339 | // "Re-purpose cubeindex into an offset into triTable." 340 | // since each row really isn't a row. 341 | 342 | // the while loop should run at most 5 times, 343 | // since the 16th entry in each row is a -1. 344 | while (THREE_triTable[cubeindex + i] != -1) 345 | { 346 | int index1 = THREE_triTable[cubeindex + i]; 347 | int index2 = THREE_triTable[cubeindex + i + 1]; 348 | int index3 = THREE_triTable[cubeindex + i + 2]; 349 | 350 | vertices.Add(vlist[index1]); 351 | vertices.Add(vlist[index2]); 352 | vertices.Add(vlist[index3]); 353 | 354 | triangles.Add(vertexIndex); 355 | triangles.Add(vertexIndex + 1); 356 | triangles.Add(vertexIndex + 2); 357 | 358 | rr = 1 - rr; // temp variable.. every 2nd UV set is different order.. 359 | 360 | if (rr == 0) 361 | { 362 | uvs.Add(new Vector2(0, 0)); 363 | uvs.Add(new Vector2(0, 1)); 364 | uvs.Add(new Vector2(1, 1)); 365 | } else 366 | { 367 | uvs.Add(new Vector2(1, 0)); 368 | uvs.Add(new Vector2(0, 0)); 369 | uvs.Add(new Vector2(1, 1)); 370 | } 371 | 372 | vertexIndex += 3; 373 | i += 3; 374 | } 375 | } 376 | 377 | // Build the Mesh: 378 | geometry.Clear(); 379 | 380 | geometry.vertices = vertices.ToArray(); 381 | geometry.triangles = triangles.ToArray(); 382 | geometry.uv = uvs.ToArray(); 383 | 384 | geometry.RecalculateNormals(); 385 | // geometry.Optimize(); 386 | // update mesh collider (if needed?) 387 | GetComponent().sharedMesh = null; 388 | GetComponent().sharedMesh = geometry; 389 | 390 | 391 | vertices.Clear(); 392 | uvs.Clear(); 393 | triangles.Clear(); 394 | } 395 | 396 | 397 | Vector3 lerpSelf(Vector3 o, Vector3 v, float alpha) 398 | { 399 | o.x += (v.x - o.x) * alpha; 400 | o.y += (v.y - o.y) * alpha; 401 | o.z += (v.z - o.z) * alpha; 402 | return o; 403 | 404 | } 405 | 406 | 407 | 408 | 409 | ///////////////////////////////////// 410 | // Marching cubes lookup tables 411 | ///////////////////////////////////// 412 | 413 | // These tables are straight from Paul Bourke's page: 414 | // http://local.wasp.uwa.edu.au/~pbourke/geometry/polygonise/ 415 | // who in turn got them from Cory Gene Bloyd. 416 | 417 | //THREE.edgeTable = new Int32Array([ 418 | private int[] THREE_edgeTable = { 419 | 0x0 , 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c, 420 | 0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, 0xd03, 0xe09, 0xf00, 421 | 0x190, 0x99 , 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c, 422 | 0x99c, 0x895, 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90, 423 | 0x230, 0x339, 0x33 , 0x13a, 0x636, 0x73f, 0x435, 0x53c, 424 | 0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30, 425 | 0x3a0, 0x2a9, 0x1a3, 0xaa , 0x7a6, 0x6af, 0x5a5, 0x4ac, 426 | 0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0, 427 | 0x460, 0x569, 0x663, 0x76a, 0x66 , 0x16f, 0x265, 0x36c, 428 | 0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, 0xa69, 0xb60, 429 | 0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0xff , 0x3f5, 0x2fc, 430 | 0xdfc, 0xcf5, 0xfff, 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0, 431 | 0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x55 , 0x15c, 432 | 0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950, 433 | 0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, 0x2cf, 0x1c5, 0xcc , 434 | 0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0, 435 | 0x8c0, 0x9c9, 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc, 436 | 0xcc , 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, 0x7c0, 437 | 0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c, 438 | 0x15c, 0x55 , 0x35f, 0x256, 0x55a, 0x453, 0x759, 0x650, 439 | 0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc, 440 | 0x2fc, 0x3f5, 0xff , 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0, 441 | 0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, 0xd65, 0xc6c, 442 | 0x36c, 0x265, 0x16f, 0x66 , 0x76a, 0x663, 0x569, 0x460, 443 | 0xca0, 0xda9, 0xea3, 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac, 444 | 0x4ac, 0x5a5, 0x6af, 0x7a6, 0xaa , 0x1a3, 0x2a9, 0x3a0, 445 | 0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c, 446 | 0x53c, 0x435, 0x73f, 0x636, 0x13a, 0x33 , 0x339, 0x230, 447 | 0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c, 448 | 0x69c, 0x795, 0x49f, 0x596, 0x29a, 0x393, 0x99 , 0x190, 449 | 0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, 0x80c, 450 | 0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x0 }; 451 | 452 | 453 | private int[] THREE_triTable = { 454 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 455 | 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 456 | 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 457 | 1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 458 | 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 459 | 0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 460 | 9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 461 | 2, 8, 3, 2, 10, 8, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1, 462 | 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 463 | 0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 464 | 1, 9, 0, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 465 | 1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1, 466 | 3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 467 | 0, 10, 1, 0, 8, 10, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1, 468 | 3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1, 469 | 9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 470 | 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 471 | 4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 472 | 0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 473 | 4, 1, 9, 4, 7, 1, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1, 474 | 1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 475 | 3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, 476 | 9, 2, 10, 9, 0, 2, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, 477 | 2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1, 478 | 8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 479 | 11, 4, 7, 11, 2, 4, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1, 480 | 9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, 481 | 4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1, 482 | 3, 10, 1, 3, 11, 10, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1, 483 | 1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1, 484 | 4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1, 485 | 4, 7, 11, 4, 11, 9, 9, 11, 10, -1, -1, -1, -1, -1, -1, -1, 486 | 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 487 | 9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 488 | 0, 5, 4, 1, 5, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 489 | 8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1, 490 | 1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 491 | 3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1, 492 | 5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1, 493 | 2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1, 494 | 9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 495 | 0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1, 496 | 0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, 497 | 2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, -1, -1, -1, -1, 498 | 10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, 499 | 4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1, 500 | 5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1, 501 | 5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, 502 | 9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 503 | 9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1, 504 | 0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1, 505 | 1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 506 | 9, 7, 8, 9, 5, 7, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1, 507 | 10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1, 508 | 8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1, 509 | 2, 10, 5, 2, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, 510 | 7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, 511 | 9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1, 512 | 2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, -1, -1, -1, -1, 513 | 11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1, 514 | 9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1, 515 | 5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, -1, 516 | 11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1, 517 | 11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 518 | 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 519 | 0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 520 | 9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 521 | 1, 8, 3, 1, 9, 8, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, 522 | 1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 523 | 1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1, 524 | 9, 6, 5, 9, 0, 6, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1, 525 | 5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1, 526 | 2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 527 | 11, 0, 8, 11, 2, 0, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, 528 | 0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, 529 | 5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1, 530 | 6, 3, 11, 6, 5, 3, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1, 531 | 0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1, 532 | 3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1, 533 | 6, 5, 9, 6, 9, 11, 11, 9, 8, -1, -1, -1, -1, -1, -1, -1, 534 | 5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 535 | 4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1, 536 | 1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, 537 | 10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1, 538 | 6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, 539 | 1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, -1, -1, -1, -1, 540 | 8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1, 541 | 7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1, 542 | 3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, 543 | 5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1, 544 | 0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, 545 | 9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, -1, 546 | 8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1, 547 | 5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1, 548 | 0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, -1, 549 | 6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1, 550 | 10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 551 | 4, 10, 6, 4, 9, 10, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, 552 | 10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1, 553 | 8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1, 554 | 1, 4, 9, 1, 2, 4, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1, 555 | 3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1, 556 | 0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 557 | 8, 3, 2, 8, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, 558 | 10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1, 559 | 0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1, 560 | 3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, -1, -1, -1, -1, 561 | 6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1, 562 | 9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1, 563 | 8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, -1, 564 | 3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1, 565 | 6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 566 | 7, 10, 6, 7, 8, 10, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1, 567 | 0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1, 568 | 10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1, 569 | 10, 6, 7, 10, 7, 1, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1, 570 | 1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1, 571 | 2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1, 572 | 7, 8, 0, 7, 0, 6, 6, 0, 2, -1, -1, -1, -1, -1, -1, -1, 573 | 7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 574 | 2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1, 575 | 2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, -1, 576 | 1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1, 577 | 11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1, 578 | 8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, -1, 579 | 0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 580 | 7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1, 581 | 7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 582 | 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 583 | 3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 584 | 0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 585 | 8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, 586 | 10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 587 | 1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, 588 | 2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, 589 | 6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1, 590 | 7, 2, 3, 6, 2, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 591 | 7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1, 592 | 2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, 593 | 1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, -1, -1, -1, -1, 594 | 10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1, 595 | 10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1, 596 | 0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, -1, -1, -1, -1, 597 | 7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1, 598 | 6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 599 | 3, 6, 11, 3, 0, 6, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1, 600 | 8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1, 601 | 9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1, 602 | 6, 8, 4, 6, 11, 8, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1, 603 | 1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1, 604 | 4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1, 605 | 10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, -1, 606 | 8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, 607 | 0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 608 | 1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, -1, -1, -1, -1, 609 | 1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1, 610 | 8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1, 611 | 10, 1, 0, 10, 0, 6, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1, 612 | 4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1, 613 | 10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 614 | 4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 615 | 0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, 616 | 5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, 617 | 11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, -1, -1, -1, -1, 618 | 9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, 619 | 6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1, 620 | 7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, -1, -1, -1, -1, 621 | 3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1, 622 | 7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1, 623 | 9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, -1, -1, -1, -1, 624 | 3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1, 625 | 6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1, 626 | 9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, -1, -1, -1, -1, 627 | 1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1, 628 | 4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1, 629 | 7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, -1, -1, -1, -1, 630 | 6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1, 631 | 3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1, 632 | 0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, -1, -1, -1, -1, 633 | 6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1, 634 | 1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1, 635 | 0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, -1, 636 | 11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1, 637 | 6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1, 638 | 5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, -1, -1, -1, -1, 639 | 9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1, 640 | 1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1, 641 | 1, 5, 6, 2, 1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 642 | 1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1, 643 | 10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1, 644 | 0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 645 | 10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 646 | 11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 647 | 11, 5, 10, 11, 7, 5, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1, 648 | 5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1, 649 | 10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1, 650 | 11, 1, 2, 11, 7, 1, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1, 651 | 0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1, 652 | 9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1, 653 | 7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, -1, 654 | 2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, 655 | 8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1, 656 | 9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, -1, -1, -1, -1, 657 | 9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1, 658 | 1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 659 | 0, 8, 7, 0, 7, 1, 1, 7, 5, -1, -1, -1, -1, -1, -1, -1, 660 | 9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1, 661 | 9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 662 | 5, 8, 4, 5, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, 663 | 5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1, 664 | 0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1, 665 | 10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, -1, 666 | 2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1, 667 | 0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1, 668 | 0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, -1, 669 | 9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 670 | 2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1, 671 | 5, 10, 2, 5, 2, 4, 4, 2, 0, -1, -1, -1, -1, -1, -1, -1, 672 | 3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1, 673 | 5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1, 674 | 8, 4, 5, 8, 5, 3, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1, 675 | 0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 676 | 8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1, 677 | 9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 678 | 4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1, 679 | 0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1, 680 | 1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, -1, -1, -1, -1, 681 | 3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1, 682 | 4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1, 683 | 9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, -1, 684 | 11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1, 685 | 11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1, 686 | 2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, -1, -1, -1, -1, 687 | 9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1, 688 | 3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1, 689 | 1, 10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 690 | 4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1, 691 | 4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1, 692 | 4, 0, 3, 7, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 693 | 4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 694 | 9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 695 | 3, 0, 9, 3, 9, 11, 11, 9, 10, -1, -1, -1, -1, -1, -1, -1, 696 | 0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1, 697 | 3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 698 | 1, 2, 11, 1, 11, 9, 9, 11, 8, -1, -1, -1, -1, -1, -1, -1, 699 | 3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1, 700 | 0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 701 | 3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 702 | 2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1, 703 | 9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 704 | 2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, -1, -1, -1, -1, 705 | 1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 706 | 1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 707 | 0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 708 | 0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 709 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; 710 | } 711 | --------------------------------------------------------------------------------